diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 4f2a3fabbbaae..0901c6c3ff126 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -966,6 +966,12 @@ public final class ViewRootImpl implements ViewParent, } } + invalidateRectOnScreen(dirty); + + return null; + } + + private void invalidateRectOnScreen(Rect dirty) { final Rect localDirty = mDirty; if (!localDirty.isEmpty() && !localDirty.contains(dirty)) { mAttachInfo.mSetIgnoreDirtyState = true; @@ -985,8 +991,6 @@ public final class ViewRootImpl implements ViewParent, if (!mWillDrawSoon && (intersected || mIsAnimating)) { scheduleTraversals(); } - - return null; } void setWindowStopped(boolean stopped) { @@ -6393,7 +6397,14 @@ public final class ViewRootImpl implements ViewParent, } // Refresh the node for the focused virtual view. + final Rect oldBounds = mTempRect; + mAccessibilityFocusedVirtualView.getBoundsInScreen(oldBounds); mAccessibilityFocusedVirtualView = provider.createAccessibilityNodeInfo(focusedChildId); + final Rect newBounds = mAccessibilityFocusedVirtualView.getBoundsInScreen(); + if (!oldBounds.equals(newBounds)) { + oldBounds.union(newBounds); + invalidateRectOnScreen(oldBounds); + } } @Override diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 42e6766a5e9cc..901a32daf05e1 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -1494,6 +1494,15 @@ public class AccessibilityNodeInfo implements Parcelable { mBoundsInScreen.right, mBoundsInScreen.bottom); } + /** + * Returns the actual rect containing the node bounds in screen coordinates. + * + * @hide Not safe to expose outside the framework. + */ + public Rect getBoundsInScreen() { + return mBoundsInScreen; + } + /** * Sets the node bounds in screen coordinates. *