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

Commit 7cd3d089 authored by Ben Murdoch's avatar Ben Murdoch
Browse files

RESTRICT AUTOMERGE Clear app-provided shortcut icons

When displaying keyboard shortcuts provided by an app, clear
any icon that may have been set (this is only possible via
reflection, and is not a intended for usage outside of the system).

Bug: 331180422
Test: Verify on device
Change-Id: I3d80fedab9ef547ef3ac54eaccf2aa048a180be9
parent 4097e3cf
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ import android.os.Parcelable;
 */
public final class KeyboardShortcutInfo implements Parcelable {
    private final CharSequence mLabel;
    private final Icon mIcon;
    private Icon mIcon;
    private final char mBaseCharacter;
    private final int mKeycode;
    private final int mModifiers;
@@ -115,6 +115,15 @@ public final class KeyboardShortcutInfo implements Parcelable {
        return mIcon;
    }

    /**
     * Removes an icon that was previously set.
     *
     * @hide
     */
    public void clearIcon() {
        mIcon = null;
    }

    /**
     * Returns the base keycode that, combined with the modifiers, triggers this shortcut. If the
     * base character was set instead, returns {@link KeyEvent#KEYCODE_UNKNOWN}. Valid keycodes are
+2 −0
Original line number Diff line number Diff line
@@ -429,6 +429,7 @@ public final class KeyboardShortcutListSearch {
            if (result.isEmpty()) {
                mKeySearchResultMap.put(SHORTCUT_SPECIFICAPP_INDEX, false);
            } else {
                KeyboardShortcuts.sanitiseShortcuts(result);
                mSpecificAppGroup.addAll(reMapToKeyboardShortcutMultiMappingGroup(result));
                mKeySearchResultMap.put(SHORTCUT_SPECIFICAPP_INDEX, true);
            }
@@ -440,6 +441,7 @@ public final class KeyboardShortcutListSearch {
        mWindowManager.requestImeKeyboardShortcuts(result -> {
            // Add specific Ime shortcuts
            if (!result.isEmpty()) {
                KeyboardShortcuts.sanitiseShortcuts(result);
                mInputGroup.addAll(reMapToKeyboardShortcutMultiMappingGroup(result));
            }
            mImeShortcutsReceived = true;
+9 −0
Original line number Diff line number Diff line
@@ -410,6 +410,7 @@ public final class KeyboardShortcuts {
        }
        List<KeyboardShortcutGroup> shortcutGroups = mReceivedAppShortcutGroups;
        shortcutGroups.addAll(mReceivedImeShortcutGroups);
        sanitiseShortcuts(shortcutGroups);
        mReceivedAppShortcutGroups = null;
        mReceivedImeShortcutGroups = null;

@@ -422,6 +423,14 @@ public final class KeyboardShortcuts {
        showKeyboardShortcutsDialog(shortcutGroups);
    }

    static void sanitiseShortcuts(List<KeyboardShortcutGroup> shortcutGroups) {
        for (KeyboardShortcutGroup group : shortcutGroups) {
            for (KeyboardShortcutInfo info : group.getItems()) {
                info.clearIcon();
            }
        }
    }

    private void dismissKeyboardShortcuts() {
        if (mKeyboardShortcutsDialog != null) {
            mKeyboardShortcutsDialog.dismiss();