diff --git a/frameworks/aafwk/include/accessible_ability_client_impl.h b/frameworks/aafwk/include/accessible_ability_client_impl.h index c0c8d1e2c88ed677bfdc2691599b8e16a742325c..dece37cccd77886a59f534065d2d50a5e141b71c 100644 --- a/frameworks/aafwk/include/accessible_ability_client_impl.h +++ b/frameworks/aafwk/include/accessible_ability_client_impl.h @@ -301,6 +301,7 @@ public: */ void SetConnectionState(bool state); sptr LoadAccessibilityService(); + void UnLoadAccessibilityService(); void AddWindowElementMapByWMS(int32_t windowId, int64_t elementId); void AddWindowElementMapByAce(int32_t windowId, int64_t elementId); RetError GetElementInfoFromCache(int32_t windowId, int64_t elementId, diff --git a/frameworks/aafwk/src/accessible_ability_client_impl.cpp b/frameworks/aafwk/src/accessible_ability_client_impl.cpp index a97b3ca67c54de7a4826224cae063a39c1b812c7..8beb99a4b19ebcbf3f2780a9c910e1129785e150 100644 --- a/frameworks/aafwk/src/accessible_ability_client_impl.cpp +++ b/frameworks/aafwk/src/accessible_ability_client_impl.cpp @@ -88,6 +88,7 @@ AccessibleAbilityClientImpl::~AccessibleAbilityClientImpl() HILOG_DEBUG("Remove service death recipient"); serviceProxy_->AsObject()->RemoveDeathRecipient(accessibilityServiceDeathRecipient_); } + UnLoadAccessibilityService(); } bool AccessibleAbilityClientImpl::InitAccessibilityServiceProxy() @@ -1285,5 +1286,14 @@ sptr AccessibleAbilityClientImpl::LoadAccessibilityService( } return object; } + +void AccessibleAbilityClientImpl::UnLoadAccessibilityService() +{ + auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgr == nullptr) { + return; + } + samgr->UnloadSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID); +} } // namespace Accessibility -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/frameworks/acfwk/include/accessibility_config_impl.h b/frameworks/acfwk/include/accessibility_config_impl.h index 2c40427566c2f57f781961254f8c12454719bd5d..ebcb10ad16013e792eb87d6d78148f176638ba58 100644 --- a/frameworks/acfwk/include/accessibility_config_impl.h +++ b/frameworks/acfwk/include/accessibility_config_impl.h @@ -29,10 +29,8 @@ namespace AccessibilityConfig { class AccessibilityConfig::Impl { public: Impl(); - ~Impl() = default; - + ~Impl(); bool InitializeContext(); - Accessibility::RetError SubscribeConfigObserver(const CONFIG_ID id, const std::shared_ptr &observer, const bool retFlag); Accessibility::RetError UnsubscribeConfigObserver(const CONFIG_ID id, @@ -268,7 +266,7 @@ private: void OnIgnoreRepeatClickStateChanged(const uint32_t stateType); sptr LoadAccessibilityService(); - + void UnLoadAccessibilityService(); sptr serviceProxy_ = nullptr; sptr captionObserver_ = nullptr; sptr configObserver_ = nullptr; diff --git a/frameworks/acfwk/src/accessibility_config_impl.cpp b/frameworks/acfwk/src/accessibility_config_impl.cpp index 7347b3ff0ea28f54faf81b702a89eb699599fef9..8580cb9e75fe0a0740c9d0b06042a6be8e9d4a2d 100644 --- a/frameworks/acfwk/src/accessibility_config_impl.cpp +++ b/frameworks/acfwk/src/accessibility_config_impl.cpp @@ -31,6 +31,11 @@ namespace { AccessibilityConfig::Impl::Impl() {} +AccessibilityConfig::Impl::~Impl() +{ + UnLoadAccessibilityService(); +} + bool AccessibilityConfig::Impl::InitializeContext() { HILOG_DEBUG(); @@ -1906,10 +1911,18 @@ sptr AccessibilityConfig::Impl::LoadAccessibilityService() } sptr object = samgr->LoadSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID, LOAD_ABILITY_TIME_OUT_SECONDS); if (object) { - serviceProxy_ = iface_cast(object); + serviceProxy_ = iface_cast(object); } return object; } +void AccessibilityConfig::Impl::UnLoadAccessibilityService() +{ + auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgr == nullptr) { + return; + } + samgr->UnloadSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID); +} } // namespace AccessibilityConfig -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/frameworks/asacfwk/include/accessibility_system_ability_client_impl.h b/frameworks/asacfwk/include/accessibility_system_ability_client_impl.h index 9833406aa4284a057c6d28ae34082f6b8eb9ae8b..d32105b2d0c498693eaed77033746b7e695c7c5b 100644 --- a/frameworks/asacfwk/include/accessibility_system_ability_client_impl.h +++ b/frameworks/asacfwk/include/accessibility_system_ability_client_impl.h @@ -240,6 +240,7 @@ private: */ void NotifyStateChanged(uint32_t eventType, bool value); sptr LoadAccessibilityService(); + void UnLoadAccessibilityService(); /** * @brief Check the event type is valid or not. * @param eventType The data of event type. diff --git a/frameworks/asacfwk/src/accessibility_system_ability_client_impl.cpp b/frameworks/asacfwk/src/accessibility_system_ability_client_impl.cpp index d5ece5a19162d6312516cab488ae72c031d1c406..8d40dc6633c73703ba3e950b4ad5babcb5515c4b 100644 --- a/frameworks/asacfwk/src/accessibility_system_ability_client_impl.cpp +++ b/frameworks/asacfwk/src/accessibility_system_ability_client_impl.cpp @@ -70,6 +70,7 @@ AccessibilitySystemAbilityClientImpl::AccessibilitySystemAbilityClientImpl() AccessibilitySystemAbilityClientImpl::~AccessibilitySystemAbilityClientImpl() { HILOG_DEBUG(); + UnLoadAccessibilityService(); } bool AccessibilitySystemAbilityClientImpl::ConnectToService() @@ -629,7 +630,7 @@ RetError AccessibilitySystemAbilityClientImpl::GetFocusedWindowId(int32_t &focus } -sptr AccessibilitySystemAbilityClientImpl::LoadAccessibilityService() +sptr AccessibilitySystemAbilityClientImpl::LoadAccessibilityService() { auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); if (samgr == nullptr) { @@ -641,5 +642,14 @@ sptr AccessibilitySystemAbilityClientImpl::LoadAccessibili } return object; } + +void AccessibilitySystemAbilityClientImpl::UnLoadAccessibilityService() +{ + auto samgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); + if (samgr == nullptr) { + return; + } + samgr->UnloadSystemAbility(ACCESSIBILITY_MANAGER_SERVICE_ID); +} } // namespace Accessibility -} // namespace OHOS \ No newline at end of file +} // namespace OHOS