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

Commit f51bd26b authored by Rohit Goyal's avatar Rohit Goyal Committed by Android (Google) Code Review
Browse files

Merge "Bugfixes: Handle session failure unarchival cases so that icon and...

Merge "Bugfixes: Handle session failure unarchival cases so that icon and title are accurate." into 24D1-dev
parents 74fd4908 86a1b1ab
Loading
Loading
Loading
Loading
+23 −11
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_RESOURC


import static com.android.launcher3.LauncherAppState.ACTION_FORCE_ROLOAD;
import static com.android.launcher3.LauncherAppState.ACTION_FORCE_ROLOAD;
import static com.android.launcher3.config.FeatureFlags.IS_STUDIO_BUILD;
import static com.android.launcher3.config.FeatureFlags.IS_STUDIO_BUILD;
import static com.android.launcher3.icons.cache.BaseIconCache.EMPTY_CLASS_NAME;
import static com.android.launcher3.model.PackageUpdatedTask.OP_UPDATE;
import static com.android.launcher3.model.PackageUpdatedTask.OP_UPDATE;
import static com.android.launcher3.pm.UserCache.ACTION_PROFILE_AVAILABLE;
import static com.android.launcher3.pm.UserCache.ACTION_PROFILE_AVAILABLE;
import static com.android.launcher3.pm.UserCache.ACTION_PROFILE_UNAVAILABLE;
import static com.android.launcher3.pm.UserCache.ACTION_PROFILE_UNAVAILABLE;
@@ -27,6 +28,7 @@ import static com.android.launcher3.testing.shared.TestProtocol.sDebugTracing;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;


import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.pm.PackageInstaller;
import android.content.pm.PackageInstaller;
@@ -70,6 +72,7 @@ import com.android.launcher3.pm.UserCache;
import com.android.launcher3.shortcuts.ShortcutRequest;
import com.android.launcher3.shortcuts.ShortcutRequest;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.IntSet;
import com.android.launcher3.util.ItemInfoMatcher;
import com.android.launcher3.util.ItemInfoMatcher;
import com.android.launcher3.util.PackageManagerHelper;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.PackageUserKey;
import com.android.launcher3.util.Preconditions;
import com.android.launcher3.util.Preconditions;


@@ -443,9 +446,18 @@ public class LauncherModel implements InstallSessionTracker.Callback {
                    @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) {
                    @NonNull final BgDataModel dataModel, @NonNull final AllAppsList apps) {
                IconCache iconCache = app.getIconCache();
                IconCache iconCache = app.getIconCache();
                final IntSet removedIds = new IntSet();
                final IntSet removedIds = new IntSet();
                HashSet<WorkspaceItemInfo> archivedItemsToCacheRefresh = new HashSet<>();
                HashSet<WorkspaceItemInfo> archivedWorkspaceItemsToCacheRefresh = new HashSet<>();
                HashSet<String> archivedPackagesToCacheRefresh = new HashSet<>();
                boolean isAppArchived = new PackageManagerHelper(
                        mApp.getContext()).isAppArchivedForUser(packageName, user);
                synchronized (dataModel) {
                synchronized (dataModel) {
                    if (isAppArchived) {
                        // Remove package icon cache entry for archived app in case of a session
                        // failure.
                        mApp.getIconCache().remove(
                                new ComponentName(packageName, packageName + EMPTY_CLASS_NAME),
                                user);
                    }

                    for (ItemInfo info : dataModel.itemsIdMap) {
                    for (ItemInfo info : dataModel.itemsIdMap) {
                        if (info instanceof WorkspaceItemInfo
                        if (info instanceof WorkspaceItemInfo
                                && ((WorkspaceItemInfo) info).hasPromiseIconUi()
                                && ((WorkspaceItemInfo) info).hasPromiseIconUi()
@@ -456,19 +468,16 @@ public class LauncherModel implements InstallSessionTracker.Callback {
                            }
                            }
                            if (((WorkspaceItemInfo) info).isArchived()) {
                            if (((WorkspaceItemInfo) info).isArchived()) {
                                WorkspaceItemInfo workspaceItem = (WorkspaceItemInfo) info;
                                WorkspaceItemInfo workspaceItem = (WorkspaceItemInfo) info;
                                // Remove package cache icon for archived app in case of a session
                                // failure.
                                mApp.getIconCache().removeIconsForPkg(packageName, user);
                                // Refresh icons on the workspace for archived apps.
                                // Refresh icons on the workspace for archived apps.
                                iconCache.getTitleAndIcon(workspaceItem,
                                iconCache.getTitleAndIcon(workspaceItem,
                                        workspaceItem.usingLowResIcon());
                                        workspaceItem.usingLowResIcon());
                                archivedPackagesToCacheRefresh.add(packageName);
                                archivedWorkspaceItemsToCacheRefresh.add(workspaceItem);
                                archivedItemsToCacheRefresh.add(workspaceItem);
                            }
                            }
                        }
                        }
                    }
                    }
                    if (!archivedPackagesToCacheRefresh.isEmpty()) {

                        apps.updateIconsAndLabels(archivedPackagesToCacheRefresh, user);
                    if (isAppArchived) {
                        apps.updateIconsAndLabels(new HashSet<>(List.of(packageName)), user);
                    }
                    }
                }
                }


