• 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 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