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

Commit 052d51f3 authored by Dmitry Vykochko's avatar Dmitry Vykochko Committed by Android (Google) Code Review
Browse files

Merge "Fix a11y focus rendering on non-dirty root view."

parents e6dcb00c 324bade1
Loading
Loading
Loading
Loading
+23 −15
Original line number Diff line number Diff line
@@ -4875,20 +4875,12 @@ public final class ViewRootImpl implements ViewParent,
            dirty.offset(surfaceInsets.left, surfaceInsets.top);
        }

        boolean accessibilityFocusDirty = false;
        final Drawable drawable = mAttachInfo.mAccessibilityFocusDrawable;
        if (drawable != null) {
            final Rect bounds = mAttachInfo.mTmpInvalRect;
            final boolean hasFocus = getAccessibilityFocusedRect(bounds);
            if (!hasFocus) {
                bounds.setEmpty();
            }
            if (!bounds.equals(drawable.getBounds())) {
                accessibilityFocusDirty = true;
        boolean accessibilityFocusDirty = isAccessibilityFocusDirty();

        // Force recalculation of transparent regions
        if (accessibilityFocusDirty) {
            requestLayout();
        }
        }

        mAttachInfo.mDrawingTime =
                mChoreographer.getFrameTimeNanos() / TimeUtils.NANOS_PER_MS;
@@ -5434,8 +5426,9 @@ public final class ViewRootImpl implements ViewParent,
        mAccessibilityFocusedVirtualView = node;
        updateKeepClearForAccessibilityFocusRect();

        if (mAttachInfo.mThreadedRenderer != null) {
            mAttachInfo.mThreadedRenderer.invalidateRoot();
        requestInvalidateRootRenderNode();
        if (isAccessibilityFocusDirty()) {
            scheduleTraversals();
        }
    }

@@ -9831,6 +9824,21 @@ public final class ViewRootImpl implements ViewParent,
        return AccessibilityNodeIdManager.getInstance().findView(accessibilityViewId);
    }

    private boolean isAccessibilityFocusDirty() {
        final Drawable drawable = mAttachInfo.mAccessibilityFocusDrawable;
        if (drawable != null) {
            final Rect bounds = mAttachInfo.mTmpInvalRect;
            final boolean hasFocus = getAccessibilityFocusedRect(bounds);
            if (!hasFocus) {
                bounds.setEmpty();
            }
            if (!bounds.equals(drawable.getBounds())) {
                return true;
            }
        }
        return false;
    }

    /**
     * Updates the focused virtual view, when necessary, in response to a
     * content changed event.