diff --git a/interfaces/innerkits/common/include/accessibility_def.h b/interfaces/innerkits/common/include/accessibility_def.h index d707faa5590cbe69c045ea6f726fa06776aabcbc..9b28282ec8108a04e31435fe776ee108e88582d1 100644 --- a/interfaces/innerkits/common/include/accessibility_def.h +++ b/interfaces/innerkits/common/include/accessibility_def.h @@ -63,6 +63,22 @@ enum RetError : int32_t { RET_ERR_ACTION_NOT_SUPPORT, }; +enum TARGET_NAME : int32_t { + HIGH_CONTRAST_TEXT = 0, + INVERT_COLOR, + DALTONIZATION_COLOR_FILTER, + CONTENT_TIMEOUT, + ANIMATION_OFF, + BRIGHTNESS_DISCOUNT, + AUDIO_MONO, + AUDIO_BALANCE, + MOUSE_KEY, + CAPTION_STATE, + CAPTION_STYLE, + SCREEN_MAGNIFICATION, + MOUSE_AUTOCLICK, +}; + enum GlobalAction : uint32_t { GLOBAL_ACTION_BACK = 0, GLOBAL_ACTION_HOME = 1, diff --git a/services/aams/include/accessible_ability_manager_service.h b/services/aams/include/accessible_ability_manager_service.h index a5d27c3fac4a8492e49996dd1477e360b1485bca..fe91b4539ada3455f353dfe6c53f234433e104d9 100644 --- a/services/aams/include/accessible_ability_manager_service.h +++ b/services/aams/include/accessible_ability_manager_service.h @@ -23,6 +23,7 @@ #include #include "accessibility_dumper.h" +#include "accessibility_def.h" #include "accessible_ability_manager_service_stub.h" #include "accessible_ability_manager_service_event_handler.h" #include "accessibility_account_data.h" @@ -50,6 +51,22 @@ enum CallBackID { CONFIG_CALLBACK }; +const std::map AccessibilityConfigTable = { + {"HIGH_CONTRAST_TEXT", HIGH_CONTRAST_TEXT}, + {"INVERT_COLOR", INVERT_COLOR}, + {"DALTONIZATION_COLOR_FILTER", DALTONIZATION_COLOR_FILTER}, + {"CONTENT_TIMEOUT", CONTENT_TIMEOUT}, + {"ANIMATION_OFF", ANIMATION_OFF}, + {"BRIGHTNESS_DISCOUNT", BRIGHTNESS_DISCOUNT}, + {"AUDIO_MONO", AUDIO_MONO}, + {"AUDIO_BALANCE", AUDIO_BALANCE}, + {"MOUSE_KEY", MOUSE_KEY}, + {"CAPTION_STATE", CAPTION_STATE}, + {"CAPTION_STYLE", CAPTION_STYLE}, + {"SCREEN_MAGNIFICATION", SCREEN_MAGNIFICATION}, + {"MOUSE_AUTOCLICK", MOUSE_AUTOCLICK} +}; + class AccessibleAbilityManagerService : public SystemAbility, public AccessibleAbilityManagerServiceStub { DECLARE_SINGLETON(AccessibleAbilityManagerService) DECLEAR_SYSTEM_ABILITY(AccessibleAbilityManagerService) @@ -99,6 +116,7 @@ public: public: /* For inner modules */ + bool SetTargetAbility(const int32_t targetAbilityValue); bool EnableShortKeyTargetAbility(); bool DisableShortKeyTargetAbility(); diff --git a/services/aams/src/accessible_ability_manager_service.cpp b/services/aams/src/accessible_ability_manager_service.cpp index eebb81002322409ddfbe0acb10808e6b97d23dff..054a213b7cb6d4f3684e1855acc73a67bfe49e7a 100644 --- a/services/aams/src/accessible_ability_manager_service.cpp +++ b/services/aams/src/accessible_ability_manager_service.cpp @@ -587,26 +587,15 @@ RetError AccessibleAbilityManagerService::SetCaptionProperty(const Accessibility RetError AccessibleAbilityManagerService::SetCaptionState(const bool state) { - if (!handler_) { - HILOG_ERROR("handler_ is nullptr."); + HILOG_DEBUG(); + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr."); return RET_ERR_NULLPTR; } - - std::promise syncPromise; - std::future syncFuture = syncPromise.get_future(); - handler_->PostTask(std::bind([this, &syncPromise, state]() -> void { - HILOG_INFO("state = [%{public}s]", state ? "True" : "False"); - sptr accountData = GetCurrentAccountData(); - if (!accountData) { - HILOG_ERROR("accountData is nullptr."); - syncPromise.set_value(RET_ERR_NULLPTR); - return; - } - RetError ret = accountData->GetConfig()->SetCaptionState(state); - syncPromise.set_value(ret); - UpdateConfigState(); - }), "TASK_SET_CAPTION_STATE"); - return syncFuture.get(); + RetError ret = accountData->GetConfig()->SetCaptionState(state); + UpdateConfigState(); + return ret; } bool AccessibleAbilityManagerService::GetEnabledState() @@ -747,6 +736,44 @@ RetError AccessibleAbilityManagerService::EnableAbility(const std::string &name, return syncFuture.get(); } +bool AccessibleAbilityManagerService::SetTargetAbility(const int32_t targetAbilityValue) +{ + HILOG_DEBUG(); + + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr"); + return false; + } + + bool state; + switch (targetAbilityValue) { + case HIGH_CONTRAST_TEXT: + state = accountData->GetConfig()->GetHighContrastTextState(); + return SetHighContrastTextState(!state) == RET_OK; + case INVERT_COLOR: + state = accountData->GetConfig()->GetInvertColorState(); + return SetInvertColorState(!state) == RET_OK; + case ANIMATION_OFF: + state = accountData->GetConfig()->GetAnimationOffState(); + return SetAnimationOffState(!state) == RET_OK; + case SCREEN_MAGNIFICATION: + state = accountData->GetConfig()->GetScreenMagnificationState(); + return SetScreenMagnificationState(!state) == RET_OK; + case AUDIO_MONO: + state = accountData->GetConfig()->GetAudioMonoState(); + return SetAudioMonoState(!state) == RET_OK; + case MOUSE_KEY: + state = accountData->GetConfig()->GetMouseKeyState(); + return SetMouseKeyState(!state) == RET_OK; + case CAPTION_STATE: + state = accountData->GetConfig()->GetCaptionState(); + return SetCaptionState(!state) == RET_OK; + default: + return false; + } +} + RetError AccessibleAbilityManagerService::InnerEnableAbility(const std::string &name, const uint32_t capabilities) { HILOG_DEBUG(); @@ -755,7 +782,13 @@ RetError AccessibleAbilityManagerService::InnerEnableAbility(const std::string & HILOG_ERROR("accountData is nullptr"); return RET_ERR_NULLPTR; } - return accountData->EnableAbility(name, capabilities); + RetError enableState = accountData->EnableAbility(name, capabilities); + if (enableState == RET_ERR_CONNECTION_EXIST) { + HILOG_DEBUG(); + return InnerDisableAbility(name); + } + + return enableState; } RetError AccessibleAbilityManagerService::GetEnabledAbilities(std::vector &enabledAbilities) @@ -1288,26 +1321,16 @@ void AccessibleAbilityManagerService::UpdateInputFilter() RetError AccessibleAbilityManagerService::SetScreenMagnificationState(const bool state) { HILOG_INFO("state = [%{public}s]", state ? "True" : "False"); - if (!handler_) { - HILOG_ERROR("handler_ is nullptr."); + + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr."); return RET_ERR_NULLPTR; } - - std::promise syncPromise; - std::future syncFuture = syncPromise.get_future(); - handler_->PostTask(std::bind([this, &syncPromise, state]() -> void { - sptr accountData = GetCurrentAccountData(); - if (!accountData) { - HILOG_ERROR("accountData is nullptr."); - syncPromise.set_value(RET_ERR_NULLPTR); - return; - } - RetError ret = accountData->GetConfig()->SetScreenMagnificationState(state); - syncPromise.set_value(ret); - UpdateConfigState(); - UpdateInputFilter(); - }), "TASK_SET_SCREENMAGNIFICATION_STATE"); - return syncFuture.get(); + RetError ret = accountData->GetConfig()->SetScreenMagnificationState(state); + UpdateConfigState(); + UpdateInputFilter(); + return ret; } RetError AccessibleAbilityManagerService::SetShortKeyState(const bool state) @@ -1331,11 +1354,6 @@ RetError AccessibleAbilityManagerService::SetShortKeyState(const bool state) syncPromise.set_value(ret); UpdateConfigState(); UpdateInputFilter(); - - // Disable shortkey ability - if (!state) { - DisableShortKeyTargetAbility(); - } }), "TASK_SET_SHORTKEY_STATE"); return syncFuture.get(); } @@ -1343,26 +1361,16 @@ RetError AccessibleAbilityManagerService::SetShortKeyState(const bool state) RetError AccessibleAbilityManagerService::SetMouseKeyState(const bool state) { HILOG_INFO("state = [%{public}s]", state ? "True" : "False"); - if (!handler_) { - HILOG_ERROR("handler_ is nullptr."); + + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr."); return RET_ERR_NULLPTR; } - - std::promise syncPromise; - std::future syncFuture = syncPromise.get_future(); - handler_->PostTask(std::bind([this, &syncPromise, state]() -> void { - sptr accountData = GetCurrentAccountData(); - if (!accountData) { - HILOG_ERROR("accountData is nullptr."); - syncPromise.set_value(RET_ERR_NULLPTR); - return; - } - RetError ret = accountData->GetConfig()->SetMouseKeyState(state); - syncPromise.set_value(ret); - UpdateConfigState(); - UpdateInputFilter(); - }), "TASK_SET_MOUSEKEY_STATE"); - return syncFuture.get(); + RetError ret = accountData->GetConfig()->SetMouseKeyState(state); + UpdateConfigState(); + UpdateInputFilter(); + return ret; } RetError AccessibleAbilityManagerService::SetMouseAutoClick(const int32_t time) @@ -1416,73 +1424,42 @@ RetError AccessibleAbilityManagerService::SetShortkeyTarget(const std::string &n RetError AccessibleAbilityManagerService::SetHighContrastTextState(const bool state) { HILOG_INFO("state = [%{public}s]", state ? "True" : "False"); - if (!handler_) { - HILOG_ERROR("handler_ is nullptr."); + + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr."); return RET_ERR_NULLPTR; } - - std::promise syncPromise; - std::future syncFuture = syncPromise.get_future(); - handler_->PostTask(std::bind([this, &syncPromise, state]() -> void { - sptr accountData = GetCurrentAccountData(); - if (!accountData) { - HILOG_ERROR("accountData is nullptr."); - syncPromise.set_value(RET_ERR_NULLPTR); - return; - } - RetError ret = accountData->GetConfig()->SetHighContrastTextState(state); - syncPromise.set_value(ret); - UpdateConfigState(); - }), "TASK_SET_HIGHCONTRASTTEXT_STATE"); - return syncFuture.get(); + RetError ret = accountData->GetConfig()->SetHighContrastTextState(state); + UpdateConfigState(); + return ret; } RetError AccessibleAbilityManagerService::SetInvertColorState(const bool state) { HILOG_INFO("state = [%{public}s]", state ? "True" : "False"); - if (!handler_) { - HILOG_ERROR("handler_ is nullptr."); + + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr."); return RET_ERR_NULLPTR; } - - std::promise syncPromise; - std::future syncFuture = syncPromise.get_future(); - handler_->PostTask(std::bind([this, &syncPromise, state]() -> void { - sptr accountData = GetCurrentAccountData(); - if (!accountData) { - HILOG_ERROR("accountData is nullptr."); - syncPromise.set_value(RET_ERR_NULLPTR); - return; - } - RetError ret = accountData->GetConfig()->SetInvertColorState(state); - syncPromise.set_value(ret); - UpdateConfigState(); - }), "TASK_SET_INVERTCOLOR_STATE"); - return syncFuture.get(); + RetError ret = accountData->GetConfig()->SetInvertColorState(state); + UpdateConfigState(); + return ret; } RetError AccessibleAbilityManagerService::SetAnimationOffState(const bool state) { HILOG_INFO("state = [%{public}s]", state ? "True" : "False"); - if (!handler_) { - HILOG_ERROR("handler_ is nullptr."); + + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr."); return RET_ERR_NULLPTR; } - - std::promise syncPromise; - std::future syncFuture = syncPromise.get_future(); - handler_->PostTask(std::bind([this, &syncPromise, state]() -> void { - sptr accountData = GetCurrentAccountData(); - if (!accountData) { - HILOG_ERROR("accountData is nullptr."); - syncPromise.set_value(RET_ERR_NULLPTR); - return; - } - RetError ret = accountData->GetConfig()->SetAnimationOffState(state); - syncPromise.set_value(ret); - UpdateConfigState(); - }), "TASK_SET_ANIMATIONOFF_STATE"); - RetError ret = syncFuture.get(); + RetError ret = accountData->GetConfig()->SetAnimationOffState(state); + UpdateConfigState(); int setGraphicParamRes = -1; int setArkuiParamRes = -1; if (state) { @@ -1499,25 +1476,15 @@ RetError AccessibleAbilityManagerService::SetAnimationOffState(const bool state) RetError AccessibleAbilityManagerService::SetAudioMonoState(const bool state) { HILOG_INFO("state = [%{public}s]", state ? "True" : "False"); - if (!handler_) { - HILOG_ERROR("handler_ is nullptr."); + + sptr accountData = GetCurrentAccountData(); + if (!accountData) { + HILOG_ERROR("accountData is nullptr."); return RET_ERR_NULLPTR; } - - std::promise syncPromise; - std::future syncFuture = syncPromise.get_future(); - handler_->PostTask(std::bind([this, &syncPromise, state]() -> void { - sptr accountData = GetCurrentAccountData(); - if (!accountData) { - HILOG_ERROR("accountData is nullptr."); - syncPromise.set_value(RET_ERR_NULLPTR); - return; - } - RetError ret = accountData->GetConfig()->SetAudioMonoState(state); - syncPromise.set_value(ret); - UpdateConfigState(); - }), "TASK_SET_AUDIOMONO_STATE"); - return syncFuture.get(); + RetError ret = accountData->GetConfig()->SetAudioMonoState(state); + UpdateConfigState(); + return ret; } RetError AccessibleAbilityManagerService::SetDaltonizationColorFilter(const uint32_t filter) @@ -1942,6 +1909,12 @@ bool AccessibleAbilityManagerService::EnableShortKeyTargetAbility() HILOG_ERROR("target ability is null"); return false; } + + auto it = AccessibilityConfigTable.find(targetAbility); + if (it != AccessibilityConfigTable.end()) { + return SetTargetAbility(it->second) == RET_OK; + } + uint32_t capabilities = CAPABILITY_GESTURE | CAPABILITY_KEY_EVENT_OBSERVER | CAPABILITY_RETRIEVE | CAPABILITY_TOUCH_GUIDE | CAPABILITY_ZOOM; return InnerEnableAbility(targetAbility, capabilities) == RET_OK;