From a18eb686d0138ef42617f853ac096bc1de96c088 Mon Sep 17 00:00:00 2001 From: Samuel Fufa Date: Mon, 2 Dec 2019 16:01:05 -0800 Subject: [PATCH] Add dismiss option for hotseat items Bug: 145556909 Test:Manual Change-Id: Ia40d22226b5cf9482f19f82ef08e399d294be6da --- res/values/strings.xml | 2 +- .../NotificationFooterLayout.java | 23 ++++++++++++++----- .../notification/NotificationItemView.java | 7 ++++++ .../popup/PopupContainerWithArrow.java | 22 ++++++++++++++---- .../launcher3/popup/SystemShortcut.java | 5 +++- 5 files changed, 46 insertions(+), 13 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index dec8939faf..218f6db37a 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -103,7 +103,7 @@ Install - Dismiss prediction + Don\'t suggest app Pin Prediction diff --git a/src/com/android/launcher3/notification/NotificationFooterLayout.java b/src/com/android/launcher3/notification/NotificationFooterLayout.java index c7de5b0a86..fd3d41ade8 100644 --- a/src/com/android/launcher3/notification/NotificationFooterLayout.java +++ b/src/com/android/launcher3/notification/NotificationFooterLayout.java @@ -80,17 +80,28 @@ public class NotificationFooterLayout extends FrameLayout { int iconSize = res.getDimensionPixelSize(R.dimen.notification_footer_icon_size); mIconLayoutParams = new LayoutParams(iconSize, iconSize); mIconLayoutParams.gravity = Gravity.CENTER_VERTICAL; - // Compute margin start for each icon such that the icons between the first one - // and the ellipsis are evenly spaced out. + setWidth((int) res.getDimension(R.dimen.bg_popup_item_width)); + mBackgroundColor = Themes.getAttrColor(context, R.attr.popupColorPrimary); + } + + + /** + * Compute margin start for each icon such that the icons between the first one and the ellipsis + * are evenly spaced out. + */ + public void setWidth(int width) { + if (getLayoutParams() != null) { + getLayoutParams().width = width; + } + Resources res = getResources(); + int iconSize = res.getDimensionPixelSize(R.dimen.notification_footer_icon_size); + int paddingEnd = res.getDimensionPixelSize(R.dimen.notification_footer_icon_row_padding); int ellipsisSpace = res.getDimensionPixelSize(R.dimen.horizontal_ellipsis_offset) + res.getDimensionPixelSize(R.dimen.horizontal_ellipsis_size); - int footerWidth = res.getDimensionPixelSize(R.dimen.bg_popup_item_width); - int availableIconRowSpace = footerWidth - paddingEnd - ellipsisSpace + int availableIconRowSpace = width - paddingEnd - ellipsisSpace - iconSize * MAX_FOOTER_NOTIFICATIONS; mIconLayoutParams.setMarginStart(availableIconRowSpace / MAX_FOOTER_NOTIFICATIONS); - - mBackgroundColor = Themes.getAttrColor(context, R.attr.popupColorPrimary); } @Override diff --git a/src/com/android/launcher3/notification/NotificationItemView.java b/src/com/android/launcher3/notification/NotificationItemView.java index 021fb30c5e..0320aa3edd 100644 --- a/src/com/android/launcher3/notification/NotificationItemView.java +++ b/src/com/android/launcher3/notification/NotificationItemView.java @@ -86,6 +86,13 @@ public class NotificationItemView { } } + /** + * Sets width for notification footer and spaces out items evenly + */ + public void setFooterWidth(int footerWidth) { + mFooter.setWidth(footerWidth); + } + public void removeFooter() { if (mContainer.indexOfChild(mFooter) >= 0) { mContainer.removeView(mFooter); diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java index e70673a5a0..72c95c4920 100644 --- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java +++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java @@ -37,7 +37,6 @@ import android.os.Build; import android.os.Handler; import android.os.Looper; import android.util.AttributeSet; -import android.util.Log; import android.util.Pair; import android.view.MotionEvent; import android.view.View; @@ -66,7 +65,6 @@ import com.android.launcher3.notification.NotificationKeyData; import com.android.launcher3.popup.PopupDataProvider.PopupDataChangeListener; import com.android.launcher3.shortcuts.DeepShortcutView; import com.android.launcher3.shortcuts.ShortcutDragPreviewProvider; -import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.touch.ItemClickHandler; import com.android.launcher3.touch.ItemLongClickListener; import com.android.launcher3.util.PackageUserKey; @@ -257,6 +255,16 @@ public class PopupContainerWithArrow extends ArrowPopup implements DragSource, mNumNotifications = notificationKeys.size(); mOriginalIcon = originalIcon; + boolean hasDeepShortcuts = shortcutCount > 0; + int containerWidth = (int) getResources().getDimension(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) { + containerWidth = (int) Math.max(containerWidth, + systemShortcuts.size() * getResources().getDimension( + R.dimen.system_shortcut_header_icon_touch_size)); + } // Add views if (mNumNotifications > 0) { // Add notification entries @@ -265,18 +273,22 @@ public class PopupContainerWithArrow extends ArrowPopup implements DragSource, if (mNumNotifications == 1) { mNotificationItemView.removeFooter(); } + else { + mNotificationItemView.setFooterWidth(containerWidth); + } updateNotificationHeader(); } int viewsToFlip = getChildCount(); mSystemShortcutContainer = this; - - if (shortcutCount > 0) { + if (hasDeepShortcuts) { if (mNotificationItemView != null) { mNotificationItemView.addGutter(); } for (int i = shortcutCount; i > 0; i--) { - mShortcuts.add(inflateAndAdd(R.layout.deep_shortcut, this)); + DeepShortcutView v = inflateAndAdd(R.layout.deep_shortcut, this); + v.getLayoutParams().width = containerWidth; + mShortcuts.add(v); } updateHiddenShortcuts(); diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java index b580bd6f76..48f1c4929e 100644 --- a/src/com/android/launcher3/popup/SystemShortcut.java +++ b/src/com/android/launcher3/popup/SystemShortcut.java @@ -178,7 +178,10 @@ public abstract class SystemShortcut extends Ite public static final Factory DISMISS_PREDICTION = (launcher, itemInfo) -> { if (!FeatureFlags.ENABLE_PREDICTION_DISMISS.get()) return null; - if (itemInfo.container != LauncherSettings.Favorites.CONTAINER_PREDICTION) return null; + if (itemInfo.container != LauncherSettings.Favorites.CONTAINER_PREDICTION + && itemInfo.container != LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION) { + return null; + } return new DismissPrediction(launcher, itemInfo); };