Fix light nav bar test fail
Test: cts-tradefed run commandAndExit cts-dev --module CtsSystemUiTestCases
--test android.systemui.cts.LightBarTests --disable-reboot
--skip-device-info --skip-all-system-status-check
--skip-preconditions
Fixes: 65364879
Change-Id: I546d7ee797827a4d7b2ecc305d31ef8b1a9fbffe
diff --git a/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java b/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java
index 4ba28cb..a62b2d5 100644
--- a/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java
+++ b/tests/tests/systemui/src/android/systemui/cts/LightBarTests.java
@@ -17,14 +17,18 @@
package android.systemui.cts;
import android.app.ActivityManager;
+import android.app.UiAutomation;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Color;
+import android.os.SystemClock;
import android.support.test.InstrumentationRegistry;
import android.test.ActivityInstrumentationTestCase2;
import android.util.Log;
+import android.view.InputDevice;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
+import android.view.MotionEvent;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -98,11 +102,32 @@
requestLightBars(Color.RED /* background */);
Thread.sleep(1000);
+ // Inject a cancelled interaction with the nav bar to ensure it is at full opacity.
+ int x = getActivity().getWidth() / 2;
+ int y = getActivity().getBottom() + 10;
+ injectCanceledTap(x, y);
+ Thread.sleep(1000);
+
Bitmap bitmap = takeNavigationBarScreenshot();
Stats s = evaluateLightBarBitmap(bitmap, Color.RED /* background */);
assertLightStats(bitmap, s);
}
+ private void injectCanceledTap(int x, int y) {
+ long downTime = SystemClock.uptimeMillis();
+ injectEvent(MotionEvent.ACTION_DOWN, x, y, downTime);
+ injectEvent(MotionEvent.ACTION_CANCEL, x, y, downTime);
+ }
+
+ private void injectEvent(int action, int x, int y, long downTime) {
+ final UiAutomation automation = getInstrumentation().getUiAutomation();
+ final long eventTime = SystemClock.uptimeMillis();
+ MotionEvent event = MotionEvent.obtain(downTime, eventTime, action, x, y, 0);
+ event.setSource(InputDevice.SOURCE_TOUCHSCREEN);
+ assertTrue(automation.injectInputEvent(event, true));
+ event.recycle();
+ }
+
private boolean hasVirtualNavigationBar() {
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
boolean hasHomeKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_HOME);