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

Commit c5c7e047 authored by Jeff Brown's avatar Jeff Brown Committed by Android Git Automerger
Browse files

am d0132e8e: Minor Alt-TAB / Recent Apps Dialog improvements. (DO NOT MERGE)

* commit 'd0132e8e':
  Minor Alt-TAB / Recent Apps Dialog improvements. (DO NOT MERGE)
parents 6f37a7f9 d0132e8e
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -212956,6 +212956,17 @@
 visibility="public"
>
</method>
<method name="getModifiers"
 return="int"
 abstract="false"
 native="false"
 synchronized="false"
 static="false"
 final="true"
 deprecated="not deprecated"
 visibility="public"
>
</method>
<method name="getNumber"
 return="char"
 abstract="false"
+21 −0
Original line number Diff line number Diff line
@@ -1741,11 +1741,32 @@ public class KeyEvent extends InputEvent implements Parcelable {
     * @see #META_CAPS_LOCK_ON
     * @see #META_NUM_LOCK_ON
     * @see #META_SCROLL_LOCK_ON
     * @see #getModifiers
     */
    public final int getMetaState() {
        return mMetaState;
    }

    /**
     * Returns the state of the modifier keys.
     * <p>
     * For the purposes of this function, {@link #KEYCODE_CAPS_LOCK},
     * {@link #KEYCODE_SCROLL_LOCK}, and {@link #KEYCODE_NUM_LOCK} are
     * not considered modifier keys.  Consequently, this function specifically masks out
     * {@link #META_CAPS_LOCK_ON}, {@link #META_SCROLL_LOCK_ON} and {@link #META_NUM_LOCK_ON}.
     * </p><p>
     * The value returned consists of the meta state (from {@link #getMetaState})
     * normalized using {@link #normalizeMetaState(int)} and then masked with
     * {@link #getModifierMetaStateMask} so that only valid modifier bits are retained.
     * </p>
     *
     * @return An integer in which each bit set to 1 represents a pressed modifier key.
     * @see #getMetaState
     */
    public final int getModifiers() {
        return normalizeMetaState(mMetaState) & META_MODIFIER_MASK;
    }

    /**
     * Returns the flags for this key event.
     *
+1 −2
Original line number Diff line number Diff line
@@ -300,8 +300,7 @@ key ENTER {
key TAB {
    label:                              '\t'
    base:                               '\t'
    ctrl:                               none
    alt, meta:                          fallback APP_SWITCH
    ctrl, alt, meta:                    none
}

key COMMA {
+46 −21
Original line number Diff line number Diff line
@@ -623,7 +623,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }

        if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_DIALOG) {
            showRecentAppsDialog(0);
            showOrHideRecentAppsDialog(0, true /*dismissIfShown*/);
        } else if (mLongPressOnHomeBehavior == LONG_PRESS_HOME_RECENT_ACTIVITY) {
            try {
                Intent intent = new Intent();
@@ -640,17 +640,25 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    }

    /**
     * Create (if necessary) and launch the recent apps dialog
     * Create (if necessary) and launch the recent apps dialog, or hide it if it is
     * already shown.
     */
    void showRecentAppsDialog(final int initialModifiers) {
    void showOrHideRecentAppsDialog(final int heldModifiers, final boolean dismissIfShown) {
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                if (mRecentAppsDialog == null) {
                    mRecentAppsDialog = new RecentApplicationsDialog(mContext, initialModifiers);
                    mRecentAppsDialog = new RecentApplicationsDialog(mContext);
                }
                if (mRecentAppsDialog.isShowing()) {
                    if (dismissIfShown) {
                        mRecentAppsDialog.dismiss();
                    }
                } else {
                    mRecentAppsDialog.setHeldModifiers(heldModifiers);
                    mRecentAppsDialog.show();
                }
            }
        });
    }

@@ -1433,7 +1441,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
            return false;
        } else if (keyCode == KeyEvent.KEYCODE_APP_SWITCH) {
            if (down && repeatCount == 0) {
                showRecentAppsDialog(event.getMetaState() & KeyEvent.getModifierMetaStateMask());
                showOrHideRecentAppsDialog(0, true /*dismissIfShown*/);
            }
            return true;
        }
