From 13bc0a3128171411a54bb8894146f229d303de29 Mon Sep 17 00:00:00 2001 From: Vania Januar Date: Wed, 8 Mar 2023 13:01:43 +0000 Subject: [PATCH] Add @TestApi to test STYLUS_BUTTONS_ENABLED. Includes StatusBarManagerService @TestApis to access the last received system key event. Bug: 272032405 Test: used in CTS Change-Id: Iabd62f901543e9899bee445666ee750900ddc265 --- core/api/test-current.txt | 2 ++ core/java/android/app/StatusBarManager.java | 23 +++++++++++++++++++ core/java/android/provider/Settings.java | 2 ++ .../internal/statusbar/IStatusBarService.aidl | 1 + .../statusbar/StatusBarManagerService.java | 12 ++++++++++ 5 files changed, 40 insertions(+) diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 5a84b9782ee63..d2bbd6b3459eb 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -415,6 +415,7 @@ package android.app { method public void clickNotification(@Nullable String, int, int, boolean); method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void collapsePanels(); method public void expandNotificationsPanel(); + method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public int getLastSystemKey(); method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void handleSystemKey(int); method public void sendNotificationFeedback(@Nullable String, @Nullable android.os.Bundle); method @RequiresPermission(android.Manifest.permission.STATUS_BAR) public void setExpansionDisabledForSimNetworkLock(boolean); @@ -2625,6 +2626,7 @@ package android.provider { field public static final String SELECTED_SPELL_CHECKER_SUBTYPE = "selected_spell_checker_subtype"; field public static final String SHOW_FIRST_CRASH_DIALOG_DEV_OPTION = "show_first_crash_dialog_dev_option"; field public static final String SHOW_IME_WITH_HARD_KEYBOARD = "show_ime_with_hard_keyboard"; + field public static final String STYLUS_BUTTONS_ENABLED = "stylus_buttons_enabled"; field @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds"; field public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service"; } diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index f74be22569f03..29f774cc39d7e 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -751,6 +751,29 @@ public class StatusBarManager { } } + /** + * Gets the last handled system key. A system key is a KeyEvent that the + * {@link com.android.server.policy.PhoneWindowManager} sends directly to the + * status bar, rather than forwarding to apps. If a key has never been sent to the + * status bar, will return -1. + * + * @return the keycode of the last KeyEvent that has been sent to the system. + * @hide + */ + @RequiresPermission(android.Manifest.permission.STATUS_BAR) + @TestApi + public int getLastSystemKey() { + try { + final IStatusBarService svc = getService(); + if (svc != null) { + return svc.getLastSystemKey(); + } + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + return -1; + } + /** * Expand the settings panel. * diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 123f48067be8c..db8b70972726b 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7414,6 +7414,8 @@ public final class Settings { * * @hide */ + @TestApi + @Readable @SuppressLint("NoSettingsProvider") public static final String STYLUS_BUTTONS_ENABLED = "stylus_buttons_enabled"; diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index 8f04cdaf8fde0..c1dbc87a2a106 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -111,6 +111,7 @@ interface IStatusBarService void clickTile(in ComponentName tile); @UnsupportedAppUsage void handleSystemKey(in int key); + int getLastSystemKey(); /** * Methods to show toast messages for screen pinning diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 88d64df99d483..35e88c1a2485c 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -33,6 +33,7 @@ import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.RequiresPermission; +import android.annotation.TestApi; import android.app.ActivityManager; import android.app.ActivityManagerInternal; import android.app.ActivityThread; @@ -178,6 +179,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D private final SessionMonitor mSessionMonitor; private int mCurrentUserId; private boolean mTracingEnabled; + private int mLastSystemKey = -1; private final TileRequestTracker mTileRequestTracker; @@ -905,6 +907,8 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D return; } + mLastSystemKey = key; + if (mBar != null) { try { mBar.handleSystemKey(key); @@ -913,6 +917,14 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D } } + @Override + @TestApi + public int getLastSystemKey() { + enforceStatusBar(); + + return mLastSystemKey; + } + @Override public void showPinningEnterExitToast(boolean entering) throws RemoteException { if (mBar != null) {