diff options
author | 2025-03-19 11:18:44 -0400 | |
---|---|---|
committer | 2025-03-19 21:28:37 -0400 | |
commit | 19c4a92ebc6d8b5789e143f1fd71a7bed70ec3ea (patch) | |
tree | eda6d6e3f2a2db37067b480b2a8488c62c06d067 /src | |
parent | 99ef00bfb96a53fc253f7ec54625b94ba7fec244 (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')
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( |