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

Commit 6d09a777 authored by Pinyao Ting's avatar Pinyao Ting Committed by Android (Google) Code Review
Browse files

Merge "show dot on shortcut when incoming notification contains exactly the...

Merge "show dot on shortcut when incoming notification contains exactly the same shortcut id" into ub-launcher3-qt-qpr1-dev
parents 1767e9e5 4d1a0e2a
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,7 @@ import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserHandle;


import com.android.launcher3.ItemInfo;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.notification.NotificationKeyData;


import java.util.Collections;
import java.util.Collections;
import java.util.List;
import java.util.List;
@@ -52,6 +53,11 @@ public class DeepShortcutManager {
        return false;
        return false;
    }
    }


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

    public boolean wasLastCallSuccess() {
    public boolean wasLastCallSuccess() {
        return false;
        return false;
    }
    }
+7 −4
Original line number Original line Diff line number Diff line
@@ -40,6 +40,7 @@ import java.util.Map;
import java.util.function.Predicate;
import java.util.function.Predicate;


import androidx.annotation.NonNull;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;


/**
/**
 * Provides data for the popup menu that appears after long-clicking on apps.
 * 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;
        return count == null ? 0 : count;
    }
    }


    public DotInfo getDotInfoForItem(ItemInfo info) {
    public @Nullable DotInfo getDotInfoForItem(@NonNull ItemInfo info) {
        if (!DeepShortcutManager.supportsShortcuts(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 null;
        }
        }

        return dotInfo;
        return mPackageUserToDotInfos.get(PackageUserKey.fromItemInfo(info));
    }
    }


    public @NonNull List<NotificationKeyData> getNotificationKeysForItem(ItemInfo info) {
    public @NonNull List<NotificationKeyData> getNotificationKeysForItem(ItemInfo info) {
+41 −4
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.util.Log;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.ItemInfo;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.WorkspaceItemInfo;
import com.android.launcher3.WorkspaceItemInfo;
import com.android.launcher3.notification.NotificationKeyData;


import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collections;
@@ -64,10 +65,40 @@ public class DeepShortcutManager {
    }
    }


    public static boolean supportsShortcuts(ItemInfo info) {
    public static boolean supportsShortcuts(ItemInfo info) {
        boolean isItemPromise = info instanceof WorkspaceItemInfo
        return isActive(info) && isApp(info);
                && ((WorkspaceItemInfo) info).hasPromiseIconUi();
    }
        return info.itemType == LauncherSettings.Favorites.ITEM_TYPE_APPLICATION

                && !info.isDisabled() && !isItemPromise;
    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() {
    public boolean wasLastCallSuccess() {
@@ -183,6 +214,12 @@ public class DeepShortcutManager {
        return shortcutIds;
        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.
     * 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.
     * If packageName == null, we query for all shortcuts with the passed flags, regardless of app.