Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Instance Methods | Class Methods | Properties | List of all members
SemanticsObjectContainer Class Reference

#include <SemanticsObject.h>

Inheritance diagram for SemanticsObjectContainer:

Instance Methods

(instancetype) - NS_UNAVAILABLE
 
(instancetype) - initWithAccessibilityContainer:
 
(instancetype) - initWithSemanticsObject:bridge:
 
(instancetype) - init [implementation]
 
(NSInteger) - accessibilityElementCount [implementation]
 
(nullable id- accessibilityElementAtIndex: [implementation]
 
(NSInteger) - indexOfAccessibilityElement: [implementation]
 
(BOOL- isAccessibilityElement [implementation]
 
(CGRect) - accessibilityFrame [implementation]
 
(id- accessibilityContainer [implementation]
 
(BOOL- accessibilityScroll: [implementation]
 

Class Methods

(instancetype) + NS_UNAVAILABLE
 

Properties

SemanticsObjectsemanticsObject
 

Detailed Description

Represents a semantics object that has children and hence has to be presented to the OS as a UIAccessibilityContainer.

The SemanticsObject class cannot implement the UIAccessibilityContainer protocol because an object that returns YES for isAccessibilityElement cannot also implement UIAccessibilityContainer.

With the help of SemanticsObjectContainer, the hierarchy of semantic objects received from the framework, such as:

SemanticsObject1 SemanticsObject2 SemanticsObject3 SemanticsObject4

is translated into the following hierarchy, which is understood by iOS:

SemanticsObjectContainer1 SemanticsObject1 SemanticsObjectContainer2 SemanticsObject2 SemanticsObject3 SemanticsObject4

From Flutter's view of the world (the first tree seen above), we construct iOS's view of the world (second tree) as follows: We replace each SemanticsObjects that has children with a SemanticsObjectContainer, which has the original SemanticsObject and its children as children.

SemanticsObjects have semantic information attached to them which is interpreted by VoiceOver (they return YES for isAccessibilityElement). The SemanticsObjectContainers are just there for structure and they don't provide any semantic information to VoiceOver (they return NO for isAccessibilityElement).

Definition at line 226 of file SemanticsObject.h.

Method Documentation

◆ accessibilityContainer

- (id) accessibilityContainer
implementation

Definition at line 899 of file SemanticsObject.mm.

977 {
978 if (!_bridge) {
979 return nil;
980 }
981 return ([_semanticsObject uid] == kRootNodeId)
982 ? _bridge->view()
983 : [[_semanticsObject parent] accessibilityContainer];
984}
constexpr int32_t kRootNodeId
fml::WeakPtr< flutter::AccessibilityBridgeIos > _bridge
virtual UIView * view() const =0

◆ accessibilityElementAtIndex:

- (nullable id) accessibilityElementAtIndex: (NSInteger)  index
implementation

Definition at line 899 of file SemanticsObject.mm.

935 :(NSInteger)index {
936 if (index < 0 || index >= [self accessibilityElementCount]) {
937 return nil;
938 }
939 if (index == 0) {
940 return _semanticsObject.nativeAccessibility;
941 }
942
943 SemanticsObject* child = [_semanticsObject children][index - 1];
944
945 if ([child hasChildren]) {
946 return [child accessibilityContainer];
947 }
948 return child.nativeAccessibility;
949}

◆ accessibilityElementCount

- (NSInteger) accessibilityElementCount
implementation

Definition at line 899 of file SemanticsObject.mm.

930 {
931 NSInteger count = [[_semanticsObject children] count] + 1;
932 return count;
933}
int count

◆ accessibilityFrame

- (CGRect) accessibilityFrame
implementation

Definition at line 899 of file SemanticsObject.mm.

973 {
974 return [_semanticsObject accessibilityFrame];
975}

◆ accessibilityScroll:

- (BOOL) accessibilityScroll: (UIAccessibilityScrollDirection)  direction
implementation

Definition at line 899 of file SemanticsObject.mm.

988 :(UIAccessibilityScrollDirection)direction {
989 return [_semanticsObject accessibilityScroll:direction];
990}

◆ indexOfAccessibilityElement:

- (NSInteger) indexOfAccessibilityElement: (id element
implementation

Definition at line 899 of file SemanticsObject.mm.

951 :(id)element {
952 if (element == _semanticsObject.nativeAccessibility) {
953 return 0;
954 }
955
956 NSArray<SemanticsObject*>* children = [_semanticsObject children];
957 for (size_t i = 0; i < [children count]; i++) {
958 SemanticsObject* child = children[i];
959 if ((![child hasChildren] && child.nativeAccessibility == element) ||
960 ([child hasChildren] && [child.nativeAccessibility accessibilityContainer] == element)) {
961 return i + 1;
962 }
963 }
964 return NSNotFound;
965}
const uintptr_t id

◆ init

- (instancetype) init
implementation

Definition at line 899 of file SemanticsObject.mm.

905 {
906 [self release];
907 [super doesNotRecognizeSelector:_cmd];
908 return nil;
909}

◆ initWithAccessibilityContainer:

- (instancetype) initWithAccessibilityContainer: (id NS_UNAVAILABLE

◆ initWithSemanticsObject:bridge:

- (instancetype) initWithSemanticsObject: (SemanticsObject*)  semanticsObject
bridge: (fml::WeakPtr<flutter::AccessibilityBridgeIos>)  NS_DESIGNATED_INITIALIZER 

Definition at line 899 of file SemanticsObject.mm.

912 bridge:(fml::WeakPtr<flutter::AccessibilityBridgeIos>)bridge {
913 FML_DCHECK(semanticsObject) << "semanticsObject must be set";
914 // Initialize with the UIView as the container.
915 // The UIView will not necessarily be accessibility parent for this object.
916 // The bridge informs the OS of the actual structure via
917 // `accessibilityContainer` and `accessibilityElementAtIndex`.
918 self = [super initWithAccessibilityContainer:bridge->view()];
919
920 if (self) {
921 _semanticsObject = semanticsObject;
922 _bridge = bridge;
923 }
924
925 return self;
926}
#define FML_DCHECK(condition)
Definition logging.h:103
SemanticsObject * semanticsObject
auto WeakPtr(std::shared_ptr< T > pointer)

◆ isAccessibilityElement

- (BOOL) isAccessibilityElement
implementation

Definition at line 899 of file SemanticsObject.mm.

969 {
970 return NO;
971}

◆ NS_UNAVAILABLE [1/2]

- (instancetype) NS_UNAVAILABLE

◆ NS_UNAVAILABLE [2/2]

+ (instancetype) NS_UNAVAILABLE

Property Documentation

◆ semanticsObject

- (SemanticsObject*) semanticsObject
readwritenonatomicweak

Definition at line 234 of file SemanticsObject.h.


The documentation for this class was generated from the following files: