From fc6304dc7467345ece42ad66f47d4987f03d95a7 Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Fri, 17 Feb 2023 23:44:18 +0100 Subject: [PATCH] Fix CTRL-SHIFT-SPACE shortcut Fixes an issue where the CTRL-SHIFT-SPACE shortcut did not actuall work because metaStateHasModifiers asserted that SHIFT was not pressed. Bug: 258853866 Test: atest ModifierShortcutTests Change-Id: Iab88fd45cac06e740558a0004a29652b6bde3af6 --- .../server/policy/PhoneWindowManager.java | 3 +- .../server/policy/ModifierShortcutTests.java | 28 +++++++++++++++++-- .../server/policy/TestPhoneWindowManager.java | 4 +-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 449801da426cf..96b37bf0b4cb9 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -3409,7 +3409,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { case KeyEvent.KEYCODE_SPACE: if (down && repeatCount == 0) { // Handle keyboard layout switching. (CTRL + SPACE) - if (KeyEvent.metaStateHasModifiers(metaState, KeyEvent.META_CTRL_ON)) { + if (KeyEvent.metaStateHasModifiers(metaState & ~KeyEvent.META_SHIFT_MASK, + KeyEvent.META_CTRL_ON)) { int direction = (metaState & KeyEvent.META_SHIFT_MASK) != 0 ? -1 : 1; mWindowManagerFuncs.switchKeyboardLayout(event.getDeviceId(), direction); return true; diff --git a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java index 369e8f14ff743..3ecbbfeed254a 100644 --- a/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java +++ b/services/tests/wmtests/src/com/android/server/policy/ModifierShortcutTests.java @@ -27,6 +27,7 @@ import static android.view.KeyEvent.KEYCODE_META_LEFT; import static android.view.KeyEvent.KEYCODE_N; import static android.view.KeyEvent.KEYCODE_P; import static android.view.KeyEvent.KEYCODE_S; +import static android.view.KeyEvent.KEYCODE_SHIFT_LEFT; import static android.view.KeyEvent.KEYCODE_SLASH; import static android.view.KeyEvent.KEYCODE_SPACE; import static android.view.KeyEvent.KEYCODE_TAB; @@ -35,10 +36,15 @@ import static android.view.KeyEvent.KEYCODE_Z; import android.content.Intent; import android.os.RemoteException; +import android.platform.test.annotations.Presubmit; import android.util.SparseArray; +import androidx.test.filters.SmallTest; + import org.junit.Test; +@Presubmit +@SmallTest public class ModifierShortcutTests extends ShortcutKeyTestBase { private static final SparseArray META_SHORTCUTS = new SparseArray<>(); static { @@ -82,7 +88,16 @@ public class ModifierShortcutTests extends ShortcutKeyTestBase { @Test public void testCtrlSpace() { sendKeyCombination(new int[]{KEYCODE_CTRL_LEFT, KEYCODE_SPACE}, 0); - mPhoneWindowManager.assertSwitchKeyboardLayout(); + mPhoneWindowManager.assertSwitchKeyboardLayout(1); + } + + /** + * CTRL + SHIFT + SPACE to switch keyboard layout backwards. + */ + @Test + public void testCtrlShiftSpace() { + sendKeyCombination(new int[]{KEYCODE_CTRL_LEFT, KEYCODE_SHIFT_LEFT, KEYCODE_SPACE}, 0); + mPhoneWindowManager.assertSwitchKeyboardLayout(-1); } /** @@ -91,7 +106,16 @@ public class ModifierShortcutTests extends ShortcutKeyTestBase { @Test public void testMetaSpace() { sendKeyCombination(new int[]{KEYCODE_META_LEFT, KEYCODE_SPACE}, 0); - mPhoneWindowManager.assertSwitchKeyboardLayout(); + mPhoneWindowManager.assertSwitchKeyboardLayout(1); + } + + /** + * META + SHIFT + SPACE to switch keyboard layout backwards. + */ + @Test + public void testMetaShiftSpace() { + sendKeyCombination(new int[]{KEYCODE_META_LEFT, KEYCODE_SHIFT_LEFT, KEYCODE_SPACE}, 0); + mPhoneWindowManager.assertSwitchKeyboardLayout(-1); } /** diff --git a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java index 6e7e005fc0a38..6da9d0c606cff 100644 --- a/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java +++ b/services/tests/wmtests/src/com/android/server/policy/TestPhoneWindowManager.java @@ -415,9 +415,9 @@ class TestPhoneWindowManager { verify(mStatusBarManagerInternal).showRecentApps(anyBoolean()); } - void assertSwitchKeyboardLayout() { + void assertSwitchKeyboardLayout(int direction) { waitForIdle(); - verify(mWindowManagerFuncsImpl).switchKeyboardLayout(anyInt(), anyInt()); + verify(mWindowManagerFuncsImpl).switchKeyboardLayout(anyInt(), eq(direction)); } void assertTakeBugreport() {