diff options
| author | Alan Viverette <alanv@google.com> | 2013-08-15 00:01:02 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-08-15 00:01:03 +0000 |
| commit | 70e907f51f75bf8d481e11e0d6411e2974b83b06 (patch) | |
| tree | 7ace9c24221438d7fe3ed1f68205675fbcb496e8 | |
| parent | 63169fb9a6d1abc63dd2a62691527d4a1269e5cd (diff) | |
| parent | 973f3b4ebf79c8ce9233e2320d13c2b92d420f93 (diff) | |
| download | frameworks_base-70e907f51f75bf8d481e11e0d6411e2974b83b06.zip frameworks_base-70e907f51f75bf8d481e11e0d6411e2974b83b06.tar.gz frameworks_base-70e907f51f75bf8d481e11e0d6411e2974b83b06.tar.bz2 | |
Merge "Prevent refocus after entering touch mode" into klp-dev
| -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 df2e09f..747e8ea 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 3977a33..e90705c 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; } } |
