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 SetHighContrastTextState(bool state); 57 Accessibility::RetError SetInvertColorState(const bool state); 58 Accessibility::RetError SetDaltonizationColorFilter(const DALTONIZATION_TYPE type); 59 Accessibility::RetError SetContentTimeout(const uint32_t timer); 60 Accessibility::RetError SetAnimationOffState(const bool state); 61 Accessibility::RetError SetBrightnessDiscount(const float brightness); 62 Accessibility::RetError SetAudioMonoState(const bool state); 63 Accessibility::RetError SetAudioBalance(const float balance); 64 65 Accessibility::RetError GetScreenMagnificationState(bool &state); 66 Accessibility::RetError GetShortKeyState(bool &state); 67 Accessibility::RetError GetMouseKeyState(bool &state); 68 Accessibility::RetError GetCaptionsState(bool &state); 69 Accessibility::RetError GetCaptionsProperty(CaptionProperty &caption); 70 Accessibility::RetError GetMouseAutoClick(int32_t &time); 71 Accessibility::RetError GetShortkeyTarget(std::string &name); 72 Accessibility::RetError GetInvertColorState(bool &state); 73 Accessibility::RetError GetHighContrastTextState(bool &state); 74 Accessibility::RetError GetDaltonizationColorFilter(DALTONIZATION_TYPE &type); 75 Accessibility::RetError GetContentTimeout(uint32_t &timer); 76 Accessibility::RetError GetAnimationOffState(bool &state); 77 Accessibility::RetError GetBrightnessDiscount(float &brightness); 78 Accessibility::RetError GetAudioMonoState(bool &state); 79 Accessibility::RetError GetAudioBalance(float &balance); 80 81 void ResetService(const wptr<IRemoteObject> &remote); 82 void OnAccessibleAbilityManagerCaptionPropertyChanged(const CaptionProperty &property); 83 void OnAccessibleAbilityManagerConfigStateChanged(const uint32_t stateType); 84 void OnAccessibleAbilityManagerAudioBalanceChanged(const float audioBalance); 85 void OnAccessibleAbilityManagerBrightnessDiscountChanged(const float brightnessDiscount); 86 void OnAccessibleAbilityManagerContentTimeoutChanged(const uint32_t contentTimeout); 87 void OnAccessibleAbilityManagerDaltonizationColorFilterChanged(const uint32_t filterType); 88 void OnAccessibleAbilityManagerMouseAutoClickChanged(const int32_t mouseAutoClick); 89 void OnAccessibleAbilityManagerShortkeyTargetChanged(const std::string &shortkeyTarget); 90 void OnAccessibilityEnableAbilityListsChanged(); 91 92 private: 93 class AccessibilityEnableAbilityListsObserverImpl : 94 public Accessibility::AccessibilityEnableAbilityListsObserverStub { 95 public: AccessibilityEnableAbilityListsObserverImpl(Impl & client)96 explicit AccessibilityEnableAbilityListsObserverImpl(Impl &client) 97 : client_(client) {} 98 ~AccessibilityEnableAbilityListsObserverImpl() = default; 99 OnAccessibilityEnableAbilityListsChanged()100 virtual void OnAccessibilityEnableAbilityListsChanged() override 101 { 102 client_.OnAccessibilityEnableAbilityListsChanged(); 103 } 104 private: 105 Impl &client_; 106 }; 107 108 class AccessibleAbilityManagerCaptionObserverImpl 109 : public Accessibility::AccessibleAbilityManagerCaptionObserverStub { 110 public: AccessibleAbilityManagerCaptionObserverImpl(Impl & config_)111 explicit AccessibleAbilityManagerCaptionObserverImpl(Impl &config_) 112 : config_(config_) {} 113 ~AccessibleAbilityManagerCaptionObserverImpl() = default; 114 OnPropertyChanged(const CaptionProperty & property)115 virtual void OnPropertyChanged(const CaptionProperty &property) override 116 { 117 config_.OnAccessibleAbilityManagerCaptionPropertyChanged(property); 118 } 119 private: 120 Impl &config_; 121 }; 122 123 class AccessibleAbilityManagerConfigObserverImpl 124 : public Accessibility::AccessibleAbilityManagerConfigObserverStub { 125 public: AccessibleAbilityManagerConfigObserverImpl(Impl & config)126 explicit AccessibleAbilityManagerConfigObserverImpl(Impl &config) : config_(config) {} 127 ~AccessibleAbilityManagerConfigObserverImpl() = default; 128 OnConfigStateChanged(const uint32_t stateType)129 virtual void OnConfigStateChanged(const uint32_t stateType) override 130 { 131 config_.OnAccessibleAbilityManagerConfigStateChanged(stateType); 132 } OnAudioBalanceChanged(const float audioBalance)133 virtual void OnAudioBalanceChanged(const float audioBalance) override 134 { 135 config_.OnAccessibleAbilityManagerAudioBalanceChanged(audioBalance); 136 } OnBrightnessDiscountChanged(const float brightnessDiscount)137 virtual void OnBrightnessDiscountChanged(const float brightnessDiscount) override 138 { 139 config_.OnAccessibleAbilityManagerBrightnessDiscountChanged(brightnessDiscount); 140 } OnContentTimeoutChanged(const uint32_t contentTimeout)141 virtual void OnContentTimeoutChanged(const uint32_t contentTimeout) override 142 { 143 config_.OnAccessibleAbilityManagerContentTimeoutChanged(contentTimeout); 144 } OnDaltonizationColorFilterChanged(const uint32_t filterType)145 virtual void OnDaltonizationColorFilterChanged(const uint32_t filterType) override 146 { 147 config_.OnAccessibleAbilityManagerDaltonizationColorFilterChanged(filterType); 148 } OnMouseAutoClickChanged(const int32_t mouseAutoClick)149 virtual void OnMouseAutoClickChanged(const int32_t mouseAutoClick) override 150 { 151 config_.OnAccessibleAbilityManagerMouseAutoClickChanged(mouseAutoClick); 152 } OnShortkeyTargetChanged(const std::string & shortkeyTarget)153 virtual void OnShortkeyTargetChanged(const std::string &shortkeyTarget) override 154 { 155 config_.OnAccessibleAbilityManagerShortkeyTargetChanged(shortkeyTarget); 156 } 157 158 private: 159 Impl &config_; 160 }; 161 162 class DeathRecipient : public IRemoteObject::DeathRecipient { 163 public: DeathRecipient(Impl & config_)164 explicit DeathRecipient(Impl &config_) : config_(config_) {} 165 ~DeathRecipient() = default; 166 DISALLOW_COPY_AND_MOVE(DeathRecipient); 167 OnRemoteDied(const wptr<IRemoteObject> & remote)168 void OnRemoteDied(const wptr<IRemoteObject> &remote) 169 { 170 config_.ResetService(remote); 171 } 172 private: 173 Impl &config_; 174 }; 175 176 bool ConnectToService(); 177 bool ConnectToServiceAsync(); 178 179 bool RegisterToService(); 180 bool InitAccessibilityServiceProxy(); 181 182 void NotifyCaptionStateChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 183 const bool state); 184 void NotifyCaptionChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 185 const CaptionProperty &captionProperty); 186 void NotifyScreenMagnificationChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 187 const bool state); 188 void NotifyShortKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 189 const bool state); 190 void NotifyMouseKeyChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 191 const bool state); 192 void NotifyShortkeyTargetChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 193 const std::string &shortkey_target); 194 void NotifyMouseAutoClickChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 195 const uint32_t mouseAutoClick); 196 void NotifyAudioBalanceChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 197 const float audioBalance); 198 void NotifyBrightnessDiscountChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 199 const float brightnessDiscount); 200 void NotifyContentTimeoutChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 201 const uint32_t contentTimeout); 202 void NotifyDaltonizationColorFilterChanged( 203 const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 204 const uint32_t daltonizationColorFilter); 205 void NotifyAudioMonoChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 206 const bool state); 207 void NotifyAnimationOffChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 208 const bool state); 209 void NotifyInvertColorChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 210 const bool state); 211 void NotifyHighContrastTextChanged(const std::vector<std::shared_ptr<AccessibilityConfigObserver>> &observers, 212 const bool state); 213 214 void UpdateScreenMagnificationEnabled(const bool enabled); 215 void UpdateShortKeyEnabled(const bool enabled); 216 void UpdateMouseKeyEnabled(const bool enabled); 217 void UpdateCaptionEnabled(const bool enabled); 218 void UpdateAudioMonoEnabled(const bool enabled); 219 void UpdateAnimationOffEnabled(const bool enabled); 220 void UpdateInvertColorEnabled(const bool enabled); 221 void UpdateHighContrastTextEnabled(const bool enabled); 222 void NotifyDefaultConfigs(); 223 void NotifyImmediately(const CONFIG_ID id, const std::shared_ptr<AccessibilityConfigObserver> &observer); 224 void InitConfigValues(); 225 static void OnParameterChanged(const char *key, const char *value, void *context); 226 227 sptr<Accessibility::IAccessibleAbilityManagerService> serviceProxy_ = nullptr; 228 sptr<AccessibleAbilityManagerCaptionObserverImpl> captionObserver_ = nullptr; 229 sptr<AccessibleAbilityManagerConfigObserverImpl> configObserver_ = nullptr; 230 sptr<AccessibilityEnableAbilityListsObserverImpl> enableAbilityListsObserver_ = nullptr; 231 232 bool isInitialized_ = false; 233 bool shortkey_ = false; 234 bool highContrastText_ = false; 235 bool screenMagnifier_ = false; 236 bool invertColor_ = false; 237 bool captionState_ = false; 238 bool animationOff_ = false; 239 bool audioMono_ = false; 240 bool mouseKey_ = false; 241 int32_t mouseAutoClick_ = 0; 242 uint32_t contentTimeout_ = 0; 243 uint32_t daltonizationColorFilter_ = 0; 244 float audioBalance_ = 0.0; 245 float brightnessDiscount_ = 0.0; 246 std::string shortkeyTarget_ = ""; 247 CaptionProperty captionProperty_ = {}; 248 249 sptr<IRemoteObject::DeathRecipient> deathRecipient_ = nullptr; 250 251 std::vector<std::shared_ptr<AccessibilityEnableAbilityListsObserver>> enableAbilityListsObservers_; 252 std::map<CONFIG_ID, std::vector<std::shared_ptr<AccessibilityConfigObserver>>> configObservers_; 253 std::mutex mutex_; 254 255 std::shared_ptr<AppExecFwk::EventRunner> runner_; 256 std::shared_ptr<AppExecFwk::EventHandler> handler_; 257 }; 258 } // namespace AccessibilityConfig 259 } // namespace OHOS 260 #endif // ACCESSIBILITY_CONFIG_IMPL_H 261