diff options
| -rw-r--r-- | core/java/android/view/View.java | 24 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 6 | 
2 files changed, 19 insertions, 11 deletions
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 7a8289276ea4..d22a46861f89 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -4572,10 +4572,23 @@ public class View implements Drawable.Callback, KeyEvent.Callback,              System.out.println(this + " clearFocus()");          } +        clearFocusInternal(true, true); +    } + +    /** +     * Clears focus from the view, optionally propagating the change up through +     * the parent hierarchy and requesting that the root view place new focus. +     * +     * @param propagate whether to propagate the change up through the parent +     *            hierarchy +     * @param refocus when propagate is true, specifies whether to request the +     *            root view place new focus +     */ +    void clearFocusInternal(boolean propagate, boolean refocus) {          if ((mPrivateFlags & PFLAG_FOCUSED) != 0) {              mPrivateFlags &= ~PFLAG_FOCUSED; -            if (mParent != null) { +            if (propagate && mParent != null) {                  mParent.clearChildFocus(this);              } @@ -4583,7 +4596,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,              refreshDrawableState(); -            if (!rootViewRequestFocus()) { +            if (propagate && (!refocus || !rootViewRequestFocus())) {                  notifyGlobalFocusCleared(this);              }          } @@ -4613,12 +4626,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,              System.out.println(this + " unFocus()");          } -        if ((mPrivateFlags & PFLAG_FOCUSED) != 0) { -            mPrivateFlags &= ~PFLAG_FOCUSED; - -            onFocusChanged(false, 0, null); -            refreshDrawableState(); -        } +        clearFocusInternal(false, false);      }      /** diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 3977a33f3197..e90705c1ed53 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -3271,9 +3271,9 @@ public final class ViewRootImpl implements ViewParent,                      // focus                      return ancestorToTakeFocus.requestFocus();                  } else { -                    // nothing appropriate to have focus in touch mode, clear it -                    // out -                    focused.clearFocus(); +                    // There's nothing to focus. Clear and propagate through the +                    // hierarchy, but don't attempt to place new focus. +                    focused.clearFocusInternal(true, false);                      return true;                  }              }  |