Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c09dd42d authored by Chun-Ku Lin's avatar Chun-Ku Lin Committed by Android (Google) Code Review
Browse files

Merge "Ensure the screen is locked after closing the screen" into main

parents cee37bf9 8066398f
Loading
Loading
Loading
Loading
+17 −10
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import static com.android.systemui.accessibility.accessibilitymenu.Accessibility
import static com.android.systemui.accessibility.accessibilitymenu.AccessibilityMenuService.INTENT_TOGGLE_MENU;
import static com.android.systemui.accessibility.accessibilitymenu.AccessibilityMenuService.INTENT_TOGGLE_MENU;
import static com.android.systemui.accessibility.accessibilitymenu.AccessibilityMenuService.PACKAGE_NAME;
import static com.android.systemui.accessibility.accessibilitymenu.AccessibilityMenuService.PACKAGE_NAME;


import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static com.google.common.truth.Truth.assertWithMessage;


import android.accessibilityservice.AccessibilityServiceInfo;
import android.accessibilityservice.AccessibilityServiceInfo;
@@ -45,11 +46,11 @@ import android.hardware.display.BrightnessInfo;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager;
import android.media.AudioManager;
import android.media.AudioManager;
import android.os.PowerManager;
import android.os.PowerManager;
import android.os.RemoteException;
import android.platform.uiautomator_helpers.WaitUtils;
import android.platform.uiautomator_helpers.WaitUtils;
import android.provider.Settings;
import android.provider.Settings;
import android.util.Log;
import android.util.Log;
import android.view.Display;
import android.view.Display;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo;


@@ -69,6 +70,7 @@ import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;


import java.io.IOException;
import java.util.List;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicInteger;
@@ -112,6 +114,7 @@ public class AccessibilityMenuServiceTest {
        sPowerManager = context.getSystemService(PowerManager.class);
        sPowerManager = context.getSystemService(PowerManager.class);
        sKeyguardManager = context.getSystemService(KeyguardManager.class);
        sKeyguardManager = context.getSystemService(KeyguardManager.class);
        sDisplayManager = context.getSystemService(DisplayManager.class);
        sDisplayManager = context.getSystemService(DisplayManager.class);
        unlockSignal();


        // Disable all a11yServices if any are active.
        // Disable all a11yServices if any are active.
        if (!sAccessibilityManager.getEnabledAccessibilityServiceList(
        if (!sAccessibilityManager.getEnabledAccessibilityServiceList(
@@ -176,28 +179,32 @@ public class AccessibilityMenuServiceTest {
    }
    }


    private static boolean isMenuVisible() {
    private static boolean isMenuVisible() {
        sUiDevice.waitForIdle();
        AccessibilityNodeInfo root = sUiAutomation.getRootInActiveWindow();
        AccessibilityNodeInfo root = sUiAutomation.getRootInActiveWindow();
        return root != null && root.getPackageName().toString().equals(PACKAGE_NAME);
        return root != null && root.getPackageName().toString().equals(PACKAGE_NAME);
    }
    }


    private static void wakeUpScreen() throws RemoteException {
    private static void wakeUpScreen() throws IOException {
        sUiDevice.wakeUp();
        sUiDevice.pressKeyCode(KeyEvent.KEYCODE_WAKEUP);
        WaitUtils.waitForValueToSettle("Screen On", AccessibilityMenuServiceTest::isScreenOn);
        WaitUtils.waitForValueToSettle("Screen On", AccessibilityMenuServiceTest::isScreenOn);
        assertWithMessage("Screen is on").that(isScreenOn()).isTrue();
        assertWithMessage("Screen is on").that(isScreenOn()).isTrue();
    }
    }


    private static void closeScreen() throws Throwable {
    private static void closeScreen() throws Throwable {
        sUiAutomation.performGlobalAction(GLOBAL_ACTION_LOCK_SCREEN);
        // go/adb-cheats#lock-screen
        sUiDevice.pressKeyCode(KeyEvent.KEYCODE_SLEEP);
        WaitUtils.waitForValueToSettle("Screen Off", AccessibilityMenuServiceTest::isScreenOff);
        WaitUtils.waitForValueToSettle("Screen Off", AccessibilityMenuServiceTest::isScreenOff);
        assertWithMessage("Screen is off").that(isScreenOff()).isTrue();
        assertWithMessage("Screen is off").that(isScreenOff()).isTrue();
        WaitUtils.ensureThat(
                "Screen is locked", () -> sKeyguardManager.isKeyguardLocked());
    }
    }


    private static void openMenu() throws Throwable {
    private static void openMenu() throws Throwable {
        unlockSignal();
        unlockSignal();
        if (!isMenuVisible()) {
        if (!isMenuVisible()) {
            sInstrumentation.getTargetContext().sendBroadcast(INTENT_OPEN_MENU);
            sInstrumentation.getTargetContext().sendBroadcast(INTENT_OPEN_MENU);
            sUiDevice.waitForIdle();
            WaitUtils.ensureThat("Accessibility Menu is visible",
            WaitUtils.ensureThat("Accessibility Menu is visible", () -> isMenuVisible());
                    AccessibilityMenuServiceTest::isMenuVisible);
        }
        }
    }
    }


@@ -449,6 +456,7 @@ public class AccessibilityMenuServiceTest {
        openMenu();
        openMenu();
        closeScreen();
        closeScreen();
        wakeUpScreen();
        wakeUpScreen();
        assertThat(sKeyguardManager.isKeyguardLocked()).isTrue();


        TestUtils.waitUntil("Menu did not close.",
        TestUtils.waitUntil("Menu did not close.",
                TIMEOUT_UI_CHANGE_S,
                TIMEOUT_UI_CHANGE_S,
@@ -460,6 +468,8 @@ public class AccessibilityMenuServiceTest {
    public void testOnScreenLock_cannotOpenMenu() throws Throwable {
    public void testOnScreenLock_cannotOpenMenu() throws Throwable {
        closeScreen();
        closeScreen();
        wakeUpScreen();
        wakeUpScreen();
        assertThat(sKeyguardManager.isKeyguardLocked()).isTrue();

        sInstrumentation.getContext().sendBroadcast(INTENT_OPEN_MENU);
        sInstrumentation.getContext().sendBroadcast(INTENT_OPEN_MENU);
        sUiDevice.waitForIdle();
        sUiDevice.waitForIdle();


@@ -468,10 +478,7 @@ public class AccessibilityMenuServiceTest {
                sOpenBlocked::get);
                sOpenBlocked::get);
    }
    }


    private static void unlockSignal() throws RemoteException {
    private static void unlockSignal() throws IOException {
        if (!sKeyguardManager.isKeyguardLocked()) {
            return;
        }
        // go/adb-cheats#unlock-screen
        // go/adb-cheats#unlock-screen
        wakeUpScreen();
        wakeUpScreen();
        if (sKeyguardManager.isKeyguardLocked()) {
        if (sKeyguardManager.isKeyguardLocked()) {