2 * Copyright(c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.ComponentModel;
20 using System.Runtime.InteropServices;
23 namespace Tizen.NUI.BaseComponents
26 /// Address represents an unique object address on accessibility bus.
28 [EditorBrowsable(EditorBrowsableState.Never)]
32 /// Creates an initialized Address.
34 /// <param name="bus">Accessibility bus</param>
35 /// <param name="path">Accessibility path</param>
36 [EditorBrowsable(EditorBrowsableState.Never)]
37 public Address(string bus, string path)
44 /// Gets or sets accessibility bus.
46 [EditorBrowsable(EditorBrowsableState.Never)]
47 public string Bus { get; set; }
50 /// Gets or sets accessibility path.
52 [EditorBrowsable(EditorBrowsableState.Never)]
53 public string Path { get; set; }
57 /// AddressCollection.
59 [EditorBrowsable(EditorBrowsableState.Never)]
60 public class AddressCollection : SafeHandle
63 /// Creates an initialized AddressCollection.
65 /// <param name="collection">Initialized AddressCollection</param>
66 [EditorBrowsable(EditorBrowsableState.Never)]
67 public AddressCollection(IntPtr collection) : base(collection, true)
72 /// Checks whether this handle is invalid or not.
74 [EditorBrowsable(EditorBrowsableState.Never)]
75 public override bool IsInvalid
79 return this.handle == IntPtr.Zero;
84 /// Gets the size of accessibility relation.
86 /// <param name="relation">Accessibility relation</param>
87 /// <returns>The size of relation, which means the number of elements</returns>
88 [EditorBrowsable(EditorBrowsableState.Never)]
89 public uint GetRelationSize(AccessibilityRelationType relation)
91 uint result = Interop.ControlDevel.DaliToolkitDevelControlAccessibilityRelationsRelationSize(this, Convert.ToInt32(relation));
92 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
97 /// Gets Address object using contained bus and path.
99 /// <param name="relation">Accessibility relation</param>
100 /// <param name="position">Position</param>
101 /// <returns>Accessibility Adress</returns>
102 [EditorBrowsable(EditorBrowsableState.Never)]
103 public Address GetAddressAt(AccessibilityRelationType relation, int position)
105 var bus = Interop.ControlDevel.DaliToolkitDevelControlAccessibilityRelationsAt(this, Convert.ToInt32(relation), position, 0);
106 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
108 var path = Interop.ControlDevel.DaliToolkitDevelControlAccessibilityRelationsAt(this, Convert.ToInt32(relation), position, 1);
109 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
111 return new Address(bus, path);
115 /// Releases handle itself.
117 /// <returns>true when released successfully.</returns>
118 [EditorBrowsable(EditorBrowsableState.Never)]
119 protected override bool ReleaseHandle()
121 Interop.ControlDevel.DaliToolkitDevelControlDeleteAccessibilityRelations(handle);
122 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
123 this.SetHandle(IntPtr.Zero);
129 /// AccessibilityRange is used to store data related with Text.
131 [EditorBrowsable(EditorBrowsableState.Never)]
132 public class AccessibilityRange
135 /// Start position in stored text.
137 public int StartOffset { get; set; } = 0;
140 /// End position in stored text.
142 public int EndOffset { get; set; } = 0;
145 /// Text content in stored text.
147 public string Content { get; set; } = "";
151 /// View is the base class for all views.
153 /// <since_tizen> 3 </since_tizen>
154 public partial class View
156 ///////////////////////////////////////////////////////////////////
157 // ****************** Accessibility Attributes ****************** //
158 ///////////////////////////////////////////////////////////////////
161 /// Adds or modifies the value matched with given key.
164 /// Modification takes place if key was previously set.
166 /// <param name="key">The key to insert</param>
167 /// <param name="value">The value to insert</param>
168 [EditorBrowsable(EditorBrowsableState.Never)]
169 public void AppendAccessibilityAttribute(string key, string value)
171 Interop.ControlDevel.DaliToolkitDevelControlAppendAccessibilityAttribute(SwigCPtr, key, value);
172 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
176 /// Erases a key with its value from accessibility attributes.
178 /// <param name="key">The key to remove</param>
179 [EditorBrowsable(EditorBrowsableState.Never)]
180 public void RemoveAccessibilityAttribute(string key)
182 Interop.ControlDevel.DaliToolkitDevelControlRemoveAccessibilityAttribute(SwigCPtr, key);
183 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
187 /// Clears accessibility attributes.
189 [EditorBrowsable(EditorBrowsableState.Never)]
190 public void ClearAccessibilityAttributes()
192 Interop.ControlDevel.DaliToolkitDevelControlClearAccessibilityAttributes(SwigCPtr);
193 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
196 ///////////////////////////////////////////////////////////////////
197 // ************************** Highlight ************************ //
198 ///////////////////////////////////////////////////////////////////
201 /// Clears accessibility highlight.
203 /// <returns>True if cleared, otherwise false when it is not possible</returns>
204 [EditorBrowsable(EditorBrowsableState.Never)]
205 public bool ClearAccessibilityHighlight()
207 bool result = Interop.ControlDevel.DaliToolkitDevelControlClearAccessibilityHighlight(SwigCPtr);
208 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
213 /// Grabs accessibility highlight.
215 /// <returns>True if cleared, otherwise false when it is not possible</returns>
216 [EditorBrowsable(EditorBrowsableState.Never)]
217 public bool GrabAccessibilityHighlight()
219 bool result = Interop.ControlDevel.DaliToolkitDevelControlGrabAccessibilityHighlight(SwigCPtr);
220 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
225 /// Flag to check whether this view is highlighted or not.
227 [EditorBrowsable(EditorBrowsableState.Never)]
228 protected bool IsHighlighted
232 using (View view = Accessibility.Accessibility.Instance.GetCurrentlyHighlightedView())
239 ///////////////////////////////////////////////////////////////////
240 // ****************** Accessibility Relations ******************* //
241 ///////////////////////////////////////////////////////////////////
244 /// Creates relation between objects.
246 /// <param name="second">Object which will be in relation.</param>
247 /// <param name="relation">Relation type.</param>
248 /// <exception cref="ArgumentNullException">You must pass valid object. NULL could not be in relation.</exception>
249 [EditorBrowsable(EditorBrowsableState.Never)]
250 public void AppendAccessibilityRelation(View second, AccessibilityRelationType relation)
254 throw new ArgumentNullException(nameof(second));
257 Interop.ControlDevel.DaliToolkitDevelControlAppendAccessibilityRelation(SwigCPtr, second.SwigCPtr, (int)relation);
258 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
262 /// Removes accessibility relation.
264 /// <param name="second">Object which will be removed in relation</param>
265 /// <param name="relation">Relation type</param>
266 [EditorBrowsable(EditorBrowsableState.Never)]
267 public void RemoveAccessibilityRelation(View second, AccessibilityRelationType relation)
271 throw new ArgumentNullException(nameof(second));
274 Interop.ControlDevel.DaliToolkitDevelControlRemoveAccessibilityRelation(SwigCPtr, second.SwigCPtr, (int)relation);
275 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
279 /// Removes all previously appended relations.
281 [EditorBrowsable(EditorBrowsableState.Never)]
282 public void ClearAccessibilityRelations()
284 Interop.ControlDevel.DaliToolkitDevelControlClearAccessibilityRelations(SwigCPtr);
285 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
289 /// Gets accessibility collection connected with the current object.
291 /// <returns>AddressCollection</returns>
292 [EditorBrowsable(EditorBrowsableState.Never)]
293 public AddressCollection GetAccessibilityRelations()
295 var result = new AddressCollection(Interop.ControlDevel.DaliToolkitDevelControlNewGetAccessibilityRelations(SwigCPtr));
296 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
300 ///////////////////////////////////////////////////////////////////
301 // ********************* ReadingInfoType *********************** //
302 ///////////////////////////////////////////////////////////////////
305 /// Sets accessibility reading information.
307 /// <param name="type">Reading information type</param>
308 [EditorBrowsable(EditorBrowsableState.Never)]
309 public void SetAccessibilityReadingInfoTypes(AccessibilityReadingInfoTypes type)
311 Interop.ControlDevel.DaliToolkitDevelControlSetAccessibilityReadingInfoTypes(SwigCPtr, (int)type);
312 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
316 /// Gets accessibility reading information.
318 /// <returns>Reading information type</returns>
319 [EditorBrowsable(EditorBrowsableState.Never)]
320 public AccessibilityReadingInfoTypes GetAccessibilityReadingInfoTypes()
322 AccessibilityReadingInfoTypes result = (AccessibilityReadingInfoTypes)Interop.ControlDevel.DaliToolkitDevelControlGetAccessibilityReadingInfoTypes(SwigCPtr);
323 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
327 ///////////////////////////////////////////////////////////////////
328 // ******************** Accessibility States ******************* //
329 ///////////////////////////////////////////////////////////////////
332 /// Notifies sending notifications about the current states to accessibility clients.
335 /// If recursive is true, all children of the Accessibility object will also re-emit the states.
337 /// <param name="states">Accessibility States</param>
338 /// <param name="notifyMode">Controls the notification strategy</param>
339 [EditorBrowsable(EditorBrowsableState.Never)]
340 public void NotifyAccessibilityStatesChange(AccessibilityStates states, AccessibilityStatesNotifyMode notifyMode)
342 Interop.ControlDevel.DaliToolkitDevelControlNotifyAccessibilityStatesChange(SwigCPtr, (ulong)states, (int)notifyMode);
343 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
347 /// Gets Accessibility States.
349 /// <returns>Accessibility States</returns>
350 [EditorBrowsable(EditorBrowsableState.Never)]
351 public AccessibilityStates GetAccessibilityStates()
353 AccessibilityStates result = (AccessibilityStates) Interop.ControlDevel.DaliToolkitDevelControlGetAccessibilityStates(SwigCPtr);
354 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
358 ///////////////////////////////////////////////////////////////////
359 // ************************ Accessible ************************* //
360 ///////////////////////////////////////////////////////////////////
363 /// Emits accessibility property changed event.
365 /// <param name="changeEvent">Property changed event</param>
366 [EditorBrowsable(EditorBrowsableState.Never)]
367 public void EmitAccessibilityEvent(AccessibilityPropertyChangeEvent changeEvent)
369 Interop.ControlDevel.DaliAccessibilityEmitAccessibilityEvent(SwigCPtr, Convert.ToInt32(changeEvent));
370 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
374 /// Emits accessibility states changed event.
376 /// <param name="state">Accessibility state</param>
377 /// <param name="equal">True if the state is set or enabled, otherwise false</param>
378 [EditorBrowsable(EditorBrowsableState.Never)]
379 public void EmitAccessibilityStatesChangedEvent(AccessibilityStates state, bool equal)
381 Interop.ControlDevel.DaliAccessibilityEmitAccessibilityStatesChangedEvent(SwigCPtr, (ulong)state, Convert.ToInt32(equal));
382 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
386 /// Emits accessibility text inserted event.
388 /// <param name="cursorPosition">Text cursor position</param>
389 /// <param name="length">Text length</param>
390 /// <param name="content">Inserted text content</param>
391 [EditorBrowsable(EditorBrowsableState.Never)]
392 public void EmitTextInsertedEvent(int cursorPosition, int length, string content)
394 Interop.ControlDevel.DaliAccessibilityEmitTextInsertedEvent(SwigCPtr, cursorPosition, length, content);
395 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
399 /// Emits accessibility text deleted event.
401 /// <param name="cursorPosition">Text cursor position</param>
402 /// <param name="length">Text length</param>
403 /// <param name="content">Inserted text content</param>
404 [EditorBrowsable(EditorBrowsableState.Never)]
405 public void EmitTextDeletedEvent(int cursorPosition, int length, string content)
407 Interop.ControlDevel.DaliAccessibilityEmitTextDeletedEvent(SwigCPtr, cursorPosition, length, content);
408 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
412 /// Emits accessibility text cursor moved event.
414 /// <param name="cursorPosition">The new cursor position</param>
415 [EditorBrowsable(EditorBrowsableState.Never)]
416 public void EmitTextCursorMovedEvent(int cursorPosition)
418 Interop.ControlDevel.DaliAccessibilityEmitTextCursorMovedEvent(SwigCPtr, cursorPosition);
419 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
422 ///////////////////////////////////////////////////////////////////
423 // ************************** Bridge *************************** //
424 ///////////////////////////////////////////////////////////////////
427 /// Registers component as a source of an accessibility "default label".
428 /// The "Default label" is a text that could be read by screen-reader immediately
429 /// after the navigation context has changed (window activates, popup shows up, tab changes)
430 /// and before first UI element is highlighted.
432 [EditorBrowsable(EditorBrowsableState.Never)]
433 public void RegisterDefaultLabel()
435 Interop.ControlDevel.DaliAccessibilityBridgeRegisterDefaultLabel(SwigCPtr);
436 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
440 /// Unregisters component that has been registered previously as a source of an accessibility "default label".
441 /// The "Default label" is a text that could be read by screen-reader immediately
442 /// after the navigation context has changed (window activates, popup shows up, tab changes)
443 /// and before first UI element is highlighted.
445 [EditorBrowsable(EditorBrowsableState.Never)]
446 public void UnregisterDefaultLabel()
448 Interop.ControlDevel.DaliAccessibilityBridgeUnregisterDefaultLabel(SwigCPtr);
449 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
452 private IntPtr DuplicateString(string value)
454 return Interop.ControlDevel.DaliToolkitDevelControlAccessibleImplNUIDuplicateString(value ?? "");
457 private IntPtr DuplicateStates(AccessibilityStates states)
459 return Interop.ControlDevel.DaliToolkitDevelControlConvertState((ulong)states);
462 private IntPtr DuplicateRange(AccessibilityRange range)
464 return Interop.ControlDevel.DaliAccessibilityNewRange(range.StartOffset, range.EndOffset, range.Content);
467 private Interop.ControlDevel.AccessibilityDelegate accessibilityDelegate = null;
468 private IntPtr accessibilityDelegatePtr;
471 /// Sets the specific constructor for creating accessibility structure with its role and interface.
474 /// The method should be called inside OnInitialize method of all classes inheriting from View.
476 /// <param name="role">Accessibility role</param>
477 /// <param name="accessibilityInterface">Accessibility interface</param>
478 [EditorBrowsable(EditorBrowsableState.Never)]
479 public void SetAccessibilityConstructor(Role role, AccessibilityInterface accessibilityInterface = AccessibilityInterface.None)
481 var size = Marshal.SizeOf<Interop.ControlDevel.AccessibilityDelegate>();
483 if (accessibilityDelegate == null)
485 accessibilityDelegate = new Interop.ControlDevel.AccessibilityDelegate()
487 GetName = () => DuplicateString(AccessibilityGetName()),
488 GetDescription = () => DuplicateString(AccessibilityGetDescription()),
489 DoAction = (name) => AccessibilityDoAction(Marshal.PtrToStringAnsi(name)),
490 CalculateStates = (states) => DuplicateStates(AccessibilityCalculateStates(states)),
491 GetActionCount = () => AccessibilityGetActionCount(),
492 GetActionName = (index) => DuplicateString(AccessibilityGetActionName(index)),
493 ShouldReportZeroChildren = () => AccessibilityShouldReportZeroChildren(),
494 GetMinimum = () => AccessibilityGetMinimum(),
495 GetCurrent = () => AccessibilityGetCurrent(),
496 GetMaximum = () => AccessibilityGetMaximum(),
497 SetCurrent = (value) => AccessibilitySetCurrent(value),
498 GetMinimumIncrement = () => AccessibilityGetMinimumIncrement(),
499 IsScrollable = () => AccessibilityIsScrollable(),
500 GetText = (startOffset, endOffset) => DuplicateString(AccessibilityGetText(startOffset, endOffset)),
501 GetCharacterCount = () => AccessibilityGetCharacterCount(),
502 GetCursorOffset = () => AccessibilityGetCursorOffset(),
503 SetCursorOffset = (offset) => AccessibilitySetCursorOffset(offset),
504 GetTextAtOffset = (offset, boundary) => DuplicateRange(AccessibilityGetTextAtOffset(offset, (AccessibilityTextBoundary)boundary)),
505 GetSelection = (selectionNumber) => DuplicateRange(AccessibilityGetSelection(selectionNumber)),
506 RemoveSelection = (selectionNumber) => AccessibilityRemoveSelection(selectionNumber),
507 SetSelection = (selectionNumber, startOffset, endOffset) => AccessibilitySetSelection(selectionNumber, startOffset, endOffset),
508 CopyText = (startPosition, endPosition) => AccessibilityCopyText(startPosition, endPosition),
509 CutText = (startPosition, endPosition) => AccessibilityCutText(startPosition, endPosition),
510 InsertText = (startPosition, text) => AccessibilityInsertText(startPosition, Marshal.PtrToStringAnsi(text)),
511 SetTextContents = (newContents) => AccessibilitySetTextContents(Marshal.PtrToStringAnsi(newContents)),
512 DeleteText = (startPosition, endPosition) => AccessibilityDeleteText(startPosition, endPosition),
513 ScrollToChild = (child) => {
514 using (var view = new View(child, true))
516 return AccessibilityScrollToChild(view);
519 GetSelectedChildrenCount = () => AccessibilityGetSelectedChildrenCount(),
520 GetSelectedChild = (selectedChildIndex) => View.getCPtr(AccessibilityGetSelectedChild(selectedChildIndex)).Handle,
521 SelectChild = (childIndex) => AccessibilitySelectChild(childIndex),
522 DeselectSelectedChild = (selectedChildIndex) => AccessibilityDeselectSelectedChild(selectedChildIndex),
523 IsChildSelected = (childIndex) => AccessibilityIsChildSelected(childIndex),
524 SelectAll = () => AccessibilitySelectAll(),
525 ClearSelection = () => AccessibilityClearSelection(),
526 DeselectChild = (childIndex) => AccessibilityDeselectChild(childIndex),
529 accessibilityDelegatePtr = Marshal.AllocHGlobal(size);
530 Marshal.StructureToPtr(accessibilityDelegate, accessibilityDelegatePtr, false);
533 Interop.ControlDevel.DaliToolkitDevelControlSetAccessibilityConstructor(SwigCPtr, (int)role, (int)accessibilityInterface, accessibilityDelegatePtr, size);
535 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
539 /// A helper method to manipulate individual bit flags (e.g. turn them on or off)
541 /// <param name="obj">An object that accumulates combination of bit flags</param>
542 /// <param name="bit">A bit flag to be operated</param>
543 /// <param name="state">A state of the bit flag to be set (0 == off, 1 == on)</param>
544 [EditorBrowsable(EditorBrowsableState.Never)]
545 static public void FlagSetter<T>(ref T obj ,T bit, bool state)
547 dynamic result = obj;
560 [EditorBrowsable(EditorBrowsableState.Never)]
561 protected override void Dispose(bool disposing)
568 if (disposing == false)
570 if (IsNativeHandleInvalid() || SwigCMemOwn == false)
572 // at this case, implicit nor explicit dispose is not required. No native object is made.
583 if (accessibilityDelegate != null)
585 Marshal.DestroyStructure<Interop.ControlDevel.AccessibilityDelegate>(accessibilityDelegatePtr);
586 Marshal.FreeHGlobal(accessibilityDelegatePtr);
587 accessibilityDelegate = null;
590 base.Dispose(disposing);
593 [EditorBrowsable(EditorBrowsableState.Never)]
594 protected static readonly string AccessibilityActivateAction = "activate";
595 [EditorBrowsable(EditorBrowsableState.Never)]
596 protected static readonly string AccessibilityReadingSkippedAction = "ReadingSkipped";
597 [EditorBrowsable(EditorBrowsableState.Never)]
598 protected static readonly string AccessibilityReadingCancelledAction = "ReadingCancelled";
599 [EditorBrowsable(EditorBrowsableState.Never)]
600 protected static readonly string AccessibilityReadingStoppedAction = "ReadingStopped";
601 [EditorBrowsable(EditorBrowsableState.Never)]
602 protected static readonly string AccessibilityReadingPausedAction = "ReadingPaused";
603 [EditorBrowsable(EditorBrowsableState.Never)]
604 protected static readonly string AccessibilityReadingResumedAction = "ReadingResumed";
606 [EditorBrowsable(EditorBrowsableState.Never)]
607 private static readonly string[] AccessibilityActions = {
608 AccessibilityActivateAction,
609 AccessibilityReadingSkippedAction,
610 AccessibilityReadingCancelledAction,
611 AccessibilityReadingStoppedAction,
612 AccessibilityReadingPausedAction,
613 AccessibilityReadingResumedAction,
616 [EditorBrowsable(EditorBrowsableState.Never)]
617 protected virtual string AccessibilityGetName()
622 [EditorBrowsable(EditorBrowsableState.Never)]
623 protected virtual string AccessibilityGetDescription()
628 [EditorBrowsable(EditorBrowsableState.Never)]
629 protected virtual bool AccessibilityDoAction(string name)
634 [EditorBrowsable(EditorBrowsableState.Never)]
635 protected virtual AccessibilityStates AccessibilityCalculateStates(ulong states)
637 AccessibilityStates accessibilityStates = (AccessibilityStates)states;
639 FlagSetter(ref accessibilityStates, AccessibilityStates.Highlightable, this.AccessibilityHighlightable);
640 FlagSetter(ref accessibilityStates, AccessibilityStates.Focusable, this.Focusable);
641 FlagSetter(ref accessibilityStates, AccessibilityStates.Focused, this.State == States.Focused);
642 FlagSetter(ref accessibilityStates, AccessibilityStates.Highlighted, this.IsHighlighted);
643 FlagSetter(ref accessibilityStates, AccessibilityStates.Enabled, this.State != States.Disabled);
644 FlagSetter(ref accessibilityStates, AccessibilityStates.Sensitive, this.Sensitive);
645 FlagSetter(ref accessibilityStates, AccessibilityStates.Visible, true);
646 FlagSetter(ref accessibilityStates, AccessibilityStates.Defunct, !this.IsOnWindow);
648 return accessibilityStates;
651 [EditorBrowsable(EditorBrowsableState.Never)]
652 protected virtual int AccessibilityGetActionCount()
654 return AccessibilityActions.Length;
657 [EditorBrowsable(EditorBrowsableState.Never)]
658 protected virtual string AccessibilityGetActionName(int index)
660 if (index >= 0 && index < AccessibilityActions.Length)
662 return AccessibilityActions[index];
670 [EditorBrowsable(EditorBrowsableState.Never)]
671 protected virtual bool AccessibilityShouldReportZeroChildren()
676 [EditorBrowsable(EditorBrowsableState.Never)]
677 protected virtual double AccessibilityGetMinimum()
682 [EditorBrowsable(EditorBrowsableState.Never)]
683 protected virtual double AccessibilityGetCurrent()
688 [EditorBrowsable(EditorBrowsableState.Never)]
689 protected virtual double AccessibilityGetMaximum()
694 [EditorBrowsable(EditorBrowsableState.Never)]
695 protected virtual bool AccessibilitySetCurrent(double value)
700 [EditorBrowsable(EditorBrowsableState.Never)]
701 protected virtual double AccessibilityGetMinimumIncrement()
706 [EditorBrowsable(EditorBrowsableState.Never)]
707 protected virtual bool AccessibilityIsScrollable()
712 [EditorBrowsable(EditorBrowsableState.Never)]
713 protected virtual string AccessibilityGetText(int startOffset, int endOffset)
718 [EditorBrowsable(EditorBrowsableState.Never)]
719 protected virtual int AccessibilityGetCharacterCount()
724 [EditorBrowsable(EditorBrowsableState.Never)]
725 protected virtual int AccessibilityGetCursorOffset()
730 [EditorBrowsable(EditorBrowsableState.Never)]
731 protected virtual bool AccessibilitySetCursorOffset(int offset)
736 [EditorBrowsable(EditorBrowsableState.Never)]
737 protected virtual AccessibilityRange AccessibilityGetTextAtOffset(int offset, AccessibilityTextBoundary boundary)
739 return new AccessibilityRange();
742 [EditorBrowsable(EditorBrowsableState.Never)]
743 protected virtual AccessibilityRange AccessibilityGetSelection(int selectionNumber)
745 return new AccessibilityRange();
748 [EditorBrowsable(EditorBrowsableState.Never)]
749 protected virtual bool AccessibilityRemoveSelection(int selectionNumber)
754 [EditorBrowsable(EditorBrowsableState.Never)]
755 protected virtual bool AccessibilitySetSelection(int selectionNumber, int startOffset, int endOffset)
760 [EditorBrowsable(EditorBrowsableState.Never)]
761 protected virtual bool AccessibilityCopyText(int startPosition, int endPosition)
766 [EditorBrowsable(EditorBrowsableState.Never)]
767 protected virtual bool AccessibilityCutText(int startPosition, int endPosition)
772 [EditorBrowsable(EditorBrowsableState.Never)]
773 protected virtual bool AccessibilityInsertText(int startPosition, string text)
778 [EditorBrowsable(EditorBrowsableState.Never)]
779 protected virtual bool AccessibilitySetTextContents(string newContents)
784 [EditorBrowsable(EditorBrowsableState.Never)]
785 protected virtual bool AccessibilityDeleteText(int startPosition, int endPosition)
790 [EditorBrowsable(EditorBrowsableState.Never)]
791 protected virtual bool AccessibilityScrollToChild(View child)
796 [EditorBrowsable(EditorBrowsableState.Never)]
797 protected virtual int AccessibilityGetSelectedChildrenCount()
802 [EditorBrowsable(EditorBrowsableState.Never)]
803 protected virtual View AccessibilityGetSelectedChild(int selectedChildIndex)
808 [EditorBrowsable(EditorBrowsableState.Never)]
809 protected virtual bool AccessibilitySelectChild(int childIndex)
814 [EditorBrowsable(EditorBrowsableState.Never)]
815 protected virtual bool AccessibilityDeselectSelectedChild(int selectedChildIndex)
820 [EditorBrowsable(EditorBrowsableState.Never)]
821 protected virtual bool AccessibilityIsChildSelected(int childIndex)
826 [EditorBrowsable(EditorBrowsableState.Never)]
827 protected virtual bool AccessibilitySelectAll()
832 [EditorBrowsable(EditorBrowsableState.Never)]
833 protected virtual bool AccessibilityClearSelection()
838 [EditorBrowsable(EditorBrowsableState.Never)]
839 protected virtual bool AccessibilityDeselectChild(int childIndex)