Francisco
09/22/2023, 10:49 PMFrancisco
09/22/2023, 10:49 PMSemanticsOwner and accessing Owner.
SemanticsOwner
I’m traversing the decorView and its children until I find an AndroidComposeView, and then I access the semanticsOwner field. Then I use semanticsOwner.getAllSemanticsNodes(), so I’m left with a list of SemanticNodes. From here, I access the SemanticsConfiguration on each node in the tapped position, and check if I find an "OnClick" key to know if the element is clickable. If it’s clickable, I search for the AccessibilityAction label of the "OnClick" key, or the value of the "ContentDescription" key.
This is working correctly. I can find the "OnClick" key, but calling getAllSemanticsNodes() on a background thread is causing some exceptions, and calling it on the main thread takes around 5ms, which is way more than what I’d like.
Owner
Once I find the AndroidComposeView, I cast it as Owner, and then access owner.root. This leaves me with a LayoutNode, from which I can traverse the children until I find one with a SemanticsModifier, and with "OnClick" on its SemanticsConfiguration. Then, I look for the same keys as above.
This is not working. I’m not sure why, but while I can access SemanticsConfiguration, I’m never reaching the node that actually has an "OnClick" modifier. For each LayoutNode, I tried accessing its children with node.children and node.zSortedChildren, but I never reach the clickable node.
Does anyone know if there’s another alternative, or if there’s something I should change on these approaches to make them work as intended?