From b2decf8046290146e1ba953a57760b4be83cd919 Mon Sep 17 00:00:00 2001 From: Piyush Mehrotra Date: Mon, 29 Jan 2024 17:38:02 +0000 Subject: [PATCH] Fix widget restore for pre-archived apps Widgets which were expected to be restored, were missing for apps which were pre-archived. The fix adds checks for archived apps when processing widgets and ensures that icon with cloud overlay is present on the widget. Test: Flashed device with build containing this fix. Screenshot right after SuW- http://shortn/_LoLudMXEaT Bug: 321297173 Flag: ACONFIG com.android.launcher3.enable_support_for_archiving DEVELOPMENT Change-Id: Ic5fd6b5b2a12f7b2b053ee4ec7c5c7330f0d07e1 --- .../launcher3/model/WorkspaceItemProcessor.kt | 4 +++- .../launcher3/util/PackageManagerHelper.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt index 31ae7c2e50..88b98aaa5a 100644 --- a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt +++ b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt @@ -433,7 +433,9 @@ class WorkspaceItemProcessor( !c.hasRestoreFlag(LauncherAppWidgetInfo.FLAG_RESTORE_STARTED) && !isSafeMode && (si == null) && - (lapi == null) + (lapi == null) && + !(Utilities.enableSupportForArchiving() && + pmHelper.isAppArchived(component.packageName)) ) { // Restore never started c.markDeleted( diff --git a/src/com/android/launcher3/util/PackageManagerHelper.java b/src/com/android/launcher3/util/PackageManagerHelper.java index 50d8886980..92288e157d 100644 --- a/src/com/android/launcher3/util/PackageManagerHelper.java +++ b/src/com/android/launcher3/util/PackageManagerHelper.java @@ -106,6 +106,23 @@ public class PackageManagerHelper { return info != null; } + /** + * Returns whether the target app is in archived state + */ + @SuppressWarnings("NewApi") + public boolean isAppArchived(@NonNull final String packageName) { + final ApplicationInfo info; + try { + info = mPm.getPackageInfo(packageName, + PackageManager.PackageInfoFlags.of( + PackageManager.MATCH_ARCHIVED_PACKAGES)).applicationInfo; + return info.isArchived; + } catch (NameNotFoundException e) { + Log.e(TAG, "Failed to get applicationInfo for package: " + packageName, e); + return false; + } + } + /** * Returns the application info for the provided package or null */