diff --git a/services/include/form_ability_connection.h b/services/include/form_ability_connection.h index 1acbd644e841e937bf2c3bde8e9818913f70b2a4..798f0389080b3186d58406e27e3d6fa66024944d 100644 --- a/services/include/form_ability_connection.h +++ b/services/include/form_ability_connection.h @@ -137,26 +137,6 @@ public: */ void AddHostDeathRecipient(); - /** - * @brief Set form ability connection callback. - */ - void SetFormAbilityConnectCb(std::function &connection)> &&callback); - - /** - * @brief Set form ability disconnection callback. - */ - void SetFormAbilityDisconnectCb(std::function &connection)> &&callback); - - /** - * @brief On form ability connect callback. - */ - void OnFormAbilityConnectDoneCallback(); - - /** - * @brief On form ability disconnect callback. - */ - void OnFormAbilityDisconnectDoneCallback(); - /** * @brief Get bundle name. */ @@ -183,8 +163,6 @@ private: int32_t appFormPid_ = -1; sptr hostToken_ = nullptr; sptr providerToken_ = nullptr; - std::function &connection)> onFormAblityConnectCb_; - std::function &connection)> onFormAblityDisconnectCb_; DISALLOW_COPY_AND_MOVE(FormAbilityConnection); }; diff --git a/services/include/form_ability_connection_reporter.h b/services/include/form_ability_connection_reporter.h index 347b72e19342ab2e428917309b71294a5b5936f7..95a9137ab78748b2016a753a19ab954c11930775 100644 --- a/services/include/form_ability_connection_reporter.h +++ b/services/include/form_ability_connection_reporter.h @@ -30,7 +30,6 @@ namespace AppExecFwk { * Struct FormConnectionInfo */ struct FormConnectionInfo { - std::string bundleName_; int32_t pid_; int32_t connectCount_; }; @@ -48,13 +47,13 @@ public: * @brief Report form ability connection info to rss. * @param connection Form ability connection pointer. */ - void ReportFormAbilityConnection(const sptr &connection); + void ReportFormAbilityConnection(const std::string &bundleName); /** * @brief Report form ability disconnection info to rss. * @param connection Form ability connection pointer. */ - void ReportFormAbilityDisconnection(const sptr &connection); + void ReportFormAbilityDisconnection(const std::string &bundleName); private: /** @@ -70,14 +69,14 @@ private: * @param infos The vector which contains running form ability process infos; */ void AddFormAbilityConnectProcessInfo(const std::string &bundleName, - const std::string &connectionProviderKey, std::vector &infos); + std::vector &infos); /** * @brief Reporter form ability connection infos to rss. * @param connectionProviderKey The connection's key of form ability connection. * @param isConnected True for form ability connected, false for form ability disconnected. */ - void ReportConnectionInfosToRss(const std::string &connectionProviderKey, bool isConnected); + void ReportConnectionInfosToRss(const std::string &bundleName, bool isConnected); private: std::mutex formConnectionInfoMapMutex_; diff --git a/services/include/form_acquire_connection.h b/services/include/form_acquire_connection.h index 2b932f4524680ac17121b0a013ecf0cb2e622b9f..ade099972b1f92590e85fb3443bb1311587de2e7 100644 --- a/services/include/form_acquire_connection.h +++ b/services/include/form_acquire_connection.h @@ -45,9 +45,38 @@ public: void OnAbilityConnectDone( const AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) override; + /** + * @brief OnAbilityDisconnectDone, AbilityMs notify caller ability the result of disconnect. + * @param element service ability's ElementName. + * @param resultCode ERR_OK on success, others on failure. + */ + void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override; + + /** + * @brief Set form ability connection callback. + */ + void SetFormAbilityConnectCb(std::function &&callback); + + /** + * @brief Set form ability disconnection callback. + */ + void SetFormAbilityDisconnectCb(std::function &&callback); + + /** + * @brief On form ability connect callback. + */ + void OnFormAbilityConnectDoneCallback(); + + /** + * @brief On form ability disconnect callback. + */ + void OnFormAbilityDisconnectDoneCallback(); + private: FormItemInfo info_; WantParams wantParams_; + std::function onFormAblityConnectCb_; + std::function onFormAblityDisconnectCb_; DISALLOW_COPY_AND_MOVE(FormAcquireConnection); }; diff --git a/services/src/form_ability_connection.cpp b/services/src/form_ability_connection.cpp index d0760244037affe133826131096f3e2e014fa22c..302fb1b6d261dfebe5ec0af755ae64564b3f5cb6 100644 --- a/services/src/form_ability_connection.cpp +++ b/services/src/form_ability_connection.cpp @@ -51,10 +51,6 @@ void FormAbilityConnection::OnAbilityConnectDone( return; } -#ifdef RES_SCHEDULE_ENABLE - OnFormAbilityConnectDoneCallback(); -#endif - HILOG_INFO("%{public}s, free install is %{public}d.", __func__, isFreeInstall_); if (!isFreeInstall_) { return; @@ -102,15 +98,12 @@ void FormAbilityConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementNam { HILOG_INFO("%{public}s, element:%{public}s, resultCode:%{public}d", __func__, element.GetURI().c_str(), resultCode); - if (connectId_ == 0) { + if (connectId_ != 0) { + FormSupplyCallback::GetInstance()->RemoveConnection(connectId_); + connectId_ = 0; + } else { HILOG_ERROR("%{public}s fail, invalid connectId_: %{public}d", __func__, connectId_); - return; } - FormSupplyCallback::GetInstance()->RemoveConnection(connectId_); - connectId_ = 0; -#ifdef RES_SCHEDULE_ENABLE - OnFormAbilityDisconnectDoneCallback(); -#endif ReportFormAppUnbindEvent(); } @@ -260,36 +253,6 @@ sptr FormAbilityConnection::GetProviderToken() const return providerToken_; } -void FormAbilityConnection::SetFormAbilityConnectCb( - std::function &connection)> &&callback) -{ - onFormAblityConnectCb_ = std::move(callback); -} - -void FormAbilityConnection::SetFormAbilityDisconnectCb( - std::function &connection)> &&callback) -{ - onFormAblityDisconnectCb_ = std::move(callback); -} - -void FormAbilityConnection::OnFormAbilityConnectDoneCallback() -{ - if (!onFormAblityConnectCb_) { - HILOG_ERROR("Empty form ability connect callback!"); - return; - } - onFormAblityConnectCb_(this); -} - -void FormAbilityConnection::OnFormAbilityDisconnectDoneCallback() -{ - if (!onFormAblityDisconnectCb_) { - HILOG_ERROR("Empty form ability disconnect callback!"); - return; - } - onFormAblityDisconnectCb_(this); -} - std::string FormAbilityConnection::GetBundleName() { return bundleName_; diff --git a/services/src/form_ability_connection_reporter.cpp b/services/src/form_ability_connection_reporter.cpp index c5d7f621a1a34e641762068d7031c4b0845109a9..8333ebcd06c44d1fc0f246f742f0420de8941fe4 100644 --- a/services/src/form_ability_connection_reporter.cpp +++ b/services/src/form_ability_connection_reporter.cpp @@ -43,22 +43,20 @@ FormAbilityConnectionReporter::~FormAbilityConnectionReporter() HILOG_INFO("Called."); } -void FormAbilityConnectionReporter::ReportFormAbilityConnection(const sptr &connection) +void FormAbilityConnectionReporter::ReportFormAbilityConnection(const std::string &bundleName) { - if (!connection) { - HILOG_ERROR("Invalid connection!"); + if (bundleName.empty()) { + HILOG_ERROR("Invalid bundleName!"); return; } - std::string connectionProviderKey = connection->GetProviderKey(); std::lock_guard lock(formConnectionInfoMapMutex_); - auto iter = formConnectionInfoMap_.find(connectionProviderKey); + auto iter = formConnectionInfoMap_.find(bundleName); if (iter != formConnectionInfoMap_.end()) { FormConnectionInfo &connectionInfo = iter->second; connectionInfo.connectCount_++; return; } auto appMgr = GetAppMgr(); - std::string bundleName = connection->GetBundleName(); std::vector infos; int32_t userId = FormUtil::GetCurrentAccountId(); int32_t ret = appMgr->GetRunningProcessInformation(bundleName, userId, infos); @@ -66,36 +64,34 @@ void FormAbilityConnectionReporter::ReportFormAbilityConnection(const sptr &connection) +void FormAbilityConnectionReporter::ReportFormAbilityDisconnection(const std::string &bundleName) { - if (!connection) { - HILOG_ERROR("Invalid connection!"); + if (bundleName.empty()) { + HILOG_ERROR("Invalid bundleName!"); return; } - std::string connectionProviderKey = connection->GetProviderKey(); std::lock_guard lock(formConnectionInfoMapMutex_); - auto iter = formConnectionInfoMap_.find(connectionProviderKey); + auto iter = formConnectionInfoMap_.find(bundleName); if (iter == formConnectionInfoMap_.end()) { HILOG_ERROR("Disconnect ability connection: %{public}s, but without created connection notified!", - connectionProviderKey.c_str()); + bundleName.c_str()); return; } int count = iter->second.connectCount_ - 1; if (count > 0) { - formConnectionInfoMap_[connectionProviderKey].connectCount_ = count; + formConnectionInfoMap_[bundleName].connectCount_ = count; return; } - ReportConnectionInfosToRss(connectionProviderKey, false); - formConnectionInfoMap_.erase(connectionProviderKey); - HILOG_INFO("Reporter disconnection info, connection's name: %{public}s.", - connectionProviderKey.c_str()); + ReportConnectionInfosToRss(bundleName, false); + formConnectionInfoMap_.erase(bundleName); + HILOG_INFO("Report disconnection info, bundle name: %{public}s.", bundleName.c_str()); } sptr FormAbilityConnectionReporter::GetAppMgr() @@ -118,7 +114,7 @@ sptr FormAbilityConnectionReporter::GetAppMgr() } void FormAbilityConnectionReporter::AddFormAbilityConnectProcessInfo(const std::string& bundleName, - const std::string& connectionProviderKey, std::vector& infos) + std::vector& infos) { if (bundleName.empty()) { HILOG_WARN("Empty bundle name."); @@ -133,21 +129,20 @@ void FormAbilityConnectionReporter::AddFormAbilityConnectProcessInfo(const std:: HILOG_INFO("Get running process: %{public}s, pid: %{public}" PRId32 ".", targetProceName.c_str(), (*iter).pid_); FormConnectionInfo connectionInfo; - connectionInfo.bundleName_ = bundleName; connectionInfo.pid_ = (*iter).pid_; connectionInfo.connectCount_ = 1; - formConnectionInfoMap_.emplace(connectionProviderKey, connectionInfo); + formConnectionInfoMap_.emplace(bundleName, connectionInfo); return; } } -void FormAbilityConnectionReporter::ReportConnectionInfosToRss(const std::string &connectionProviderKey, +void FormAbilityConnectionReporter::ReportConnectionInfosToRss(const std::string &bundleName, bool isConnected) { - auto iter = formConnectionInfoMap_.find(connectionProviderKey); + auto iter = formConnectionInfoMap_.find(bundleName); if (iter == formConnectionInfoMap_.end()) { - HILOG_WARN("Report connection info failed, empty info, connection name: %{public}s.", - connectionProviderKey.c_str()); + HILOG_WARN("Report connection info failed, empty info, bundle name: %{public}s.", + bundleName.c_str()); return; } #ifdef RES_SCHEDULE_ENABLE diff --git a/services/src/form_acquire_connection.cpp b/services/src/form_acquire_connection.cpp index 67c3af16cc7f7c8dfcda9d37093f48a55a6cf964..1dd500c0e08e476a9b33fbb87efb0a025e819f4a 100644 --- a/services/src/form_acquire_connection.cpp +++ b/services/src/form_acquire_connection.cpp @@ -74,5 +74,48 @@ void FormAcquireConnection::OnAbilityConnectDone(const AppExecFwk::ElementName & SetProviderToken(remoteObject); } } + +/** + * @brief OnAbilityDisconnectDone, AbilityMs notify caller ability the result of disconnect. + * @param element service ability's ElementName. + * @param resultCode ERR_OK on success, others on failure. + */ +void FormAcquireConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) +{ + FormAbilityConnection::OnAbilityDisconnectDone(element, resultCode); +#ifdef RES_SCHEDULE_ENABLE + OnFormAbilityDisconnectDoneCallback(); +#endif +} + +void FormAcquireConnection::SetFormAbilityConnectCb( + std::function &&callback) +{ + onFormAblityConnectCb_ = std::move(callback); +} + +void FormAcquireConnection::SetFormAbilityDisconnectCb( + std::function &&callback) +{ + onFormAblityDisconnectCb_ = std::move(callback); +} + +void FormAcquireConnection::OnFormAbilityConnectDoneCallback() +{ + if (!onFormAblityConnectCb_) { + HILOG_ERROR("Empty form ability connect callback!"); + return; + } + onFormAblityConnectCb_(GetBundleName()); +} + +void FormAcquireConnection::OnFormAbilityDisconnectDoneCallback() +{ + if (!onFormAblityDisconnectCb_) { + HILOG_ERROR("Empty form ability disconnect callback!"); + return; + } + onFormAblityDisconnectCb_(GetBundleName()); +} } // namespace AppExecFwk } // namespace OHOS \ No newline at end of file diff --git a/services/src/form_mgr_adapter.cpp b/services/src/form_mgr_adapter.cpp index ce7681375b722393598a8e2dc2b4a585c55ef128..fbc1b211443f3b62650b6e4cf2688c16f0259ef3 100644 --- a/services/src/form_mgr_adapter.cpp +++ b/services/src/form_mgr_adapter.cpp @@ -1858,7 +1858,7 @@ ErrCode FormMgrAdapter::InnerAcquireProviderFormInfoAsync(const int64_t formId, Want newWant; newWant.SetParams(wantParams); auto hostToken = newWant.GetRemoteObject(Constants::PARAM_FORM_HOST_TOKEN); - sptr formAcquireConnection = new (std::nothrow) FormAcquireConnection(formId, info, + sptr formAcquireConnection = new (std::nothrow) FormAcquireConnection(formId, info, wantParams, hostToken); if (formAcquireConnection == nullptr) { HILOG_ERROR("formAcquireConnection is null."); @@ -1873,11 +1873,11 @@ ErrCode FormMgrAdapter::InnerAcquireProviderFormInfoAsync(const int64_t formId, return ERR_APPEXECFWK_FORM_BIND_PROVIDER_FAILED; } #ifdef RES_SCHEDULE_ENABLE - auto && connectCallback = [](const sptr& formAbilityConnection) { - FormAbilityConnectionReporter::GetInstance().ReportFormAbilityConnection(formAbilityConnection); + auto && connectCallback = [](const std::string &bundleName) { + FormAbilityConnectionReporter::GetInstance().ReportFormAbilityConnection(bundleName); }; - auto && disconnectCallback = [](const sptr& formAbilityConnection) { - FormAbilityConnectionReporter::GetInstance().ReportFormAbilityDisconnection(formAbilityConnection); + auto && disconnectCallback = [](const std::string &bundleName) { + FormAbilityConnectionReporter::GetInstance().ReportFormAbilityDisconnection(bundleName); }; formAcquireConnection->SetFormAbilityConnectCb(connectCallback); formAcquireConnection->SetFormAbilityDisconnectCb(disconnectCallback); diff --git a/test/unittest/fms_form_ability_connection_reporter_test/fms_form_bms_helper_test/fms_form_ability_connection_reporter_test.cpp b/test/unittest/fms_form_ability_connection_reporter_test/fms_form_bms_helper_test/fms_form_ability_connection_reporter_test.cpp index 9fe32acfca597bb046c7f3127e4586cf9b937169..e226567600068115239058f258ed845ac974e626 100644 --- a/test/unittest/fms_form_ability_connection_reporter_test/fms_form_bms_helper_test/fms_form_ability_connection_reporter_test.cpp +++ b/test/unittest/fms_form_ability_connection_reporter_test/fms_form_bms_helper_test/fms_form_ability_connection_reporter_test.cpp @@ -15,7 +15,6 @@ #include #include "form_ability_connection_reporter.h" -#include "form_ability_connection.h" using namespace testing::ext; @@ -48,9 +47,8 @@ void FmsFormAbilityConnectionReporterTest::TearDown() {} HWTEST_F(FmsFormAbilityConnectionReporterTest, FormAbilityConnectionReporterTest_001, TestSize.Level1) { GTEST_LOG_(INFO) << "FormAbilityConnectionReporterTest_ReportFormAbilityConnection begin"; - sptr formAbilityConnection = new (std::nothrow) FormAbilityConnection(); - formAbilityConnection->SetProviderKey("testKey"); - FormAbilityConnectionReporter::GetInstance().ReportFormAbilityConnection(formAbilityConnection); + std::string bundleName = "testBundleName"; + FormAbilityConnectionReporter::GetInstance().ReportFormAbilityConnection(bundleName); GTEST_LOG_(INFO) << "FormAbilityConnectionReporterTest_ReportFormAbilityConnection end"; } @@ -62,8 +60,8 @@ HWTEST_F(FmsFormAbilityConnectionReporterTest, FormAbilityConnectionReporterTest HWTEST_F(FmsFormAbilityConnectionReporterTest, FormAbilityConnectionReporterTest_002, TestSize.Level1) { GTEST_LOG_(INFO) << "FormAbilityConnectionReporterTest_ReportFormAbilityDisconnection begin"; - sptr formAbilityConnection = new (std::nothrow) FormAbilityConnection(); - FormAbilityConnectionReporter::GetInstance().ReportFormAbilityDisconnection(formAbilityConnection); + std::string bundleName = "testBundleName"; + FormAbilityConnectionReporter::GetInstance().ReportFormAbilityDisconnection(bundleName); GTEST_LOG_(INFO) << "FormAbilityConnectionReporterTest_ReportFormAbilityDisconnection end"; } } // namespace AppExecFwk