summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/popup
diff options
context:
space:
mode:
authorTony Wickham <twickham@google.com>2017-04-13 16:24:38 -0700
committerTony Wickham <twickham@google.com>2017-04-20 15:10:38 -0700
commita7e1c1c08854930ddb4366698d5bf079ae0536f3 (patch)
tree7ca715956276ac891cd4f5eced4db8c84a15633f /src/com/android/launcher3/popup
parent343a77e609382bcb9b1d69ea235a9e6d779b719e (diff)
downloadandroid_packages_apps_Trebuchet-a7e1c1c08854930ddb4366698d5bf079ae0536f3.tar.gz
android_packages_apps_Trebuchet-a7e1c1c08854930ddb4366698d5bf079ae0536f3.tar.bz2
android_packages_apps_Trebuchet-a7e1c1c08854930ddb4366698d5bf079ae0536f3.zip
Only add widgets system shortcut if widgets exist
Before we were adding it in a disabled state, and then enabling it once widgets were bound (if widgets existed for that app). Now we load all widgets when launcher starts so that we can use the values for the purpose of animating the popup container. Then, as the container opens, we reload widgets/shortcuts for that particular app and add/remove the widgets shortcut if necessary. Bug: 34940468 Change-Id: I64bd009442d10d3d1f9a977bdedfdb639a7dd193
Diffstat (limited to 'src/com/android/launcher3/popup')
-rw-r--r--src/com/android/launcher3/popup/PopupContainerWithArrow.java24
-rw-r--r--src/com/android/launcher3/popup/PopupDataProvider.java13
-rw-r--r--src/com/android/launcher3/popup/PopupPopulator.java60
-rw-r--r--src/com/android/launcher3/popup/SystemShortcut.java1
4 files changed, 52 insertions, 46 deletions
diff --git a/src/com/android/launcher3/popup/PopupContainerWithArrow.java b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
index 5891085e4..a4823ae3e 100644
--- a/src/com/android/launcher3/popup/PopupContainerWithArrow.java
+++ b/src/com/android/launcher3/popup/PopupContainerWithArrow.java
@@ -146,21 +146,24 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
return null;
}
- List<String> shortcutIds = launcher.getPopupDataProvider().getShortcutIdsForItem(itemInfo);
- List<NotificationKeyData> notificationKeys = launcher.getPopupDataProvider()
+ PopupDataProvider popupDataProvider = launcher.getPopupDataProvider();
+ List<String> shortcutIds = popupDataProvider.getShortcutIdsForItem(itemInfo);
+ List<NotificationKeyData> notificationKeys = popupDataProvider
.getNotificationKeysForItem(itemInfo);
+ List<SystemShortcut> systemShortcuts = popupDataProvider
+ .getEnabledSystemShortcutsForItem(itemInfo);
final PopupContainerWithArrow container =
(PopupContainerWithArrow) launcher.getLayoutInflater().inflate(
R.layout.popup_container, launcher.getDragLayer(), false);
container.setVisibility(View.INVISIBLE);
launcher.getDragLayer().addView(container);
- container.populateAndShow(icon, shortcutIds, notificationKeys);
+ container.populateAndShow(icon, shortcutIds, notificationKeys, systemShortcuts);
return container;
}
public void populateAndShow(final BubbleTextView originalIcon, final List<String> shortcutIds,
- final List<NotificationKeyData> notificationKeys) {
+ final List<NotificationKeyData> notificationKeys, List<SystemShortcut> systemShortcuts) {
final Resources resources = getResources();
final int arrowWidth = resources.getDimensionPixelSize(R.dimen.popup_arrow_width);
final int arrowHeight = resources.getDimensionPixelSize(R.dimen.popup_arrow_height);
@@ -171,7 +174,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
// Add dummy views first, and populate with real info when ready.
PopupPopulator.Item[] itemsToPopulate = PopupPopulator
- .getItemsToPopulate(shortcutIds, notificationKeys);
+ .getItemsToPopulate(shortcutIds, notificationKeys, systemShortcuts);
addDummyViews(originalIcon, itemsToPopulate, notificationKeys.size() > 1);
measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
@@ -218,7 +221,7 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
new Handler(workerLooper).postAtFrontOfQueue(PopupPopulator.createUpdateRunnable(
mLauncher, originalItemInfo, new Handler(Looper.getMainLooper()),
this, shortcutIds, shortcutViews, notificationKeys, mNotificationItemView,
- systemShortcutViews));
+ systemShortcuts, systemShortcutViews));
}
private void addDummyViews(BubbleTextView originalIcon,
@@ -624,12 +627,9 @@ public class PopupContainerWithArrow extends AbstractFloatingView implements Dra
@Override
protected void onWidgetsBound() {
- enableWidgets();
- }
-
- public boolean enableWidgets() {
- return mShortcutsItemView != null && mShortcutsItemView.enableWidgets(
- (ItemInfo) mOriginalIcon.getTag());
+ if (mShortcutsItemView != null) {
+ mShortcutsItemView.enableWidgetsIfExist(mOriginalIcon);
+ }
}
private ObjectAnimator createArrowScaleAnim(float scale) {
diff --git a/src/com/android/launcher3/popup/PopupDataProvider.java b/src/com/android/launcher3/popup/PopupDataProvider.java
index c1a9ba1bc..eaceaa959 100644
--- a/src/com/android/launcher3/popup/PopupDataProvider.java
+++ b/src/com/android/launcher3/popup/PopupDataProvider.java
@@ -33,6 +33,7 @@ import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.util.MultiHashMap;
import com.android.launcher3.util.PackageUserKey;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -49,7 +50,7 @@ public class PopupDataProvider implements NotificationListener.NotificationsChan
private static final String TAG = "PopupDataProvider";
/** Note that these are in order of priority. */
- public static final SystemShortcut[] SYSTEM_SHORTCUTS = new SystemShortcut[] {
+ private static final SystemShortcut[] SYSTEM_SHORTCUTS = new SystemShortcut[] {
new SystemShortcut.AppInfo(),
new SystemShortcut.Widgets(),
};
@@ -240,6 +241,16 @@ public class PopupDataProvider implements NotificationListener.NotificationsChan
: notificationListener.getNotificationsForKeys(notificationKeys);
}
+ public @NonNull List<SystemShortcut> getEnabledSystemShortcutsForItem(ItemInfo info) {
+ List<SystemShortcut> systemShortcuts = new ArrayList<>();
+ for (SystemShortcut systemShortcut : SYSTEM_SHORTCUTS) {
+ if (systemShortcut.getOnClickListener(mLauncher, info) != null) {
+ systemShortcuts.add(systemShortcut);
+ }
+ }
+ return systemShortcuts;
+ }
+
public void cancelNotification(String notificationKey) {
NotificationListener notificationListener = NotificationListener.getInstanceIfConnected();
if (notificationListener == null) {
diff --git a/src/com/android/launcher3/popup/PopupPopulator.java b/src/com/android/launcher3/popup/PopupPopulator.java
index 112889474..c62d8771a 100644
--- a/src/com/android/launcher3/popup/PopupPopulator.java
+++ b/src/com/android/launcher3/popup/PopupPopulator.java
@@ -72,7 +72,8 @@ public class PopupPopulator {
}
public static @NonNull Item[] getItemsToPopulate(@NonNull List<String> shortcutIds,
- @NonNull List<NotificationKeyData> notificationKeys) {
+ @NonNull List<NotificationKeyData> notificationKeys,
+ @NonNull List<SystemShortcut> systemShortcuts) {
boolean hasNotifications = notificationKeys.size() > 0;
int numNotificationItems = hasNotifications ? 1 : 0;
int numShortcuts = shortcutIds.size();
@@ -80,7 +81,7 @@ public class PopupPopulator {
numShortcuts = MAX_SHORTCUTS_IF_NOTIFICATIONS;
}
int numItems = Math.min(MAX_ITEMS, numShortcuts + numNotificationItems)
- + PopupDataProvider.SYSTEM_SHORTCUTS.length;
+ + systemShortcuts.size();
Item[] items = new Item[numItems];
for (int i = 0; i < numItems; i++) {
items[i] = Item.SHORTCUT;
@@ -91,7 +92,7 @@ public class PopupPopulator {
}
// The system shortcuts are always last.
boolean iconsOnly = !shortcutIds.isEmpty();
- for (int i = 0; i < PopupDataProvider.SYSTEM_SHORTCUTS.length; i++) {
+ for (int i = 0; i < systemShortcuts.size(); i++) {
items[numItems - 1 - i] = iconsOnly ? Item.SYSTEM_SHORTCUT_ICON : Item.SYSTEM_SHORTCUT;
}
return items;
@@ -182,7 +183,8 @@ public class PopupPopulator {
final Handler uiHandler, final PopupContainerWithArrow container,
final List<String> shortcutIds, final List<DeepShortcutView> shortcutViews,
final List<NotificationKeyData> notificationKeys,
- final NotificationItemView notificationView, final List<View> systemShortcutViews) {
+ final NotificationItemView notificationView, final List<SystemShortcut> systemShortcuts,
+ final List<View> systemShortcutViews) {
final ComponentName activity = originalInfo.getTargetComponent();
final UserHandle user = originalInfo.user;
return new Runnable() {
@@ -217,8 +219,8 @@ public class PopupPopulator {
// This ensures that mLauncher.getWidgetsForPackageUser()
// doesn't return null (it puts all the widgets in memory).
- for (int i = 0; i < PopupDataProvider.SYSTEM_SHORTCUTS.length; i++) {
- final SystemShortcut systemShortcut = PopupDataProvider.SYSTEM_SHORTCUTS[i];
+ for (int i = 0; i < systemShortcuts.size(); i++) {
+ final SystemShortcut systemShortcut = systemShortcuts.get(i);
uiHandler.post(new UpdateSystemShortcutChild(container,
systemShortcutViews.get(i), systemShortcut, launcher, originalInfo));
}
@@ -274,7 +276,6 @@ public class PopupPopulator {
/** Updates the system shortcut child based on the given shortcut info. */
private static class UpdateSystemShortcutChild implements Runnable {
- private static final float DISABLED_ALPHA = 0.38f;
private final PopupContainerWithArrow mContainer;
private final View mSystemShortcutChild;
@@ -294,31 +295,26 @@ public class PopupPopulator {
@Override
public void run() {
final Context context = mSystemShortcutChild.getContext();
- if (mSystemShortcutChild instanceof DeepShortcutView) {
- // Expanded system shortcut, with both icon and text shown on white background.
- final DeepShortcutView shortcutView = (DeepShortcutView) mSystemShortcutChild;
- shortcutView.getIconView().setBackground(mSystemShortcutInfo.getIcon(context,
- android.R.attr.textColorTertiary));
- shortcutView.getBubbleText().setText(mSystemShortcutInfo.getLabel(context));
- } else if (mSystemShortcutChild instanceof ImageView) {
- // Only the system shortcut icon shows on a gray background header.
- final ImageView shortcutIcon = (ImageView) mSystemShortcutChild;
- shortcutIcon.setImageDrawable(mSystemShortcutInfo.getIcon(context,
- android.R.attr.textColorHint));
- shortcutIcon.setContentDescription(mSystemShortcutInfo.getLabel(context));
- }
- if (!(mSystemShortcutInfo instanceof SystemShortcut.Widgets)) {
- mSystemShortcutChild.setOnClickListener(mSystemShortcutInfo
- .getOnClickListener(mLauncher, mItemInfo));
- } else {
- mSystemShortcutChild.setTag(mSystemShortcutInfo);
- // Widgets might not be enabled right away.
- if (mContainer.enableWidgets()) {
- return;
- }
- // Disable Widgets (we might be able to re-enable when widgets are bound).
- mSystemShortcutChild.setAlpha(DISABLED_ALPHA);
- }
+ initializeSystemShortcut(context, mSystemShortcutChild, mSystemShortcutInfo);
+ mSystemShortcutChild.setOnClickListener(mSystemShortcutInfo
+ .getOnClickListener(mLauncher, mItemInfo));
+ }
+ }
+
+ public static void initializeSystemShortcut(Context context, View view, SystemShortcut info) {
+ if (view instanceof DeepShortcutView) {
+ // Expanded system shortcut, with both icon and text shown on white background.
+ final DeepShortcutView shortcutView = (DeepShortcutView) view;
+ shortcutView.getIconView().setBackground(info.getIcon(context,
+ android.R.attr.textColorTertiary));
+ shortcutView.getBubbleText().setText(info.getLabel(context));
+ } else if (view instanceof ImageView) {
+ // Only the system shortcut icon shows on a gray background header.
+ final ImageView shortcutIcon = (ImageView) view;
+ shortcutIcon.setImageDrawable(info.getIcon(context,
+ android.R.attr.textColorHint));
+ shortcutIcon.setContentDescription(info.getLabel(context));
}
+ view.setTag(info);
}
}
diff --git a/src/com/android/launcher3/popup/SystemShortcut.java b/src/com/android/launcher3/popup/SystemShortcut.java
index de884996b..15fd12609 100644
--- a/src/com/android/launcher3/popup/SystemShortcut.java
+++ b/src/com/android/launcher3/popup/SystemShortcut.java
@@ -43,7 +43,6 @@ public abstract class SystemShortcut {
public abstract View.OnClickListener getOnClickListener(final Launcher launcher,
final ItemInfo itemInfo);
-
public static class Widgets extends SystemShortcut {
public Widgets() {