diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java index d591c82ecb..fe1ce189fd 100644 --- a/src/com/android/launcher3/icons/IconCache.java +++ b/src/com/android/launcher3/icons/IconCache.java @@ -260,8 +260,13 @@ public class IconCache extends BaseIconCache { @SuppressWarnings("NewApi") public synchronized void getTitleAndIcon(ItemInfoWithIcon info, LauncherActivityInfo activityInfo, boolean useLowResIcon) { - boolean isAppArchived = Flags.enableSupportForArchiving() && activityInfo != null + boolean isAppArchived; + try { + isAppArchived = Flags.enableSupportForArchiving() && activityInfo != null && activityInfo.getActivityInfo().isArchived; + } catch (NoSuchMethodError e) { + isAppArchived = false; + } // If we already have activity info, no need to use package icon getTitleAndIcon(info, () -> activityInfo, isAppArchived, useLowResIcon, isAppArchived); diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 64e527b5b8..3d80cb4cac 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -736,7 +736,13 @@ public class LoaderTask implements Runnable { LauncherActivityInfo app = apps.get(i); AppInfo appInfo = new AppInfo(app, mUserCache.getUserInfo(user), ApiWrapper.INSTANCE.get(mApp.getContext()), mPmHelper, quietMode); - if (Flags.enableSupportForArchiving() && app.getApplicationInfo().isArchived) { + boolean isArchived; + try { + isArchived = app.getApplicationInfo().isArchived; + } catch (NoSuchFieldError e) { + isArchived = false; + } + if (Flags.enableSupportForArchiving() && isArchived) { // For archived apps, include progress info in case there is a pending // install session post restart of device. String appPackageName = app.getApplicationInfo().packageName; diff --git a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt index 90e47d66cc..fb76d175cb 100644 --- a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt +++ b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt @@ -340,11 +340,16 @@ class WorkspaceItemProcessor( pmHelper ) } + val isArchived = try { + activityInfo.applicationInfo.isArchived + } catch (_: NoSuchFieldError) { + false + } if ( (c.restoreFlag != 0 || Flags.enableSupportForArchiving() && activityInfo != null && - activityInfo.applicationInfo.isArchived) && !TextUtils.isEmpty(targetPkg) + isArchived) && !TextUtils.isEmpty(targetPkg) ) { tempPackageKey.update(targetPkg, c.user) val si = installingPkgs[tempPackageKey] diff --git a/src/com/android/launcher3/model/data/AppInfo.java b/src/com/android/launcher3/model/data/AppInfo.java index 35de0f1c51..1c2bb6ae1b 100644 --- a/src/com/android/launcher3/model/data/AppInfo.java +++ b/src/com/android/launcher3/model/data/AppInfo.java @@ -202,10 +202,14 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { info.runtimeStatusFlags &= ~FLAG_DISABLED_SUSPENDED; } if (Flags.enableSupportForArchiving()) { - if (lai.getActivityInfo().isArchived) { - info.runtimeStatusFlags |= FLAG_ARCHIVED; - } else { - info.runtimeStatusFlags &= ~FLAG_ARCHIVED; + try { + if (lai.getActivityInfo().isArchived) { + info.runtimeStatusFlags |= FLAG_ARCHIVED; + } else { + info.runtimeStatusFlags &= ~FLAG_ARCHIVED; + } + } catch (NoSuchMethodError e) { + // Ignore } } info.runtimeStatusFlags |= (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0