From e665bdfd20f0a1f5be44326e8b5259d06bfdd490 Mon Sep 17 00:00:00 2001 From: tantingting Date: Sat, 3 Aug 2024 14:13:34 +0800 Subject: [PATCH] fix autostart app bug Signed-off-by: tantingting --- .../include/ability_auto_startup_data_manager.h | 2 +- .../include/ability_auto_startup_service.h | 4 ++-- .../abilitymgr/include/ability_manager_service.h | 1 + .../src/ability_auto_startup_data_manager.cpp | 9 +-------- .../src/ability_auto_startup_service.cpp | 8 +++++--- .../src/ability_bundle_event_callback.cpp | 2 +- .../abilitymgr/src/ability_manager_service.cpp | 14 ++++++++++++++ .../ability_auto_startup_data_manager_test.cpp | 12 ++++++------ .../ability_auto_startup_service_test.cpp | 4 ++-- 9 files changed, 33 insertions(+), 23 deletions(-) diff --git a/services/abilitymgr/include/ability_auto_startup_data_manager.h b/services/abilitymgr/include/ability_auto_startup_data_manager.h index 7c5322b966..72d883fcc8 100644 --- a/services/abilitymgr/include/ability_auto_startup_data_manager.h +++ b/services/abilitymgr/include/ability_auto_startup_data_manager.h @@ -38,7 +38,7 @@ public: int32_t DeleteAutoStartupData(const AutoStartupInfo &info); - int32_t DeleteAutoStartupData(const std::string &bundleName, int32_t uid); + int32_t DeleteAutoStartupData(const std::string &bundleName, int32_t accessTokenId); AutoStartupStatus QueryAutoStartupData(const AutoStartupInfo &info); diff --git a/services/abilitymgr/include/ability_auto_startup_service.h b/services/abilitymgr/include/ability_auto_startup_service.h index 9340c8f345..0e92497670 100644 --- a/services/abilitymgr/include/ability_auto_startup_service.h +++ b/services/abilitymgr/include/ability_auto_startup_service.h @@ -81,10 +81,10 @@ public: /** * @brief Delete current bundleName auto start up data. * @param bundleName The current bundleName. - * @param uid The uid. + * @param accessTokenId The accessTokenId. * @return Returns ERR_OK on success, others on failure. */ - int32_t DeleteAutoStartupData(const std::string &bundleName, int32_t uid); + int32_t DeleteAutoStartupData(const std::string &bundleName, int32_t accessTokenId); /** * @brief Check current bundleName auto start up data. diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 272cc85899..6f08227934 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -2212,6 +2212,7 @@ private: const int32_t oriValidUserId); void InitInterceptor(); + void InitInterceptorForScreenUnlock(); void InitPushTask(); void InitDeepLinkReserve(); void InitDefaultRecoveryList(); diff --git a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp index 2fd6b39962..f82151c5ec 100644 --- a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp +++ b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp @@ -201,15 +201,8 @@ int32_t AbilityAutoStartupDataManager::DeleteAutoStartupData(const AutoStartupIn return ERR_OK; } -int32_t AbilityAutoStartupDataManager::DeleteAutoStartupData(const std::string &bundleName, int32_t uid) +int32_t AbilityAutoStartupDataManager::DeleteAutoStartupData(const std::string &bundleName, int32_t accessTokenId) { - int32_t userId; - if (DelayedSingleton::GetInstance()-> - GetOsAccountLocalIdFromUid(uid, userId) != ERR_OK) { - TAG_LOGE(AAFwkTag::ABILITYMGR, "GetOsAccountLocalIdFromUid failed"); - return ERR_INVALID_VALUE; - } - uint32_t accessTokenId = Security::AccessToken::AccessTokenKit::GetHapTokenID(userId, bundleName, 0); auto accessTokenIdStr = std::to_string(accessTokenId); if (bundleName.empty() || accessTokenIdStr.empty()) { TAG_LOGW(AAFwkTag::AUTO_STARTUP, "Invalid value"); diff --git a/services/abilitymgr/src/ability_auto_startup_service.cpp b/services/abilitymgr/src/ability_auto_startup_service.cpp index 2ccf6590db..b7bf8bc1d0 100644 --- a/services/abilitymgr/src/ability_auto_startup_service.cpp +++ b/services/abilitymgr/src/ability_auto_startup_service.cpp @@ -245,10 +245,11 @@ int32_t AbilityAutoStartupService::QueryAllAutoStartupApplicationsWithoutPermiss userId); } -int32_t AbilityAutoStartupService::DeleteAutoStartupData(const std::string &bundleName, const int32_t uid) +int32_t AbilityAutoStartupService::DeleteAutoStartupData(const std::string &bundleName, const int32_t accessTokenId) { TAG_LOGD(AAFwkTag::AUTO_STARTUP, "called"); - return DelayedSingleton::GetInstance()->DeleteAutoStartupData(bundleName, uid); + return DelayedSingleton::GetInstance()->DeleteAutoStartupData( + bundleName, accessTokenId); } int32_t AbilityAutoStartupService::CheckAutoStartupData(const std::string &bundleName, int32_t uid) @@ -285,7 +286,8 @@ int32_t AbilityAutoStartupService::CheckAutoStartupData(const std::string &bundl if (!isFound) { TAG_LOGD(AAFwkTag::AUTO_STARTUP, "Current bundleName not found"); - return DelayedSingleton::GetInstance()->DeleteAutoStartupData(bundleName, uid); + return DelayedSingleton::GetInstance()->DeleteAutoStartupData(bundleName, + tokenId); } return ERR_OK; } diff --git a/services/abilitymgr/src/ability_bundle_event_callback.cpp b/services/abilitymgr/src/ability_bundle_event_callback.cpp index da7b98ab32..776c26c621 100644 --- a/services/abilitymgr/src/ability_bundle_event_callback.cpp +++ b/services/abilitymgr/src/ability_bundle_event_callback.cpp @@ -61,7 +61,7 @@ void AbilityBundleEventCallback::OnReceiveEvent(const EventFwk::CommonEventData TAG_LOGE(AAFwkTag::ABILITYMGR, "OnReceiveEvent failed, abilityAutoStartupService is nullptr"); return; } - abilityAutoStartupService_->DeleteAutoStartupData(bundleName, uid); + abilityAutoStartupService_->DeleteAutoStartupData(bundleName, tokenId); } else if (action == EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_ADDED) { // install or uninstall module/bundle HandleUpdatedModuleInfo(bundleName, uid); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index c9359aa6c7..154169c193 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -138,6 +138,7 @@ constexpr char SHARE_PICKER_DIALOG_DEFAULY_ABILITY_NAME[] = "PickerDialog"; constexpr char TOKEN_KEY[] = "ohos.ability.params.token"; // Developer mode param constexpr char DEVELOPER_MODE_STATE[] = "const.security.developermode.state"; +constexpr char PRODUCT_APPBOOT_SETTING_ENABLED[] = "const.product.appboot.setting.enabled"; // Broker params key constexpr const char* KEY_VISIBLE_ID = "ohos.anco.param.visible"; constexpr const char* START_ABILITY_TYPE = "ABILITY_INNER_START_WITH_ACCOUNT"; @@ -375,6 +376,13 @@ void AbilityManagerService::InitInterceptor() } } +void AbilityManagerService::InitInterceptorForScreenUnlock() +{ + if (interceptorExecuter_) { + interceptorExecuter_->AddInterceptor("ScreenUnlock", std::make_shared()); + } +} + void AbilityManagerService::InitPushTask() { if (taskHandler_ == nullptr) { @@ -7178,6 +7186,12 @@ int AbilityManagerService::LogoutUser(int32_t userId) return CHECK_PERMISSION_FAILED; } + // Lister screen unlock for auto startup apps. + if (system::GetBoolParameter(PRODUCT_APPBOOT_SETTING_ENABLED, false)) { + InitInterceptorForScreenUnlock(); + SubscribeScreenUnlockedEvent(); + } + if (userController_) { auto ret = userController_->LogoutUser(userId); TAG_LOGD(AAFwkTag::ABILITYMGR, "logout user return = %{public}d", ret); diff --git a/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp b/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp index 89f0b9e63e..1192651b6c 100644 --- a/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp +++ b/test/unittest/ability_auto_startup_data_manager_test/ability_auto_startup_data_manager_test.cpp @@ -345,8 +345,8 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, DeleteAutoStartupData_bundleName_100 GTEST_LOG_(INFO) << "DeleteAutoStartupData_bundleName_100 start"; AbilityAutoStartupDataManager abilityAutoStartupDataManager; std::string bundleName = ""; - int32_t uid = 0; - auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(bundleName, uid); + int32_t accessTokenId = 0; + auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(bundleName, accessTokenId); EXPECT_EQ(result, ERR_INVALID_VALUE); GTEST_LOG_(INFO) << "DeleteAutoStartupData_bundleName_100 end"; } @@ -362,8 +362,8 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, DeleteAutoStartupData_bundleName_200 GTEST_LOG_(INFO) << "DeleteAutoStartupData_bundleName_200 start"; AbilityAutoStartupDataManager abilityAutoStartupDataManager; std::string bundleName = "com.example.testbundle"; - int32_t uid = 0; - auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(bundleName, uid); + int32_t accessTokenId = 0; + auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(bundleName, accessTokenId); EXPECT_EQ(result, ERR_OK); GTEST_LOG_(INFO) << "DeleteAutoStartupData_bundleName_200 end"; } @@ -383,8 +383,8 @@ HWTEST_F(AbilityAutoStartupDataManagerTest, DeleteAutoStartupData_bundleName_300 EXPECT_EQ(true, abilityAutoStartupDataManager.CheckKvStore()); std::string bundleName = "com.example.testbundle"; - int32_t uid = 0; - auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(bundleName, uid); + int32_t accessTokenId = 0; + auto result = abilityAutoStartupDataManager.DeleteAutoStartupData(bundleName, accessTokenId); EXPECT_EQ(result, ERR_OK); GTEST_LOG_(INFO) << "DeleteAutoStartupData_bundleName_300 end"; } diff --git a/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp b/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp index 9b0c0b2e9a..b544cc0e99 100644 --- a/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp +++ b/test/unittest/ability_auto_startup_service_test/ability_auto_startup_service_test.cpp @@ -257,8 +257,8 @@ HWTEST_F(AbilityAutoStartupServiceTest, DeleteAutoStartupData_001, TestSize.Leve GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest DeleteAutoStartupData_001 start"; auto abilityAutoStartupService = std::make_shared(); std::string bundleName = AUTO_STARTUP_SERVICE_BUNDLENAME; - int32_t uid = 0; - auto result = abilityAutoStartupService->DeleteAutoStartupData(bundleName, uid); + int32_t accessTokenId = 0; + auto result = abilityAutoStartupService->DeleteAutoStartupData(bundleName, accessTokenId); EXPECT_EQ(result, ERR_OK); GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest DeleteAutoStartupData_001 end"; }