summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
author Charlie Anderson <charlander@google.com> 2025-03-19 11:18:44 -0400
committer Charlie Anderson <charlander@google.com> 2025-03-19 21:28:37 -0400
commit19c4a92ebc6d8b5789e143f1fd71a7bed70ec3ea (patch)
treeeda6d6e3f2a2db37067b480b2a8488c62c06d067 /src
parent99ef00bfb96a53fc253f7ec54625b94ba7fec244 (diff)
Avoid downgrading archived app icon when widget is restored and when apps are archived.
- Restored widget were requesting icons through iconcache, and overwriting the restored icon from restored db. - Manually archiving icons would delete icon in cache, we should instead reuse the icon from when it was installed. Bug: 399649982 Test: Manually performing restore with apps, widgets and shortcuts. Flag: com.android.launcher3.restore_archived_app_icons_from_db Change-Id: I4184af480f29eb3ef41173fe5edc5307f263d0b0
Diffstat (limited to 'src')
-rw-r--r--src/com/android/launcher3/icons/IconCache.java8
-rw-r--r--src/com/android/launcher3/model/LoaderCursor.java1
-rw-r--r--src/com/android/launcher3/model/LoaderTask.java7
-rw-r--r--src/com/android/launcher3/model/WorkspaceItemProcessor.kt15
4 files changed, 22 insertions, 9 deletions
diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java
index 119a6b122b..1e80d03727 100644
--- a/src/com/android/launcher3/icons/IconCache.java
+++ b/src/com/android/launcher3/icons/IconCache.java
@@ -159,9 +159,15 @@ public class IconCache extends BaseIconCache {
*/
public synchronized void updateIconsForPkg(@NonNull final String packageName,
@NonNull final UserHandle user) {
+ List<LauncherActivityInfo> apps = mLauncherApps.getActivityList(packageName, user);
+ if (Flags.restoreArchivedAppIconsFromDb()
+ && apps.stream().anyMatch(app -> app.getApplicationInfo().isArchived)) {
+ // When archiving app icon, don't delete old icon so it can be re-used.
+ return;
+ }
removeIconsForPkg(packageName, user);
long userSerial = mUserManager.getSerialNumberForUser(user);
- for (LauncherActivityInfo app : mLauncherApps.getActivityList(packageName, user)) {
+ for (LauncherActivityInfo app : apps) {
addIconToDBAndMemCache(app, LauncherActivityCachingLogic.INSTANCE, userSerial);
}
}
diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java
index efe61572fe..8f116bbd6b 100644
--- a/src/com/android/launcher3/model/LoaderCursor.java
+++ b/src/com/android/launcher3/model/LoaderCursor.java
@@ -326,6 +326,7 @@ public class LoaderCursor extends CursorWrapper {
// the fallback icon
if (!loadIconFromDb(info)) {
+ FileLog.d(TAG, "loadIconFromDb failed, getting from cache - intent=" + intent);
mIconCache.getTitleAndIcon(info, DEFAULT_LOOKUP_FLAG);
}
diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java
index 78e5d898cd..6dc20de490 100644
--- a/src/com/android/launcher3/model/LoaderTask.java
+++ b/src/com/android/launcher3/model/LoaderTask.java
@@ -762,7 +762,7 @@ public class LoaderTask implements Runnable {
}
IconRequestInfo<AppInfo> iconRequestInfo = getAppInfoIconRequestInfo(
- appInfo, app, mWorkspaceIconRequestInfos);
+ appInfo, app, mWorkspaceIconRequestInfos, mIsRestoreFromBackup);
allAppsItemRequestInfos.add(iconRequestInfo);
mBgAllAppsList.add(appInfo, app, false);
}
@@ -831,9 +831,10 @@ public class LoaderTask implements Runnable {
IconRequestInfo<AppInfo> getAppInfoIconRequestInfo(
AppInfo appInfo,
LauncherActivityInfo activityInfo,
- List<IconRequestInfo<WorkspaceItemInfo>> workspaceRequestInfos
+ List<IconRequestInfo<WorkspaceItemInfo>> workspaceRequestInfos,
+ boolean isRestoreFromBackup
) {
- if (Flags.restoreArchivedAppIconsFromDb()) {
+ if (Flags.restoreArchivedAppIconsFromDb() && isRestoreFromBackup) {
Optional<IconRequestInfo<WorkspaceItemInfo>> workspaceIconRequest =
workspaceRequestInfos.stream()
.filter(request -> appInfo.getTargetComponent().equals(
diff --git a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt
index 7b8f21866a..bf71099f41 100644
--- a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt
+++ b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt
@@ -524,15 +524,14 @@ class WorkspaceItemProcessor(
WidgetInflater.TYPE_PENDING -> {
tempPackageKey.update(component.packageName, c.user)
val si = installingPkgs[tempPackageKey]
-
+ val isArchived =
+ ApplicationInfoWrapper(context, component.packageName, c.user).isArchived()
if (
!c.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_RESTORE_STARTED) &&
!isSafeMode &&
(si == null) &&
(lapi == null) &&
- !(Flags.enableSupportForArchiving() &&
- ApplicationInfoWrapper(context, component.packageName, c.user)
- .isArchived())
+ !isArchived
) {
// Restore never started
c.markDeleted(
@@ -559,7 +558,13 @@ class WorkspaceItemProcessor(
appWidgetInfo.providerName,
appWidgetInfo.user,
)
- iconCache.getTitleAndIconForApp(appWidgetInfo.pendingItemInfo, DEFAULT_LOOKUP_FLAG)
+ val iconLookupFlag =
+ if (isArchived && Flags.restoreArchivedAppIconsFromDb()) {
+ DEFAULT_LOOKUP_FLAG.withSkipAddToMemCache()
+ } else {
+ DEFAULT_LOOKUP_FLAG
+ }
+ iconCache.getTitleAndIconForApp(appWidgetInfo.pendingItemInfo, iconLookupFlag)
}
WidgetInflater.TYPE_REAL ->
WidgetSizes.updateWidgetSizeRangesAsync(