show dot on shortcut when incoming notification contains exactly the
same shortcut id Bug: 132336512 Change-Id: Iddf4cfe8ad60c12e8de8b171bed392f1bb0a6761
This commit is contained in:
parent
d1ca8f4e5e
commit
559dd806d7
|
@ -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.
|
||||
*
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue