1 /* 2 * Copyright (C) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef ACCESSIBILITY_CONFIG_IMPL_H 17 #define ACCESSIBILITY_CONFIG_IMPL_H 18 19 #include <mutex> 20 #include "accessibility_config.h" 21 #include "accessibility_enable_ability_lists_observer_stub.h" 22 #include "accessible_ability_manager_caption_observer_stub.h" 23 #include "accessible_ability_manager_config_observer_stub.h" 24 #include "accessible_ability_manager_service_proxy.h" 25 #include "event_handler.h" 26 27 namespace OHOS { 28 namespace AccessibilityConfig { 29 class AccessibilityConfig::Impl { 30 public: 31 Impl(); 32 ~Impl() = default; 33 34 bool InitializeContext(); 35 36 Accessibility::RetError SubscribeConfigObserver(const CONFIG_ID id, 37 const std::shared_ptr<AccessibilityConfigObserver> &observer, const bool retFlag); 38 Accessibility::RetError UnsubscribeConfigObserver(const CONFIG_ID id, 39 const std::shared_ptr<AccessibilityConfigObserver> &observer); 40 41 Accessibility::RetError SubscribeEnableAbilityListsObserver( 42 const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer); 43 Accessibility::RetError UnsubscribeEnableAbilityListsObserver( 44 const std::shared_ptr<AccessibilityEnableAbilityListsObserver> &observer); 45 46 Accessibility::RetError EnableAbility(const std::string &name, const uint32_t capabilities); 47 Accessibility::RetError DisableAbility(const std::string &name); 48 49 Accessibility::RetError SetScreenMagnificationState(const bool state); 50 Accessibility::RetError SetShortKeyState(const bool state); 51 Accessibility::RetError SetMouseKeyState(const bool state); 52 Accessibility::RetError SetCaptionsState(const bool state); 53 Accessibility::RetError SetCaptionsProperty(const CaptionProperty &caption); 54 Accessibility::RetError SetMouseAutoClick(const int32_t time); 55 Accessibility::RetError SetShortkeyTarget(const std::string &name); 56 Accessibility::RetError SetShortkeyMultiTarget(const std::vector<std::string> &name); 57 Accessibility::RetError SetHighContrastTextState(bool state); 58 Accessibility::RetError SetInvertColorState(const bool state); 59 Accessibility::RetError SetDaltonizationState(bool state); 60 Accessibility::RetError SetDaltonizationColorFilter(const DALTONIZATION_TYPE type); 61 Accessibility::RetError SetContentTimeout(const uint32_t timer); 62 Accessibility::RetError SetAnimationOffState(const bool state); 63 Accessibility::RetError SetBrightnessDiscount(const float brightness); 64 Accessibility::RetError SetAudioMonoState(const bool state); 65 Accessibility::RetError SetAudioBalance(const float balance); 66 Accessibility::RetError SetClickResponseTime(const CLICK_RESPONSE_TIME time); 67 Accessibility::RetError SetIgnoreRepeatClickState(const bool state); 68 Accessibility::RetError SetIgnoreRepeatClickTime(const IGNORE_REPEAT_CLICK_TIME time); 69 70 Accessibility::RetError GetScreenMagnificationState(bool &state); 71 Accessibility::RetError GetShortKeyState(bool &state); 72 Accessibility::RetError GetMouseKeyState(bool &state); 73 Accessibility::RetError GetCaptionsState(bool &state); 74 Accessibility::RetError GetCaptionsProperty(CaptionProperty &caption); 75 Accessibility::RetError GetMouseAutoClick(int32_t &time); 76 Accessibility::RetError GetShortkeyTarget(std::string &name); 77 Accessibility::RetError GetShortkeyMultiTarget(std::vector<std::string> &name); 78 Accessibility::RetError GetInvertColorState(bool &state); 79 Accessibility::RetError GetHighContrastTextState(bool &state); 80 Accessibility::RetError GetDaltonizationState(bool &state); 81 Accessibility::RetError GetDaltonizationColorFilter(DALTONIZATION_TYPE &type); 82 Accessibility::RetError GetContentTimeout(uint32_t &timer); 83 Accessibility::RetError GetAnimationOffState(bool &state); 84 Accessibility::RetError GetBrightnessDiscount(float &brightness); 85 Accessibility::RetError GetAudioMonoState(bool &state); 86 Accessibility::RetError GetAudioBalance(float &balance); 87 Accessibility::RetError GetClickResponseTime(CLICK_RESPONSE_TIME &time); 88 Accessibility::RetError GetIgnoreRepeatClickState(bool &state); 89 Accessibility::RetError GetIgnoreRepeatClickTime(IGNORE_REPEAT_CLICK_TIME &time); 90 91 void ResetService(const wptr<IRemoteObject> &remote); 92 void OnAccessibleAbilityManagerCaptionPropertyChanged(const CaptionProperty &property); 93 void OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType); 94 void OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance); 95 void OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount); 96 void OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout); 97 void OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType); 98 void OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick); 99 void OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string &shortkeyTarget); 100 void OnAccessibleAbilityManagerShortkeyMultiTargetChanged(const std::vector<std::string> &shortkeyMultiTarget); 101 void OnAccessibleAbilityManagerClickResponseTimeChanged(const uint32_t clickResponseTime); 102 void OnAccessibleAbilityManagerIgnoreRepeatClickTimeChanged(const uint32_t ignoreRepeatClickTime); 103 void OnAccessibilityEnableAbilityListsChanged(); 104 105 private: 106 class AccessibilityEnableAbilityListsObserverImpl : 107 public Accessibility::AccessibilityEnableAbilityListsObserverStub { 108 public: AccessibilityEnableAbilityListsObserverImpl(Impl & client)109 explicit AccessibilityEnableAbilityListsObserverImpl(Impl &client) 110 : client_(client) {} 111 ~AccessibilityEnableAbilityListsObserverImpl() = default; 112 OnAccessibilityEnableAbilityListsChanged()113 virtual void OnAccessibilityEnableAbilityListsChanged() override 114 { 115 client_.OnAccessibilityEnableAbilityListsChanged(); 116 } 117 private: 118 Impl &client_; 119 }; 120 121 class AccessibleAbilityManagerCaptionObserverImpl 122 : public Accessibility::AccessibleAbilityManagerCaptionObserverStub { 123 public: AccessibleAbilityManagerCaptionObserverImpl(Impl & config_)124 explicit AccessibleAbilityManagerCaptionObserverImpl(Impl &config_) 125 : config_(config_) {} 126 ~AccessibleAbilityManagerCaptionObserverImpl() = default; 127 OnPropertyChanged(const CaptionProperty & property)128 virtual void OnPropertyChanged(const CaptionProperty &property) override 129 { 130 config_.OnAccessibleAbilityManagerCaptionPropertyChanged(property); 131 } 132 private: 133 Impl &config_; 134 }; 135 136 class AccessibleAbilityManagerConfigObserverImpl 137 : public Accessibility::AccessibleAbilityManagerConfigObserverStub { 138 public: AccessibleAbilityManagerConfigObserverImpl(Impl & config)139 explicit AccessibleAbilityManagerConfigObserverImpl(Impl &config) : config_(config) {} 140 ~AccessibleAbilityManagerConfigObserverImpl() = default; 141 OnConfigStateChanged(const uint32_t stateType)142 virtual void OnConfigStateChanged(const uint32_t stateType) override 143 { 144 config_.OnAccessibleAbilityManagerConfigStateChanged(stateType); 145 } OnAudioBalanceChanged(const float audioBalance)146 virtual void OnAudioBalanceChanged(const float audioBalance) override 147 { 148 config_.OnAccessibleAbilityManagerAudioBalanceChanged(audioBalance); 149 } OnBrightnessDiscountChanged(const float brightnessDiscount)150 virtual void OnBrightnessDiscountChanged(const float brightnessDiscount) override 151 { 152 config_.OnAccessibleAbilityManagerBrightnessDiscountChanged(brightnessDiscount); 153 } OnContentTimeoutChanged(const uint32_t contentTimeout)154 virtual void OnContentTimeoutChanged(const uint32_t contentTimeout) override 155 { 156 config_.OnAccessibleAbilityManagerContentTimeoutChanged(contentTimeout); 157 } OnDaltonizationColorFilterChanged(const uint32_t filterType)158 virtual void OnDaltonizationColorFilterChanged(const uint32_t filterType) override 159 { 160 config_.OnAccessibleAbilityManagerDaltonizationColorFilterChanged(filterType); 161 } OnMouseAutoClickChanged(const int32_t mouseAutoClick)162 virtual void OnMouseAutoClickChanged(const int32_t mouseAutoClick) override 163 { 164 config_.OnAccessibleAbilityManagerMouseAutoClickChanged(mouseAutoClick); 165 } OnShortkeyTargetChanged(const std::string & shortkeyTarget)166 virtual void OnShortkeyTargetChanged(const std::string &shortkeyTarget) override 167 { 168 config_.OnAccessibleAbilityManagerShortkeyTargetChanged(shortkeyTarget); 169 } OnShortkeyMultiTargetChanged(const std::vector<std::string> & shortkeyMultiTarget)170 virtual void OnShortkeyMultiTargetChanged(const std::vector<std::string> &shortkeyMultiTarget) override 171 { 172 config_.OnAccessibleAbilityManagerShortkeyMultiTargetChanged(shortkeyMultiTarget); 173 } OnClickResponseTimeChanged(const uint32_t clickResponseTime)174 virtual void OnClickResponseTimeChanged(const uint32_t clickResponseTime) override 175 { 176 config_.OnAccessibleAbilityManagerClickResponseTimeChanged(clickResponseTime); 177 } OnIgnoreRepeatClickTimeChanged(const uint32_t ignoreRepeatClickTime)178 virtual void OnIgnoreRepeatClickTimeChanged(const uint32_t ignoreRepeatClickTime) override 179 { 180 config_.OnAccessibleAbilityManagerIgnoreRepeatClickTimeChanged(ignoreRepeatClickTime); 181 } 182 183 private: 184 Impl &config_; 185 }; 186 187 class DeathRecipient : public IRemoteObject::DeathRecipient { 188 public: DeathRecipient(Impl & config_)189 explicit DeathRecipient(Impl &config_) : config_(config_) {} 190 ~DeathRecipient() = default; 191 DISALLOW_COPY_AND_MOVE(DeathRecipient); 192 OnRemoteDied(const wptr<IRemoteObject> & remote)193 void OnRemoteDied(const wptr<IRemoteObject> &remote) 194 { 195 config_.ResetService(remote); 196 } 197 private: 198 Impl &config_; 199 }; 200 201 bool ConnectToService(); 202 bool ConnectToServiceAsync(); 203 204 bool RegisterToService(); 205 bool InitAccessibilityServiceProxy(); 206 207 void NotifyCaptionStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 208 const bool state); 209 void NotifyCaptionChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 210 const CaptionProperty &captionProperty); 211 void NotifyScreenMagnificationChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 212 const bool state); 213 void NotifyShortKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 214 const bool state); 215 void NotifyMouseKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 216 const bool state); 217 void NotifyShortkeyTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 218 const std::string &shortkey_target); 219 void NotifyShortkeyMultiTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 220 const std::vector<std::string> &shortkeyMultiTarget); 221 void NotifyMouseAutoClickChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 222 const uint32_t mouseAutoClick); 223 void NotifyAudioBalanceChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 224 const float audioBalance); 225 void NotifyBrightnessDiscountChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 226 const float brightnessDiscount); 227 void NotifyContentTimeoutChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 228 const uint32_t contentTimeout); 229 void NotifyDaltonizationColorFilterChanged( 230 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 231 const uint32_t daltonizationColorFilter); 232 void NotifyAudioMonoChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 233 const bool state); 234 void NotifyAnimationOffChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 235 const bool state); 236 void NotifyInvertColorChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 237 const bool state); 238 void NotifyHighContrastTextChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 239 const bool state); 240 void NotifyDaltonizationStateChanged( 241 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 242 const bool state); 243 void NotifyClickResponseTimeChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 244 const uint32_t clickResponseTime); 245 void NotifyIgnoreRepeatClickTimeChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 246 const uint32_t time); 247 void NotifyIgnoreRepeatClickStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 248 const bool state); 249 250 void UpdateScreenMagnificationEnabled(const bool enabled); 251 void UpdateShortKeyEnabled(const bool enabled); 252 void UpdateMouseKeyEnabled(const bool enabled); 253 void UpdateCaptionEnabled(const bool enabled); 254 void UpdateAudioMonoEnabled(const bool enabled); 255 void UpdateAnimationOffEnabled(const bool enabled); 256 void UpdateInvertColorEnabled(const bool enabled); 257 void UpdateHighContrastTextEnabled(const bool enabled); 258 void UpdateDaltonizationStateEnabled(const bool enabled); 259 void UpdateIgnoreRepeatClickStateEnabled(const bool enabled); 260 void NotifyDefaultConfigs(); 261 void NotifyDefaultDaltonizationConfigs(); 262 void NotifyDefaultScreenTouchConfigs(); 263 void NotifyDefaultShortKeyConfigs(); 264 void NotifyDefaultShortKeyMultiConfigs(); 265 void NotifyImmediately(const CONFIG_ID id, const std::shared_ptr<AccessibilityConfigObserver> &observer); 266 void InitConfigValues(); 267 static void OnParameterChanged(const char *key, const char *value, void *context); 268 269 void OnIgnoreRepeatClickStateChanged(const uint32_t stateType); 270 271 sptr<Accessibility::IAccessibleAbilityManagerService> serviceProxy_ = nullptr; 272 sptr<AccessibleAbilityManagerCaptionObserverImpl> captionObserver_ = nullptr; 273 sptr<AccessibleAbilityManagerConfigObserverImpl> configObserver_ = nullptr; 274 sptr<AccessibilityEnableAbilityListsObserverImpl> enableAbilityListsObserver_ = nullptr; 275 276 bool isInitialized_ = false; 277 bool shortkey_ = false; 278 bool highContrastText_ = false; 279 bool screenMagnifier_ = false; 280 bool invertColor_ = false; 281 bool captionState_ = false; 282 bool animationOff_ = false; 283 bool audioMono_ = false; 284 bool mouseKey_ = false; 285 bool daltonizationState_ = false; 286 int32_t mouseAutoClick_ = 0; 287 uint32_t contentTimeout_ = 0; 288 uint32_t daltonizationColorFilter_ = 0; 289 float audioBalance_ = 0.0; 290 float brightnessDiscount_ = 0.0; 291 std::string shortkeyTarget_ = ""; 292 uint32_t clickResponseTime_ = 0; 293 uint32_t ignoreRepeatClickTime_ = 0; 294 bool ignoreRepeatClickState_ = false; 295 CaptionProperty captionProperty_ = {}; 296 297 sptr<IRemoteObject::DeathRecipient> deathRecipient_ = nullptr; 298 299 std::vector<std::string> shortkeyMultiTarget_ {}; 300 std::vector<std::shared_ptr<AccessibilityEnableAbilityListsObserver>> enableAbilityListsObservers_; 301 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>> configObservers_; 302 std::mutex mutex_; 303 304 std::shared_ptr<AppExecFwk::EventRunner> runner_; 305 std::shared_ptr<AppExecFwk::EventHandler> handler_; 306 }; 307 } // namespace AccessibilityConfig 308 } // namespace OHOS 309 #endif // ACCESSIBILITY_CONFIG_IMPL_H 310