Merge "Diagnose when lab device sends fake touch screen events to test" into sc-v2-dev am: 0a39f6daec am: da4e9793bb
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15482523 Change-Id: I345353d5b08e8e9a9fd4eaaafd27d79b0125b485
This commit is contained in:
@@ -1930,7 +1930,7 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
|
||||
|
||||
@Override
|
||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
||||
TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "Key event", event);
|
||||
TestLogging.recordKeyEvent(TestProtocol.SEQUENCE_MAIN, "Key event", event);
|
||||
return (event.getKeyCode() == KeyEvent.KEYCODE_HOME) || super.dispatchKeyEvent(event);
|
||||
}
|
||||
|
||||
|
||||
@@ -130,13 +130,18 @@ public class TestInformationHandler implements ResourceBasedOverride {
|
||||
|
||||
case TestProtocol.REQUEST_IS_TWO_PANELS:
|
||||
response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD,
|
||||
mDeviceProfile.isTwoPanels);
|
||||
mDeviceProfile.isTwoPanels);
|
||||
return response;
|
||||
|
||||
case TestProtocol.REQUEST_SET_FORCE_PAUSE_TIMEOUT:
|
||||
TestProtocol.sForcePauseTimeout = Long.parseLong(arg);
|
||||
return response;
|
||||
|
||||
case TestProtocol.REQUEST_GET_HAD_NONTEST_EVENTS:
|
||||
response.putBoolean(
|
||||
TestProtocol.TEST_INFO_RESPONSE_FIELD, TestLogging.sHadEventsNotFromTest);
|
||||
return response;
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.launcher3.testing;
|
||||
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.MotionEvent;
|
||||
|
||||
import com.android.launcher3.Utilities;
|
||||
@@ -25,6 +26,7 @@ import java.util.function.BiConsumer;
|
||||
|
||||
public final class TestLogging {
|
||||
private static BiConsumer<String, String> sEventConsumer;
|
||||
public static boolean sHadEventsNotFromTest;
|
||||
|
||||
private static void recordEventSlow(String sequence, String event) {
|
||||
Log.d(TestProtocol.TAPL_EVENTS_TAG, sequence + " / " + event);
|
||||
@@ -46,9 +48,17 @@ public final class TestLogging {
|
||||
}
|
||||
}
|
||||
|
||||
public static void recordKeyEvent(String sequence, String message, KeyEvent event) {
|
||||
if (Utilities.IS_RUNNING_IN_TEST_HARNESS) {
|
||||
recordEventSlow(sequence, message + ": " + event);
|
||||
if (event.getDeviceId() != -1) sHadEventsNotFromTest = true;
|
||||
}
|
||||
}
|
||||
|
||||
public static void recordMotionEvent(String sequence, String message, MotionEvent event) {
|
||||
if (Utilities.IS_RUNNING_IN_TEST_HARNESS && event.getAction() != MotionEvent.ACTION_MOVE) {
|
||||
recordEventSlow(sequence, message + ": " + event);
|
||||
if (event.getDeviceId() != -1) sHadEventsNotFromTest = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ public final class TestProtocol {
|
||||
public static final String REQUEST_RECENT_TASKS_LIST = "recent-tasks-list";
|
||||
public static final String REQUEST_START_EVENT_LOGGING = "start-event-logging";
|
||||
public static final String REQUEST_GET_TEST_EVENTS = "get-test-events";
|
||||
public static final String REQUEST_GET_HAD_NONTEST_EVENTS = "get-had-nontest-events";
|
||||
public static final String REQUEST_STOP_EVENT_LOGGING = "stop-event-logging";
|
||||
public static final String REQUEST_CLEAR_DATA = "clear-data";
|
||||
public static final String REQUEST_IS_TABLET = "is-tablet";
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.android.launcher3.ui.AbstractLauncherUiTest;
|
||||
|
||||
import org.junit.rules.TestWatcher;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runners.model.Statement;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
@@ -37,6 +38,26 @@ public class FailureWatcher extends TestWatcher {
|
||||
AbstractLauncherUiTest.checkDetectedLeaks(mLauncher);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Statement apply(Statement base, Description description) {
|
||||
return new Statement() {
|
||||
@Override
|
||||
public void evaluate() throws Throwable {
|
||||
try {
|
||||
base.evaluate();
|
||||
} finally {
|
||||
if (mLauncher.hadNontestEvents()) {
|
||||
throw new AssertionError(
|
||||
"Launcher received events not sent by the test. This may mean "
|
||||
+ "that the touch screen of the lab device has sent false"
|
||||
+ " events. See the logcat for TaplEvents tag and look "
|
||||
+ "for events with deviceId != -1");
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void failed(Throwable e, Description description) {
|
||||
onError(mDevice, description, e);
|
||||
|
||||
@@ -306,6 +306,11 @@ public final class LauncherInstrumentation {
|
||||
getTestInfo(TestProtocol.REQUEST_SET_FORCE_PAUSE_TIMEOUT, Long.toString(timeout));
|
||||
}
|
||||
|
||||
public boolean hadNontestEvents() {
|
||||
return getTestInfo(TestProtocol.REQUEST_GET_HAD_NONTEST_EVENTS)
|
||||
.getBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD);
|
||||
}
|
||||
|
||||
void setActiveContainer(VisibleContainer container) {
|
||||
sActiveContainer = new WeakReference<>(container);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user