diff --git a/accessibility_manager_service.gni b/accessibility_manager_service.gni index c7d547994..23d4cef7d 100644 --- a/accessibility_manager_service.gni +++ b/accessibility_manager_service.gni @@ -22,6 +22,7 @@ declare_args() { accessibility_feature_hiviewdfx_hitrace = true accessibility_feature_hiviewdfx_hisysevent = true accessibility_dynamic_support = false + accessibility_user_status_awareness = false if (defined(global_parts_info) && !defined(global_parts_info.powermgr_display_manager)) { accessibility_feature_display_manager = false @@ -49,6 +50,10 @@ declare_args() { !defined(global_parts_info.hiviewdfx_hisysevent)) { accessibility_feature_hiviewdfx_hisysevent = false } + + if (defined(global_parts_info) && defined(global_parts_info.msdp_user_status_awareness)) { + accessibility_user_status_awareness = true + } } print( @@ -61,6 +66,8 @@ print( "accessibility_feature_hiviewdfx_hitrace = ${accessibility_feature_hiviewdfx_hitrace}") print( "accessibility_feature_hiviewdfx_hisysevent = ${accessibility_feature_hiviewdfx_hisysevent}") +print( + "accessibility_user_status_awareness = ${accessibility_user_status_awareness}") accessibility_default_defines = [] @@ -95,3 +102,7 @@ if (accessibility_feature_hiviewdfx_hisysevent) { if (product_name != "qemu-arm-linux-min") { accessibility_default_defines += [ "ACCESSIBILITY_EMULATOR_DEFINED" ] } + +if (accessibility_user_status_awareness) { + accessibility_default_defines += [ "ACCESSIBILITY_USER_STATUS_AWARENESS" ] +} diff --git a/bundle.json b/bundle.json index 70c0cb740..6b9de06a3 100644 --- a/bundle.json +++ b/bundle.json @@ -65,7 +65,8 @@ "e2fsprogs", "resource_schedule_service", "cJSON", - "selinux_adapter" + "selinux_adapter", + "user_status_awareness" ], "third_party": [] }, diff --git a/frameworks/aafwk/test/BUILD.gn b/frameworks/aafwk/test/BUILD.gn index 95c6fc89d..8f2b68b34 100755 --- a/frameworks/aafwk/test/BUILD.gn +++ b/frameworks/aafwk/test/BUILD.gn @@ -120,6 +120,7 @@ ohos_unittest("accessible_ability_test") { "../../../services/aams/src/accessibility_setting_observer.cpp", "../../../services/aams/src/accessibility_settings.cpp", "../../../services/aams/src/accessibility_settings_config.cpp", + "../../../services/aams/src/msdp_manager.cpp", "../../../services/aams/src/accessible_ability_manager_service.cpp", "../../../services/aams/src/accessible_ability_manager_service_event_handler.cpp", "../../../services/aams/src/utils.cpp", @@ -202,6 +203,10 @@ ohos_unittest("accessible_ability_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ############################################################################### diff --git a/sa_profile/accessibility.cfg b/sa_profile/accessibility.cfg index 8de1a3484..7960a2f47 100644 --- a/sa_profile/accessibility.cfg +++ b/sa_profile/accessibility.cfg @@ -26,7 +26,8 @@ "ohos.permission.CONNECT_ACCESSIBILITY_EXTENSION", "ohos.permission.FILTER_INPUT_EVENT", "ohos.permission.MANAGE_MOUSE_CURSOR", - "ohos.permission.REPORT_RESOURCE_SCHEDULE_EVENT" + "ohos.permission.REPORT_RESOURCE_SCHEDULE_EVENT", + "ohos.permission.ACCESS_SYSTEM_SETTINGS" ], "permission_acls" : [ "ohos.permission.INTERCEPT_INPUT_EVENT", diff --git a/services/aams/BUILD.gn b/services/aams/BUILD.gn index 270fa7eea..b1167d9c4 100644 --- a/services/aams/BUILD.gn +++ b/services/aams/BUILD.gn @@ -68,6 +68,7 @@ accessibleabilityms_files = [ "${services_path}/src/accessibility_resource_bundle_manager.cpp", "${services_path}/src/accessibility_setting_observer.cpp", "${services_path}/src/accessibility_setting_provider.cpp", + "${services_path}/src/msdp_manager.cpp", "${services_path}/src/accessibility_short_key_dialog.cpp", "${services_path}/src/accessibility_datashare_helper.cpp", "${services_path}/src/touch_exploration_multi_finger_gesture.cpp", @@ -137,7 +138,7 @@ ohos_shared_library("accessibleabilityms") { "safwk:system_ability_fwk", "samgr:samgr_proxy", "window_manager:libdm", - "graphic_2d:librender_service_base" + "graphic_2d:librender_service_base", ] if (accessibility_feature_power_manager) { @@ -164,6 +165,10 @@ ohos_shared_library("accessibleabilityms") { external_deps += [ "resource_schedule_service:ressched_client" ] } + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } + install_enable = true subsystem_name = "barrierfree" diff --git a/services/aams/include/accessible_ability_manager_service.h b/services/aams/include/accessible_ability_manager_service.h index eee25881e..3a28d69e0 100644 --- a/services/aams/include/accessible_ability_manager_service.h +++ b/services/aams/include/accessible_ability_manager_service.h @@ -437,6 +437,10 @@ private: void OnScreenMagnificationTypeChanged(); void RegisterScreenMagnificationType(); + void OnVoiceRecognitionChanged(); + void RegisterVoiceRecognitionState(); + void UpdateVoiceRecognitionState(); + int32_t ApplyTreeId(); void RecycleTreeId(int32_t treeId); @@ -493,6 +497,9 @@ private: std::bitset treeIdPool_; int32_t preTreeId_ = -1; ffrt::mutex treeIdPoolMutex_; + + bool isSubscribeMSDPCallback_ = false; + ffrt::mutex subscribeMSDPMutex_; }; } // namespace Accessibility } // namespace OHOS diff --git a/services/aams/include/extension_ability_manager.h b/services/aams/include/extension_ability_manager.h new file mode 100644 index 000000000..5e33905ab --- /dev/null +++ b/services/aams/include/extension_ability_manager.h @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef EXTENSION_ABILITY_CONNECTION_H +#define EXTENSION_ABILITY_CONNECTION_H + +#include +#include "ability_connect_callback_stub.h" + +namespace OHOS { +namespace Accessibility { +using namespace OHOS::AppExecFwk; + +class ExtensionAbilityConnection : public AAFwk::AbilityConnectionStub { +public: + void OnAbilityConnectDone(const AppExecFwk::ElementName &element, const sptr &remoteObject, + int32_t resultCode) override; + + void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override; + + sptr GetRemoteObject(); + +private: + sptr remoteObject_; + std::mutex mutex_; + std::condition_variable cv_; + bool waitFlag_ = false; +}; + +class ExtensionAbilityManager { +public: + static ExtensionAbilityManager &GetInstance(); + + void VoiceRecognize(int32_t soundType); + + ExtensionAbilityManager(const ExtensionAbilityManager&) = delete; + + ExtensionAbilityManager(ExtensionAbilityManager&&) = delete; + + ExtensionAbilityManager& operator=(const ExtensionAbilityManager&) = delete; + + ExtensionAbilityManager& operator=(ExtensionAbilityManager&&) = delete; + +private: + ExtensionAbilityManager(); + + ~ExtensionAbilityManager() = default; + + int32_t ConnectSettingsExtService(); + + void DisconnectSettingsExtService(); + + sptr GetRemoteObject(); + + std::string CreateJsonMessage(int32_t soundType); + + void SendRequestToSetting(const sptr &remoteObject, const std::string &message); + + sptr connection_; +}; +} // namespace Accessibility +} // namespace OHOS +#endif // EXTENSION_ABILITY_CONNECTION_H diff --git a/services/aams/include/msdp_manager.h b/services/aams/include/msdp_manager.h new file mode 100644 index 000000000..e95142c1f --- /dev/null +++ b/services/aams/include/msdp_manager.h @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MSDP_MANAGER_H +#define MSDP_MANAGER_H + +#include + +namespace OHOS { +namespace Accessibility { +class MsdpManager { +public: + static int32_t SubscribeVoiceRecognition(); + static void UnSubscribeVoiceRecognition(); +}; +} // namespace Accessibility +} // namespace OHOS +#endif // MSDP_MANAGER_H \ No newline at end of file diff --git a/services/aams/src/accessible_ability_manager_service.cpp b/services/aams/src/accessible_ability_manager_service.cpp index 4757c364e..468a2c310 100644 --- a/services/aams/src/accessible_ability_manager_service.cpp +++ b/services/aams/src/accessible_ability_manager_service.cpp @@ -51,6 +51,7 @@ #include "accesstoken_kit.h" #include "tokenid_kit.h" #include "accessibility_caption.h" +#include "msdp_manager.h" using namespace std; using namespace OHOS::Security::AccessToken; @@ -76,6 +77,8 @@ namespace { const std::string DEVICE_PROVISIONED = "device_provisioned"; const std::string SCREEN_MAGNIFICATION_KEY = "accessibility_display_magnification_enabled"; const std::string SCREEN_MAGNIFICATION_TYPE = "accessibility_magnification_capability"; + const std::string VOICE_RECOGNITION_KEY = "accessibility_sound_recognition_switch"; + const std::string VOICE_RECOGNITION_TYPES = "accessibility_sound_recognition_enabled"; const std::string DELAY_UNLOAD_TASK = "TASK_UNLOAD_ACCESSIBILITY_SA"; const std::string USER_SETUP_COMPLETED = "user_setup_complete"; const std::string ACCESSIBILITY_CLONE_FLAG = "accessibility_config_clone"; @@ -138,6 +141,9 @@ AccessibleAbilityManagerService::AccessibleAbilityManagerService() dependentServicesStatus_[SUBSYS_ACCOUNT_SYS_ABILITY_ID_BEGIN] = false; dependentServicesStatus_[WINDOW_MANAGER_SERVICE_ID] = false; dependentServicesStatus_[DISTRIBUTED_KV_DATA_SERVICE_ABILITY_ID] = false; + #ifdef ACCESSIBILITY_USER_STATUS_AWARENESS + dependentServicesStatus_[MSDP_USER_STATUS_SERVICE_ID] = false; + #endif // ACCESSIBILITY_USER_STATUS_AWARENESS accessibilitySettings_ = std::make_shared(); accessibilityShortKey_ = std::make_shared(); @@ -297,6 +303,9 @@ void AccessibleAbilityManagerService::OnStart() AddSystemAbilityListener(SUBSYS_ACCOUNT_SYS_ABILITY_ID_BEGIN); AddSystemAbilityListener(WINDOW_MANAGER_SERVICE_ID); AddSystemAbilityListener(DISTRIBUTED_KV_DATA_SERVICE_ABILITY_ID); + #ifdef ACCESSIBILITY_USER_STATUS_AWARENESS + AddSystemAbilityListener(MSDP_USER_STATUS_SERVICE_ID); + #endif // ACCESSIBILITY_USER_STATUS_AWARENESS accessibilitySettings_->RegisterSettingsHandler(handler_); } @@ -389,6 +398,7 @@ void AccessibleAbilityManagerService::OnAddSystemAbility(int32_t systemAbilityId PostDelayUnloadTask(); RegisterScreenMagnificationState(); RegisterScreenMagnificationType(); + RegisterVoiceRecognitionState(); }, "OnAddSystemAbility"); } @@ -1926,9 +1936,11 @@ void AccessibleAbilityManagerService::SwitchedUser(int32_t accountId) } UpdateAllSetting(); UpdateAutoStartAbilities(); + UpdateVoiceRecognitionState(); RegisterShortKeyEvent(); RegisterScreenMagnificationState(); RegisterScreenMagnificationType(); + RegisterVoiceRecognitionState(); } void AccessibleAbilityManagerService::PackageRemoved(const std::string &bundleName) @@ -3417,6 +3429,82 @@ void AccessibleAbilityManagerService::RegisterScreenMagnificationType() }, "REGISTER_SCREEN_ZOOM_TYPE_OBSERVER"); } +void AccessibleAbilityManagerService::UpdateVoiceRecognitionState() +{ + HILOG_INFO(); + { + std::lock_guard lock(subscribeMSDPMutex_); + if (isSubscribeMSDPCallback_) { + MsdpManager::UnSubscribeVoiceRecognition(); + HILOG_INFO("userstatusClient.Unsubscribe"); + } + } + OnVoiceRecognitionChanged(); +} + +void AccessibleAbilityManagerService::OnVoiceRecognitionChanged() +{ + HILOG_INFO(); + sptr accountData = GetCurrentAccountData(); + if (accountData == nullptr) { + HILOG_ERROR("accountData is nullptr"); + return; + } + + std::shared_ptr config = accountData->GetConfig(); + if (config == nullptr) { + HILOG_ERROR("config is nullptr"); + return; + } + + if (config->GetDbHandle() == nullptr) { + HILOG_ERROR("datashareHelper is nullptr"); + return; + } + + bool voiceRecognitionEnabled = config->GetDbHandle()->GetBoolValue(VOICE_RECOGNITION_KEY, false); + std::string voiceRecognitionTypes = config->GetDbHandle()->GetStringValue(VOICE_RECOGNITION_TYPES, ""); + + std::lock_guard lock(subscribeMSDPMutex_); + if (!isSubscribeMSDPCallback_ && voiceRecognitionEnabled && !voiceRecognitionTypes.empty()) { + int32_t ret = MsdpManager::SubscribeVoiceRecognition(); + isSubscribeMSDPCallback_ = true; + HILOG_INFO("SubscribeVoiceRecognition ret: %{public}d", ret); + return; + } + + if (isSubscribeMSDPCallback_ && (!voiceRecognitionEnabled || voiceRecognitionTypes.empty())) { + MsdpManager::UnSubscribeVoiceRecognition(); + isSubscribeMSDPCallback_ = false; + return; + } +} + +void AccessibleAbilityManagerService::RegisterVoiceRecognitionState() +{ + HILOG_INFO(); + if (handler_ == nullptr) { + HILOG_ERROR("handler_ is nullptr"); + return; + } + handler_->PostTask([=]() { + sptr accountData = GetCurrentAccountData(); + if (accountData == nullptr) { + HILOG_ERROR("accountData is nullptr"); + return; + } + + AccessibilitySettingObserver::UpdateFunc func = [ = ](const std::string &state) { + Singleton::GetInstance().OnVoiceRecognitionChanged(); + }; + + if (accountData->GetConfig()->GetDbHandle()) { + accountData->GetConfig()->GetDbHandle()->RegisterObserver(VOICE_RECOGNITION_KEY, func); + accountData->GetConfig()->GetDbHandle()->RegisterObserver(VOICE_RECOGNITION_TYPES, func); + } + }, "REGISTER_VOICE_RECOGNITION"); +} + void AccessibleAbilityManagerService::PostDelayUnloadTask() { #ifdef ACCESSIBILITY_WATCH_FEATURE @@ -3607,6 +3695,7 @@ void AccessibleAbilityManagerService::OnDataClone() UpdateAllSetting(); UpdateAutoStartAbilities(); UpdateInputFilter(); + UpdateVoiceRecognitionState(); HILOG_INFO("accessibility reload config."); } else { HILOG_WARN("config_ is nullptr"); diff --git a/services/aams/src/extension_ability_manager.cpp b/services/aams/src/extension_ability_manager.cpp new file mode 100644 index 000000000..599b955c1 --- /dev/null +++ b/services/aams/src/extension_ability_manager.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "extension_ability_manager.h" + +#include +#include "message_parcel.h" +#include "hilog_wrapper.h" +#include "nlohmann/json.hpp" +#include "extension_manager_client.h" + +namespace OHOS { +namespace Accessibility { + +const int64_t WAIT_INTERVAL = 5000; // 5s +constexpr int32_t DEFAULT_USER_ID = -1; +const std::string SETTINGS_BUNDLE_NAME = "com.huawei.hmos.settings"; +const std::string SERVICE_EXTENSION_ABILITY_NAME = "SettingsExtService"; +const std::string METHOD_KEY = "method"; +const std::string EXTRA_KEY = "extra"; +const std::string METHOD_VOICE_RECOGNITION = "voiceRecognition"; +const std::string EXTRA_VALUE_KEY = "soundType"; +constexpr int32_t SETTINGS_VOICE_RECOGNITION_CODE = 7; + +void ExtensionAbilityConnection::OnAbilityConnectDone(const AppExecFwk::ElementName &element, + const sptr &remoteObject, int32_t resultCode) +{ + HILOG_INFO("on ability connected done"); + if (resultCode != ERR_OK) { + HILOG_ERROR("ability connect failed: %{public}d", resultCode); + return; + } + if (remoteObject == nullptr) { + HILOG_ERROR("remoteObject is null"); + return; + } + HILOG_INFO("got remoteObject"); + std::unique_lock lock(mutex_); + remoteObject_ = remoteObject; + cv_.notify_all(); +} + +void ExtensionAbilityConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) +{ + HILOG_INFO("on ability disconnected done"); + std::unique_lock lock(mutex_); + remoteObject_ = nullptr; +} + +sptr ExtensionAbilityConnection::GetRemoteObject() +{ + std::unique_lock lock(mutex_); + if (!cv_.wait_for(lock, std::chrono::milliseconds(WAIT_INTERVAL), [this]() { return remoteObject_ != nullptr; })) { + HILOG_ERROR("wait for remote object timeout"); + return nullptr; + } + return remoteObject_; +} + +ExtensionAbilityManager::ExtensionAbilityManager() +{ + connection_ = sptr (new (std::nothrow) ExtensionAbilityConnection()); +} + +ExtensionAbilityManager& ExtensionAbilityManager::GetInstance() +{ + static ExtensionAbilityManager instance; + return instance; +} + +void ExtensionAbilityManager::VoiceRecognize(int32_t soundType) +{ + HILOG_INFO("called, soundType=%{public}d", soundType); + sptr remote = GetRemoteObject(); + if (remote == nullptr) { + HILOG_ERROR("cannot get remote object"); + return; + } + std::string message = CreateJsonMessage(soundType); + SendRequestToSetting(remote, message); + DisconnectSettingsExtService(); +} + +int32_t ExtensionAbilityManager::ConnectSettingsExtService() +{ + HILOG_INFO("called"); + AAFwk::Want want; + want.SetElementName(SETTINGS_BUNDLE_NAME, SERVICE_EXTENSION_ABILITY_NAME); + int32_t ret = AAFwk::ExtensionManagerClient::GetInstance().ConnectServiceExtensionAbility(want, connection_, + nullptr, DEFAULT_USER_ID); + return ret; +} + +void ExtensionAbilityManager::DisconnectSettingsExtService() +{ + auto disconnectResult = AAFwk::ExtensionManagerClient::GetInstance().DisconnectAbility(connection_); + if (disconnectResult != ERR_OK) { + HILOG_ERROR("disconnect failed, ret=%{public}d", disconnectResult); + } +} + +sptr ExtensionAbilityManager::GetRemoteObject() +{ + int32_t connectResult = ConnectSettingsExtService(); + if (connectResult != ERR_OK) { + HILOG_ERROR("connect failed, ret=%{public}d", connectResult); + return nullptr; + } + HILOG_INFO("connect success"); + return connection_->GetRemoteObject(); +} + +std::string ExtensionAbilityManager::CreateJsonMessage(int32_t soundType) +{ + nlohmann::json jsonMessageObj; + nlohmann::json jsonExtraValue; + + jsonExtraValue[EXTRA_VALUE_KEY] = soundType; + jsonMessageObj[METHOD_KEY] = METHOD_VOICE_RECOGNITION; + jsonMessageObj[EXTRA_KEY] = jsonExtraValue; + + return jsonMessageObj.dump(); +} + +void ExtensionAbilityManager::SendRequestToSetting(const sptr &remoteObject, + const std::string &message) +{ + if (remoteObject == nullptr) { + HILOG_ERROR("remoteObject is nullptr!"); + return; + } + if (message.empty()) { + HILOG_ERROR("send message is empty!"); + return; + } + HILOG_INFO("send message=%{public}s", message.c_str()); + MessageParcel data; + MessageParcel reply; + MessageOption option; + + if (!data.WriteString16(Str8ToStr16(message))) { + HILOG_ERROR("write message failed!"); + return; + } + int32_t ret = remoteObject->SendRequest(SETTINGS_VOICE_RECOGNITION_CODE, data, reply, option); + auto replyCode = reply.ReadInt32(); + HILOG_INFO("sendRequest ret=%{public}d, replyCode=%{public}d", ret, replyCode); +} +} // namespace Accessibility +} // namespace OHOS diff --git a/services/aams/src/msdp_manager.cpp b/services/aams/src/msdp_manager.cpp new file mode 100644 index 000000000..c9c06dce2 --- /dev/null +++ b/services/aams/src/msdp_manager.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifdef ACCESSIBILITY_USER_STATUS_AWARENESS +#include "user_status_client.h" +#endif // ACCESSIBILITY_USER_STATUS_AWARENESS +#include "msdp_manager.h" +#include "extension_ability_manager.cpp" + +namespace OHOS { +namespace Accessibility { + +const int32_t FEATURE_VOICE_RECOGNITION = 17; + +int32_t MsdpManager::SubscribeVoiceRecognition() +{ + HILOG_INFO(); + int32_t ret = 0; + #ifdef ACCESSIBILITY_USER_STATUS_AWARENESS + std::function)> func = [ = ]( + int32_t callbackId, std::shared_ptr userStatusData) { + HILOG_INFO("voice recognition callback, Id: %{public}d, GetFeature: %{public}d, GetResult: %{public}d", + callbackId, userStatusData->GetFeature(), userStatusData->GetResult()); + + ExtensionAbilityManager::GetInstance().VoiceRecognize(userStatusData->GetResult()); + }; + auto &userstatusClient = Msdp::UserStatusAwareness::UserStatusClient::GetInstance(); + ret = userstatusClient.SubscribeCallback(FEATURE_VOICE_RECOGNITION, func); + userstatusClient.Subscribe(FEATURE_VOICE_RECOGNITION, {}); + HILOG_INFO("userstatusClient.SubscribeCallback RET: %{public}d", ret); + #endif // ACCESSIBILITY_USER_STATUS_AWARENESS + return ret; +} + +void MsdpManager::UnSubscribeVoiceRecognition() +{ + HILOG_INFO(); + #ifdef ACCESSIBILITY_USER_STATUS_AWARENESS + auto &userstatusClient = Msdp::UserStatusAwareness::UserStatusClient::GetInstance(); + userstatusClient.Unsubscribe(FEATURE_VOICE_RECOGNITION); + HILOG_INFO("msdp userstatusClient.Unsubscribe"); + #endif // ACCESSIBILITY_USER_STATUS_AWARENESS +} +} // namespace Accessibility +} // namespace OHOS diff --git a/services/aams/test/BUILD.gn b/services/aams/test/BUILD.gn index fcb05e4ea..88aec0c53 100644 --- a/services/aams/test/BUILD.gn +++ b/services/aams/test/BUILD.gn @@ -69,6 +69,7 @@ ohos_unittest("accessibility_account_data_test") { "../src/accessibility_screen_touch.cpp", "../src/accessibility_setting_observer.cpp", "../src/accessibility_settings.cpp", + "../src/msdp_manager.cpp", "../src/accessibility_short_key.cpp", "../src/accessibility_short_key_dialog.cpp", "../src/accessibility_touchEvent_injector.cpp", @@ -140,6 +141,10 @@ ohos_unittest("accessibility_account_data_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -179,6 +184,7 @@ ohos_unittest("accessible_ability_manager_service_test") { "../src/accessibility_setting_provider.cpp", "../src/accessibility_settings.cpp", "../src/accessibility_settings_config.cpp", + "../src/msdp_manager.cpp", "../src/accessibility_short_key.cpp", "../src/accessibility_touchEvent_injector.cpp", "../src/accessibility_window_connection.cpp", @@ -255,6 +261,10 @@ ohos_unittest("accessible_ability_manager_service_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -745,6 +755,7 @@ ohos_unittest("accessible_ability_connection_test") { "../src/accessibility_setting_observer.cpp", "../src/accessibility_settings.cpp", "../src/accessibility_settings_config.cpp", + "../src/msdp_manager.cpp", "../src/accessibility_short_key.cpp", "../src/accessibility_touchEvent_injector.cpp", "../src/accessibility_window_connection.cpp", @@ -824,6 +835,10 @@ ohos_unittest("accessible_ability_connection_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -1162,6 +1177,7 @@ ohos_unittest("accessibility_mouse_autoclick_test") { "../src/accessibility_setting_observer.cpp", "../src/accessibility_setting_provider.cpp", "../src/accessibility_settings.cpp", + "../src/msdp_manager.cpp", "../src/accessibility_short_key.cpp", "../src/accessibility_short_key_dialog.cpp", "../src/accessibility_touchEvent_injector.cpp", @@ -1233,6 +1249,10 @@ ohos_unittest("accessibility_mouse_autoclick_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -1593,6 +1613,7 @@ ohos_unittest("accessibility_settings_config_test") { "../src/accessibility_setting_provider.cpp", "../src/accessibility_settings.cpp", "../src/accessibility_settings_config.cpp", + "../src/msdp_manager.cpp", "../src/accessibility_short_key.cpp", "../src/accessibility_short_key_dialog.cpp", "../src/accessibility_touchEvent_injector.cpp", @@ -1662,6 +1683,10 @@ ohos_unittest("accessibility_settings_config_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ diff --git a/services/test/BUILD.gn b/services/test/BUILD.gn index 4937abee6..2846762a8 100644 --- a/services/test/BUILD.gn +++ b/services/test/BUILD.gn @@ -77,6 +77,7 @@ ohos_moduletest("aams_accessibility_touch_exploration_test") { "../aams/src/accessibility_setting_observer.cpp", "../aams/src/accessibility_settings.cpp", "../aams/src/accessibility_settings_config.cpp", + "../aams/src/msdp_manager.cpp", "../aams/src/accessibility_short_key.cpp", "../aams/src/accessibility_touchEvent_injector.cpp", "../aams/src/accessibility_window_connection.cpp", @@ -162,6 +163,10 @@ ohos_moduletest("aams_accessibility_touch_exploration_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -186,6 +191,7 @@ ohos_moduletest("aams_accessibility_touchEvent_injector_test") { "../aams/src/accessibility_setting_observer.cpp", "../aams/src/accessibility_settings.cpp", "../aams/src/accessibility_settings_config.cpp", + "../aams/src/msdp_manager.cpp", "../aams/src/accessibility_short_key.cpp", "../aams/src/accessibility_touchEvent_injector.cpp", "../aams/src/accessibility_window_connection.cpp", @@ -272,6 +278,10 @@ ohos_moduletest("aams_accessibility_touchEvent_injector_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -296,6 +306,7 @@ ohos_moduletest("aams_accessible_ability_channel_test") { "../aams/src/accessibility_setting_observer.cpp", "../aams/src/accessibility_settings.cpp", "../aams/src/accessibility_settings_config.cpp", + "../aams/src/msdp_manager.cpp", "../aams/src/accessibility_short_key.cpp", "../aams/src/accessibility_touchEvent_injector.cpp", "../aams/src/accessibility_window_connection.cpp", @@ -381,6 +392,10 @@ ohos_moduletest("aams_accessible_ability_channel_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -405,6 +420,7 @@ ohos_moduletest("aams_server_test") { "../aams/src/accessibility_setting_observer.cpp", "../aams/src/accessibility_settings.cpp", "../aams/src/accessibility_settings_config.cpp", + "../aams/src/msdp_manager.cpp", "../aams/src/accessibility_short_key.cpp", "../aams/src/accessibility_touchEvent_injector.cpp", "../aams/src/accessibility_window_connection.cpp", @@ -488,6 +504,10 @@ ohos_moduletest("aams_server_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -512,6 +532,7 @@ ohos_moduletest("aams_accessibility_keyevent_filter_test") { "../aams/src/accessibility_setting_observer.cpp", "../aams/src/accessibility_settings.cpp", "../aams/src/accessibility_settings_config.cpp", + "../aams/src/msdp_manager.cpp", "../aams/src/accessibility_short_key.cpp", "../aams/src/accessibility_touchEvent_injector.cpp", "../aams/src/accessibility_window_connection.cpp", @@ -596,6 +617,10 @@ ohos_moduletest("aams_accessibility_keyevent_filter_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################ @@ -620,6 +645,7 @@ ohos_moduletest("aams_common_event_registry_test") { "../aams/src/accessibility_setting_observer.cpp", "../aams/src/accessibility_settings.cpp", "../aams/src/accessibility_settings_config.cpp", + "../aams/src/msdp_manager.cpp", "../aams/src/accessibility_short_key.cpp", "../aams/src/accessibility_touchEvent_injector.cpp", "../aams/src/accessibility_window_connection.cpp", @@ -709,6 +735,10 @@ ohos_moduletest("aams_common_event_registry_test") { "window_manager:libdm", "window_manager:libwm", ] + + if (accessibility_user_status_awareness) { + external_deps += [ "user_status_awareness:user_status_client" ] + } } ################################################################################