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

Commit f7d58ed5 authored by Chen Bai's avatar Chen Bai
Browse files

phonewm: fix allapp tests for phone & improve stem key testing infra

- Create the testing infra StemKeyGestureTests paralleling to
  PowerKeyGuesureTests.
- Restrict Stem Primary behavior fields' visbilities.
- Fix the all app tests that are broken for phone.

Test: atest StemKeyGestureTests
BUG: 281047310
Change-Id: If7782804ed7ab1edf9926382e22f307cb644a95e
parent ee3d06a0
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -538,10 +538,6 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    int mShortPressOnSleepBehavior;
    int mShortPressOnWindowBehavior;
    int mPowerVolUpBehavior;
    int mShortPressOnStemPrimaryBehavior;
    int mDoublePressOnStemPrimaryBehavior;
    int mTriplePressOnStemPrimaryBehavior;
    int mLongPressOnStemPrimaryBehavior;
    boolean mStylusButtonsEnabled = true;
    boolean mHasSoftInput = false;
    boolean mHapticTextHandleEnabled;
@@ -555,6 +551,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    int mSearchKeyBehavior;
    ComponentName mSearchKeyTargetActivity;

    // Key Behavior - Stem Primary
    private int mShortPressOnStemPrimaryBehavior;
    private int mDoublePressOnStemPrimaryBehavior;
    private int mTriplePressOnStemPrimaryBehavior;
    private int mLongPressOnStemPrimaryBehavior;

    private boolean mHandleVolumeKeysInWM;

    private boolean mPendingKeyguardOccluded;
+2 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import static android.view.KeyEvent.META_SHIFT_RIGHT_ON;

import static androidx.test.platform.app.InstrumentationRegistry.getInstrumentation;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.spy;
import static com.android.server.policy.WindowManagerPolicy.ACTION_PASS_TO_USER;

import static java.util.Collections.unmodifiableMap;
@@ -59,7 +60,7 @@ import java.util.Map;

class ShortcutKeyTestBase {
    TestPhoneWindowManager mPhoneWindowManager;
    final Context mContext = getInstrumentation().getTargetContext();
    final Context mContext = spy(getInstrumentation().getTargetContext());

    /** Modifier key to meta state */
    private static final Map<Integer, Integer> MODIFIER;
+47 −9
Original line number Diff line number Diff line
@@ -18,10 +18,19 @@ package com.android.server.policy;

import static android.view.KeyEvent.KEYCODE_STEM_PRIMARY;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.server.policy.PhoneWindowManager.SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS;

import org.junit.Before;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;

import android.content.Context;
import android.content.res.Resources;

import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;

/**
 * Test class for stem key gesture.
@@ -30,19 +39,18 @@ import org.junit.Test;
 * atest WmTests:StemKeyGestureTests
 */
public class StemKeyGestureTests extends ShortcutKeyTestBase {

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

    /**
     * Stem single key should not launch behavior during set up.
     */
    @Test
    public void stemSingleKey_duringSetup_doNothing() {
        stemKeySetup(
                () -> overrideBehavior(
                        com.android.internal.R.integer.config_shortPressOnStemPrimaryBehavior,
                        SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS));
        mPhoneWindowManager.setKeyguardServiceDelegateIsShowing(false);
        mPhoneWindowManager.overrideIsUserSetupComplete(false);

        sendKey(KEYCODE_STEM_PRIMARY);
@@ -55,10 +63,40 @@ public class StemKeyGestureTests extends ShortcutKeyTestBase {
     */
    @Test
    public void stemSingleKey_AfterSetup_openAllApp() {
        stemKeySetup(
                () -> overrideBehavior(
                        com.android.internal.R.integer.config_shortPressOnStemPrimaryBehavior,
                        SHORT_PRESS_PRIMARY_LAUNCH_ALL_APPS));
        mPhoneWindowManager.setKeyguardServiceDelegateIsShowing(false);
        mPhoneWindowManager.overrideIsUserSetupComplete(true);

        sendKey(KEYCODE_STEM_PRIMARY);

        mPhoneWindowManager.assertOpenAllAppView();
    }

    private void stemKeySetup(Runnable behaviorOverrideRunnable) {
        super.tearDown();
        setupResourcesMock();
        behaviorOverrideRunnable.run();
        super.setUp();
    }

    private void setupResourcesMock() {
        Resources realResources = mContext.getResources();

        mResources = Mockito.mock(Resources.class);
        doReturn(mResources).when(mContext).getResources();

        doAnswer(invocation -> realResources.getXml((Integer) invocation.getArguments()[0]))
                .when(mResources).getXml(anyInt());
        doAnswer(invocation -> realResources.getString((Integer) invocation.getArguments()[0]))
                .when(mResources).getString(anyInt());
        doAnswer(invocation -> realResources.getBoolean((Integer) invocation.getArguments()[0]))
                .when(mResources).getBoolean(anyInt());
    }

    private void overrideBehavior(int resId, int expectedBehavior) {
        doReturn(expectedBehavior).when(mResources).getInteger(eq(resId));
    }
}
+4 −7
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import static org.mockito.ArgumentMatchers.isNull;
import static org.mockito.Mockito.CALLS_REAL_METHODS;
import static org.mockito.Mockito.after;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mockingDetails;
import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.withSettings;
@@ -171,12 +172,12 @@ class TestPhoneWindowManager {
        mHandlerThread = new HandlerThread("fake window manager");
        mHandlerThread.start();
        mHandler = new Handler(mHandlerThread.getLooper());
        mHandler.runWithScissors(()-> setUp(context),  0 /* timeout */);
        mContext = mockingDetails(context).isSpy() ? context : spy(context);
        mHandler.runWithScissors(this::setUp,  0 /* timeout */);
    }

    private void setUp(Context context) {
    private void setUp() {
        mPhoneWindowManager = spy(new PhoneWindowManager());
        mContext = spy(context);

        // Use stubOnly() to reduce memory usage if it doesn't need verification.
        final MockSettings spyStubOnly = withSettings().stubOnly()
@@ -339,10 +340,6 @@ class TestPhoneWindowManager {
        }
    }

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

    void overrideCanStartDreaming(boolean canDream) {
        doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean());
    }