fix autostart app bug

Signed-off-by: tantingting <tantingting5@huawei.com>
This commit is contained in:
tantingting
2024-08-03 14:13:34 +08:00
parent 83f0867b2d
commit e665bdfd20
9 changed files with 33 additions and 23 deletions
@@ -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);
@@ -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.
@@ -2212,6 +2212,7 @@ private:
const int32_t oriValidUserId);
void InitInterceptor();
void InitInterceptorForScreenUnlock();
void InitPushTask();
void InitDeepLinkReserve();
void InitDefaultRecoveryList();
@@ -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<AppExecFwk::OsAccountManagerWrapper>::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");
@@ -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<AbilityAutoStartupDataManager>::GetInstance()->DeleteAutoStartupData(bundleName, uid);
return DelayedSingleton<AbilityAutoStartupDataManager>::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<AbilityAutoStartupDataManager>::GetInstance()->DeleteAutoStartupData(bundleName, uid);
return DelayedSingleton<AbilityAutoStartupDataManager>::GetInstance()->DeleteAutoStartupData(bundleName,
tokenId);
}
return ERR_OK;
}
@@ -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);
@@ -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<ScreenUnlockInterceptor>());
}
}
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);
@@ -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";
}
@@ -257,8 +257,8 @@ HWTEST_F(AbilityAutoStartupServiceTest, DeleteAutoStartupData_001, TestSize.Leve
GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest DeleteAutoStartupData_001 start";
auto abilityAutoStartupService = std::make_shared<AbilityAutoStartupService>();
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";
}