From 586bd6878eb55eefe73890967ea5111687cfee0b Mon Sep 17 00:00:00 2001 From: xinking129 Date: Thu, 11 Jan 2024 11:22:40 +0800 Subject: [PATCH 1/3] add EDM batch set/cancel intetface Signed-off-by: xinking129 --- .../include/ability_auto_startup_client.h | 16 ++++ .../include/ability_manager_interface.h | 16 ++++ .../ability_manager_ipc_interface_code.h | 4 + .../ability_auto_startup_data_manager.h | 2 +- .../include/ability_auto_startup_service.h | 16 ++++ .../include/ability_manager_proxy.h | 16 ++++ .../include/ability_manager_service.h | 16 ++++ .../abilitymgr/include/ability_manager_stub.h | 2 + .../src/ability_auto_startup_client.cpp | 18 +++++ .../src/ability_auto_startup_data_manager.cpp | 13 +++- .../src/ability_auto_startup_service.cpp | 60 +++++++++++++- .../abilitymgr/src/ability_manager_proxy.cpp | 78 +++++++++++++++++++ .../src/ability_manager_service.cpp | 19 +++++ .../abilitymgr/src/ability_manager_stub.cpp | 46 +++++++++++ .../AMS/mock_serviceability_manager_service.h | 10 +++ .../include/mock_ability_manager_service.h | 10 +++ .../mock_ability_delegator_stub.h | 20 +++++ .../include/mock_ability_mgr_service.h | 10 +++ .../AMS/mock_ability_manager_service.h | 10 +++ .../AMS/mock_serviceability_manager_service.h | 10 +++ .../include/appmgr/mock_ability_mgr_host.h | 10 +++ .../mock/include/mock_ability_mgr_service.h | 10 +++ .../ability_manager_stub_mock_test.h | 10 +++ .../ability_manager_stub_mock.h | 10 +++ .../ability_manager_stub_impl_mock.h | 10 +++ .../ability_manager_stub_mock.h | 10 +++ .../ability_manager_stub_mock.h | 10 +++ .../mock_ability_manager_service.h | 10 +++ tools/test/mock/mock_ability_manager_stub.h | 10 +++ 29 files changed, 475 insertions(+), 7 deletions(-) diff --git a/interfaces/inner_api/ability_manager/include/ability_auto_startup_client.h b/interfaces/inner_api/ability_manager/include/ability_auto_startup_client.h index ccdc54b28d3..490a51232e7 100644 --- a/interfaces/inner_api/ability_manager/include/ability_auto_startup_client.h +++ b/interfaces/inner_api/ability_manager/include/ability_auto_startup_client.h @@ -58,6 +58,22 @@ public: */ ErrCode CancelApplicationAutoStartupByEDM(const AutoStartupInfo &info, bool flag); + /** + * @brief Set applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + ErrCode SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag); + + /** + * @brief Cancel applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + ErrCode CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag); + /** * @brief Query all auto startup state applications. * @param infoList Output parameters, return auto startup info list. diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h index b3445e5c8e2..74ec8b2f68a 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -1384,6 +1384,22 @@ public: */ virtual int32_t CancelApplicationAutoStartupByEDM(const AutoStartupInfo &info, bool flag) = 0; + /** + * @brief Set applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + virtual int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) = 0; + + /** + * @brief Cancel applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + virtual int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) = 0; + /** * @brief Get foreground ui abilities. * @param list Foreground ui abilities. diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h b/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h index 2fdc8c76490..2dfd889fb14 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_ipc_interface_code.h @@ -487,6 +487,10 @@ enum class AbilityManagerInterfaceCode { SET_APPLICATION_AUTO_STARTUP_BY_EDM = 6113, // ipc id for cancel application auto startup by EDM CANCEL_APPLICATION_AUTO_STARTUP_BY_EDM = 6114, + // ipc id for batch set application auto startup by EDM + BATCH_SET_APPLICATION_AUTO_STARTUP_BY_EDM = 6115, + // ipc id for batch cancel application auto startup by EDM + BATCH_CANCEL_APPLICATION_AUTO_STARTUP_BY_EDM = 6116, }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/include/ability_auto_startup_data_manager.h b/services/abilitymgr/include/ability_auto_startup_data_manager.h index e4787e2a658..f3710bf4e0d 100644 --- a/services/abilitymgr/include/ability_auto_startup_data_manager.h +++ b/services/abilitymgr/include/ability_auto_startup_data_manager.h @@ -41,7 +41,7 @@ public: AutoStartupStatus QueryAutoStartupData(const AutoStartupInfo &info); - int32_t QueryAllAutoStartupApplications(std::vector &infoList); + int32_t QueryAllAutoStartupApplications(std::vector &infoList, bool isQueryEdmList = false); int32_t GetCurrentAppAutoStartupData(const std::string &bundleName, std::vector &infoList); diff --git a/services/abilitymgr/include/ability_auto_startup_service.h b/services/abilitymgr/include/ability_auto_startup_service.h index acbaed23382..13004490596 100644 --- a/services/abilitymgr/include/ability_auto_startup_service.h +++ b/services/abilitymgr/include/ability_auto_startup_service.h @@ -142,6 +142,22 @@ public: */ int32_t CancelApplicationAutoStartupByEDM(const AutoStartupInfo &info, bool flag); + /** + * @brief Set applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag); + + /** + * @brief Cancel applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag); + /** * @class ClientDeathRecipient * notices IRemoteBroker died. diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index eb86955a710..b3d6188c7d1 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -1100,6 +1100,22 @@ public: */ int32_t CancelApplicationAutoStartupByEDM(const AutoStartupInfo &info, bool flag) override; + /** + * @brief Set applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override; + + /** + * @brief Cancel applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override; + /** * @brief Get foreground ui abilities. * @param list Foreground ui abilities. diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 2f0a56169d0..bae30fefabf 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -1445,6 +1445,22 @@ public: */ int32_t CancelApplicationAutoStartupByEDM(const AutoStartupInfo &info, bool flag) override; + /** + * @brief Set applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override; + + /** + * @brief Cancel applications auto start up state by EDM. + * @param infoList The auto startup info vector list. + * @param flag Indicate whether to allow the application to change the auto start up state. + * @return Returns ERR_OK on success, others on failure. + */ + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override; + /** * @brief Get foreground ui abilities. * @param list Foreground ui abilities. diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h index c7bd00670f0..e4176253c2a 100644 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -272,6 +272,8 @@ private: int32_t SetApplicationAutoStartupByEDMInner(MessageParcel &data, MessageParcel &reply); int32_t CancelApplicationAutoStartupByEDMInner(MessageParcel &data, MessageParcel &reply); + int32_t BatchSetApplicationAutoStartupByEDMInner(MessageParcel &data, MessageParcel &reply); + int32_t BatchCancelApplicationAutoStartupByEDMInner(MessageParcel &data, MessageParcel &reply); int32_t IsAbilityControllerStartInner(MessageParcel &data, MessageParcel &reply); int32_t OpenFileInner(MessageParcel &data, MessageParcel &reply); diff --git a/services/abilitymgr/src/ability_auto_startup_client.cpp b/services/abilitymgr/src/ability_auto_startup_client.cpp index bd13ba60f6b..e19f1ed1c98 100644 --- a/services/abilitymgr/src/ability_auto_startup_client.cpp +++ b/services/abilitymgr/src/ability_auto_startup_client.cpp @@ -107,6 +107,24 @@ ErrCode AbilityAutoStartupClient::CancelApplicationAutoStartupByEDM(const AutoSt return abms->CancelApplicationAutoStartupByEDM(info, flag); } +ErrCode AbilityAutoStartupClient::SetApplicationAutoStartupByEDM( + const std::vector &infoList, bool flag) +{ + HILOG_DEBUG("Called."); + auto abms = GetAbilityManager(); + CHECK_POINTER_RETURN_NOT_CONNECTED(abms); + return abms->SetApplicationAutoStartupByEDM(infoList, flag); +} + +ErrCode AbilityAutoStartupClient::CancelApplicationAutoStartupByEDM( + const std::vector &infoList, bool flag) +{ + HILOG_DEBUG("Called."); + auto abms = GetAbilityManager(); + CHECK_POINTER_RETURN_NOT_CONNECTED(abms); + return abms->CancelApplicationAutoStartupByEDM(infoList, flag); +} + ErrCode AbilityAutoStartupClient::QueryAllAutoStartupApplications(std::vector &infoList) { HILOG_DEBUG("Called."); diff --git a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp index e6c41bce49d..89849e1274a 100644 --- a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp +++ b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp @@ -269,7 +269,8 @@ AutoStartupStatus AbilityAutoStartupDataManager::QueryAutoStartupData(const Auto return asustatus; } -int32_t AbilityAutoStartupDataManager::QueryAllAutoStartupApplications(std::vector &infoList) +int32_t AbilityAutoStartupDataManager::QueryAllAutoStartupApplications(std::vector &infoList, + bool isQueryEdmList) { HILOG_DEBUG("Called."); { @@ -290,8 +291,14 @@ int32_t AbilityAutoStartupDataManager::QueryAllAutoStartupApplications(std::vect for (const auto &item : allEntries) { bool isAutoStartup, isEdmForce; ConvertAutoStartupStatusFromValue(item.value, isAutoStartup, isEdmForce); - if (isAutoStartup) { - infoList.emplace_back(ConvertAutoStartupInfoFromKeyAndValue(item.key, item.value)); + if (isQueryEdmList) { + if (isAutoStartup && isEdmForce) { + infoList.emplace_back(ConvertAutoStartupInfoFromKeyAndValue(item.key, item.value)); + } + } else { + if (isAutoStartup) { + infoList.emplace_back(ConvertAutoStartupInfoFromKeyAndValue(item.key, item.value)); + } } } HILOG_DEBUG("InfoList.size: %{public}zu.", infoList.size()); diff --git a/services/abilitymgr/src/ability_auto_startup_service.cpp b/services/abilitymgr/src/ability_auto_startup_service.cpp index 2c186e47aa5..46aca85ce6a 100644 --- a/services/abilitymgr/src/ability_auto_startup_service.cpp +++ b/services/abilitymgr/src/ability_auto_startup_service.cpp @@ -228,10 +228,10 @@ int32_t AbilityAutoStartupService::QueryAllAutoStartupApplicationsWithoutPermiss { HILOG_DEBUG("Called."); if (!system::GetBoolParameter(PRODUCT_APPBOOT_SETTING_ENABLED, false)) { - HILOG_ERROR("Product configuration item is disable."); - return ERR_NOT_SUPPORTED_PRODUCT_TYPE; + HILOG_DEBUG("Query EDM auto start up info list."); + return DelayedSingleton::GetInstance()->QueryAllAutoStartupApplications( + infoList, true); } - return DelayedSingleton::GetInstance()->QueryAllAutoStartupApplications(infoList); } @@ -770,6 +770,60 @@ int32_t AbilityAutoStartupService::CancelApplicationAutoStartupByEDM(const AutoS return InnerApplicationAutoStartupByEDM(fullInfo, false, flag); } +int32_t AbilityAutoStartupService::SetApplicationAutoStartupByEDM( + const std::vector &infoList, bool flag) +{ + int32_t errorCode = CheckPermissionForEDM(); + if (errorCode != ERR_OK) { + return errorCode; + } + int32_t tempErrorCode = ERR_OK; + for (auto info : infoList) { + std::string typeName; + tempErrorCode = GetAbilityInfo(info, typeName); + if (tempErrorCode != ERR_OK) { + HILOG_ERROR("Get ability info failed, bundleName:%{public}s,moduleName:%{public}s,abilityName:%{public}s," + "flag:%{public}d.", info.bundleName.c_str(), info.moduleName.c_str(), info.abilityName.c_str(), flag); + errorCode = tempErrorCode; + continue; + } + info.abilityTypeName = typeName; + tempErrorCode = InnerApplicationAutoStartupByEDM(info, true, flag); + if (tempErrorCode != ERR_OK) { + HILOG_ERROR("Failed to update the database."); + errorCode = tempErrorCode; + } + } + return errorCode; +} + +int32_t AbilityAutoStartupService::CancelApplicationAutoStartupByEDM( + const std::vector &infoList, bool flag) +{ + int32_t errorCode = CheckPermissionForEDM(); + if (errorCode != ERR_OK) { + return errorCode; + } + int32_t tempErrorCode = ERR_OK; + for (auto info : infoList) { + std::string typeName; + tempErrorCode = GetAbilityInfo(info, typeName); + if (tempErrorCode != ERR_OK) { + HILOG_ERROR("Get ability info failed, bundleName:%{public}s,moduleName:%{public}s,abilityName:%{public}s," + "flag:%{public}d.", info.bundleName.c_str(), info.moduleName.c_str(), info.abilityName.c_str(), flag); + errorCode = tempErrorCode; + continue; + } + info.abilityTypeName = typeName; + tempErrorCode = InnerApplicationAutoStartupByEDM(info, false, flag); + if (tempErrorCode != ERR_OK) { + HILOG_ERROR("Failed to update the database."); + errorCode = tempErrorCode; + } + } + return errorCode; +} + int32_t AbilityAutoStartupService::InnerApplicationAutoStartupByEDM(const AutoStartupInfo &info, bool isSet, bool flag) { HILOG_DEBUG("Called, bundleName: %{public}s, moduleName: %{public}s, abilityName: %{public}s, isSet: %{public}d.," diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 0574c44b419..dd60bc22a7c 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -4845,5 +4845,83 @@ int32_t AbilityManagerProxy::CancelApplicationAutoStartupByEDM(const AutoStartup } return reply.ReadInt32(); } + +int32_t AbilityManagerProxy::SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) +{ + int32_t num = infoList.size(); + if (num > MAX_AUTO_STARTUP_COUNT) { + return ERR_INVALID_VALUE; + } + + MessageParcel data; + if (!WriteInterfaceToken(data)) { + HILOG_ERROR("Write interface token failed."); + return INNER_ERR; + } + if (!data.WriteInt32(num)) { + HILOG_ERROR("Write num failed."); + return INNER_ERR; + } + for (auto i = 0; i < num; ++i) { + if (!data.WriteParcelable(&infoList.at(i))) { + HILOG_ERROR("Write AutoStartupInfo failed."); + return INNER_ERR; + } + } + + if (!data.WriteBool(flag)) { + HILOG_ERROR("Write flag failed."); + return INNER_ERR; + } + + MessageParcel reply; + MessageOption option; + auto ret = SendRequest( + AbilityManagerInterfaceCode::BATCH_SET_APPLICATION_AUTO_STARTUP_BY_EDM, data, reply, option); + if (ret != NO_ERROR) { + HILOG_ERROR("Send request error: %{public}d.", ret); + return ret; + } + return reply.ReadInt32(); +} + +int32_t AbilityManagerProxy::CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) +{ + int32_t num = infoList.size(); + if (num > MAX_AUTO_STARTUP_COUNT) { + return ERR_INVALID_VALUE; + } + + MessageParcel data; + if (!WriteInterfaceToken(data)) { + HILOG_ERROR("Write interface token failed."); + return INNER_ERR; + } + if (!data.WriteInt32(num)) { + HILOG_ERROR("Write num failed."); + return INNER_ERR; + } + for (auto i = 0; i < num; ++i) { + if (!data.WriteParcelable(&infoList.at(i))) { + HILOG_ERROR("Write AutoStartupInfo failed."); + return INNER_ERR; + } + } + + if (!data.WriteBool(flag)) { + HILOG_ERROR("Write flag failed."); + return INNER_ERR; + } + + MessageParcel reply; + MessageOption option; + auto ret = SendRequest( + AbilityManagerInterfaceCode::BATCH_CANCEL_APPLICATION_AUTO_STARTUP_BY_EDM, data, reply, option); + if (ret != NO_ERROR) { + HILOG_ERROR("Send request error: %{public}d.", ret); + return ret; + } + return reply.ReadInt32(); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 9e2c856676a..fe0edd223a3 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -9283,6 +9283,25 @@ int32_t AbilityManagerService::CancelApplicationAutoStartupByEDM(const AutoStart return abilityAutoStartupService_->CancelApplicationAutoStartupByEDM(info, flag); } +int32_t AbilityManagerService::SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) +{ + if (abilityAutoStartupService_ == nullptr) { + HILOG_ERROR("abilityAutoStartupService_ is nullptr."); + return ERR_NO_INIT; + } + return abilityAutoStartupService_->SetApplicationAutoStartupByEDM(infoList, flag); +} + +int32_t AbilityManagerService::CancelApplicationAutoStartupByEDM( + const std::vector &infoList, bool flag) +{ + if (abilityAutoStartupService_ == nullptr) { + HILOG_ERROR("abilityAutoStartupService_ is nullptr."); + return ERR_NO_INIT; + } + return abilityAutoStartupService_->CancelApplicationAutoStartupByEDM(infoList, flag); +} + int32_t AbilityManagerService::GetForegroundUIAbilities(std::vector &list) { HILOG_DEBUG("Called."); diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index 8b0db06fcd4..6c2a7b9cd3e 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -33,6 +33,7 @@ using AutoStartupInfo = AbilityRuntime::AutoStartupInfo; namespace { const std::u16string extensionDescriptor = u"ohos.aafwk.ExtensionManager"; constexpr int32_t CYCLE_LIMIT = 1000; +constexpr int32_t MAX_AUTO_STARTUP_COUNT = 100; } // namespace AbilityManagerStub::AbilityManagerStub() { @@ -401,6 +402,10 @@ void AbilityManagerStub::FourthStepInit() &AbilityManagerStub::SetApplicationAutoStartupByEDMInner; requestFuncMap_[static_cast(AbilityManagerInterfaceCode::CANCEL_APPLICATION_AUTO_STARTUP_BY_EDM)] = &AbilityManagerStub::CancelApplicationAutoStartupByEDMInner; + requestFuncMap_[static_cast(AbilityManagerInterfaceCode::BATCH_SET_APPLICATION_AUTO_STARTUP_BY_EDM)] = + &AbilityManagerStub::BatchSetApplicationAutoStartupByEDMInner; + requestFuncMap_[static_cast(AbilityManagerInterfaceCode::BATCH_CANCEL_APPLICATION_AUTO_STARTUP_BY_EDM)] = + &AbilityManagerStub::BatchCancelApplicationAutoStartupByEDMInner; requestFuncMap_[static_cast(AbilityManagerInterfaceCode::GET_FOREGROUND_UI_ABILITIES)] = &AbilityManagerStub::GetForegroundUIAbilitiesInner; } @@ -2989,6 +2994,47 @@ int32_t AbilityManagerStub::CancelApplicationAutoStartupByEDMInner(MessageParcel return reply.WriteInt32(result); } +int32_t AbilityManagerStub::BatchSetApplicationAutoStartupByEDMInner(MessageParcel &data, MessageParcel &reply) +{ + int32_t num = data.ReadInt32(); + if (num > MAX_AUTO_STARTUP_COUNT) { + return ERR_INVALID_VALUE; + } + std::vector infoList; + for (int32_t i = 0; i < num; ++i) { + sptr info = data.ReadParcelable(); + if (info == nullptr) { + HILOG_ERROR("Info is nullptr."); + return ERR_INVALID_VALUE; + } + infoList.emplace_back(*info); + } + + auto flag = data.ReadBool(); + int32_t result = SetApplicationAutoStartupByEDM(infoList, flag); + return reply.WriteInt32(result); +} + +int32_t AbilityManagerStub::BatchCancelApplicationAutoStartupByEDMInner(MessageParcel &data, MessageParcel &reply) +{ + int32_t num = data.ReadInt32(); + if (num > MAX_AUTO_STARTUP_COUNT) { + return ERR_INVALID_VALUE; + } + std::vector infoList; + for (int32_t i = 0; i < num; ++i) { + sptr info = data.ReadParcelable(); + if (info == nullptr) { + HILOG_ERROR("Info is nullptr."); + return ERR_INVALID_VALUE; + } + infoList.emplace_back(*info); + } + auto flag = data.ReadBool(); + int32_t result = CancelApplicationAutoStartupByEDM(infoList, flag); + return reply.WriteInt32(result); +} + int32_t AbilityManagerStub::OpenFileInner(MessageParcel &data, MessageParcel &reply) { std::unique_ptr uri(data.ReadParcelable()); diff --git a/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h b/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h index f215a85cb4c..cb5a70e06d2 100644 --- a/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h +++ b/test/mock/frameworks_kits_ability_ability_runtime_test/AMS/mock_serviceability_manager_service.h @@ -325,6 +325,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + void CompleteFirstFrameDrawing(const sptr& abilityToken) override {} #ifdef ABILITY_COMMAND_FOR_TEST diff --git a/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h b/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h index 112b6593bce..d5e49acf0fb 100644 --- a/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h +++ b/test/mock/frameworks_kits_ability_native_test/include/mock_ability_manager_service.h @@ -294,6 +294,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + void CompleteFirstFrameDrawing(const sptr& abilityToken) override {} void CallRequestDone(const sptr& token, const sptr& callStub) override {} diff --git a/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h b/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h index 5a19f08f882..d8cfdfbad36 100644 --- a/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h +++ b/test/mock/frameworks_kits_appkit_native_test/ability_delegator/mock_ability_delegator_stub.h @@ -172,6 +172,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + virtual int32_t GetForegroundUIAbilities(std::vector &list) { return 0; @@ -356,6 +366,16 @@ public: { return 0; } + + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } #ifdef ABILITY_COMMAND_FOR_TEST int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override; #endif diff --git a/test/mock/frameworks_kits_appkit_test/include/mock_ability_mgr_service.h b/test/mock/frameworks_kits_appkit_test/include/mock_ability_mgr_service.h index 2269e35e9f5..b97b99d6a0d 100644 --- a/test/mock/frameworks_kits_appkit_test/include/mock_ability_mgr_service.h +++ b/test/mock/frameworks_kits_appkit_test/include/mock_ability_mgr_service.h @@ -132,6 +132,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST virtual int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override { diff --git a/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h b/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h index cfd2d3ac954..9bfec9cd202 100644 --- a/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h +++ b/test/mock/frameworks_kits_test/AMS/mock_ability_manager_service.h @@ -285,6 +285,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + void CompleteFirstFrameDrawing(const sptr& abilityToken) override {} void CallRequestDone(const sptr &token, const sptr &callStub) override {} diff --git a/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h b/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h index 79e74a926fa..9c4ff564fde 100644 --- a/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h +++ b/test/mock/frameworks_kits_test/AMS/mock_serviceability_manager_service.h @@ -303,6 +303,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + void CompleteFirstFrameDrawing(const sptr& abilityToken) override {} #ifdef ABILITY_COMMAND_FOR_TEST diff --git a/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h b/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h index 78764beb1ae..6e9c4e9e572 100644 --- a/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h +++ b/test/moduletest/mock/include/appmgr/mock_ability_mgr_host.h @@ -334,6 +334,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST virtual int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override { diff --git a/test/moduletest/mock/include/mock_ability_mgr_service.h b/test/moduletest/mock/include/mock_ability_mgr_service.h index 493f9a17935..0cb0430a938 100644 --- a/test/moduletest/mock/include/mock_ability_mgr_service.h +++ b/test/moduletest/mock/include/mock_ability_mgr_service.h @@ -270,6 +270,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST virtual int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override { diff --git a/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h b/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h index 0ff9d8a2b34..7746416ed35 100644 --- a/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h +++ b/test/unittest/ability_manager_client_branch_test/ability_manager_stub_mock_test.h @@ -425,6 +425,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override { diff --git a/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h index 21c1c5e8321..68feeaf49ea 100644 --- a/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_proxy_test/ability_manager_stub_mock.h @@ -410,6 +410,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override { diff --git a/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h b/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h index a5a2df31a5e..e60d23cc791 100644 --- a/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h +++ b/test/unittest/ability_manager_stub_test/ability_manager_stub_impl_mock.h @@ -404,6 +404,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + int32_t GetForegroundUIAbilities(std::vector &list) override { AppExecFwk::AbilityStateData abilityStateDataOne; diff --git a/test/unittest/ability_manager_test/ability_manager_stub_mock.h b/test/unittest/ability_manager_test/ability_manager_stub_mock.h index 19ed6df1ba4..e29bffa4102 100644 --- a/test/unittest/ability_manager_test/ability_manager_stub_mock.h +++ b/test/unittest/ability_manager_test/ability_manager_stub_mock.h @@ -411,6 +411,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override { diff --git a/test/unittest/service_extension_context_test/ability_manager_stub_mock.h b/test/unittest/service_extension_context_test/ability_manager_stub_mock.h index 391189b747d..5fccf73948e 100644 --- a/test/unittest/service_extension_context_test/ability_manager_stub_mock.h +++ b/test/unittest/service_extension_context_test/ability_manager_stub_mock.h @@ -402,6 +402,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST int ForceTimeoutForTest(const std::string& abilityName, const std::string& state) override { diff --git a/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h b/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h index 453b629f0ee..d262e7ff01e 100644 --- a/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h +++ b/test/unittest/sys_mgr_client_test/mock_ability_manager_service.h @@ -275,6 +275,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + void CompleteFirstFrameDrawing(const sptr& abilityToken) override {} void CallRequestDone(const sptr &token, const sptr &callStub) override {} diff --git a/tools/test/mock/mock_ability_manager_stub.h b/tools/test/mock/mock_ability_manager_stub.h index bb31abe97fc..9fec773243c 100644 --- a/tools/test/mock/mock_ability_manager_stub.h +++ b/tools/test/mock/mock_ability_manager_stub.h @@ -269,6 +269,16 @@ public: return 0; } + int32_t SetApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + + int32_t CancelApplicationAutoStartupByEDM(const std::vector &infoList, bool flag) override + { + return 0; + } + #ifdef ABILITY_COMMAND_FOR_TEST MOCK_METHOD2(ForceTimeoutForTest, int(const std::string& abilityName, const std::string& state)); -- Gitee From eb4afbd2af578bf64baf6158fe88cf1107881857 Mon Sep 17 00:00:00 2001 From: xinking129 Date: Thu, 11 Jan 2024 11:29:22 +0800 Subject: [PATCH 2/3] add EDM tdd test Signed-off-by: xinking129 --- .../ability_auto_startup_service_test.cpp | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) 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 347348aa534..95b1c40a411 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 @@ -236,7 +236,7 @@ HWTEST_F(AbilityAutoStartupServiceTest, QueryAllAutoStartupApplicationsWithoutPe auto abilityAutoStartupService = std::make_shared(); std::vector infoList; auto result = abilityAutoStartupService->QueryAllAutoStartupApplicationsWithoutPermission(infoList); - EXPECT_EQ(result, ERR_NOT_SUPPORTED_PRODUCT_TYPE); + EXPECT_EQ(result, ERR_OK); GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest QueryAllAutoStartupApplicationsWithoutPermission_001 end"; } @@ -767,5 +767,51 @@ HWTEST_F(AbilityAutoStartupServiceTest, CheckPermissionForEDM_001, TestSize.Leve EXPECT_EQ(result, ERR_OK); GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CheckPermissionForEDM_001 end"; } + +/* + * Feature: AbilityAutoStartupService + * Function: SetApplicationAutoStartupByEDM + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService SetApplicationAutoStartupByEDM + */ +HWTEST_F(AbilityAutoStartupServiceTest, BatchSetApplicationAutoStartupByEDM_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest SetApplicationAutoStartupByEDM_001 start"; + SetNativeToken(); + MyFlag::flag_ = 1; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = "abilityName"; + info.bundleName = "bundleName"; + std::vector infoList; + infoList.push_back(info); + bool flag = false; + auto result = abilityAutoStartupService->SetApplicationAutoStartupByEDM(infoList, flag); + EXPECT_EQ(result, INNER_ERR); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest SetApplicationAutoStartupByEDM_001 end"; +} + +/* + * Feature: AbilityAutoStartupService + * Function: CancelApplicationAutoStartupByEDM + * SubFunction: NA + * FunctionPoints: AbilityAutoStartupService CancelApplicationAutoStartupByEDM + */ +HWTEST_F(AbilityAutoStartupServiceTest, BatchCancelApplicationAutoStartupByEDM_001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CancelApplicationAutoStartupByEDM_001 start"; + SetNativeToken(); + MyFlag::flag_ = 1; + auto abilityAutoStartupService = std::make_shared(); + AutoStartupInfo info; + info.abilityName = "abilityName"; + info.bundleName = "bundleName"; + std::vector infoList; + infoList.push_back(info); + bool flag = false; + auto result = abilityAutoStartupService->CancelApplicationAutoStartupByEDM(infoList, flag); + EXPECT_EQ(result, INNER_ERR); + GTEST_LOG_(INFO) << "AbilityAutoStartupServiceTest CancelApplicationAutoStartupByEDM_001 end"; +} } // namespace AAFwk } // namespace OHOS -- Gitee From 77092195e0c2add519eb52a96f5d8e545a5bfe65 Mon Sep 17 00:00:00 2001 From: xinking129 Date: Mon, 29 Jan 2024 20:15:29 +0800 Subject: [PATCH 3/3] modify review Signed-off-by: xinking129 --- .../src/ability_auto_startup_data_manager.cpp | 11 +++-------- .../abilitymgr/src/ability_auto_startup_service.cpp | 2 ++ services/abilitymgr/src/ability_manager_proxy.cpp | 2 ++ services/abilitymgr/src/ability_manager_stub.cpp | 2 ++ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp index 89849e1274a..0141058621d 100644 --- a/services/abilitymgr/src/ability_auto_startup_data_manager.cpp +++ b/services/abilitymgr/src/ability_auto_startup_data_manager.cpp @@ -291,14 +291,9 @@ int32_t AbilityAutoStartupDataManager::QueryAllAutoStartupApplications(std::vect for (const auto &item : allEntries) { bool isAutoStartup, isEdmForce; ConvertAutoStartupStatusFromValue(item.value, isAutoStartup, isEdmForce); - if (isQueryEdmList) { - if (isAutoStartup && isEdmForce) { - infoList.emplace_back(ConvertAutoStartupInfoFromKeyAndValue(item.key, item.value)); - } - } else { - if (isAutoStartup) { - infoList.emplace_back(ConvertAutoStartupInfoFromKeyAndValue(item.key, item.value)); - } + if ((isQueryEdmList && isAutoStartup && isEdmForce) || + ((!isQueryEdmList && isAutoStartup))) { + infoList.emplace_back(ConvertAutoStartupInfoFromKeyAndValue(item.key, item.value)); } } HILOG_DEBUG("InfoList.size: %{public}zu.", infoList.size()); diff --git a/services/abilitymgr/src/ability_auto_startup_service.cpp b/services/abilitymgr/src/ability_auto_startup_service.cpp index 9d21d91951e..61538817576 100644 --- a/services/abilitymgr/src/ability_auto_startup_service.cpp +++ b/services/abilitymgr/src/ability_auto_startup_service.cpp @@ -782,6 +782,7 @@ int32_t AbilityAutoStartupService::SetApplicationAutoStartupByEDM( { int32_t errorCode = CheckPermissionForEDM(); if (errorCode != ERR_OK) { + HILOG_ERROR("Permission denied."); return errorCode; } int32_t tempErrorCode = ERR_OK; @@ -809,6 +810,7 @@ int32_t AbilityAutoStartupService::CancelApplicationAutoStartupByEDM( { int32_t errorCode = CheckPermissionForEDM(); if (errorCode != ERR_OK) { + HILOG_ERROR("Permission denied."); return errorCode; } int32_t tempErrorCode = ERR_OK; diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index ab835a87e7a..adc93a950d8 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -4846,6 +4846,7 @@ int32_t AbilityManagerProxy::SetApplicationAutoStartupByEDM(const std::vector MAX_AUTO_STARTUP_COUNT) { + HILOG_ERROR("infoList is too large."); return ERR_INVALID_VALUE; } @@ -4885,6 +4886,7 @@ int32_t AbilityManagerProxy::CancelApplicationAutoStartupByEDM(const std::vector { int32_t num = infoList.size(); if (num > MAX_AUTO_STARTUP_COUNT) { + HILOG_ERROR("infoList is too large."); return ERR_INVALID_VALUE; } diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index bf0f8cc59e6..6a1f6a9e874 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -3001,6 +3001,7 @@ int32_t AbilityManagerStub::BatchSetApplicationAutoStartupByEDMInner(MessageParc { int32_t num = data.ReadInt32(); if (num > MAX_AUTO_STARTUP_COUNT) { + HILOG_ERROR("infoList is too large."); return ERR_INVALID_VALUE; } std::vector infoList; @@ -3022,6 +3023,7 @@ int32_t AbilityManagerStub::BatchCancelApplicationAutoStartupByEDMInner(MessageP { int32_t num = data.ReadInt32(); if (num > MAX_AUTO_STARTUP_COUNT) { + HILOG_ERROR("infoList is too large."); return ERR_INVALID_VALUE; } std::vector infoList; -- Gitee