show dot on shortcut when incoming notification contains exactly the

same shortcut id

Bug: 132336512
Change-Id: Iddf4cfe8ad60c12e8de8b171bed392f1bb0a6761
This commit is contained in:
Pinyao Ting 2019-07-25 20:26:54 -07:00
parent d1ca8f4e5e
commit 559dd806d7
3 changed files with 54 additions and 8 deletions

View File

@ -25,6 +25,7 @@ import android.os.Bundle;
import android.os.UserHandle;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.notification.NotificationKeyData;
import java.util.ArrayList;
import java.util.List;
@ -48,6 +49,11 @@ public class DeepShortcutManager {
return false;
}
public static boolean supportsNotificationDots(
ItemInfo info, List<NotificationKeyData> notifications) {
return false;
}
/**
* Queries for the shortcuts with the package name and provided ids.
*

View File

@ -40,6 +40,7 @@ import java.util.Map;
import java.util.function.Predicate;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
/**
* Provides data for the popup menu that appears after long-clicking on apps.
@ -167,12 +168,14 @@ public class PopupDataProvider implements NotificationListener.NotificationsChan
return count == null ? 0 : count;
}
public DotInfo getDotInfoForItem(ItemInfo info) {
if (!DeepShortcutManager.supportsShortcuts(info)) {
public @Nullable DotInfo getDotInfoForItem(@NonNull ItemInfo info) {
DotInfo dotInfo = mPackageUserToDotInfos.get(PackageUserKey.fromItemInfo(info));
List<NotificationKeyData> notifications =
dotInfo == null ? Collections.EMPTY_LIST : dotInfo.getNotificationKeys();
if (!DeepShortcutManager.supportsNotificationDots(info, notifications)) {
return null;
}
return mPackageUserToDotInfos.get(PackageUserKey.fromItemInfo(info));
return dotInfo;
}
public @NonNull List<NotificationKeyData> getNotificationKeysForItem(ItemInfo info) {

View File

@ -30,6 +30,7 @@ import android.util.Log;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.WorkspaceItemInfo;
import com.android.launcher3.notification.NotificationKeyData;
import java.util.ArrayList;
import java.util.Collections;
@ -60,10 +61,40 @@ public class DeepShortcutManager {
}
public static boolean supportsShortcuts(ItemInfo info) {
boolean isItemPromise = info instanceof WorkspaceItemInfo
&& ((WorkspaceItemInfo) info).hasPromiseIconUi();
return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION
&& !info.isDisabled() && !isItemPromise;
return isActive(info) && isApp(info);
}
public static boolean supportsNotificationDots(
ItemInfo info, List<NotificationKeyData> notifications) {
if (!isActive(info)) {
return false;
}
return isApp(info) || (isPinnedShortcut(info)
&& shouldShowNotificationDotForPinnedShortcut(info, notifications));
}
private static boolean isApp(ItemInfo info) {
return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
}
private static boolean isPinnedShortcut(ItemInfo info) {
return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT
&& info.container != ItemInfo.NO_ID
&& info instanceof WorkspaceItemInfo;
}
private static boolean shouldShowNotificationDotForPinnedShortcut(
ItemInfo info, List<NotificationKeyData> notifications) {
String shortcutId = ((WorkspaceItemInfo) info).getDeepShortcutId();
if (shortcutId == null) {
return false;
}
for (NotificationKeyData notification : notifications) {
if (shortcutId.equals(notification.shortcutId)) {
return true;
}
}
return false;
}
/**
@ -166,6 +197,12 @@ public class DeepShortcutManager {
return shortcutIds;
}
private static boolean isActive(ItemInfo info) {
boolean isLoading = info instanceof WorkspaceItemInfo
&& ((WorkspaceItemInfo) info).hasPromiseIconUi();
return !isLoading && !info.isDisabled();
}
/**
* Query the system server for all the shortcuts matching the given parameters.
* If packageName == null, we query for all shortcuts with the passed flags, regardless of app.