Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46d3783b authored by David Tseng's avatar David Tseng
Browse files

[accessibility]: start focus finding from a11y focus and reduce refocus on View.clearFocus

See go/android-a11y-sequential-focus-starting-point
for more details.

Flag: android.view.accessibility.a11y_sequential_focus_starting_point
Test: manual tests locally; see doc for further details.
Bug: 393668020
Change-Id: I701e376b5458ca012cb0f2a73e47f8fd1a0c19a4
parent a6f99492
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static android.view.Surface.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE;
import static android.view.Surface.FRAME_RATE_COMPATIBILITY_AT_LEAST;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.accessibility.AccessibilityEvent.CONTENT_CHANGE_TYPE_UNDEFINED;
import static android.view.accessibility.Flags.a11ySequentialFocusStartingPoint;
import static android.view.accessibility.Flags.FLAG_DEPRECATE_ACCESSIBILITY_ANNOUNCEMENT_APIS;
import static android.view.accessibility.Flags.FLAG_SUPPLEMENTAL_DESCRIPTION;
import static android.view.accessibility.Flags.removeChildHoverCheckForTouchExploration;
@@ -8570,7 +8571,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            System.out.println(this + " clearFocus()");
        }
        final boolean refocus = sAlwaysAssignFocus || !isInTouchMode();
        ViewRootImpl viewRoot = getViewRootImpl();
        final boolean accessibilityFocusPresent = a11ySequentialFocusStartingPoint()
                && viewRoot != null
                && viewRoot.getAccessibilityFocusedHost() != null;
        final boolean refocus = sAlwaysAssignFocus
                                || (!isInTouchMode() && !accessibilityFocusPresent);
        clearFocusInternal(null, true, refocus);
    }
+6 −0
Original line number Diff line number Diff line
@@ -112,6 +112,7 @@ import static android.view.WindowManager.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_B
import static android.view.WindowManagerGlobal.RELAYOUT_RES_CANCEL_AND_REDRAW;
import static android.view.WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_SYSTEM_BARS;
import static android.view.WindowManagerGlobal.RELAYOUT_RES_SURFACE_CHANGED;
import static android.view.accessibility.Flags.a11ySequentialFocusStartingPoint;
import static android.view.accessibility.Flags.forceInvertColor;
import static android.view.accessibility.Flags.reduceWindowContentChangedEventThrottle;
import static android.view.flags.Flags.addSchandleToVriSurface;
@@ -8076,6 +8077,11 @@ public final class ViewRootImpl implements ViewParent,
                        return true;
                    }
                } else {
                    if (a11ySequentialFocusStartingPoint()
                            && ViewRootImpl.this.mAccessibilityFocusedHost != null) {
                        ViewRootImpl.this.mAccessibilityFocusedHost.requestFocus(direction);
                        return true;
                    }
                    if (mView.restoreDefaultFocus()) {
                        return true;
                    } else if (moveFocusToAdjacentWindow(direction)) {