• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 FOUNDATION_ACE_FRAMEWORKS_COMPONENTS_NG_PROPERTIES_ACCESSIBILITY_PROPERTY_H
17 #define FOUNDATION_ACE_FRAMEWORKS_COMPONENTS_NG_PROPERTIES_ACCESSIBILITY_PROPERTY_H
18 
19 #include <cstdint>
20 #include <string>
21 #include <unordered_set>
22 
23 #include "base/memory/ace_type.h"
24 #include "core/accessibility/accessibility_utils.h"
25 #include "core/components_ng/base/ui_node.h"
26 
27 namespace OHOS::Ace::NG {
28 using ActionNoParam = std::function<void()>;
29 using ActionSetTextImpl = std::function<void(const std::string&)>;
30 using ActionScrollForwardImpl = ActionNoParam;
31 using ActionScrollBackwardImpl = ActionNoParam;
32 using ActionSetSelectionImpl = std::function<void(int32_t start, int32_t end)>;
33 using ActionCopyImpl = ActionNoParam;
34 using ActionCutImpl = ActionNoParam;
35 using ActionPasteImpl = ActionNoParam;
36 using ActionSelectImpl = ActionNoParam;
37 using ActionClearSelectionImpl = ActionNoParam;
38 using ActionMoveTextImpl = std::function<void(int32_t moveUnit, bool forward)>;
39 
40 class FrameNode;
41 class ACE_EXPORT AccessibilityProperty : public virtual AceType {
42     DECLARE_ACE_TYPE(AccessibilityProperty, AceType);
43 
44 public:
45     AccessibilityProperty() = default;
46 
47     ~AccessibilityProperty() override = default;
48 
GetText()49     virtual std::string GetText() const
50     {
51         return propText_.value_or("");
52     }
53 
SetText(const std::string & text)54     virtual void SetText(const std::string& text)
55     {
56         propText_ = text;
57     }
58 
IsCheckable()59     virtual bool IsCheckable() const
60     {
61         return false;
62     }
63 
IsChecked()64     virtual bool IsChecked() const
65     {
66         return false;
67     }
68 
IsSelected()69     virtual bool IsSelected() const
70     {
71         return false;
72     }
73 
IsPassword()74     virtual bool IsPassword() const
75     {
76         return false;
77     }
78 
IsEditable()79     virtual bool IsEditable() const
80     {
81         return false;
82     }
83 
IsMultiLine()84     virtual bool IsMultiLine() const
85     {
86         return false;
87     }
88 
IsDeletable()89     virtual bool IsDeletable() const
90     {
91         return false;
92     }
93 
IsHint()94     virtual bool IsHint() const
95     {
96         return false;
97     }
98 
IsScrollable()99     virtual bool IsScrollable() const
100     {
101         return false;
102     }
103 
GetCurrentIndex()104     virtual int32_t GetCurrentIndex() const
105     {
106         return -1;
107     }
108 
GetBeginIndex()109     virtual int32_t GetBeginIndex() const
110     {
111         return -1;
112     }
113 
GetEndIndex()114     virtual int32_t GetEndIndex() const
115     {
116         return -1;
117     }
118 
ToJsonValue(std::unique_ptr<JsonValue> & json)119     virtual void ToJsonValue(std::unique_ptr<JsonValue>& json) const
120     {
121         json->Put("scrollable", IsScrollable());
122     }
123 
FromJson(const std::unique_ptr<JsonValue> & json)124     virtual void FromJson(const std::unique_ptr<JsonValue>& json) {}
125 
HasRange()126     virtual bool HasRange() const
127     {
128         return false;
129     }
130 
GetAccessibilityValue()131     virtual AccessibilityValue GetAccessibilityValue() const
132     {
133         return AccessibilityValue();
134     }
135 
SetHost(const WeakPtr<FrameNode> & host)136     void SetHost(const WeakPtr<FrameNode>& host)
137     {
138         host_ = host;
139     }
140 
GetHintText()141     virtual std::string GetHintText() const
142     {
143         return "";
144     }
145 
GetTextLengthLimit()146     virtual int32_t GetTextLengthLimit() const
147     {
148         return -1;
149     }
150 
GetCollectionInfo()151     virtual AceCollectionInfo GetCollectionInfo() const
152     {
153         return AceCollectionInfo();
154     }
155 
GetCollectionItemInfo()156     virtual AceCollectionItemInfo GetCollectionItemInfo() const
157     {
158         return AceCollectionItemInfo();
159     }
160 
GetErrorText()161     virtual std::string GetErrorText() const
162     {
163         return "";
164     }
165 
GetTextSelectionStart()166     virtual int32_t GetTextSelectionStart() const
167     {
168         return 0;
169     }
170 
GetTextSelectionEnd()171     virtual int32_t GetTextSelectionEnd() const
172     {
173         return 0;
174     }
175 
GetTextInputType()176     virtual AceTextCategory GetTextInputType() const
177     {
178         return AceTextCategory::INPUT_TYPE_DEFAULT;
179     }
180 
GetCollectionItemCounts()181     virtual int32_t GetCollectionItemCounts() const
182     {
183         return 0;
184     }
185 
GetContentInvalid()186     virtual bool GetContentInvalid() const
187     {
188         return true;
189     }
190 
AddSupportAction(AceAction action)191     void AddSupportAction(AceAction action)
192     {
193         supportActions_ |= (1UL << static_cast<uint32_t>(action));
194     }
195 
196     std::unordered_set<AceAction> GetSupportAction() const;
197 
ResetSupportAction()198     void ResetSupportAction()
199     {
200         supportActions_ = 0;
201         SetSpecificSupportAction();
202     };
203 
SetActionSetText(const ActionSetTextImpl & actionSetTextImpl)204     void SetActionSetText(const ActionSetTextImpl& actionSetTextImpl)
205     {
206         actionSetTextImpl_ = actionSetTextImpl;
207     }
208 
ActActionSetText(const std::string & text)209     bool ActActionSetText(const std::string& text)
210     {
211         if (actionSetTextImpl_) {
212             actionSetTextImpl_(text);
213             return true;
214         }
215         return false;
216     }
217 
SetActionSetSelection(const ActionSetSelectionImpl & actionSetSelection)218     void SetActionSetSelection(const ActionSetSelectionImpl& actionSetSelection)
219     {
220         actionSetSelectionImpl_ = actionSetSelection;
221     }
222 
ActActionSetSelection(int32_t start,int32_t end)223     bool ActActionSetSelection(int32_t start, int32_t end)
224     {
225         if (actionSetSelectionImpl_) {
226             actionSetSelectionImpl_(start, end);
227             return true;
228         }
229         return false;
230     }
231 
SetActionMoveText(const ActionMoveTextImpl & actionMoveText)232     void SetActionMoveText(const ActionMoveTextImpl& actionMoveText)
233     {
234         actionMoveTextImpl_ = actionMoveText;
235     }
236 
ActActionMoveText(int32_t moveUnit,bool forward)237     bool ActActionMoveText(int32_t moveUnit, bool forward)
238     {
239         if (actionMoveTextImpl_) {
240             actionMoveTextImpl_(moveUnit, forward);
241             return true;
242         }
243         return false;
244     }
245 
SetActionScrollForward(const ActionScrollForwardImpl & actionScrollForwardImpl)246     void SetActionScrollForward(const ActionScrollForwardImpl& actionScrollForwardImpl)
247     {
248         actionScrollForwardImpl_ = actionScrollForwardImpl;
249     }
250 
ActActionScrollForward()251     bool ActActionScrollForward()
252     {
253         if (actionScrollForwardImpl_) {
254             actionScrollForwardImpl_();
255             return true;
256         }
257         return false;
258     }
259 
SetActionScrollBackward(const ActionScrollBackwardImpl & actionScrollBackwardImpl)260     void SetActionScrollBackward(const ActionScrollBackwardImpl& actionScrollBackwardImpl)
261     {
262         actionScrollBackwardImpl_ = actionScrollBackwardImpl;
263     }
264 
ActActionScrollBackward()265     bool ActActionScrollBackward()
266     {
267         if (actionScrollBackwardImpl_) {
268             actionScrollBackwardImpl_();
269             return true;
270         }
271         return false;
272     }
273 
SetActionCopy(const ActionCopyImpl & actionCopyImpl)274     void SetActionCopy(const ActionCopyImpl& actionCopyImpl)
275     {
276         actionCopyImpl_ = actionCopyImpl;
277     }
278 
ActActionCopy()279     bool ActActionCopy()
280     {
281         if (actionCopyImpl_) {
282             actionCopyImpl_();
283             return true;
284         }
285         return false;
286     }
287 
SetActionCut(const ActionCutImpl & actionCutImpl)288     void SetActionCut(const ActionCutImpl& actionCutImpl)
289     {
290         actionCutImpl_ = actionCutImpl;
291     }
292 
ActActionCut()293     bool ActActionCut()
294     {
295         if (actionCutImpl_) {
296             actionCutImpl_();
297             return true;
298         }
299         return false;
300     }
301 
SetActionPaste(const ActionPasteImpl & actionPasteImpl)302     void SetActionPaste(const ActionPasteImpl& actionPasteImpl)
303     {
304         actionPasteImpl_ = actionPasteImpl;
305     }
306 
ActActionPaste()307     bool ActActionPaste()
308     {
309         if (actionPasteImpl_) {
310             actionPasteImpl_();
311             return true;
312         }
313         return false;
314     }
315 
SetActionSelect(const ActionSelectImpl & actionSelectImpl)316     void SetActionSelect(const ActionSelectImpl& actionSelectImpl)
317     {
318         actionSelectImpl_ = actionSelectImpl;
319     }
320 
ActActionSelect()321     bool ActActionSelect()
322     {
323         if (actionSelectImpl_) {
324             actionSelectImpl_();
325             return true;
326         }
327         return false;
328     }
329 
SetActionClearSelection(const ActionClearSelectionImpl & actionClearSelectionImpl)330     void SetActionClearSelection(const ActionClearSelectionImpl& actionClearSelectionImpl)
331     {
332         actionClearSelectionImpl_ = actionClearSelectionImpl;
333     }
334 
ActActionClearSelection()335     bool ActActionClearSelection()
336     {
337         if (actionClearSelectionImpl_) {
338             actionClearSelectionImpl_();
339             return true;
340         }
341         return false;
342     }
343 
SetAccessibilityGroup(bool accessibilityGroup)344     void SetAccessibilityGroup(bool accessibilityGroup)
345     {
346         accessibilityGroup_ = accessibilityGroup;
347     }
348 
SetAccessibilityText(const std::string & text)349     void SetAccessibilityText(const std::string& text)
350     {
351         accessibilityText_ = text;
352     }
353 
SetAccessibilityDescription(const std::string & accessibilityDescription)354     void SetAccessibilityDescription(const std::string& accessibilityDescription)
355     {
356         accessibilityDescription_ = accessibilityDescription;
357     }
358 
SetAccessibilityLevel(const std::string & accessibilityLevel)359     void SetAccessibilityLevel(const std::string& accessibilityLevel)
360     {
361         if (accessibilityLevel == "auto" || accessibilityLevel == "yes" || accessibilityLevel == "no" ||
362             accessibilityLevel == "no-hide-descendants") {
363             accessibilityLevel_ = accessibilityLevel;
364         } else {
365             accessibilityLevel_ = "auto";
366         }
367     }
368 
IsAccessibilityGroup()369     bool IsAccessibilityGroup() const
370     {
371         return accessibilityGroup_;
372     }
373 
SaveAccessibilityVirtualNode(const RefPtr<UINode> & node)374     void SaveAccessibilityVirtualNode(const RefPtr<UINode>& node)
375     {
376         accessibilityVirtualNode_ = node;
377     }
378 
GetAccessibilityVirtualNode()379     RefPtr<UINode> GetAccessibilityVirtualNode()
380     {
381         return accessibilityVirtualNode_;
382     }
383 
384     std::string GetAccessibilityText(bool isParentGroup = false);
385 
GetAccessibilityDescription()386     std::string GetAccessibilityDescription()
387     {
388         return accessibilityDescription_.value_or("");
389     }
390 
GetAccessibilityLevel()391     virtual std::string GetAccessibilityLevel()
392     {
393         if (!accessibilityLevel_.has_value()) {
394             return "yes";
395         }
396         accessibilityLevel_ = accessibilityLevel_ == "auto" ? "yes" : accessibilityLevel_;
397         return accessibilityLevel_.value();
398     }
399 
400 protected:
SetSpecificSupportAction()401     virtual void SetSpecificSupportAction() {}
402     std::optional<std::string> propText_;
403     WeakPtr<FrameNode> host_;
404     uint64_t supportActions_ = 0;
405     ActionSetTextImpl actionSetTextImpl_;
406     ActionSetSelectionImpl actionSetSelectionImpl_;
407     ActionMoveTextImpl actionMoveTextImpl_;
408     ActionScrollForwardImpl actionScrollForwardImpl_;
409     ActionScrollBackwardImpl actionScrollBackwardImpl_;
410     ActionCopyImpl actionCopyImpl_;
411     ActionCutImpl actionCutImpl_;
412     ActionPasteImpl actionPasteImpl_;
413     ActionSelectImpl actionSelectImpl_;
414     ActionClearSelectionImpl actionClearSelectionImpl_;
415     bool accessibilityGroup_ = false;
416     RefPtr<UINode> accessibilityVirtualNode_;
417     std::optional<std::string> accessibilityText_;
418     std::optional<std::string> accessibilityDescription_;
419     std::optional<std::string> accessibilityLevel_;
420     ACE_DISALLOW_COPY_AND_MOVE(AccessibilityProperty);
421 };
422 } // namespace OHOS::Ace::NG
423 
424 #endif
425