• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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