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

Commit 873c99a1 authored by Chen Bai's avatar Chen Bai
Browse files

phonewm: test for opening all-app during oobe/setup

- Add `StemKeyGestureTests` to cover test all-app opening during(or not) set up.

TEST: atest StemKeyGestureTests --iterations
BUG: 278497746
Change-Id: Ifac7ceb28d34b44582697a25bc0536810d4c511e
parent 04eed95b
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -2022,6 +2022,21 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        Supplier<GlobalActions> getGlobalActionsFactory() {
            return () -> new GlobalActions(mContext, mWindowManagerFuncs);
        }

        KeyguardServiceDelegate getKeyguardServiceDelegate() {
            return new KeyguardServiceDelegate(mContext,
                    new StateCallback() {
                        @Override
                        public void onTrustedChanged() {
                            mWindowManagerFuncs.notifyKeyguardTrustedChanged();
                        }

                        @Override
                        public void onShowingChanged() {
                            mWindowManagerFuncs.onKeyguardShowingAndNotOccludedChanged();
                        }
                    });
        }
    }

    /** {@inheritDoc} */
@@ -2276,18 +2291,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {

        mKeyguardDrawnTimeout = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_keyguardDrawnTimeout);
        mKeyguardDelegate = new KeyguardServiceDelegate(mContext,
                new StateCallback() {
                    @Override
                    public void onTrustedChanged() {
                        mWindowManagerFuncs.notifyKeyguardTrustedChanged();
                    }

                    @Override
                    public void onShowingChanged() {
                        mWindowManagerFuncs.onKeyguardShowingAndNotOccludedChanged();
                    }
                });
        mKeyguardDelegate = injector.getKeyguardServiceDelegate();
        initKeyCombinationRules();
        initSingleKeyGestureRules();
        mSideFpsEventHandler = new SideFpsEventHandler(mContext, mHandler, mPowerManager);
+64 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.policy;

import static android.view.KeyEvent.KEYCODE_STEM_PRIMARY;

import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS;

import org.junit.Before;
import org.junit.Test;

/**
 * Test class for stem key gesture.
 *
 * Build/Install/Run:
 *  atest WmTests:StemKeyGestureTests
 */
public class StemKeyGestureTests extends ShortcutKeyTestBase {

    @Before
    public void stemKeySetup() {
        mPhoneWindowManager.overrideShortPressOnStemPrimaryBehavior(
                SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS);
        mPhoneWindowManager.setKeyguardServiceDelegateIsShowing(false);
    }

    /**
     * Stem single key should not launch behavior during set up.
     */
    @Test
    public void stemSingleKey_duringSetup_doNothing() {
        mPhoneWindowManager.overrideIsUserSetupComplete(false);

        sendKey(KEYCODE_STEM_PRIMARY);

        mPhoneWindowManager.assertNotOpenAllAppView();
    }

    /**
     * Stem single key should launch all app after set up.
     */
    @Test
    public void stemSingleKey_AfterSetup_openAllApp() {
        mPhoneWindowManager.overrideIsUserSetupComplete(true);

        sendKey(KEYCODE_STEM_PRIMARY);

        mPhoneWindowManager.assertOpenAllAppView();
    }
}
+35 −0
Original line number Diff line number Diff line
@@ -43,6 +43,7 @@ import static com.android.server.policy.PhoneWindowManager.LONG_PRESS_POWER_SHUT
import static com.android.server.policy.PhoneWindowManager.POWER_VOLUME_UP_BEHAVIOR_MUTE;

import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.timeout;
@@ -64,6 +65,7 @@ import android.os.HandlerThread;
import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.Vibrator;
import android.service.dreams.DreamManagerInternal;
import android.telecom.TelecomManager;
@@ -78,6 +80,7 @@ import com.android.server.GestureLauncherService;
import com.android.server.LocalServices;
import com.android.server.input.InputManagerInternal;
import com.android.server.inputmethod.InputMethodManagerInternal;
import com.android.server.policy.keyguard.KeyguardServiceDelegate;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.vr.VrManagerInternal;
import com.android.server.wm.ActivityTaskManagerInternal;
@@ -131,6 +134,8 @@ class TestPhoneWindowManager {

    @Mock private StatusBarManagerInternal mStatusBarManagerInternal;

    @Mock private KeyguardServiceDelegate mKeyguardServiceDelegate;

    private StaticMockitoSession mMockitoSession;
    private HandlerThread mHandlerThread;
    private Handler mHandler;
@@ -148,6 +153,10 @@ class TestPhoneWindowManager {
        Supplier<GlobalActions> getGlobalActionsFactory() {
            return () -> mGlobalActions;
        }

        KeyguardServiceDelegate getKeyguardServiceDelegate() {
            return mKeyguardServiceDelegate;
        }
    }

    TestPhoneWindowManager(Context context) {
@@ -316,6 +325,10 @@ class TestPhoneWindowManager {
        }
    }

    void overrideShortPressOnStemPrimaryBehavior(int behavior) {
        mPhoneWindowManager.mShortPressOnStemPrimaryBehavior = behavior;
    }

    void overrideCanStartDreaming(boolean canDream) {
        doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean());
    }
@@ -357,6 +370,14 @@ class TestPhoneWindowManager {
        doNothing().when(mPhoneWindowManager).launchHomeFromHotKey(anyInt());
    }

    void overrideIsUserSetupComplete(boolean isCompleted) {
        doReturn(isCompleted).when(mPhoneWindowManager).isUserSetupComplete();
    }

    void setKeyguardServiceDelegateIsShowing(boolean isShowing) {
        doReturn(isShowing).when(mKeyguardServiceDelegate).isShowing();
    }

    /**
     * Below functions will check the policy behavior could be invoked.
     */
@@ -489,4 +510,18 @@ class TestPhoneWindowManager {
        waitForIdle();
        verify(mPhoneWindowManager).launchHomeFromHotKey(anyInt());
    }

    void assertOpenAllAppView() {
        waitForIdle();
        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
        verify(mContext, timeout(SingleKeyGestureDetector.MULTI_PRESS_TIMEOUT * 2))
                .startActivityAsUser(intentCaptor.capture(), isNull(), any(UserHandle.class));
        Assert.assertEquals(Intent.ACTION_ALL_APPS, intentCaptor.getValue().getAction());
    }

    void assertNotOpenAllAppView() {
        waitForIdle();
        verify(mContext, never()).startActivityAsUser(
                any(Intent.class), any(), any(UserHandle.class));
    }
}