diff options
| author | Antonio Kantek <kanant@google.com> | 2021-11-04 16:36:13 +0000 |
|---|---|---|
| committer | Antonio Kantek <kanant@google.com> | 2021-11-04 14:04:57 -0700 |
| commit | 5d9adbcb7bbdb4545d0919091630076e4c3d40aa (patch) | |
| tree | 552587ebe11505c7297d4683096942e0d04f053e /core/java | |
| parent | 6d480a94ef43df94c55ab1f0a96245a4ca0e93b6 (diff) | |
Roll forward of "Revert "TouchMode (5/n) Implementing onTouchModeChanged""
This reverts commit 8e8e721f61625ae013da5fbae42f7f192083be04.
Reason for revert: ViewRootImpl#windowFocusChanged to also change touch
mode.
Fixes: 173468133
Bug: 193718270
Test: atest FrameworksCoreTests CtsWindowManagerDeviceTestCases
Change-Id: I21780b86574c395cd6c2c5c05a88078c050edb8c
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/view/InputEventReceiver.java | 4 | ||||
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 47 | ||||
| -rw-r--r-- | core/java/com/android/internal/policy/PhoneWindow.java | 5 |
3 files changed, 44 insertions, 12 deletions
diff --git a/core/java/android/view/InputEventReceiver.java b/core/java/android/view/InputEventReceiver.java index 2884d2279bfd..2165f55fbd60 100644 --- a/core/java/android/view/InputEventReceiver.java +++ b/core/java/android/view/InputEventReceiver.java @@ -174,10 +174,10 @@ public abstract class InputEventReceiver { * Called when the display for the window associated with the input channel has entered or * exited touch mode. * - * @param isInTouchMode {@code true} if the display showing the window associated with the + * @param inTouchMode {@code true} if the display showing the window associated with the * input channel entered touch mode. */ - public void onTouchModeChanged(boolean isInTouchMode) { + public void onTouchModeChanged(boolean inTouchMode) { } /** diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index b8215b5a8347..78dc57a94840 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -3376,14 +3376,12 @@ public final class ViewRootImpl implements ViewParent, private void handleWindowFocusChanged() { final boolean hasWindowFocus; - final boolean inTouchMode; synchronized (this) { if (!mWindowFocusChanged) { return; } mWindowFocusChanged = false; hasWindowFocus = mUpcomingWindowFocus; - inTouchMode = mUpcomingInTouchMode; } // TODO (b/131181940): Make sure this doesn't leak Activity with mActivityConfigCallback // config changes. @@ -3396,9 +3394,7 @@ public final class ViewRootImpl implements ViewParent, if (mAdded) { profileRendering(hasWindowFocus); - if (hasWindowFocus) { - ensureTouchModeLocally(inTouchMode); if (mAttachInfo.mThreadedRenderer != null && mSurface.isValid()) { mFullRedrawNeeded = true; try { @@ -3470,6 +3466,14 @@ public final class ViewRootImpl implements ViewParent, } } + private void handleWindowTouchModeChanged() { + final boolean inTouchMode; + synchronized (this) { + inTouchMode = mUpcomingInTouchMode; + } + ensureTouchModeLocally(inTouchMode); + } + private void fireAccessibilityFocusEventIfHasFocusedNode() { if (!AccessibilityManager.getInstance(mContext).isEnabled()) { return; @@ -5127,6 +5131,7 @@ public final class ViewRootImpl implements ViewParent, private static final int MSG_SHOW_INSETS = 34; private static final int MSG_HIDE_INSETS = 35; private static final int MSG_REQUEST_SCROLL_CAPTURE = 36; + private static final int MSG_WINDOW_TOUCH_MODE_CHANGED = 37; final class ViewRootHandler extends Handler { @@ -5193,6 +5198,8 @@ public final class ViewRootImpl implements ViewParent, return "MSG_SHOW_INSETS"; case MSG_HIDE_INSETS: return "MSG_HIDE_INSETS"; + case MSG_WINDOW_TOUCH_MODE_CHANGED: + return "MSG_WINDOW_TOUCH_MODE_CHANGED"; } return super.getMessageName(message); } @@ -5315,9 +5322,12 @@ public final class ViewRootImpl implements ViewParent, case MSG_WINDOW_FOCUS_CHANGED: { handleWindowFocusChanged(); } break; - case MSG_DIE: + case MSG_WINDOW_TOUCH_MODE_CHANGED: { + handleWindowTouchModeChanged(); + } break; + case MSG_DIE: { doDie(); - break; + } break; case MSG_DISPATCH_INPUT_EVENT: { SomeArgs args = (SomeArgs) msg.obj; InputEvent event = (InputEvent) args.arg1; @@ -8688,6 +8698,11 @@ public final class ViewRootImpl implements ViewParent, } @Override + public void onTouchModeChanged(boolean inTouchMode) { + touchModeChanged(inTouchMode); + } + + @Override public void onPointerCaptureEvent(boolean pointerCaptureEnabled) { dispatchPointerCaptureChanged(pointerCaptureEnabled); } @@ -8945,17 +8960,33 @@ public final class ViewRootImpl implements ViewParent, mHandler.sendMessage(msg); } - public void windowFocusChanged(boolean hasFocus, boolean inTouchMode) { + /** + * Notifies this {@link ViewRootImpl} object that window focus has changed. + */ + public void windowFocusChanged(boolean hasFocus, boolean unusedInTouchMode) { + // TODO(b/193718270): Remove inTouchMode parameter from this method and update related code + // accordingly. synchronized (this) { mWindowFocusChanged = true; mUpcomingWindowFocus = hasFocus; - mUpcomingInTouchMode = inTouchMode; } Message msg = Message.obtain(); msg.what = MSG_WINDOW_FOCUS_CHANGED; mHandler.sendMessage(msg); } + /** + * Notifies this {@link ViewRootImpl} object that touch mode state has changed. + */ + public void touchModeChanged(boolean inTouchMode) { + synchronized (this) { + mUpcomingInTouchMode = inTouchMode; + } + Message msg = Message.obtain(); + msg.what = MSG_WINDOW_TOUCH_MODE_CHANGED; + mHandler.sendMessage(msg); + } + public void dispatchWindowShown() { mHandler.sendEmptyMessage(MSG_DISPATCH_WINDOW_SHOWN); } diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java index bfc57b403a41..b4289703378f 100644 --- a/core/java/com/android/internal/policy/PhoneWindow.java +++ b/core/java/com/android/internal/policy/PhoneWindow.java @@ -1841,8 +1841,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { @Override public void setLocalFocus(boolean hasFocus, boolean inTouchMode) { - getViewRootImpl().windowFocusChanged(hasFocus, inTouchMode); - + ViewRootImpl viewRoot = getViewRootImpl(); + viewRoot.windowFocusChanged(hasFocus, inTouchMode); + viewRoot.touchModeChanged(inTouchMode); } @Override |
