summaryrefslogtreecommitdiff
path: root/core/java/android/view/ViewRootImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
-rw-r--r--core/java/android/view/ViewRootImpl.java47
1 files changed, 39 insertions, 8 deletions
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);
}