mirror of
https://github.com/openharmony/accessibility.git
synced 2026-08-24 12:34:00 -04:00
!1841 voice recognition
Merge pull request !1841 from qianchuang/master_0515
This commit is contained in:
@@ -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" ]
|
||||
}
|
||||
|
||||
+2
-1
@@ -65,7 +65,8 @@
|
||||
"e2fsprogs",
|
||||
"resource_schedule_service",
|
||||
"cJSON",
|
||||
"selinux_adapter"
|
||||
"selinux_adapter",
|
||||
"user_status_awareness"
|
||||
],
|
||||
"third_party": []
|
||||
},
|
||||
|
||||
@@ -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" ]
|
||||
}
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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<TREE_ID_MAX> treeIdPool_;
|
||||
int32_t preTreeId_ = -1;
|
||||
ffrt::mutex treeIdPoolMutex_;
|
||||
|
||||
bool isSubscribeMSDPCallback_ = false;
|
||||
ffrt::mutex subscribeMSDPMutex_;
|
||||
};
|
||||
} // namespace Accessibility
|
||||
} // namespace OHOS
|
||||
|
||||
@@ -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 <condition_variable>
|
||||
#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 <IRemoteObject> &remoteObject,
|
||||
int32_t resultCode) override;
|
||||
|
||||
void OnAbilityDisconnectDone(const AppExecFwk::ElementName &element, int resultCode) override;
|
||||
|
||||
sptr<IRemoteObject> GetRemoteObject();
|
||||
|
||||
private:
|
||||
sptr <IRemoteObject> 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<IRemoteObject> GetRemoteObject();
|
||||
|
||||
std::string CreateJsonMessage(int32_t soundType);
|
||||
|
||||
void SendRequestToSetting(const sptr<IRemoteObject> &remoteObject, const std::string &message);
|
||||
|
||||
sptr <ExtensionAbilityConnection> connection_;
|
||||
};
|
||||
} // namespace Accessibility
|
||||
} // namespace OHOS
|
||||
#endif // EXTENSION_ABILITY_CONNECTION_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 <cstdint>
|
||||
|
||||
namespace OHOS {
|
||||
namespace Accessibility {
|
||||
class MsdpManager {
|
||||
public:
|
||||
static int32_t SubscribeVoiceRecognition();
|
||||
static void UnSubscribeVoiceRecognition();
|
||||
};
|
||||
} // namespace Accessibility
|
||||
} // namespace OHOS
|
||||
#endif // MSDP_MANAGER_H
|
||||
@@ -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<AccessibilitySettings>();
|
||||
accessibilityShortKey_ = std::make_shared<AccessibilityShortKey>();
|
||||
@@ -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<ffrt::mutex> lock(subscribeMSDPMutex_);
|
||||
if (isSubscribeMSDPCallback_) {
|
||||
MsdpManager::UnSubscribeVoiceRecognition();
|
||||
HILOG_INFO("userstatusClient.Unsubscribe");
|
||||
}
|
||||
}
|
||||
OnVoiceRecognitionChanged();
|
||||
}
|
||||
|
||||
void AccessibleAbilityManagerService::OnVoiceRecognitionChanged()
|
||||
{
|
||||
HILOG_INFO();
|
||||
sptr<AccessibilityAccountData> accountData = GetCurrentAccountData();
|
||||
if (accountData == nullptr) {
|
||||
HILOG_ERROR("accountData is nullptr");
|
||||
return;
|
||||
}
|
||||
|
||||
std::shared_ptr<AccessibilitySettingsConfig> 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<ffrt::mutex> 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<AccessibilityAccountData> accountData = GetCurrentAccountData();
|
||||
if (accountData == nullptr) {
|
||||
HILOG_ERROR("accountData is nullptr");
|
||||
return;
|
||||
}
|
||||
|
||||
AccessibilitySettingObserver::UpdateFunc func = [ = ](const std::string &state) {
|
||||
Singleton<AccessibleAbilityManagerService>::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");
|
||||
|
||||
@@ -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 <string>
|
||||
#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<IRemoteObject> &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<std::mutex> 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<std::mutex> lock(mutex_);
|
||||
remoteObject_ = nullptr;
|
||||
}
|
||||
|
||||
sptr<IRemoteObject> ExtensionAbilityConnection::GetRemoteObject()
|
||||
{
|
||||
std::unique_lock<std::mutex> 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<ExtensionAbilityConnection> (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<IRemoteObject> 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<IRemoteObject> 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<IRemoteObject> &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
|
||||
@@ -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<void(int32_t, std::shared_ptr<Msdp::UserStatusAwareness::UserStatusData>)> func = [ = ](
|
||||
int32_t callbackId, std::shared_ptr<Msdp::UserStatusAwareness::UserStatusData> 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
|
||||
@@ -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" ]
|
||||
}
|
||||
}
|
||||
|
||||
################################################################################
|
||||
|
||||
@@ -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" ]
|
||||
}
|
||||
}
|
||||
|
||||
################################################################################
|
||||
|
||||
Reference in New Issue
Block a user