Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4d1a0e2a authored by Pinyao Ting's avatar Pinyao Ting
Browse files

show dot on shortcut when incoming notification contains exactly the

same shortcut id

Bug: 132336512
Change-Id: Iddf4cfe8ad60c12e8de8b171bed392f1bb0a6761
Merged-In: Iddf4cfe8ad60c12e8de8b171bed392f1bb0a6761
parent c0974870
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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.Collections;
import java.util.List;
@@ -52,6 +53,11 @@ public class DeepShortcutManager {
        return false;
    }

    public static boolean supportsNotificationDots(
            ItemInfo info, List<NotificationKeyData> notifications) {
        return false;
    }

    public boolean wasLastCallSuccess() {
        return false;
    }
+7 −4
Original line number Diff line number Diff line
@@ -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) {
+41 −4
Original line number Diff line number Diff line
@@ -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;
@@ -64,10 +65,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;
    }

    public boolean wasLastCallSuccess() {
@@ -183,6 +214,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.