Add tests for Activity#setTurnScreenOn
Test setTurnScreenOn with keyguard and Aod status.
- Also move AodSession to object tracker.
- Add test for turnScreenOn can dismiss multiwindow mode.
Bug: 155922711
Test: atest ActivityVisibilityTests KeyguardTests KeyguardLockedTests
Change-Id: Ieb41e59ffe6619b79890aa9a3f429624e9839ca8
diff --git a/tests/framework/base/windowmanager/app/src/android/server/wm/app/Components.java b/tests/framework/base/windowmanager/app/src/android/server/wm/app/Components.java
index 94658da..529b22a 100644
--- a/tests/framework/base/windowmanager/app/src/android/server/wm/app/Components.java
+++ b/tests/framework/base/windowmanager/app/src/android/server/wm/app/Components.java
@@ -330,6 +330,7 @@
public static class TurnScreenOnActivity {
// Turn on screen by window flags or APIs.
public static final String EXTRA_USE_WINDOW_FLAGS = "useWindowFlags";
+ public static final String EXTRA_SHOW_WHEN_LOCKED = "useShowWhenLocked";
public static final String EXTRA_SLEEP_MS_IN_ON_CREATE = "sleepMsInOnCreate";
}
diff --git a/tests/framework/base/windowmanager/app/src/android/server/wm/app/TurnScreenOnActivity.java b/tests/framework/base/windowmanager/app/src/android/server/wm/app/TurnScreenOnActivity.java
index b013fde..48eb6e3 100644
--- a/tests/framework/base/windowmanager/app/src/android/server/wm/app/TurnScreenOnActivity.java
+++ b/tests/framework/base/windowmanager/app/src/android/server/wm/app/TurnScreenOnActivity.java
@@ -26,12 +26,18 @@
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ final boolean useShowWhenLocked = getIntent().getBooleanExtra(
+ Components.TurnScreenOnActivity.EXTRA_SHOW_WHEN_LOCKED, true /* defaultValue */);
if (getIntent().getBooleanExtra(Components.TurnScreenOnActivity.EXTRA_USE_WINDOW_FLAGS,
false /* defaultValue */)) {
- getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
- | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
+ if (useShowWhenLocked) {
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
+ }
} else {
- setShowWhenLocked(true);
+ if (useShowWhenLocked) {
+ setShowWhenLocked(true);
+ }
setTurnScreenOn(true);
}
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java b/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
index d3986d6..525faef 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/ActivityVisibilityTests.java
@@ -223,8 +223,14 @@
final LockScreenSession lockScreenSession = createManagedLockScreenSession();
final ActivitySessionClient activityClient = createManagedActivityClientSession();
- testTurnScreenOnActivity(lockScreenSession, activityClient, true /* useWindowFlags */);
- testTurnScreenOnActivity(lockScreenSession, activityClient, false /* useWindowFlags */);
+ testTurnScreenOnActivity(lockScreenSession, activityClient,
+ true /* useWindowFlags */, true /* showWhenLocked */);
+ testTurnScreenOnActivity(lockScreenSession, activityClient,
+ false /* useWindowFlags */, true /* showWhenLocked */);
+ testTurnScreenOnActivity(lockScreenSession, activityClient,
+ true /* useWindowFlags */, false /* showWhenLocked */);
+ testTurnScreenOnActivity(lockScreenSession, activityClient,
+ false /* useWindowFlags */, false /* showWhenLocked */);
}
@Test
@@ -238,7 +244,7 @@
// timeout should still notify the client activity to be visible. Then the relayout can
// send the visible request to apply the flags and turn on screen.
testTurnScreenOnActivity(lockScreenSession, activityClient, true /* useWindowFlags */,
- 1000 /* sleepMsInOnCreate */);
+ true /* showWhenLocked */, 1000 /* sleepMsInOnCreate */);
}
@Test
@@ -246,21 +252,28 @@
assumeTrue(supportsLockScreen());
assumeTrue(supportsSplitScreenMultiWindow());
+ final LockScreenSession lockScreenSession = createManagedLockScreenSession();
+ final ActivitySessionClient activityClient = createManagedActivityClientSession();
+ testTurnScreenOnActivityMustDismissSplitScreen(lockScreenSession, activityClient,
+ true /* useWindowFlags */, true /* showWhenLocked */);
+ testTurnScreenOnActivityMustDismissSplitScreen(lockScreenSession, activityClient,
+ true /* useWindowFlags */, false /* showWhenLocked */);
+ testTurnScreenOnActivityMustDismissSplitScreen(lockScreenSession, activityClient,
+ false /* useWindowFlags */, true /* showWhenLocked */);
+ testTurnScreenOnActivityMustDismissSplitScreen(lockScreenSession, activityClient,
+ false /* useWindowFlags */, false /* showWhenLocked */);
+ }
+
+ private void testTurnScreenOnActivityMustDismissSplitScreen(LockScreenSession lockScreenSession,
+ ActivitySessionClient activityClient, boolean useWindowFlags, boolean showWhenLocked) {
launchActivitiesInSplitScreen(
getLaunchActivityBuilder().setTargetActivity(LAUNCHING_ACTIVITY),
getLaunchActivityBuilder().setTargetActivity(RESIZEABLE_ACTIVITY));
-
mWmState.assertContainsStack("Must contain split screen secondary stack.",
WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD);
mWmState.assertContainsStack("Must contain split screen primary stack.",
WINDOWING_MODE_SPLIT_SCREEN_PRIMARY, ACTIVITY_TYPE_STANDARD);
-
- final LockScreenSession lockScreenSession = createManagedLockScreenSession();
- final ActivitySessionClient activityClient = createManagedActivityClientSession();
- testTurnScreenOnActivity(lockScreenSession, activityClient, true /* useWindowFlags */);
- testTurnScreenOnActivity(lockScreenSession, activityClient, false/* useWindowFlags */);
-
- lockScreenSession.unlockDevice();
+ testTurnScreenOnActivity(lockScreenSession, activityClient, useWindowFlags, showWhenLocked);
mWmState.assertDoesNotContainStack("Must not contain split screen secondary stack.",
WINDOWING_MODE_SPLIT_SCREEN_SECONDARY, ACTIVITY_TYPE_STANDARD);
mWmState.assertDoesNotContainStack("Must not contain split screen primary stack.",
@@ -268,16 +281,17 @@
}
private void testTurnScreenOnActivity(LockScreenSession lockScreenSession,
- ActivitySessionClient activitySessionClient, boolean useWindowFlags) {
+ ActivitySessionClient activitySessionClient, boolean useWindowFlags,
+ boolean showWhenLocked) {
testTurnScreenOnActivity(lockScreenSession, activitySessionClient, useWindowFlags,
- 0 /* sleepMsInOnCreate */);
+ showWhenLocked, 0 /* sleepMsInOnCreate */);
}
private void testTurnScreenOnActivity(LockScreenSession lockScreenSession,
ActivitySessionClient activitySessionClient, boolean useWindowFlags,
- int sleepMsInOnCreate) {
+ boolean showWhenLocked, int sleepMsInOnCreate) {
ActivitySession activity = sleepDeviceAndLaunchTurnScreenOnActivity(lockScreenSession,
- activitySessionClient, useWindowFlags, sleepMsInOnCreate,
+ activitySessionClient, useWindowFlags, showWhenLocked, sleepMsInOnCreate,
WINDOWING_MODE_FULLSCREEN_OR_SPLIT_SCREEN_SECONDARY);
mWmState.assertVisibility(TURN_SCREEN_ON_ACTIVITY, true);
@@ -295,9 +309,22 @@
final LockScreenSession lockScreenSession = createManagedLockScreenSession();
final ActivitySessionClient activityClient = createManagedActivityClientSession();
+ testFreeformWindowTurnScreenOnActivity(lockScreenSession, activityClient,
+ true/* useWindowFlags */, true/* showWhenLocked */);
+ testFreeformWindowTurnScreenOnActivity(lockScreenSession, activityClient,
+ true/* useWindowFlags */, false/* showWhenLocked */);
+ testFreeformWindowTurnScreenOnActivity(lockScreenSession, activityClient,
+ false/* useWindowFlags */, true/* showWhenLocked */);
+ testFreeformWindowTurnScreenOnActivity(lockScreenSession, activityClient,
+ false/* useWindowFlags */, false/* showWhenLocked */);
+ }
+
+ private void testFreeformWindowTurnScreenOnActivity(LockScreenSession lockScreenSession,
+ ActivitySessionClient activityClient, boolean useWindowFlags,
+ boolean showWhenLocked) {
ActivitySession activity = sleepDeviceAndLaunchTurnScreenOnActivity(lockScreenSession,
- activityClient, true /* useWindowFlags */, 0 /* sleepInMsOnCreate */,
- WINDOWING_MODE_FREEFORM);
+ activityClient, useWindowFlags, showWhenLocked,
+ 0 /* sleepMsInOnCreate */, WINDOWING_MODE_FREEFORM);
mWmState.waitForValidState(
new WaitForValidActivityState.Builder(TURN_SCREEN_ON_ACTIVITY)
.setWindowingMode(WINDOWING_MODE_FULLSCREEN)
@@ -307,29 +334,20 @@
mWmState.assertVisibility(TURN_SCREEN_ON_ACTIVITY, true);
assertTrue("Display should be turned on by flags.", isDisplayOn(DEFAULT_DISPLAY));
activity.finish();
-
- activity = sleepDeviceAndLaunchTurnScreenOnActivity(lockScreenSession, activityClient,
- false /* useWindowFlags */, 0 /* sleepInMsOnCreate */, WINDOWING_MODE_FREEFORM);
- mWmState.waitForValidState(
- new WaitForValidActivityState.Builder(TURN_SCREEN_ON_ACTIVITY)
- .setWindowingMode(WINDOWING_MODE_FULLSCREEN)
- .build());
- assertTrue(mWmState.containsActivityInWindowingMode(
- TURN_SCREEN_ON_ACTIVITY, WINDOWING_MODE_FULLSCREEN));
- mWmState.assertVisibility(TURN_SCREEN_ON_ACTIVITY, true);
- assertTrue("Display should be turned on by API.", isDisplayOn(DEFAULT_DISPLAY));
- activity.finish();
}
private ActivitySession sleepDeviceAndLaunchTurnScreenOnActivity(
LockScreenSession lockScreenSession, ActivitySessionClient activitySessionClient,
- boolean useWindowFlags, int sleepMsInOnCreate, int windowingMode) {
+ boolean useWindowFlags, boolean showWhenLocked, int sleepMsInOnCreate,
+ int windowingMode) {
lockScreenSession.sleepDevice();
return activitySessionClient.startActivity(
getLaunchActivityBuilder().setUseInstrumentation().setIntentExtra(extra -> {
extra.putBoolean(Components.TurnScreenOnActivity.EXTRA_USE_WINDOW_FLAGS,
useWindowFlags);
+ extra.putBoolean(Components.TurnScreenOnActivity.EXTRA_SHOW_WHEN_LOCKED,
+ showWhenLocked);
extra.putLong(Components.TurnScreenOnActivity.EXTRA_SLEEP_MS_IN_ON_CREATE,
sleepMsInOnCreate);
}).setTargetActivity(TURN_SCREEN_ON_ACTIVITY).setWindowingMode(windowingMode));
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardLockedTests.java b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardLockedTests.java
index 115310f..c1d3035 100644
--- a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardLockedTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardLockedTests.java
@@ -29,6 +29,7 @@
import static android.server.wm.app.Components.PipActivity.EXTRA_SHOW_OVER_KEYGUARD;
import static android.server.wm.app.Components.SHOW_WHEN_LOCKED_ACTIVITY;
import static android.server.wm.app.Components.SHOW_WHEN_LOCKED_ATTR_IME_ACTIVITY;
+import static android.server.wm.app.Components.TURN_SCREEN_ON_ACTIVITY;
import static android.server.wm.app.Components.TURN_SCREEN_ON_ATTR_DISMISS_KEYGUARD_ACTIVITY;
import static android.view.Display.DEFAULT_DISPLAY;
import static android.view.WindowInsets.Type.ime;
@@ -49,6 +50,7 @@
import android.os.Bundle;
import android.os.SystemClock;
import android.platform.test.annotations.Presubmit;
+import android.server.wm.app.Components;
import android.view.View;
import android.widget.EditText;
import android.widget.LinearLayout;
@@ -214,6 +216,40 @@
}
@Test
+ public void testTurnScreenOnActivity_withSecureKeyguardAndAod() {
+ final AodSession aodSession = createManagedAodSession();
+ final LockScreenSession lockScreenSession = createManagedLockScreenSession();
+ lockScreenSession.setLockCredential();
+ testTurnScreenOnActivity_withSecureKeyguard(aodSession, lockScreenSession,
+ false /* enableAod */);
+ testTurnScreenOnActivity_withSecureKeyguard(aodSession, lockScreenSession,
+ true /* enableAod */);
+ }
+
+ private void testTurnScreenOnActivity_withSecureKeyguard(AodSession aodSession,
+ LockScreenSession lockScreenSession, boolean enableAod) {
+ if (enableAod) {
+ assumeTrue(aodSession.isAodAvailable());
+ }
+ aodSession.setAodEnabled(enableAod);
+ lockScreenSession.sleepDevice();
+ mWmState.computeState();
+ assertTrue(mWmState.getKeyguardControllerState().keyguardShowing);
+
+ final CommandSession.ActivitySessionClient activityClient =
+ createManagedActivityClientSession();
+ final CommandSession.ActivitySession activity = activityClient.startActivity(
+ getLaunchActivityBuilder().setUseInstrumentation().setIntentExtra(extra -> {
+ extra.putBoolean(Components.TurnScreenOnActivity.EXTRA_SHOW_WHEN_LOCKED, false);
+ }).setTargetActivity(TURN_SCREEN_ON_ACTIVITY));
+ mWmState.waitForKeyguardShowingAndNotOccluded();
+ mWmState.assertVisibility(TURN_SCREEN_ON_ACTIVITY, false);
+ assertTrue(mWmState.getKeyguardControllerState().keyguardShowing);
+ assertFalse(isDisplayOn(DEFAULT_DISPLAY));
+ activity.finish();
+ }
+
+ @Test
public void testDismissKeyguardAttrActivity_method_turnScreenOn_withSecureKeyguard() {
final LockScreenSession lockScreenSession = createManagedLockScreenSession();
lockScreenSession.setLockCredential().sleepDevice();
diff --git a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
index 977db0e..056f446 100755
--- a/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
+++ b/tests/framework/base/windowmanager/src/android/server/wm/KeyguardTests.java
@@ -37,6 +37,7 @@
import static android.server.wm.app.Components.SHOW_WHEN_LOCKED_TRANSLUCENT_ACTIVITY;
import static android.server.wm.app.Components.SHOW_WHEN_LOCKED_WITH_DIALOG_ACTIVITY;
import static android.server.wm.app.Components.TEST_ACTIVITY;
+import static android.server.wm.app.Components.TURN_SCREEN_ON_ACTIVITY;
import static android.server.wm.app.Components.TURN_SCREEN_ON_ATTR_DISMISS_KEYGUARD_ACTIVITY;
import static android.server.wm.app.Components.TURN_SCREEN_ON_DISMISS_KEYGUARD_ACTIVITY;
import static android.view.Display.DEFAULT_DISPLAY;
@@ -50,13 +51,11 @@
import android.content.ComponentName;
import android.content.res.Configuration;
-import android.hardware.display.AmbientDisplayConfiguration;
import android.platform.test.annotations.Presubmit;
-import android.provider.Settings;
import android.server.wm.CommandSession.ActivitySession;
import android.server.wm.CommandSession.ActivitySessionClient;
import android.server.wm.WindowManagerState.WindowState;
-import android.server.wm.settings.SettingsSession;
+import android.server.wm.app.Components;
import androidx.test.filters.FlakyTest;
@@ -70,25 +69,6 @@
@Presubmit
@android.server.wm.annotation.Group2
public class KeyguardTests extends KeyguardTestBase {
- class AodSession extends SettingsSession<Integer> {
- private AmbientDisplayConfiguration mConfig;
-
- AodSession() {
- super(Settings.Secure.getUriFor(Settings.Secure.DOZE_ALWAYS_ON),
- Settings.Secure::getInt,
- Settings.Secure::putInt);
- mConfig = new AmbientDisplayConfiguration(mContext);
- }
-
- boolean isAodAvailable() {
- return mConfig.alwaysOnAvailable();
- }
-
- void setAodEnabled(boolean enabled) {
- set(enabled ? 1 : 0);
- }
- }
-
@Before
@Override
public void setUp() throws Exception {
@@ -456,6 +436,29 @@
WindowManagerState.STATE_RESUMED));
}
+ @Test
+ public void testTurnScreenOnOnActivityOnAod() {
+ final AodSession aodSession = createManagedAodSession();
+ assumeTrue(aodSession.isAodAvailable());
+ aodSession.setAodEnabled(true);
+
+ final LockScreenSession lockScreenSession = createManagedLockScreenSession();
+ lockScreenSession.sleepDevice();
+ assertTrue(mWmState.getKeyguardControllerState().keyguardShowing);
+
+ final CommandSession.ActivitySessionClient activityClient =
+ createManagedActivityClientSession();
+ activityClient.startActivity(
+ getLaunchActivityBuilder().setUseInstrumentation().setIntentExtra(extra -> {
+ extra.putBoolean(Components.TurnScreenOnActivity.EXTRA_SHOW_WHEN_LOCKED,
+ false);
+ }).setTargetActivity(TURN_SCREEN_ON_ACTIVITY));
+
+ mWmState.computeState(TURN_SCREEN_ON_ACTIVITY);
+ mWmState.assertVisibility(TURN_SCREEN_ON_ACTIVITY, true);
+ assertFalse(mWmState.getKeyguardControllerState().keyguardShowing);
+ assertTrue(isDisplayOn(DEFAULT_DISPLAY));
+ }
/**
* Tests whether a FLAG_DISMISS_KEYGUARD activity occludes Keyguard.
*/
@@ -601,19 +604,17 @@
@Test
public void testScreenOffWhileOccludedStopsActivityNoAod() {
- try (final AodSession aodSession = new AodSession()) {
- aodSession.setAodEnabled(false);
- testScreenOffWhileOccludedStopsActivity(false /* assertAod */);
- }
+ final AodSession aodSession = createManagedAodSession();
+ aodSession.setAodEnabled(false);
+ testScreenOffWhileOccludedStopsActivity(false /* assertAod */);
}
@Test
public void testScreenOffWhileOccludedStopsActivityAod() {
- try (final AodSession aodSession = new AodSession()) {
- assumeTrue(aodSession.isAodAvailable());
- aodSession.setAodEnabled(true);
- testScreenOffWhileOccludedStopsActivity(true /* assertAod */);
- }
+ final AodSession aodSession = createManagedAodSession();
+ assumeTrue(aodSession.isAodAvailable());
+ aodSession.setAodEnabled(true);
+ testScreenOffWhileOccludedStopsActivity(true /* assertAod */);
}
/**
@@ -643,19 +644,17 @@
@Test
public void testScreenOffCausesSingleStopNoAod() {
- try (final AodSession aodSession = new AodSession()) {
- aodSession.setAodEnabled(false);
- testScreenOffCausesSingleStop();
- }
+ final AodSession aodSession = createManagedAodSession();
+ aodSession.setAodEnabled(false);
+ testScreenOffCausesSingleStop();
}
@Test
public void testScreenOffCausesSingleStopAod() {
- try (final AodSession aodSession = new AodSession()) {
- assumeTrue(aodSession.isAodAvailable());
- aodSession.setAodEnabled(true);
- testScreenOffCausesSingleStop();
- }
+ final AodSession aodSession = createManagedAodSession();
+ assumeTrue(aodSession.isAodAvailable());
+ aodSession.setAodEnabled(true);
+ testScreenOffCausesSingleStop();
}
private void testScreenOffCausesSingleStop() {
diff --git a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
index b39c488..eee8760 100644
--- a/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
+++ b/tests/framework/base/windowmanager/util/src/android/server/wm/ActivityManagerTestBase.java
@@ -1199,6 +1199,11 @@
}
/** @see ObjectTracker#manage(AutoCloseable) */
+ protected AodSession createManagedAodSession() {
+ return mObjectTracker.manage(new AodSession());
+ }
+
+ /** @see ObjectTracker#manage(AutoCloseable) */
protected <T extends Activity> TestActivitySession<T> createManagedTestActivitySession() {
return new TestActivitySession<T>();
}
@@ -1477,6 +1482,25 @@
}
}
+ protected class AodSession extends SettingsSession<Integer> {
+ private AmbientDisplayConfiguration mConfig;
+
+ AodSession() {
+ super(Settings.Secure.getUriFor(Settings.Secure.DOZE_ALWAYS_ON),
+ Settings.Secure::getInt,
+ Settings.Secure::putInt);
+ mConfig = new AmbientDisplayConfiguration(mContext);
+ }
+
+ boolean isAodAvailable() {
+ return mConfig.alwaysOnAvailable();
+ }
+
+ void setAodEnabled(boolean enabled) {
+ set(enabled ? 1 : 0);
+ }
+ }
+
/** Helper class to save, set & wait, and restore rotation related preferences. */
protected class RotationSession extends SettingsSession<Integer> {
private final String FIXED_TO_USER_ROTATION_COMMAND =