1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License 15 */ 16 17package android.server.am; 18 19import static android.server.am.ActivityManagerState.STATE_RESUMED; 20import static android.server.am.ActivityManagerState.STATE_STOPPED; 21import static android.server.am.Components.DISMISS_KEYGUARD_ACTIVITY; 22import static android.server.am.Components.SHOW_WHEN_LOCKED_ACTIVITY; 23import static android.server.am.Components.TEST_ACTIVITY; 24import static android.server.am.Components.VIRTUAL_DISPLAY_ACTIVITY; 25 26import static org.junit.Assume.assumeTrue; 27 28import android.server.am.ActivityManagerState.ActivityDisplay; 29 30import org.junit.Before; 31import org.junit.Test; 32 33/** 34 * Display tests that require a locked keyguard. 35 * 36 * <p>Build/Install/Run: 37 * atest CtsActivityManagerDeviceTestCases:ActivityManagerDisplayLockedKeyguardTests 38 */ 39public class ActivityManagerDisplayLockedKeyguardTests extends ActivityManagerDisplayTestBase { 40 41 @Before 42 @Override 43 public void setUp() throws Exception { 44 super.setUp(); 45 46 assumeTrue(supportsMultiDisplay()); 47 assumeTrue(supportsSecureLock()); 48 } 49 50 /** 51 * Test that virtual display content is hidden when device is locked. 52 */ 53 @Test 54 public void testVirtualDisplayHidesContentWhenLocked() throws Exception { 55 try (final VirtualDisplaySession virtualDisplaySession = new VirtualDisplaySession(); 56 final LockScreenSession lockScreenSession = new LockScreenSession()) { 57 lockScreenSession.setLockCredential(); 58 59 // Create new usual virtual display. 60 final ActivityDisplay newDisplay = virtualDisplaySession.createDisplay(); 61 mAmWmState.assertVisibility(VIRTUAL_DISPLAY_ACTIVITY, true /* visible */); 62 63 // Launch activity on new secondary display. 64 launchActivityOnDisplay(TEST_ACTIVITY, newDisplay.mId); 65 mAmWmState.assertVisibility(TEST_ACTIVITY, true /* visible */); 66 67 // Lock the device. 68 lockScreenSession.gotoKeyguard(); 69 mAmWmState.waitForActivityState(TEST_ACTIVITY, STATE_STOPPED); 70 mAmWmState.assertVisibility(TEST_ACTIVITY, false /* visible */); 71 72 // Unlock and check if visibility is back. 73 lockScreenSession.unlockDevice() 74 .enterAndConfirmLockCredential(); 75 mAmWmState.waitForKeyguardGone(); 76 mAmWmState.waitForActivityState(TEST_ACTIVITY, STATE_RESUMED); 77 mAmWmState.assertVisibility(TEST_ACTIVITY, true /* visible */); 78 } 79 } 80 81 /** 82 * Tests whether a FLAG_DISMISS_KEYGUARD activity on a secondary display dismisses the keyguard. 83 */ 84 @Test 85 public void testDismissKeyguard_secondaryDisplay() throws Exception { 86 try (final VirtualDisplaySession virtualDisplaySession = new VirtualDisplaySession(); 87 final LockScreenSession lockScreenSession = new LockScreenSession()) { 88 lockScreenSession.setLockCredential(); 89 final ActivityDisplay newDisplay = virtualDisplaySession.createDisplay(); 90 91 lockScreenSession.gotoKeyguard(); 92 mAmWmState.assertKeyguardShowingAndNotOccluded(); 93 launchActivityOnDisplay(DISMISS_KEYGUARD_ACTIVITY, newDisplay.mId); 94 lockScreenSession.enterAndConfirmLockCredential(); 95 mAmWmState.waitForKeyguardGone(); 96 mAmWmState.assertKeyguardGone(); 97 mAmWmState.assertVisibility(DISMISS_KEYGUARD_ACTIVITY, true); 98 } 99 } 100 101 @Test 102 public void testDismissKeyguard_whileOccluded_secondaryDisplay() throws Exception { 103 try (final VirtualDisplaySession virtualDisplaySession = new VirtualDisplaySession(); 104 final LockScreenSession lockScreenSession = new LockScreenSession()) { 105 lockScreenSession.setLockCredential(); 106 final ActivityDisplay newDisplay = virtualDisplaySession.createDisplay(); 107 108 lockScreenSession.gotoKeyguard(); 109 mAmWmState.assertKeyguardShowingAndNotOccluded(); 110 launchActivity(SHOW_WHEN_LOCKED_ACTIVITY); 111 mAmWmState.computeState(SHOW_WHEN_LOCKED_ACTIVITY); 112 mAmWmState.assertVisibility(SHOW_WHEN_LOCKED_ACTIVITY, true); 113 launchActivityOnDisplay(DISMISS_KEYGUARD_ACTIVITY, newDisplay.mId); 114 lockScreenSession.enterAndConfirmLockCredential(); 115 mAmWmState.waitForKeyguardGone(); 116 mAmWmState.assertKeyguardGone(); 117 mAmWmState.assertVisibility(DISMISS_KEYGUARD_ACTIVITY, true); 118 mAmWmState.assertVisibility(SHOW_WHEN_LOCKED_ACTIVITY, true); 119 } 120 } 121} 122