Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +16 −12 Original line number Original line Diff line number Diff line Loading @@ -2022,6 +2022,21 @@ public class PhoneWindowManager implements WindowManagerPolicy { Supplier<GlobalActions> getGlobalActionsFactory() { Supplier<GlobalActions> getGlobalActionsFactory() { return () -> new GlobalActions(mContext, mWindowManagerFuncs); 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} */ /** {@inheritDoc} */ Loading Loading @@ -2276,18 +2291,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mKeyguardDrawnTimeout = mContext.getResources().getInteger( mKeyguardDrawnTimeout = mContext.getResources().getInteger( com.android.internal.R.integer.config_keyguardDrawnTimeout); com.android.internal.R.integer.config_keyguardDrawnTimeout); mKeyguardDelegate = new KeyguardServiceDelegate(mContext, mKeyguardDelegate = injector.getKeyguardServiceDelegate(); new StateCallback() { @Override public void onTrustedChanged() { mWindowManagerFuncs.notifyKeyguardTrustedChanged(); } @Override public void onShowingChanged() { mWindowManagerFuncs.onKeyguardShowingAndNotOccludedChanged(); } }); initKeyCombinationRules(); initKeyCombinationRules(); initSingleKeyGestureRules(); initSingleKeyGestureRules(); mSideFpsEventHandler = new SideFpsEventHandler(mContext, mHandler, mPowerManager); mSideFpsEventHandler = new SideFpsEventHandler(mContext, mHandler, mPowerManager); Loading services/tests/wmtests/src/com/android/server/policy/StemKeyGestureTests.java 0 → 100644 +64 −0 Original line number Original line 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(); } } services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +35 −0 Original line number Original line Diff line number Diff line Loading @@ -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 com.android.server.policy.PhoneWindowManager.POWER_VOLUME_UP_BEHAVIOR_MUTE; import static org.mockito.ArgumentMatchers.anyBoolean; 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.CALLS_REAL_METHODS; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.timeout; Loading @@ -64,6 +65,7 @@ import android.os.HandlerThread; import android.os.PowerManager; import android.os.PowerManager; import android.os.PowerManagerInternal; import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.RemoteException; import android.os.UserHandle; import android.os.Vibrator; import android.os.Vibrator; import android.service.dreams.DreamManagerInternal; import android.service.dreams.DreamManagerInternal; import android.telecom.TelecomManager; import android.telecom.TelecomManager; Loading @@ -78,6 +80,7 @@ import com.android.server.GestureLauncherService; import com.android.server.LocalServices; import com.android.server.LocalServices; import com.android.server.input.InputManagerInternal; import com.android.server.input.InputManagerInternal; import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.policy.keyguard.KeyguardServiceDelegate; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.vr.VrManagerInternal; import com.android.server.vr.VrManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; Loading Loading @@ -131,6 +134,8 @@ class TestPhoneWindowManager { @Mock private StatusBarManagerInternal mStatusBarManagerInternal; @Mock private StatusBarManagerInternal mStatusBarManagerInternal; @Mock private KeyguardServiceDelegate mKeyguardServiceDelegate; private StaticMockitoSession mMockitoSession; private StaticMockitoSession mMockitoSession; private HandlerThread mHandlerThread; private HandlerThread mHandlerThread; private Handler mHandler; private Handler mHandler; Loading @@ -148,6 +153,10 @@ class TestPhoneWindowManager { Supplier<GlobalActions> getGlobalActionsFactory() { Supplier<GlobalActions> getGlobalActionsFactory() { return () -> mGlobalActions; return () -> mGlobalActions; } } KeyguardServiceDelegate getKeyguardServiceDelegate() { return mKeyguardServiceDelegate; } } } TestPhoneWindowManager(Context context) { TestPhoneWindowManager(Context context) { Loading Loading @@ -316,6 +325,10 @@ class TestPhoneWindowManager { } } } } void overrideShortPressOnStemPrimaryBehavior(int behavior) { mPhoneWindowManager.mShortPressOnStemPrimaryBehavior = behavior; } void overrideCanStartDreaming(boolean canDream) { void overrideCanStartDreaming(boolean canDream) { doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean()); doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean()); } } Loading Loading @@ -357,6 +370,14 @@ class TestPhoneWindowManager { doNothing().when(mPhoneWindowManager).launchHomeFromHotKey(anyInt()); 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. * Below functions will check the policy behavior could be invoked. */ */ Loading Loading @@ -489,4 +510,18 @@ class TestPhoneWindowManager { waitForIdle(); waitForIdle(); verify(mPhoneWindowManager).launchHomeFromHotKey(anyInt()); 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)); } } } Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +16 −12 Original line number Original line Diff line number Diff line Loading @@ -2022,6 +2022,21 @@ public class PhoneWindowManager implements WindowManagerPolicy { Supplier<GlobalActions> getGlobalActionsFactory() { Supplier<GlobalActions> getGlobalActionsFactory() { return () -> new GlobalActions(mContext, mWindowManagerFuncs); 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} */ /** {@inheritDoc} */ Loading Loading @@ -2276,18 +2291,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { mKeyguardDrawnTimeout = mContext.getResources().getInteger( mKeyguardDrawnTimeout = mContext.getResources().getInteger( com.android.internal.R.integer.config_keyguardDrawnTimeout); com.android.internal.R.integer.config_keyguardDrawnTimeout); mKeyguardDelegate = new KeyguardServiceDelegate(mContext, mKeyguardDelegate = injector.getKeyguardServiceDelegate(); new StateCallback() { @Override public void onTrustedChanged() { mWindowManagerFuncs.notifyKeyguardTrustedChanged(); } @Override public void onShowingChanged() { mWindowManagerFuncs.onKeyguardShowingAndNotOccludedChanged(); } }); initKeyCombinationRules(); initKeyCombinationRules(); initSingleKeyGestureRules(); initSingleKeyGestureRules(); mSideFpsEventHandler = new SideFpsEventHandler(mContext, mHandler, mPowerManager); mSideFpsEventHandler = new SideFpsEventHandler(mContext, mHandler, mPowerManager); Loading
services/tests/wmtests/src/com/android/server/policy/StemKeyGestureTests.java 0 → 100644 +64 −0 Original line number Original line 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(); } }
services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +35 −0 Original line number Original line Diff line number Diff line Loading @@ -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 com.android.server.policy.PhoneWindowManager.POWER_VOLUME_UP_BEHAVIOR_MUTE; import static org.mockito.ArgumentMatchers.anyBoolean; 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.CALLS_REAL_METHODS; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.timeout; import static org.mockito.Mockito.timeout; Loading @@ -64,6 +65,7 @@ import android.os.HandlerThread; import android.os.PowerManager; import android.os.PowerManager; import android.os.PowerManagerInternal; import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.RemoteException; import android.os.UserHandle; import android.os.Vibrator; import android.os.Vibrator; import android.service.dreams.DreamManagerInternal; import android.service.dreams.DreamManagerInternal; import android.telecom.TelecomManager; import android.telecom.TelecomManager; Loading @@ -78,6 +80,7 @@ import com.android.server.GestureLauncherService; import com.android.server.LocalServices; import com.android.server.LocalServices; import com.android.server.input.InputManagerInternal; import com.android.server.input.InputManagerInternal; import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.inputmethod.InputMethodManagerInternal; import com.android.server.policy.keyguard.KeyguardServiceDelegate; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.vr.VrManagerInternal; import com.android.server.vr.VrManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; import com.android.server.wm.ActivityTaskManagerInternal; Loading Loading @@ -131,6 +134,8 @@ class TestPhoneWindowManager { @Mock private StatusBarManagerInternal mStatusBarManagerInternal; @Mock private StatusBarManagerInternal mStatusBarManagerInternal; @Mock private KeyguardServiceDelegate mKeyguardServiceDelegate; private StaticMockitoSession mMockitoSession; private StaticMockitoSession mMockitoSession; private HandlerThread mHandlerThread; private HandlerThread mHandlerThread; private Handler mHandler; private Handler mHandler; Loading @@ -148,6 +153,10 @@ class TestPhoneWindowManager { Supplier<GlobalActions> getGlobalActionsFactory() { Supplier<GlobalActions> getGlobalActionsFactory() { return () -> mGlobalActions; return () -> mGlobalActions; } } KeyguardServiceDelegate getKeyguardServiceDelegate() { return mKeyguardServiceDelegate; } } } TestPhoneWindowManager(Context context) { TestPhoneWindowManager(Context context) { Loading Loading @@ -316,6 +325,10 @@ class TestPhoneWindowManager { } } } } void overrideShortPressOnStemPrimaryBehavior(int behavior) { mPhoneWindowManager.mShortPressOnStemPrimaryBehavior = behavior; } void overrideCanStartDreaming(boolean canDream) { void overrideCanStartDreaming(boolean canDream) { doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean()); doReturn(canDream).when(mDreamManagerInternal).canStartDreaming(anyBoolean()); } } Loading Loading @@ -357,6 +370,14 @@ class TestPhoneWindowManager { doNothing().when(mPhoneWindowManager).launchHomeFromHotKey(anyInt()); 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. * Below functions will check the policy behavior could be invoked. */ */ Loading Loading @@ -489,4 +510,18 @@ class TestPhoneWindowManager { waitForIdle(); waitForIdle(); verify(mPhoneWindowManager).launchHomeFromHotKey(anyInt()); 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)); } } }