Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0bf096f1 authored by Andrei Stingaceanu's avatar Andrei Stingaceanu
Browse files

Keyboard shortcuts: dismiss when activities start via shortcut

* introduced a new intent DISMISS_KEYBOARD_SHORTCUTS and
and new public API in Activity (which sends a broadcast
to KeyboardShortcutsReceiver) which applications can
use to dismiss the keyboard shortcuts.

* plumbing and implementation for a new call to dismiss
keyboard shortcuts from PhoneWindowManager and used it:
** when starting activities invoked via Search+key
** when starting activities invoked via META
** when starting activities via application launch keys

* removed unused variable in
Activity#onProvideKeyboardShortcuts

Note that for apps started via touch (aka non-shortcut)
like tapping the Settings gear icon from the notification
bar the menu is not automatically dismissed.

Bug: 28012198
Change-Id: I83a8d4f342bb8a08115a648648834d0d2bac19fd
parent 49425d61
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -3424,6 +3424,7 @@ package android.app {
    method public void closeOptionsMenu();
    method public void closeOptionsMenu();
    method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int);
    method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int);
    method public final deprecated void dismissDialog(int);
    method public final deprecated void dismissDialog(int);
    method public final void dismissKeyboardShortcutsHelper();
    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
    method public boolean dispatchKeyEvent(android.view.KeyEvent);
    method public boolean dispatchKeyEvent(android.view.KeyEvent);
    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+1 −0
Original line number Original line Diff line number Diff line
@@ -3541,6 +3541,7 @@ package android.app {
    method public boolean convertToTranslucent(android.app.Activity.TranslucentConversionListener, android.app.ActivityOptions);
    method public boolean convertToTranslucent(android.app.Activity.TranslucentConversionListener, android.app.ActivityOptions);
    method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int);
    method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int);
    method public final deprecated void dismissDialog(int);
    method public final deprecated void dismissDialog(int);
    method public final void dismissKeyboardShortcutsHelper();
    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
    method public boolean dispatchKeyEvent(android.view.KeyEvent);
    method public boolean dispatchKeyEvent(android.view.KeyEvent);
    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+1 −0
Original line number Original line Diff line number Diff line
@@ -3424,6 +3424,7 @@ package android.app {
    method public void closeOptionsMenu();
    method public void closeOptionsMenu();
    method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int);
    method public android.app.PendingIntent createPendingResult(int, android.content.Intent, int);
    method public final deprecated void dismissDialog(int);
    method public final deprecated void dismissDialog(int);
    method public final void dismissKeyboardShortcutsHelper();
    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
    method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
    method public boolean dispatchKeyEvent(android.view.KeyEvent);
    method public boolean dispatchKeyEvent(android.view.KeyEvent);
    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
    method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+16 −7
Original line number Original line Diff line number Diff line
@@ -721,6 +721,10 @@ public class Activity extends ContextThemeWrapper


    private static final String REQUEST_PERMISSIONS_WHO_PREFIX = "@android:requestPermissions:";
    private static final String REQUEST_PERMISSIONS_WHO_PREFIX = "@android:requestPermissions:";


    private static final String KEYBOARD_SHORTCUTS_RECEIVER_PKG_NAME = "com.android.systemui";
    private static final String KEYBOARD_SHORTCUTS_RECEIVER_CLASS_NAME =
            "com.android.systemui.statusbar.KeyboardShortcutsReceiver";

    private static class ManagedDialog {
    private static class ManagedDialog {
        Dialog mDialog;
        Dialog mDialog;
        Bundle mArgs;
        Bundle mArgs;
@@ -1682,8 +1686,18 @@ public class Activity extends ContextThemeWrapper
     */
     */
    public final void requestKeyboardShortcutsHelper() {
    public final void requestKeyboardShortcutsHelper() {
        Intent intent = new Intent(Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS);
        Intent intent = new Intent(Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS);
        intent.setComponent(new ComponentName("com.android.systemui",
        intent.setComponent(new ComponentName(KEYBOARD_SHORTCUTS_RECEIVER_PKG_NAME,
                "com.android.systemui.statusbar.KeyboardShortcutsReceiver"));
                KEYBOARD_SHORTCUTS_RECEIVER_CLASS_NAME));
        sendBroadcast(intent);
    }

    /**
     * Dismiss the Keyboard Shortcuts screen.
     */
    public final void dismissKeyboardShortcutsHelper() {
        Intent intent = new Intent(Intent.ACTION_DISMISS_KEYBOARD_SHORTCUTS);
        intent.setComponent(new ComponentName(KEYBOARD_SHORTCUTS_RECEIVER_PKG_NAME,
                KEYBOARD_SHORTCUTS_RECEIVER_CLASS_NAME));
        sendBroadcast(intent);
        sendBroadcast(intent);
    }
    }


@@ -1693,11 +1707,6 @@ public class Activity extends ContextThemeWrapper
        if (menu == null) {
        if (menu == null) {
          return;
          return;
        }
        }
        final InputDevice inputDevice = InputManager.getInstance().getInputDevice(deviceId);
        if (inputDevice == null) {
            return;
        }
        final KeyCharacterMap keyCharacterMap = inputDevice.getKeyCharacterMap();
        KeyboardShortcutGroup group = null;
        KeyboardShortcutGroup group = null;
        int menuSize = menu.size();
        int menuSize = menu.size();
        for (int i = 0; i < menuSize; ++i) {
        for (int i = 0; i < menuSize; ++i) {
+10 −0
Original line number Original line Diff line number Diff line
@@ -1426,6 +1426,16 @@ public class Intent implements Parcelable, Cloneable {
    public static final String ACTION_SHOW_KEYBOARD_SHORTCUTS =
    public static final String ACTION_SHOW_KEYBOARD_SHORTCUTS =
            "android.intent.action.SHOW_KEYBOARD_SHORTCUTS";
            "android.intent.action.SHOW_KEYBOARD_SHORTCUTS";


    /**
     * Activity Action: Dismiss the Keyboard Shortcuts Helper screen.
     * <p>Input: Nothing.
     * <p>Output: Nothing.
     * @hide
     */
    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
    public static final String ACTION_DISMISS_KEYBOARD_SHORTCUTS =
            "android.intent.action.DISMISS_KEYBOARD_SHORTCUTS";

    /**
    /**
     * Activity Action: Show settings for managing network data usage of a
     * Activity Action: Show settings for managing network data usage of a
     * specific application. Applications should define an activity that offers
     * specific application. Applications should define an activity that offers
Loading