diff options
5 files changed, 40 insertions, 0 deletions
diff --git a/core/api/test-current.txt b/core/api/test-current.txt index 7107bf7419e5..e93467b90e68 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); @@ -2628,6 +2629,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 f74be22569f0..29f774cc39d7 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -752,6 +752,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. * * @hide diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 893fce21ceec..7ae280fd7d90 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 8f04cdaf8fde..c1dbc87a2a10 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 88d64df99d48..35e88c1a2485 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); @@ -914,6 +918,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) { try { |