summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorAntonio Kantek <kanant@google.com>2021-11-04 16:36:13 +0000
committerAntonio Kantek <kanant@google.com>2021-11-04 14:04:57 -0700
commit5d9adbcb7bbdb4545d0919091630076e4c3d40aa (patch)
tree552587ebe11505c7297d4683096942e0d04f053e /core/java
parent6d480a94ef43df94c55ab1f0a96245a4ca0e93b6 (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.java4
-rw-r--r--core/java/android/view/ViewRootImpl.java47
-rw-r--r--core/java/com/android/internal/policy/PhoneWindow.java5
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