diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index 49d97d21c1..8e7a10ca24 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -72,6 +72,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -244,23 +245,32 @@ public class PopupContainerWithArrow mNotificationContainer); } + private void initializeSystemShortcuts(List shortcuts) { + if (shortcuts.isEmpty()) { + return; + } + // If there is only 1 shortcut, add it to its own container so it can show text and icon + if (shortcuts.size() == 1) { + initializeSystemShortcut(R.layout.system_shortcut, this, shortcuts.get(0)); + return; + } + mSystemShortcutContainer = inflateAndAdd(R.layout.system_shortcut_icons, this); + for (SystemShortcut shortcut : shortcuts) { + initializeSystemShortcut( + R.layout.system_shortcut_icon_only, mSystemShortcutContainer, + shortcut); + } + } + @TargetApi(Build.VERSION_CODES.P) public void populateAndShow(final BubbleTextView originalIcon, int shortcutCount, - final List notificationKeys, List systemShortcuts) { + final List notificationKeys, List shortcuts) { mNumNotifications = notificationKeys.size(); mOriginalIcon = originalIcon; boolean hasDeepShortcuts = shortcutCount > 0; mContainerWidth = getResources().getDimensionPixelSize(R.dimen.bg_popup_item_width); - // if there are deep shortcuts, we might want to increase the width of shortcuts to fit - // horizontally laid out system shortcuts. - if (hasDeepShortcuts) { - mContainerWidth = Math.max(mContainerWidth, - systemShortcuts.size() * getResources() - .getDimensionPixelSize(R.dimen.system_shortcut_header_icon_touch_size) - ); - } // Add views if (mNumNotifications > 0) { // Add notification entries @@ -279,6 +289,24 @@ public class PopupContainerWithArrow mDeepShortcutContainer = findViewById(R.id.deep_shortcuts_container); } if (hasDeepShortcuts) { + // Remove the widget shortcut fom the list + List systemShortcuts = shortcuts + .stream() + .filter(shortcut -> !(shortcut instanceof SystemShortcut.Widgets)) + .collect(Collectors.toList()); + Optional widgetShortcutOpt = shortcuts + .stream() + .filter(shortcut -> shortcut instanceof SystemShortcut.Widgets) + .map(SystemShortcut.Widgets.class::cast) + .findFirst(); + + // if there are deep shortcuts, we might want to increase the width of shortcuts to fit + // horizontally laid out system shortcuts. + mContainerWidth = Math.max(mContainerWidth, + systemShortcuts.size() * getResources() + .getDimensionPixelSize(R.dimen.system_shortcut_header_icon_touch_size) + ); + mDeepShortcutContainer.setVisibility(View.VISIBLE); for (int i = shortcutCount; i > 0; i--) { @@ -288,30 +316,19 @@ public class PopupContainerWithArrow } updateHiddenShortcuts(); - if (!systemShortcuts.isEmpty()) { - for (SystemShortcut shortcut : systemShortcuts) { - if (shortcut instanceof SystemShortcut.Widgets) { - if (mWidgetContainer == null) { - mWidgetContainer = inflateAndAdd(R.layout.widget_shortcut_container, - this); - } - initializeWidgetShortcut(mWidgetContainer, shortcut); - } - } - mSystemShortcutContainer = inflateAndAdd(R.layout.system_shortcut_icons, this); - - for (SystemShortcut shortcut : systemShortcuts) { - if (!(shortcut instanceof SystemShortcut.Widgets)) { - initializeSystemShortcut( - R.layout.system_shortcut_icon_only, mSystemShortcutContainer, - shortcut); - } + if (widgetShortcutOpt.isPresent()) { + if (mWidgetContainer == null) { + mWidgetContainer = inflateAndAdd(R.layout.widget_shortcut_container, + this); } + initializeWidgetShortcut(mWidgetContainer, widgetShortcutOpt.get()); } + + initializeSystemShortcuts(systemShortcuts); } else { mDeepShortcutContainer.setVisibility(View.GONE); - if (!systemShortcuts.isEmpty()) { - for (SystemShortcut shortcut : systemShortcuts) { + if (!shortcuts.isEmpty()) { + for (SystemShortcut shortcut : shortcuts) { initializeSystemShortcut(R.layout.system_shortcut, this, shortcut); } }