Revert "TouchMode (5/n) Implementing onTouchModeChanged"
This reverts commit 487559898c.
Reason for revert: Broken test(b/205063292)
Change-Id: I477ab2ca44571d99f46fe53e38033a6746522c7e
This commit is contained in:
@@ -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 inTouchMode {@code true} if the display showing the window associated with the
|
||||
* @param isInTouchMode {@code true} if the display showing the window associated with the
|
||||
* input channel entered touch mode.
|
||||
*/
|
||||
public void onTouchModeChanged(boolean inTouchMode) {
|
||||
public void onTouchModeChanged(boolean isInTouchMode) {
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3384,12 +3384,14 @@ 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.
|
||||
@@ -3402,7 +3404,9 @@ public final class ViewRootImpl implements ViewParent,
|
||||
|
||||
if (mAdded) {
|
||||
profileRendering(hasWindowFocus);
|
||||
|
||||
if (hasWindowFocus) {
|
||||
ensureTouchModeLocally(inTouchMode);
|
||||
if (mAttachInfo.mThreadedRenderer != null && mSurface.isValid()) {
|
||||
mFullRedrawNeeded = true;
|
||||
try {
|
||||
@@ -3474,14 +3478,6 @@ 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;
|
||||
@@ -5139,7 +5135,6 @@ 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 {
|
||||
@@ -5206,8 +5201,6 @@ 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);
|
||||
}
|
||||
@@ -5330,12 +5323,9 @@ public final class ViewRootImpl implements ViewParent,
|
||||
case MSG_WINDOW_FOCUS_CHANGED: {
|
||||
handleWindowFocusChanged();
|
||||
} break;
|
||||
case MSG_WINDOW_TOUCH_MODE_CHANGED: {
|
||||
handleWindowTouchModeChanged();
|
||||
} break;
|
||||
case MSG_DIE: {
|
||||
case MSG_DIE:
|
||||
doDie();
|
||||
} break;
|
||||
break;
|
||||
case MSG_DISPATCH_INPUT_EVENT: {
|
||||
SomeArgs args = (SomeArgs) msg.obj;
|
||||
InputEvent event = (InputEvent) args.arg1;
|
||||
@@ -8705,11 +8695,6 @@ public final class ViewRootImpl implements ViewParent,
|
||||
windowFocusChanged(hasFocus, inTouchMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTouchModeChanged(boolean inTouchMode) {
|
||||
touchModeChanged(inTouchMode);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPointerCaptureEvent(boolean pointerCaptureEnabled) {
|
||||
dispatchPointerCaptureChanged(pointerCaptureEnabled);
|
||||
@@ -8968,30 +8953,14 @@ public final class ViewRootImpl implements ViewParent,
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Notifies this {@link ViewRootImpl} object that window focus has changed.
|
||||
*/
|
||||
public void windowFocusChanged(boolean hasFocus, boolean unusedInTouchMode) {
|
||||
// TODO(b/193718270): Delete unused inTouchMode parameter here once fully removing touch
|
||||
// mode status from focus event.
|
||||
public void windowFocusChanged(boolean hasFocus, boolean inTouchMode) {
|
||||
synchronized (this) {
|
||||
mWindowFocusChanged = true;
|
||||
mUpcomingWindowFocus = hasFocus;
|
||||
}
|
||||
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;
|
||||
msg.what = MSG_WINDOW_FOCUS_CHANGED;
|
||||
mHandler.sendMessage(msg);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,14 +31,12 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
|
||||
import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static com.google.common.truth.Truth.assertWithMessage;
|
||||
import static androidx.test.InstrumentationRegistry.getInstrumentation;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import android.app.Instrumentation;
|
||||
import android.content.Context;
|
||||
import android.os.Binder;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
@@ -49,9 +47,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@@ -62,7 +58,7 @@ import java.util.concurrent.TimeUnit;
|
||||
* Tests for {@link ViewRootImpl}
|
||||
*
|
||||
* Build/Install/Run:
|
||||
* atest FrameworksCoreTests:ViewRootImplTest
|
||||
* atest FrameworksCoreTests:ViewRootImplTest
|
||||
*/
|
||||
@Presubmit
|
||||
@SmallTest
|
||||
@@ -70,32 +66,15 @@ import java.util.concurrent.TimeUnit;
|
||||
public class ViewRootImplTest {
|
||||
|
||||
private ViewRootImpl mViewRootImpl;
|
||||
private Context mContext;
|
||||
private volatile boolean mKeyReceived = false;
|
||||
|
||||
private static Context sContext;
|
||||
private static Instrumentation sInstrumentation = InstrumentationRegistry.getInstrumentation();
|
||||
|
||||
// The touch mode state before the test was started, needed to return the system to the original
|
||||
// state after the test completes.
|
||||
private static boolean sOriginalTouchMode;
|
||||
|
||||
@BeforeClass
|
||||
public static void setUpClass() {
|
||||
sContext = sInstrumentation.getTargetContext();
|
||||
View view = new View(sContext);
|
||||
sOriginalTouchMode = view.isInTouchMode();
|
||||
}
|
||||
|
||||
@AfterClass
|
||||
public static void tearDownClass() {
|
||||
sInstrumentation.setInTouchMode(sOriginalTouchMode);
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
sInstrumentation.setInTouchMode(true);
|
||||
sInstrumentation.runOnMainSync(() ->
|
||||
mViewRootImpl = new ViewRootImpl(sContext, sContext.getDisplayNoVerify()));
|
||||
mContext = getInstrumentation().getTargetContext();
|
||||
|
||||
getInstrumentation().runOnMainSync(() ->
|
||||
mViewRootImpl = new ViewRootImpl(mContext, mContext.getDisplayNoVerify()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -245,9 +224,9 @@ public class ViewRootImplTest {
|
||||
*/
|
||||
@Test
|
||||
public void requestScrollCapture_timeout() {
|
||||
final View view = new View(sContext);
|
||||
final View view = new View(mContext);
|
||||
view.setScrollCaptureCallback(new TestScrollCaptureCallback()); // Does nothing
|
||||
sInstrumentation.runOnMainSync(() -> {
|
||||
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
|
||||
WindowManager.LayoutParams wmlp =
|
||||
new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY);
|
||||
// Set a fake token to bypass 'is your activity running' check
|
||||
@@ -271,29 +250,6 @@ public class ViewRootImplTest {
|
||||
} catch (InterruptedException e) { /* ignore */ }
|
||||
}
|
||||
|
||||
@Test
|
||||
public void whenTouchModeChanges_viewRootIsNotified() throws Exception {
|
||||
View view = new View(sContext);
|
||||
attachViewToWindow(view);
|
||||
ViewTreeObserver viewTreeObserver = view.getRootView().getViewTreeObserver();
|
||||
CountDownLatch latch = new CountDownLatch(1);
|
||||
ViewTreeObserver.OnTouchModeChangeListener touchModeListener = (boolean inTouchMode) -> {
|
||||
assertWithMessage("addOnTouchModeChangeListener parameter").that(
|
||||
inTouchMode).isFalse();
|
||||
latch.countDown();
|
||||
};
|
||||
viewTreeObserver.addOnTouchModeChangeListener(touchModeListener);
|
||||
|
||||
try {
|
||||
view.requestFocusFromTouch();
|
||||
|
||||
assertThat(latch.await(1, TimeUnit.SECONDS)).isTrue();
|
||||
assertThat(view.isInTouchMode()).isFalse();
|
||||
} finally {
|
||||
viewTreeObserver.removeOnTouchModeChangeListener(touchModeListener);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* When window doesn't have focus, keys should be dropped.
|
||||
*/
|
||||
@@ -352,31 +308,27 @@ public class ViewRootImplTest {
|
||||
* Next, inject an event into this view, and check whether it is received.
|
||||
*/
|
||||
private void checkKeyEvent(Runnable setup, boolean shouldReceiveKey) {
|
||||
final KeyView view = new KeyView(sContext);
|
||||
final KeyView view = new KeyView(mContext);
|
||||
|
||||
attachViewToWindow(view);
|
||||
|
||||
mViewRootImpl = view.getViewRootImpl();
|
||||
sInstrumentation.runOnMainSync(setup);
|
||||
sInstrumentation.waitForIdleSync();
|
||||
|
||||
// Inject a key event, and wait for it to be processed
|
||||
sInstrumentation.runOnMainSync(() -> {
|
||||
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A);
|
||||
mViewRootImpl.dispatchInputEvent(event);
|
||||
});
|
||||
sInstrumentation.waitForIdleSync();
|
||||
assertEquals(mKeyReceived, shouldReceiveKey);
|
||||
}
|
||||
|
||||
private void attachViewToWindow(View view) {
|
||||
WindowManager.LayoutParams wmlp = new WindowManager.LayoutParams(TYPE_APPLICATION_OVERLAY);
|
||||
wmlp.token = new Binder(); // Set a fake token to bypass 'is your activity running' check
|
||||
|
||||
sInstrumentation.runOnMainSync(() -> {
|
||||
WindowManager wm = sContext.getSystemService(WindowManager.class);
|
||||
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
|
||||
WindowManager wm = mContext.getSystemService(WindowManager.class);
|
||||
wm.addView(view, wmlp);
|
||||
});
|
||||
sInstrumentation.waitForIdleSync();
|
||||
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
|
||||
|
||||
mViewRootImpl = view.getViewRootImpl();
|
||||
InstrumentationRegistry.getInstrumentation().runOnMainSync(setup);
|
||||
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
|
||||
|
||||
// Inject a key event, and wait for it to be processed
|
||||
InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
|
||||
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_A);
|
||||
mViewRootImpl.dispatchInputEvent(event);
|
||||
});
|
||||
InstrumentationRegistry.getInstrumentation().waitForIdleSync();
|
||||
assertEquals(mKeyReceived, shouldReceiveKey);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user