pub fn perform_action<H: ActionHandler + ?Sized>(
        &mut self,
        action_handler: &mut H,
        virtual_view_id: jint,
        action: &PlatformAction,
    ) -> Option<QueuedEvents> {
        match action.0 {
            PlatformActionInner::Simple { action } => {
                self.perform_simple_action(action_handler, virtual_view_id, action)
            }
            PlatformActionInner::SetTextSelection { anchor, focus } => {
                self.set_text_selection(action_handler, virtual_view_id, anchor, focus)
            }
            PlatformActionInner::CollapseTextSelection => {
                self.collapse_text_selection(action_handler, virtual_view_id)
            }
            PlatformActionInner::TraverseText {
                granularity,
                forward,
                extend_selection,
            } => self.traverse_text(
                action_handler,
                virtual_view_id,
                granularity,
                forward,
                extend_selection,
            ),
        }
    }
Perform the specified accessibility action.

If a [`QueuedEvents`] instance is returned, the caller must call
[`QueuedEvents::raise`] on it, and the Java `performAction` method
must return `true`. Otherwise, the Java `performAction` method
must either handle the action some other way or return `false`.

This method may be safely called on any thread, but refer to
[`QueuedEvents::raise`] for restrictions on the context in which
it should be called.
platforms/android/src/adapter.rs