Merge "Diagnose when lab device sends fake touch screen events to test" into sc-v2-dev am: 0a39f6daec
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/15482523 Change-Id: I47b4031201e3156868a485bff0ceca5506a2e788
This commit is contained in:
@@ -1930,7 +1930,7 @@ public class Launcher extends StatefulActivity<LauncherState> implements Launche
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
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);
|
return (event.getKeyCode() == KeyEvent.KEYCODE_HOME) || super.dispatchKeyEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -130,13 +130,18 @@ public class TestInformationHandler implements ResourceBasedOverride {
|
|||||||
|
|
||||||
case TestProtocol.REQUEST_IS_TWO_PANELS:
|
case TestProtocol.REQUEST_IS_TWO_PANELS:
|
||||||
response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD,
|
response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD,
|
||||||
mDeviceProfile.isTwoPanels);
|
mDeviceProfile.isTwoPanels);
|
||||||
return response;
|
return response;
|
||||||
|
|
||||||
case TestProtocol.REQUEST_SET_FORCE_PAUSE_TIMEOUT:
|
case TestProtocol.REQUEST_SET_FORCE_PAUSE_TIMEOUT:
|
||||||
TestProtocol.sForcePauseTimeout = Long.parseLong(arg);
|
TestProtocol.sForcePauseTimeout = Long.parseLong(arg);
|
||||||
return response;
|
return response;
|
||||||
|
|
||||||
|
case TestProtocol.REQUEST_GET_HAD_NONTEST_EVENTS:
|
||||||
|
response.putBoolean(
|
||||||
|
TestProtocol.TEST_INFO_RESPONSE_FIELD, TestLogging.sHadEventsNotFromTest);
|
||||||
|
return response;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.android.launcher3.testing;
|
package com.android.launcher3.testing;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.view.KeyEvent;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
import com.android.launcher3.Utilities;
|
import com.android.launcher3.Utilities;
|
||||||
@@ -25,6 +26,7 @@ import java.util.function.BiConsumer;
|
|||||||
|
|
||||||
public final class TestLogging {
|
public final class TestLogging {
|
||||||
private static BiConsumer<String, String> sEventConsumer;
|
private static BiConsumer<String, String> sEventConsumer;
|
||||||
|
public static boolean sHadEventsNotFromTest;
|
||||||
|
|
||||||
private static void recordEventSlow(String sequence, String event) {
|
private static void recordEventSlow(String sequence, String event) {
|
||||||
Log.d(TestProtocol.TAPL_EVENTS_TAG, sequence + " / " + 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) {
|
public static void recordMotionEvent(String sequence, String message, MotionEvent event) {
|
||||||
if (Utilities.IS_RUNNING_IN_TEST_HARNESS && event.getAction() != MotionEvent.ACTION_MOVE) {
|
if (Utilities.IS_RUNNING_IN_TEST_HARNESS && event.getAction() != MotionEvent.ACTION_MOVE) {
|
||||||
recordEventSlow(sequence, message + ": " + event);
|
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_RECENT_TASKS_LIST = "recent-tasks-list";
|
||||||
public static final String REQUEST_START_EVENT_LOGGING = "start-event-logging";
|
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_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_STOP_EVENT_LOGGING = "stop-event-logging";
|
||||||
public static final String REQUEST_CLEAR_DATA = "clear-data";
|
public static final String REQUEST_CLEAR_DATA = "clear-data";
|
||||||
public static final String REQUEST_IS_TABLET = "is-tablet";
|
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.rules.TestWatcher;
|
||||||
import org.junit.runner.Description;
|
import org.junit.runner.Description;
|
||||||
|
import org.junit.runners.model.Statement;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
@@ -37,6 +38,26 @@ public class FailureWatcher extends TestWatcher {
|
|||||||
AbstractLauncherUiTest.checkDetectedLeaks(mLauncher);
|
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
|
@Override
|
||||||
protected void failed(Throwable e, Description description) {
|
protected void failed(Throwable e, Description description) {
|
||||||
onError(mDevice, description, e);
|
onError(mDevice, description, e);
|
||||||
|
|||||||
@@ -306,6 +306,11 @@ public final class LauncherInstrumentation {
|
|||||||
getTestInfo(TestProtocol.REQUEST_SET_FORCE_PAUSE_TIMEOUT, Long.toString(timeout));
|
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) {
|
void setActiveContainer(VisibleContainer container) {
|
||||||
sActiveContainer = new WeakReference<>(container);
|
sActiveContainer = new WeakReference<>(container);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user