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

Commit 57edae82 authored by Josep del Rio's avatar Josep del Rio Committed by Josep del Río
Browse files

Collapse shortcuts with the same label and icon

At the moment apps can define shortcuts, but they have no way to
define multiple shortcuts for the same icon. If they define an
action with the same label and icon, we can assume that they are
the same and collapse them in the shortcut helper.

Flag: NONE
Test: Opened shortcut helper in Google Keep and confirmed that
some shortcuts collapsed
Bug: 318803330

Change-Id: I49544f6eb038a37a51d4380acebdc694e2929cdb
parent 9b5907be
Loading
Loading
Loading
Loading
+43 −7
Original line number Diff line number Diff line
@@ -84,6 +84,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -457,14 +458,43 @@ public final class KeyboardShortcutListSearch {
        List<KeyboardShortcutMultiMappingGroup> keyboardShortcutMultiMappingGroups =
                new ArrayList<>();
        for (KeyboardShortcutGroup group : keyboardShortcutGroups) {
            CharSequence categoryTitle = group.getLabel();
            List<ShortcutMultiMappingInfo> shortcutMultiMappingInfos = new ArrayList<>();
            KeyboardShortcutMultiMappingGroup mappedGroup =
                    new KeyboardShortcutMultiMappingGroup(
                            group.getLabel(),
                            new ArrayList<>());
            Map<String, List<ShortcutMultiMappingInfo>> shortcutMap = new LinkedHashMap<>();
            for (KeyboardShortcutInfo info : group.getItems()) {
                shortcutMultiMappingInfos.add(new ShortcutMultiMappingInfo(info));
                String label = info.getLabel().toString();
                Icon icon = info.getIcon();
                if (shortcutMap.containsKey(label)) {
                    List<ShortcutMultiMappingInfo> shortcuts = shortcutMap.get(label);
                    boolean foundSameIcon = false;
                    for (ShortcutMultiMappingInfo shortcut : shortcuts) {
                        Icon shortcutIcon = shortcut.getIcon();
                        if ((shortcutIcon != null
                                && icon != null
                                && shortcutIcon.sameAs(icon))
                                || (shortcutIcon == null && icon == null)) {
                            foundSameIcon = true;
                            shortcut.addShortcutKeyGroup(new ShortcutKeyGroup(info, null));
                            break;
                        }
            keyboardShortcutMultiMappingGroups.add(
                    new KeyboardShortcutMultiMappingGroup(
                            categoryTitle, shortcutMultiMappingInfos));
                    }
                    if (!foundSameIcon) {
                        shortcuts.add(new ShortcutMultiMappingInfo(info));
                    }
                } else {
                    List<ShortcutMultiMappingInfo> shortcuts = new ArrayList<>();
                    shortcuts.add(new ShortcutMultiMappingInfo(info));
                    shortcutMap.put(label, shortcuts);
                }
            }
            for (List<ShortcutMultiMappingInfo> shortcutInfos : shortcutMap.values()) {
                for (ShortcutMultiMappingInfo shortcutInfo : shortcutInfos) {
                    mappedGroup.addItem(shortcutInfo);
                }
            }
            keyboardShortcutMultiMappingGroups.add(mappedGroup);
        }
        return keyboardShortcutMultiMappingGroups;
    }
@@ -1377,7 +1407,9 @@ public final class KeyboardShortcutListSearch {
        ShortcutMultiMappingInfo(KeyboardShortcutInfo info) {
            mLabel = info.getLabel();
            mIcon = info.getIcon();
            mShortcutKeyGroups = Arrays.asList(new ShortcutKeyGroup(info, null));
            mShortcutKeyGroups = new ArrayList<>(
                Arrays.asList(new ShortcutKeyGroup(info, null))
            );
        }

        CharSequence getLabel() {
@@ -1388,6 +1420,10 @@ public final class KeyboardShortcutListSearch {
            return mIcon;
        }

        void addShortcutKeyGroup(ShortcutKeyGroup group) {
            mShortcutKeyGroups.add(group);
        }

        List<ShortcutKeyGroup> getShortcutKeyGroups() {
            return mShortcutKeyGroups;
        }