@@ -477,8 +486,11 @@ public class LauncherModel implements InstallSessionTracker.Callback {
                            ItemInfoMatcher.ofItemIds(removedIds),
                            ItemInfoMatcher.ofItemIds(removedIds),
                            "removed because install session failed");
                            "removed because install session failed");
                }
                }
                if (!archivedItemsToCacheRefresh.isEmpty()) {
                if (!archivedWorkspaceItemsToCacheRefresh.isEmpty()) {
                    bindUpdatedWorkspaceItems(archivedItemsToCacheRefresh.stream().toList());
                    bindUpdatedWorkspaceItems(
                            archivedWorkspaceItemsToCacheRefresh.stream().toList());
                }
                if (isAppArchived) {
                    bindApplicationsIfNeeded();
                    bindApplicationsIfNeeded();
                }
                }
            }
            }
+2 −1
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.launcher3.allapps;
import android.content.Context;
import android.content.Context;
import android.os.Process;
import android.os.Process;
import android.os.UserHandle;
import android.os.UserHandle;
import android.text.TextUtils;


import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.model.data.AppInfo;
import com.android.launcher3.pm.UserCache;
import com.android.launcher3.pm.UserCache;
@@ -64,7 +65,7 @@ public class AppInfoComparator implements Comparator<AppInfo> {
    }
    }


    private String getSortingTitle(AppInfo info) {
    private String getSortingTitle(AppInfo info) {
        if (info.appTitle != null) {
        if (!TextUtils.isEmpty(info.appTitle)) {
            return info.appTitle.toString();
            return info.appTitle.toString();
        }
        }
        if (info.title != null) {
        if (info.title != null) {
+2 −2
Original line number Original line Diff line number Diff line
@@ -222,6 +222,7 @@ public class IconCache extends BaseIconCache {
     * Updates {@param application} only if a valid entry is found.
     * Updates {@param application} only if a valid entry is found.
     */
     */
    public synchronized void updateTitleAndIcon(AppInfo application) {
    public synchronized void updateTitleAndIcon(AppInfo application) {
        boolean preferPackageIcon = application.isArchived();
        CacheEntry entry = cacheLocked(application.componentName,
        CacheEntry entry = cacheLocked(application.componentName,
                application.user, () -> null, mLauncherActivityInfoCachingLogic,
                application.user, () -> null, mLauncherActivityInfoCachingLogic,
                false, application.usingLowResIcon());
                false, application.usingLowResIcon());
@@ -229,13 +230,12 @@ public class IconCache extends BaseIconCache {
            return;
            return;
        }
        }


        boolean preferPackageIcon = application.isArchived();
        if (preferPackageIcon) {
        if (preferPackageIcon) {
            String packageName = application.getTargetPackage();
            String packageName = application.getTargetPackage();
            CacheEntry packageEntry =
            CacheEntry packageEntry =
                    cacheLocked(new ComponentName(packageName, packageName + EMPTY_CLASS_NAME),
                    cacheLocked(new ComponentName(packageName, packageName + EMPTY_CLASS_NAME),
                            application.user, () -> null, mLauncherActivityInfoCachingLogic,
                            application.user, () -> null, mLauncherActivityInfoCachingLogic,
                            false, application.usingLowResIcon());
                            true, application.usingLowResIcon());
            applyPackageEntry(packageEntry, application, entry);
            applyPackageEntry(packageEntry, application, entry);
        } else {
        } else {
            applyCacheEntry(entry, application);
            applyCacheEntry(entry, application);