diff options
| author | 2017-08-29 21:21:19 +0000 | |
|---|---|---|
| committer | 2017-08-29 21:21:19 +0000 | |
| commit | 9a2bebcdc5a09fa9c9af234266d0cb1a6bcc7ec8 (patch) | |
| tree | eab584248383d21f95813b8d6b668bcc95d99636 | |
| parent | 4c04055489aea43e014369293dface210bfa1cf1 (diff) | |
| parent | 102520f88ea2c7febdf59decb6bb74a6740f66b9 (diff) | |
Merge "Clear focused-in-cluster on focusability changes" into oc-mr1-dev
am: 102520f88e
Change-Id: Ib6fd927e1d8af019ea2a644b95cd6dfc7ae8851d
| -rw-r--r-- | core/java/android/view/View.java | 17 | ||||
| -rw-r--r-- | core/java/android/view/ViewGroup.java | 7 |
2 files changed, 22 insertions, 2 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index ec8ffd779282..73fc43731384 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -13249,6 +13249,9 @@ public class View implements Drawable.Callback, KeyEvent.Callback, && ((privateFlags & PFLAG_FOCUSED) != 0)) { /* Give up focus if we are no longer focusable */ clearFocus(); + if (mParent instanceof ViewGroup) { + ((ViewGroup) mParent).clearFocusedInCluster(); + } } else if (((old & FOCUSABLE) == NOT_FOCUSABLE) && ((privateFlags & PFLAG_FOCUSED) == 0)) { /* @@ -13296,7 +13299,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, requestLayout(); if (((mViewFlags & VISIBILITY_MASK) == GONE)) { - if (hasFocus()) clearFocus(); + if (hasFocus()) { + clearFocus(); + if (mParent instanceof ViewGroup) { + ((ViewGroup) mParent).clearFocusedInCluster(); + } + } clearAccessibilityFocus(); destroyDrawingCache(); if (mParent instanceof View) { @@ -13324,7 +13332,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, if (((mViewFlags & VISIBILITY_MASK) == INVISIBLE)) { // root view becoming invisible shouldn't clear focus and accessibility focus if (getRootView() != this) { - if (hasFocus()) clearFocus(); + if (hasFocus()) { + clearFocus(); + if (mParent instanceof ViewGroup) { + ((ViewGroup) mParent).clearFocusedInCluster(); + } + } clearAccessibilityFocus(); } } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 18b7334c7adf..bf324070f5bf 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -818,6 +818,13 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager if (mFocusedInCluster != child) { return; } + clearFocusedInCluster(); + } + + /** + * Removes the focusedInCluster chain from this up to the cluster containing it. + */ + void clearFocusedInCluster() { View top = findKeyboardNavigationCluster(); ViewParent parent = this; do { |