From 4b68074e94243816d4a385463d79b379774d9461 Mon Sep 17 00:00:00 2001 From: zhouge Date: Mon, 19 Jun 2023 15:06:23 +0800 Subject: [PATCH 1/2] add connect ability Signed-off-by: zhouge Change-Id: Id168d9635e7abd04a6328e110babe53d2784689f Signed-off-by: zhouge --- .../driver_extension_controller.h | 42 +++++- .../src/driver_controller/BUILD.gn | 3 +- .../driver_extension_controller.cpp | 128 ++++++++++++++++- .../driver_extension_controller_mt.cpp | 130 +++++++++++++----- .../src/driver_extension_controller_test.cpp | 101 +++++++++++++- 5 files changed, 353 insertions(+), 51 deletions(-) diff --git a/services/native/driver_extension_manager/include/driver_controller/driver_extension_controller.h b/services/native/driver_extension_manager/include/driver_controller/driver_extension_controller.h index 3dbf418..9a6cb00 100644 --- a/services/native/driver_extension_manager/include/driver_controller/driver_extension_controller.h +++ b/services/native/driver_extension_manager/include/driver_controller/driver_extension_controller.h @@ -16,16 +16,48 @@ #ifndef DRIVER_EXTENSION_CONTROLLER_H #define DRIVER_EXTENSION_CONTROLLER_H #include +#include +#include +#include "single_instance.h" +#include "iremote_object.h" + namespace OHOS { namespace ExternalDeviceManager { +class IDriverExtensionConnectCallback; class DriverExtensionController { + DECLARE_SINGLE_INSTANCE(DriverExtensionController); public: - static int32_t StartDriverExtension( - std::string baudleName, - std::string abilityName); - static int32_t StopDriverExtension( + int32_t StartDriverExtension(std::string baudleName, std::string abilityName); + int32_t StopDriverExtension(std::string bundleName, std::string abilityName); + int32_t ConnectDriverExtension( + std::string bundleName, + std::string abilityName, + std::shared_ptr callback + ); + int32_t DisconnectDriverExtension( std::string bundleName, - std::string abilityName); + std::string abilityName, + std::shared_ptr callback + ); + class DriverExtensionAbilityConnection; +}; + +struct DrvExtConnectionInfo { + std::string bundleName_; + std::string abilityName_; + sptr connectInner_; +}; + +class IDriverExtensionConnectCallback { +public: + virtual ~IDriverExtensionConnectCallback() = default; + virtual int32_t OnConnectDone(const sptr &remote, int resultCode) = 0; + virtual int32_t OnDisconnectDone(int resultCode) = 0; + bool IsConnectDone(); + sptr GetRemoteObj(); +private: + friend class DriverExtensionController; + std::shared_ptr info_ = nullptr; }; } } diff --git a/services/native/driver_extension_manager/src/driver_controller/BUILD.gn b/services/native/driver_extension_manager/src/driver_controller/BUILD.gn index 01150ab..7b9bd9e 100644 --- a/services/native/driver_extension_manager/src/driver_controller/BUILD.gn +++ b/services/native/driver_extension_manager/src/driver_controller/BUILD.gn @@ -38,8 +38,9 @@ ohos_shared_library("driver_extension_controller") { external_deps = [ "ability_base:want", "ability_runtime:ability_manager", - "c_utils:utils", + "c_utils:utilsbase", "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", ] install_enable = true subsystem_name = "hdf" diff --git a/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp b/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp index 5a8f212..10fc8bf 100644 --- a/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp +++ b/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp @@ -15,10 +15,58 @@ #include "ability_manager_client.h" #include "hilog_wrapper.h" +#include "ability_connect_callback_stub.h" #include "edm_errors.h" #include "driver_extension_controller.h" -using namespace OHOS; -using namespace OHOS::ExternalDeviceManager; +namespace OHOS { +namespace ExternalDeviceManager { +using namespace std; +IMPLEMENT_SINGLE_INSTANCE(DriverExtensionController); + +class DriverExtensionController::DriverExtensionAbilityConnection : public OHOS::AAFwk::AbilityConnectionStub { +public: + DriverExtensionAbilityConnection() = default; + ~DriverExtensionAbilityConnection() = default; + void OnAbilityConnectDone( + const OHOS::AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) override + { + EDM_LOGI(MODULE_EA_MGR, + "OnAbilityConnectDone, budnle = %{public}s, ability = %{public}s, resultCode = %{public}d", + element.GetBundleName().c_str(), element.GetAbilityName().c_str(), resultCode); + remoteObject_ = remoteObject; + auto cb = callback_.lock(); + if (cb != nullptr) { + cb->OnConnectDone(remoteObject, resultCode); + } + return; + } + void OnAbilityDisconnectDone( + const OHOS::AppExecFwk::ElementName &element, int resultCode) override + { + EDM_LOGI(MODULE_EA_MGR, + "OnAbilityDisconnectDone, budnle = %{public}s,ability = %{public}s, resultCode = %{public}d", + element.GetBundleName().c_str(), element.GetAbilityName().c_str(), resultCode); + remoteObject_ = nullptr; + auto cb = callback_.lock(); + if (cb != nullptr) { + cb->OnDisconnectDone(resultCode); + } + return; + } + std::weak_ptr callback_; + sptr remoteObject_; +}; + +sptr IDriverExtensionConnectCallback::GetRemoteObj() +{ + return info_->connectInner_->remoteObject_; +} + +bool IDriverExtensionConnectCallback::IsConnectDone() +{ + return info_->connectInner_->remoteObject_ != nullptr; +} + int32_t DriverExtensionController::StartDriverExtension( std::string bundleName, std::string abilityName) @@ -42,7 +90,6 @@ int32_t DriverExtensionController::StartDriverExtension( return EDM_OK; } - int32_t DriverExtensionController::StopDriverExtension( std::string bundleName, std::string abilityName) @@ -63,4 +110,79 @@ int32_t DriverExtensionController::StopDriverExtension( } EDM_LOGI(MODULE_EA_MGR, "StopExtensionAbility success"); return EDM_OK; +} +int32_t DriverExtensionController::ConnectDriverExtension( + std::string bundleName, + std::string abilityName, + std::shared_ptr callback +) +{ + EDM_LOGI(MODULE_EA_MGR, "Begin to Connect DriverExtension, bundle:%{public}s, ability:%{public}s", \ + bundleName.c_str(), abilityName.c_str()); + auto abmc = AAFwk::AbilityManagerClient::GetInstance(); + if (abmc == nullptr) { + EDM_LOGE(MODULE_EA_MGR, "Get AMC Instance failed"); + return EDM_ERR_INVALID_OBJECT; + } + if (callback == nullptr) { + EDM_LOGE(MODULE_EA_MGR, "param callback is nullptr"); + return EDM_ERR_INVALID_PARAM; + } + if (callback->info_ != nullptr) { + EDM_LOGE(MODULE_EA_MGR, "callback->info_ is not empty, please use an new callback"); + return EDM_ERR_INVALID_OBJECT; + } + + callback->info_ = make_shared(); + callback->info_->bundleName_ = bundleName; + callback->info_->abilityName_ = abilityName; + callback->info_->connectInner_ = new DriverExtensionAbilityConnection(); + callback->info_->connectInner_->callback_ = callback; + AAFwk::Want want; + want.SetElementName(bundleName, abilityName); + auto ret = abmc->ConnectAbility(want, callback->info_->connectInner_, -1); + if (ret != 0) { + EDM_LOGE(MODULE_EA_MGR, "ConnectExtensionAbility failed %{public}d", ret); + return ret; + } + + EDM_LOGI(MODULE_EA_MGR, "ConnectExtensionAbility success"); + return EDM_OK; +} +int32_t DriverExtensionController::DisconnectDriverExtension( + std::string bundleName, + std::string abilityName, + std::shared_ptr callback +) +{ + EDM_LOGI(MODULE_EA_MGR, "Begin to Disconnect DriverExtension, bundle:%{public}s, ability:%{public}s", \ + bundleName.c_str(), abilityName.c_str()); + auto abmc = AAFwk::AbilityManagerClient::GetInstance(); + if (abmc == nullptr) { + EDM_LOGE(MODULE_EA_MGR, "Get AMC Instance failed"); + return EDM_ERR_INVALID_OBJECT; + } + if (callback == nullptr) { + EDM_LOGE(MODULE_EA_MGR, "param callback is nullptr"); + return EDM_ERR_INVALID_PARAM; + } + if (callback->info_ == nullptr) { + EDM_LOGE(MODULE_EA_MGR, "param callback->info_ is nullptr"); + return EDM_ERR_INVALID_PARAM; + } + if (callback->info_->bundleName_ != bundleName || + callback->info_->abilityName_ != abilityName) { + EDM_LOGE(MODULE_EA_MGR, "bundleName or abilityName not match info in callback"); + return EDM_ERR_INVALID_OBJECT; + } + auto ret = abmc->DisconnectAbility(callback->info_->connectInner_); + if (ret != 0) { + EDM_LOGE(MODULE_EA_MGR, "DisconnectExtensionAbility failed %{public}d", ret); + return ret; + } + EDM_LOGI(MODULE_EA_MGR, "DisconnectExtensionAbility success"); + return EDM_OK; + return 0; +} +} } \ No newline at end of file diff --git a/test/moduletest/driver_extension_controller_mt/driver_extension_controller_mt.cpp b/test/moduletest/driver_extension_controller_mt/driver_extension_controller_mt.cpp index f05f53d..2d7bdae 100644 --- a/test/moduletest/driver_extension_controller_mt/driver_extension_controller_mt.cpp +++ b/test/moduletest/driver_extension_controller_mt/driver_extension_controller_mt.cpp @@ -13,7 +13,7 @@ * limitations under the License. */ -#include "driver_extension_controller.h" +#include #include "iostream" #include "hilog_wrapper.h" #include "string_ex.h" @@ -21,15 +21,16 @@ #include "accesstoken_kit.h" #include "token_setproc.h" #include "nativetoken_kit.h" -using namespace OHOS::ExternalDeviceManager; -using namespace OHOS; +#include "driver_extension_controller.h" +namespace OHOS { +namespace ExternalDeviceManager { using namespace std; using namespace OHOS::Security::AccessToken; constexpr uint32_t PARAM_COUNT_NEED = 4; constexpr uint32_t PARAM_INDEX_OF_ACTION = 1; constexpr uint32_t PARAM_INDEX_OF_BUNDLENAME = 2; constexpr uint32_t PARAM_INDEX_OF_ABILITYNAME = 3; - +constexpr int32_t MAX_WAIT_TIME_SECOND = 10; TokenInfoParams g_sysInfoInstance = { .dcapsNum = 0, .permsNum = 0, @@ -40,8 +41,6 @@ TokenInfoParams g_sysInfoInstance = { .processName = "usb_manager", .aplStr = "system_basic", }; - - static void SetTestCaseNative (TokenInfoParams *infoInstance) { uint64_t tokenId = GetAccessTokenId(infoInstance); @@ -54,37 +53,92 @@ static void SetTestCaseNative (TokenInfoParams *infoInstance) AccessTokenKit::ReloadNativeTokenInfo(); } - -int main(int argc, char **argv) -{ - int ret = 0; - cout << "driver_extension_controller_mt" << endl; - cout << "usage: start/stop bundleName ExtensionAbilityName" << endl; - if (argc != PARAM_COUNT_NEED) { - cout << "error! wrong param count" << endl; - return 0; - } - cout << "args: "<< argv[PARAM_INDEX_OF_ACTION] << - ", " << argv[PARAM_INDEX_OF_BUNDLENAME] << - ", " << argv[PARAM_INDEX_OF_ABILITYNAME] << endl; - if (string(argv[1]) == "start") { - cout << "begin to connect extension ability" << endl; - SetTestCaseNative(&g_sysInfoInstance); - ret = DriverExtensionController::StartDriverExtension( - argv[PARAM_INDEX_OF_BUNDLENAME], argv[PARAM_INDEX_OF_ABILITYNAME]); - } else if (string(argv[1]) == "stop") { - cout << "begin to stop extension ability" << endl; +class DriverExtensionControllerMt { +public: + int TestEntry(int argc, char **argv) + { + int ret = 0; + cout << "[info]driver_extension_controller_mt" << endl; + cout << "[usage]: start/stop/connect bundleName ExtensionAbilityName" << endl; + if (argc != PARAM_COUNT_NEED) { + cout << "error! wrong param count" << endl; + return 0; + } + auto &drvExtCtrl = DriverExtensionController::GetInstance(); + string action(argv[PARAM_INDEX_OF_ACTION]); + string bundleName(argv[PARAM_INDEX_OF_BUNDLENAME]); + string abilityName(argv[PARAM_INDEX_OF_ABILITYNAME]); + cout << "args: "<< action << ", " << bundleName << ", " << abilityName << endl; SetTestCaseNative(&g_sysInfoInstance); - ret = DriverExtensionController::StopDriverExtension( - argv[PARAM_INDEX_OF_BUNDLENAME], argv[PARAM_INDEX_OF_ABILITYNAME]); - } else { - cout << "wrong param! please check!" << endl; + if (action == "start") { + cout << "begin to connect extension ability" << endl; + ret = drvExtCtrl.StartDriverExtension(bundleName, abilityName); + } else if (action == "stop") { + cout << "begin to stop extension ability" << endl; + ret = drvExtCtrl.StopDriverExtension(bundleName, abilityName); + } else if (action == "connect") { + connectAbilityTest(bundleName, abilityName); + } else { + cout << "wrong param! please check!" << endl; + return 0; + } + if (ret == 0) { + cout << "driver_extension_controller_mt sucess" << endl; + } else { + cout << "driver_extension_controller_mt fail , ret = " << ret << endl; + } + cout << "delay 10s to exit" << endl; + for (int i = 0; i < MAX_WAIT_TIME_SECOND; i++) { + sleep(1); + } + cout << "exit 0" << endl; return 0; - } - if (ret == 0) { - cout << "Start / Stop Extension Ability sucess" << endl; - } else { - cout << "Start / Stop Extension Ability fail , ret = " << ret << endl; - } - return 0; -} \ No newline at end of file + } +private: + void connectAbilityTest(const string bundleName, const string abilityName) + { + auto &drvExtCtrl = DriverExtensionController::GetInstance(); + shared_ptr conCb = make_shared(); + cout << "begin to Connect extension ability" << endl; + auto ret = drvExtCtrl.ConnectDriverExtension(bundleName, abilityName, conCb); + if (ret == 0) { + cout << "connect suncess, wait 5 second to disconnect" << endl; + for (int i = 0; i < MAX_WAIT_TIME_SECOND; i++) { + sleep(1); + if (conCb->IsConnectDone()) { + cout << "connectDone suncess, remoteObj = " << conCb->GetRemoteObj() << endl; + break; + } + } + ret = drvExtCtrl.DisconnectDriverExtension(bundleName, abilityName, conCb); + for (int i = 0; i < MAX_WAIT_TIME_SECOND; i++) { + sleep(1); + if (!conCb->IsConnectDone()) { + cout << "DisconnectDone sucess" << endl; + break; + } + } + } + }; + class ConCb : public IDriverExtensionConnectCallback { + public: + ConCb() { }; + int32_t OnConnectDone(const sptr &remote, int resultCode) override + { + cout << "ConCb OnConnectDone, "<< remote.GetRefPtr() << ", " << resultCode << endl; + return 0; + }; + int32_t OnDisconnectDone(int resultCode) override + { + cout << "ConCb OnDisconnectDone, " << resultCode << endl; + return 0; + } + }; +}; +} +} +using namespace OHOS::ExternalDeviceManager; +int main(int argc, char **argv) +{ + return DriverExtensionControllerMt().TestEntry(argc, argv); +} diff --git a/test/unittest/driver_extension_controller_test/src/driver_extension_controller_test.cpp b/test/unittest/driver_extension_controller_test/src/driver_extension_controller_test.cpp index c3bcdf1..8df05f4 100644 --- a/test/unittest/driver_extension_controller_test/src/driver_extension_controller_test.cpp +++ b/test/unittest/driver_extension_controller_test/src/driver_extension_controller_test.cpp @@ -38,11 +38,30 @@ public: { cout << "DrvExtCtrlTest TearDown" << endl; } + class TestConCb : public IDriverExtensionConnectCallback { + public: + TestConCb() { }; + int32_t OnConnectDone(const sptr &remote, int resultCode) override + { + cout << "ConCb OnConnectDone, "<< remote.GetRefPtr() << ", " << resultCode << endl; + connectCount_++; + return 0; + }; + int32_t OnDisconnectDone(int resultCode) override + { + cout << "ConCb OnDisconnectDone, " << resultCode << endl; + disconnectCount_++; + return 0; + } + int connectCount_ = 0; + int disconnectCount_ = 0; + }; }; constexpr const char *TEST_BUNDLE_NAME = "com.usb.right"; constexpr const char *TEST_ABILITY_NAME = "UsbServiceExtAbility"; constexpr const char *TEST_ABILITY_NAME_ERR = "XXX"; +constexpr const int MAX_WAIT_FOR_CONNECT = 10; using namespace OHOS::Security::AccessToken; @@ -87,9 +106,10 @@ HWTEST_F(DrvExtCtrlTest, DrvExtCtrlWithSATest, TestSize.Level1) { AccessTokenTest::SetTestCaseNative(&g_sysInfoInstance); int ret = 0; - ret = DriverExtensionController::StartDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME); + auto &ctrl = DriverExtensionController::GetInstance(); + ret = ctrl.StartDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME); ASSERT_EQ(ret, 0); - ret = DriverExtensionController::StopDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME); + ret = ctrl.StopDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME); ASSERT_EQ(ret, 0); } @@ -97,10 +117,83 @@ HWTEST_F(DrvExtCtrlTest, DrvExtCtrlWithoutSATest, TestSize.Level1) { AccessTokenTest::SetTestCaseNative(&g_normalInfoInstance); int ret = 0; - ret = DriverExtensionController::StartDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME_ERR); + auto &ctrl = DriverExtensionController::GetInstance(); + ret = ctrl.StartDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME_ERR); + ASSERT_NE(ret, 0); + ret = ctrl.StopDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME_ERR); + ASSERT_NE(ret, 0); +} + + +HWTEST_F(DrvExtCtrlTest, DrvExtCtrlConnectTest0, TestSize.Level1) +{ + AccessTokenTest::SetTestCaseNative(&g_sysInfoInstance); + int ret = 0; + bool isTimeout = true; + auto &ctrl = DriverExtensionController::GetInstance(); + auto con = make_shared(); + ret = ctrl.ConnectDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME, con); + ASSERT_EQ(ret, 0); + isTimeout = true; + for (int i = 0; i < MAX_WAIT_FOR_CONNECT; i++) { + sleep(1); + if (con->IsConnectDone()) { + isTimeout = false; + break; + } + } + ASSERT_EQ(con->connectCount_, 1); + ASSERT_EQ(isTimeout, false); + ret = ctrl.DisconnectDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME, con); + ASSERT_EQ(ret, 0); + isTimeout = true; + for (int i = 0; i < MAX_WAIT_FOR_CONNECT; i++) { + sleep(1); + if (!con->IsConnectDone()) { + isTimeout = false; + break; + } + } + ASSERT_EQ(isTimeout, false); + ASSERT_EQ(con->disconnectCount_, 1); +} + +HWTEST_F(DrvExtCtrlTest, DrvExtCtrlConnectTest1, TestSize.Level1) +{ + AccessTokenTest::SetTestCaseNative(&g_sysInfoInstance); + int ret = 0; + bool isTimeout = true; + auto &ctrl = DriverExtensionController::GetInstance(); + auto conErr = make_shared(); + ret = ctrl.ConnectDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME_ERR, conErr); ASSERT_NE(ret, 0); - ret = DriverExtensionController::StopDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME_ERR); + + auto con = make_shared(); + ret = ctrl.ConnectDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME, con); + ASSERT_EQ(ret, 0); + + isTimeout = true; + for (int i = 0; i < MAX_WAIT_FOR_CONNECT; i++) { + sleep(1); + if (con->IsConnectDone()) { + isTimeout = false; + break; + } + } + ASSERT_EQ(isTimeout, false); + ret = ctrl.DisconnectDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME_ERR, con); ASSERT_NE(ret, 0); + ret = ctrl.DisconnectDriverExtension(TEST_BUNDLE_NAME, TEST_ABILITY_NAME, con); + ASSERT_EQ(ret, 0); + isTimeout = true; + for (int i = 0; i < MAX_WAIT_FOR_CONNECT; i++) { + sleep(1); + if (!con->IsConnectDone()) { + isTimeout = false; + break; + } + } + ASSERT_EQ(isTimeout, false); } } } \ No newline at end of file -- Gitee From 44e27be1631fce0590365e53730292dad3705bcc Mon Sep 17 00:00:00 2001 From: zhouge Date: Mon, 19 Jun 2023 21:34:43 +0800 Subject: [PATCH 2/2] modify for code review Signed-off-by: zhouge --- .../driver_extension_controller.cpp | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp b/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp index 10fc8bf..98ea809 100644 --- a/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp +++ b/services/native/driver_extension_manager/src/driver_controller/driver_extension_controller.cpp @@ -31,27 +31,25 @@ public: const OHOS::AppExecFwk::ElementName &element, const sptr &remoteObject, int resultCode) override { EDM_LOGI(MODULE_EA_MGR, - "OnAbilityConnectDone, budnle = %{public}s, ability = %{public}s, resultCode = %{public}d", + "OnAbilityConnectDone, bundle = %{public}s, ability = %{public}s, resultCode = %{public}d", element.GetBundleName().c_str(), element.GetAbilityName().c_str(), resultCode); remoteObject_ = remoteObject; auto cb = callback_.lock(); if (cb != nullptr) { cb->OnConnectDone(remoteObject, resultCode); } - return; } void OnAbilityDisconnectDone( const OHOS::AppExecFwk::ElementName &element, int resultCode) override { EDM_LOGI(MODULE_EA_MGR, - "OnAbilityDisconnectDone, budnle = %{public}s,ability = %{public}s, resultCode = %{public}d", + "OnAbilityDisconnectDone, bundle = %{public}s,ability = %{public}s, resultCode = %{public}d", element.GetBundleName().c_str(), element.GetAbilityName().c_str(), resultCode); remoteObject_ = nullptr; auto cb = callback_.lock(); if (cb != nullptr) { cb->OnDisconnectDone(resultCode); } - return; } std::weak_ptr callback_; sptr remoteObject_; @@ -119,11 +117,7 @@ int32_t DriverExtensionController::ConnectDriverExtension( { EDM_LOGI(MODULE_EA_MGR, "Begin to Connect DriverExtension, bundle:%{public}s, ability:%{public}s", \ bundleName.c_str(), abilityName.c_str()); - auto abmc = AAFwk::AbilityManagerClient::GetInstance(); - if (abmc == nullptr) { - EDM_LOGE(MODULE_EA_MGR, "Get AMC Instance failed"); - return EDM_ERR_INVALID_OBJECT; - } + if (callback == nullptr) { EDM_LOGE(MODULE_EA_MGR, "param callback is nullptr"); return EDM_ERR_INVALID_PARAM; @@ -138,6 +132,11 @@ int32_t DriverExtensionController::ConnectDriverExtension( callback->info_->abilityName_ = abilityName; callback->info_->connectInner_ = new DriverExtensionAbilityConnection(); callback->info_->connectInner_->callback_ = callback; + auto abmc = AAFwk::AbilityManagerClient::GetInstance(); + if (abmc == nullptr) { + EDM_LOGE(MODULE_EA_MGR, "Get AMC Instance failed"); + return EDM_ERR_INVALID_OBJECT; + } AAFwk::Want want; want.SetElementName(bundleName, abilityName); auto ret = abmc->ConnectAbility(want, callback->info_->connectInner_, -1); @@ -157,11 +156,6 @@ int32_t DriverExtensionController::DisconnectDriverExtension( { EDM_LOGI(MODULE_EA_MGR, "Begin to Disconnect DriverExtension, bundle:%{public}s, ability:%{public}s", \ bundleName.c_str(), abilityName.c_str()); - auto abmc = AAFwk::AbilityManagerClient::GetInstance(); - if (abmc == nullptr) { - EDM_LOGE(MODULE_EA_MGR, "Get AMC Instance failed"); - return EDM_ERR_INVALID_OBJECT; - } if (callback == nullptr) { EDM_LOGE(MODULE_EA_MGR, "param callback is nullptr"); return EDM_ERR_INVALID_PARAM; @@ -175,6 +169,11 @@ int32_t DriverExtensionController::DisconnectDriverExtension( EDM_LOGE(MODULE_EA_MGR, "bundleName or abilityName not match info in callback"); return EDM_ERR_INVALID_OBJECT; } + auto abmc = AAFwk::AbilityManagerClient::GetInstance(); + if (abmc == nullptr) { + EDM_LOGE(MODULE_EA_MGR, "Get AMC Instance failed"); + return EDM_ERR_INVALID_OBJECT; + } auto ret = abmc->DisconnectAbility(callback->info_->connectInner_); if (ret != 0) { EDM_LOGE(MODULE_EA_MGR, "DisconnectExtensionAbility failed %{public}d", ret); -- Gitee