@@ -1475,6 +1483,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    /** {@inheritDoc} */
    @Override
    public KeyEvent dispatchUnhandledKey(WindowState win, KeyEvent event, int policyFlags) {
        // Note: This method is only called if the initial down was unhandled.
        if (DEBUG_FALLBACK) {
            Slog.d(TAG, "Unhandled key: win=" + win + ", action=" + event.getAction()
                    + ", flags=" + event.getFlags()
@@ -1486,10 +1495,14 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        }

        if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
            // Invoke shortcuts using Meta as a fallback.
            final KeyCharacterMap kcm = event.getKeyCharacterMap();
            final int keyCode = event.getKeyCode();
            final int metaState = event.getMetaState();
            final boolean initialDown = event.getAction() == KeyEvent.ACTION_DOWN
                    && event.getRepeatCount() == 0;

            if (initialDown) {
                // Invoke shortcuts using Meta as a fallback.
                if ((metaState & KeyEvent.META_META_ON) != 0) {
                    Intent shortcutIntent = mShortcutManager.getIntent(kcm, keyCode,
                            metaState & ~(KeyEvent.META_META_ON
@@ -1507,7 +1520,19 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                    }
                }

            // Check for fallback actions.
                // Display task switcher for ALT-TAB or Meta-TAB.
                if (keyCode == KeyEvent.KEYCODE_TAB) {
                    final int shiftlessModifiers = event.getModifiers() & ~KeyEvent.META_SHIFT_MASK;
                    if (KeyEvent.metaStateHasModifiers(shiftlessModifiers, KeyEvent.META_ALT_ON)
                            || KeyEvent.metaStateHasModifiers(
                                    shiftlessModifiers, KeyEvent.META_META_ON)) {
                        showOrHideRecentAppsDialog(shiftlessModifiers, false /*dismissIfShown*/);
                        return null;
                    }
                }
            }

            // Check for fallback actions specified by the key character map.
            if (getFallbackAction(kcm, keyCode, metaState, mFallbackAction)) {
                if (DEBUG_FALLBACK) {
                    Slog.d(TAG, "Fallback: keyCode=" + mFallbackAction.keyCode
+15 −5
Original line number Diff line number Diff line
@@ -71,12 +71,11 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener
        }
    };

    private int mInitialModifiers;
    private int mHeldModifiers;

    public RecentApplicationsDialog(Context context, int initialModifiers) {
    public RecentApplicationsDialog(Context context) {
        super(context, com.android.internal.R.style.Theme_Dialog_RecentApplications);

        mInitialModifiers = initialModifiers;
    }

    /**
@@ -125,9 +124,20 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener
        }
    }

    /**
     * Sets the modifier keys that are being held to keep the dialog open, or 0 if none.
     * Used to make the recent apps dialog automatically dismiss itself when the modifiers
     * all go up.
     * @param heldModifiers The held key modifiers, such as {@link KeyEvent#META_ALT_ON}.
     * Should exclude shift.
     */
    public void setHeldModifiers(int heldModifiers) {
        mHeldModifiers = heldModifiers;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_APP_SWITCH || keyCode == KeyEvent.KEYCODE_TAB) {
        if (keyCode == KeyEvent.KEYCODE_TAB) {
            // Ignore all meta keys other than SHIFT.  The app switch key could be a
            // fallback action chorded with ALT, META or even CTRL depending on the key map.
            // DPad navigation is handled by the ViewRoot elsewhere.
@@ -166,7 +176,7 @@ public class RecentApplicationsDialog extends Dialog implements OnClickListener

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (mInitialModifiers != 0 && event.hasNoModifiers()) {
        if (mHeldModifiers != 0 && (event.getModifiers() & mHeldModifiers) == 0) {
            final int numIcons = mIcons.length;
            RecentTag tag = null;
            for (int i = 0; i < numIcons; i++) {