From 95026d42044ae0d30e775310714b68c9dd85bedc Mon Sep 17 00:00:00 2001 From: Philip Junker Date: Tue, 4 Oct 2022 17:25:26 +0200 Subject: [PATCH] Add testApi to query global keys. This removes cts/GlobalKeyMapping which copied the behavior of GlobalKeyManager. Bug: 199182608 Test: GoogleAtvReferenceRemoteControlTest Change-Id: I7d48f7ce5484fb360ff41c62516c06b27b3e1d88 --- core/api/test-current.txt | 1 + core/java/android/view/IWindowManager.aidl | 8 ++++++++ core/java/android/view/WindowManager.java | 12 ++++++++++++ core/java/android/view/WindowManagerImpl.java | 9 +++++++++ .../android/server/policy/PhoneWindowManager.java | 5 +++++ .../android/server/policy/WindowManagerPolicy.java | 8 ++++++++ .../com/android/server/wm/WindowManagerService.java | 5 +++++ .../android/server/wm/TestWindowManagerPolicy.java | 5 +++++ 8 files changed, 53 insertions(+) diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 9f333315451cc..ce6012ba70e5d 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -2937,6 +2937,7 @@ package android.view { public interface WindowManager extends android.view.ViewManager { method public default int getDisplayImePolicy(int); method public default void holdLock(android.os.IBinder, int); + method public default boolean isGlobalKey(int); method public default boolean isTaskSnapshotSupported(); method public default void setDisplayImePolicy(int, int); method public default void setShouldShowSystemDecors(int, boolean); diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 30dc0c2aa7d67..dddbe395aef19 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -985,4 +985,12 @@ interface IWindowManager */ oneway void captureDisplay(int displayId, in @nullable ScreenCapture.CaptureArgs captureArgs, in ScreenCapture.ScreenCaptureListener listener); + + /** + * Returns {@code true} if the key will be handled globally and not forwarded to all apps. + * + * @param keyCode the key code to check + * @return {@code true} if the key will be handled globally. + */ + boolean isGlobalKey(int keyCode); } diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 8656af2151d9e..e757d6a33dd1e 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -944,6 +944,18 @@ public interface WindowManager extends ViewManager { return DISPLAY_IME_POLICY_FALLBACK_DISPLAY; } + /** + * Returns {@code true} if the key will be handled globally and not forwarded to all apps. + * + * @param keyCode the key code to check + * @return {@code true} if the key will be handled globally. + * @hide + */ + @TestApi + default boolean isGlobalKey(int keyCode) { + return false; + } + /** *

* Returns whether cross-window blur is currently enabled. This affects both window blur behind diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index dc4ccbad27be7..6dc90117bf55d 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -282,6 +282,15 @@ public final class WindowManagerImpl implements WindowManager { return DISPLAY_IME_POLICY_FALLBACK_DISPLAY; } + @Override + public boolean isGlobalKey(int keyCode) { + try { + return WindowManagerGlobal.getWindowManagerService().isGlobalKey(keyCode); + } catch (RemoteException e) { + } + return false; + } + @Override public WindowMetrics getCurrentWindowMetrics() { final Context context = mParentWindow != null ? mParentWindow.getContext() : mContext; diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 41663648c98cf..42a0515fd6201 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -5493,6 +5493,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { effectId, always, reason); } + @Override + public boolean isGlobalKey(int keyCode) { + return mGlobalKeyManager.shouldHandleGlobalKey(keyCode); + } + @Override public boolean performHapticFeedback(int uid, String packageName, int effectId, boolean always, String reason) { diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index 2b04050733230..f5ce461c15834 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -1188,4 +1188,12 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * A new window on default display has been focused. */ default void onDefaultDisplayFocusChangedLw(WindowState newFocus) {} + + /** + * Returns {@code true} if the key will be handled globally and not forwarded to all apps. + * + * @param keyCode the key code to check + * @return {@code true} if the key will be handled globally. + */ + boolean isGlobalKey(int keyCode); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1497a192ff1e3..86a97f8abd74f 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -9351,4 +9351,9 @@ public class WindowManagerService extends IWindowManager.Stub .setSourceCrop(mTmpRect) .build(); } + + @Override + public boolean isGlobalKey(int keyCode) { + return mPolicy.isGlobalKey(keyCode); + } } diff --git a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java index 13da1543cfb83..3344bdb24d1ec 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -338,4 +338,9 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { public boolean canDismissBootAnimation() { return true; } + + @Override + public boolean isGlobalKey(int keyCode) { + return false; + } }