diff --git a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java index bc351251c6..fb14f9e16e 100644 --- a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java +++ b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java @@ -70,6 +70,7 @@ import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.pm.UserCache; import com.android.launcher3.shortcuts.ShortcutKey; +import com.android.launcher3.util.ApiWrapper; import com.android.launcher3.util.Executors; import com.android.launcher3.util.IntSparseArrayMap; import com.android.launcher3.util.PersistedItemArray; @@ -557,6 +558,7 @@ public class QuickstepModelDelegate extends ModelDelegate { AppInfo info = new AppInfo( lai, UserCache.INSTANCE.get(mAppState.getContext()).getUserInfo(user), + ApiWrapper.INSTANCE.get(mAppState.getContext()), mUMS.isUserQuiet(user)); info.container = mContainer; mAppState.getIconCache().getTitleAndIcon(info, lai, false); diff --git a/quickstep/src/com/android/quickstep/util/AppPairsController.java b/quickstep/src/com/android/quickstep/util/AppPairsController.java index 3f0657123f..2b4d28040f 100644 --- a/quickstep/src/com/android/quickstep/util/AppPairsController.java +++ b/quickstep/src/com/android/quickstep/util/AppPairsController.java @@ -265,9 +265,7 @@ public class AppPairsController { } if (ai != null) { - wii.status = ai.resizeMode == ActivityInfo.RESIZE_MODE_UNRESIZEABLE - ? wii.status | WorkspaceItemInfo.FLAG_NON_RESIZEABLE - : wii.status & ~WorkspaceItemInfo.FLAG_NON_RESIZEABLE; + wii.setNonResizeable(ai.resizeMode == ActivityInfo.RESIZE_MODE_UNRESIZEABLE); } } diff --git a/src/com/android/launcher3/model/AllAppsList.java b/src/com/android/launcher3/model/AllAppsList.java index 09aa58eeb8..a1a05f4071 100644 --- a/src/com/android/launcher3/model/AllAppsList.java +++ b/src/com/android/launcher3/model/AllAppsList.java @@ -39,6 +39,7 @@ import com.android.launcher3.model.data.AppInfo; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.pm.PackageInstallInfo; import com.android.launcher3.pm.UserCache; +import com.android.launcher3.util.ApiWrapper; import com.android.launcher3.util.FlagOp; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.SafeCloseable; @@ -298,6 +299,7 @@ public class AllAppsList { */ public List updatePackage( Context context, String packageName, UserHandle user) { + final ApiWrapper apiWrapper = ApiWrapper.INSTANCE.get(context); final UserCache userCache = UserCache.getInstance(context); final List matches = context.getSystemService(LauncherApps.class) .getActivityList(packageName, user); @@ -328,7 +330,7 @@ public class AllAppsList { applicationInfo.sectionName = mIndex.computeSectionName(applicationInfo.title); applicationInfo.intent = launchIntent; AppInfo.updateRuntimeFlagsForActivityTarget(applicationInfo, info, - userCache.getUserInfo(user)); + userCache.getUserInfo(user), apiWrapper); mDataChanged = true; } } diff --git a/src/com/android/launcher3/model/LoaderCursor.java b/src/com/android/launcher3/model/LoaderCursor.java index 2f678a858a..b17684c66f 100644 --- a/src/com/android/launcher3/model/LoaderCursor.java +++ b/src/com/android/launcher3/model/LoaderCursor.java @@ -52,6 +52,7 @@ import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.pm.UserCache; import com.android.launcher3.shortcuts.ShortcutKey; +import com.android.launcher3.util.ApiWrapper; import com.android.launcher3.util.ContentWriter; import com.android.launcher3.util.GridOccupancy; import com.android.launcher3.util.IntArray; @@ -366,7 +367,8 @@ public class LoaderCursor extends CursorWrapper { } if (mActivityInfo != null) { - AppInfo.updateRuntimeFlagsForActivityTarget(info, mActivityInfo, userIconInfo); + AppInfo.updateRuntimeFlagsForActivityTarget(info, mActivityInfo, userIconInfo, + ApiWrapper.INSTANCE.get(mContext)); } // from the db diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 686602c1fb..a742c752df 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -89,6 +89,7 @@ import com.android.launcher3.pm.UserCache; import com.android.launcher3.shortcuts.ShortcutKey; import com.android.launcher3.shortcuts.ShortcutRequest; import com.android.launcher3.shortcuts.ShortcutRequest.QueryResult; +import com.android.launcher3.util.ApiWrapper; import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.IOUtils; import com.android.launcher3.util.IntArray; @@ -694,7 +695,8 @@ public class LoaderTask implements Runnable { // Create the ApplicationInfos for (int i = 0; i < apps.size(); i++) { LauncherActivityInfo app = apps.get(i); - AppInfo appInfo = new AppInfo(app, mUserCache.getUserInfo(user), quietMode); + AppInfo appInfo = new AppInfo(app, mUserCache.getUserInfo(user), + ApiWrapper.INSTANCE.get(mApp.getContext()), quietMode); if (Flags.enableSupportForArchiving() && app.getApplicationInfo().isArchived) { // For archived apps, include progress info in case there is a pending // install session post restart of device. diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java index 19230654c6..6432d33583 100644 --- a/src/com/android/launcher3/model/PackageUpdatedTask.java +++ b/src/com/android/launcher3/model/PackageUpdatedTask.java @@ -286,10 +286,8 @@ public class PackageUpdatedTask extends BaseModelUpdateTask { } if (si.itemType == Favorites.ITEM_TYPE_APPLICATION) { if (activities != null && !activities.isEmpty()) { - si.status = ApiWrapper.INSTANCE.get(context) - .isNonResizeableActivity(activities.get(0)) - ? si.status | WorkspaceItemInfo.FLAG_NON_RESIZEABLE - : si.status & ~WorkspaceItemInfo.FLAG_NON_RESIZEABLE; + si.setNonResizeable(ApiWrapper.INSTANCE.get(context) + .isNonResizeableActivity(activities.get(0))); } iconCache.getTitleAndIcon(si, si.usingLowResIcon()); infoUpdated = true; diff --git a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt index e56f02115d..6b153ddc0b 100644 --- a/src/com/android/launcher3/model/WorkspaceItemProcessor.kt +++ b/src/com/android/launcher3/model/WorkspaceItemProcessor.kt @@ -329,11 +329,8 @@ class WorkspaceItemProcessor( } val activityInfo = c.launcherActivityInfo if (activityInfo != null) { - if (ApiWrapper.INSTANCE.get(app.context).isNonResizeableActivity(activityInfo)) { - info.status = info.status or WorkspaceItemInfo.FLAG_NON_RESIZEABLE - } AppInfo.updateRuntimeFlagsForActivityTarget(info, activityInfo, - userCache.getUserInfo(c.user)) + userCache.getUserInfo(c.user), ApiWrapper.INSTANCE[app.context]) } if ( (c.restoreFlag != 0 || diff --git a/src/com/android/launcher3/model/data/AppInfo.java b/src/com/android/launcher3/model/data/AppInfo.java index 86c4360889..18aa6e75f7 100644 --- a/src/com/android/launcher3/model/data/AppInfo.java +++ b/src/com/android/launcher3/model/data/AppInfo.java @@ -35,6 +35,7 @@ import com.android.launcher3.LauncherSettings; import com.android.launcher3.Utilities; import com.android.launcher3.pm.PackageInstallInfo; import com.android.launcher3.pm.UserCache; +import com.android.launcher3.util.ApiWrapper; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.UserIconInfo; @@ -89,10 +90,12 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { */ public AppInfo(Context context, LauncherActivityInfo info, UserHandle user) { this(info, UserCache.INSTANCE.get(context).getUserInfo(user), + ApiWrapper.INSTANCE.get(context), context.getSystemService(UserManager.class).isQuietModeEnabled(user)); } - public AppInfo(LauncherActivityInfo info, UserIconInfo userIconInfo, boolean quietModeEnabled) { + public AppInfo(LauncherActivityInfo info, UserIconInfo userIconInfo, + ApiWrapper apiWrapper, boolean quietModeEnabled) { this.componentName = info.getComponentName(); this.container = CONTAINER_ALL_APPS; this.user = userIconInfo.user; @@ -102,7 +105,7 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { runtimeStatusFlags |= FLAG_DISABLED_QUIET_USER; } uid = info.getApplicationInfo().uid; - updateRuntimeFlagsForActivityTarget(this, info, userIconInfo); + updateRuntimeFlagsForActivityTarget(this, info, userIconInfo, apiWrapper); } public AppInfo(AppInfo info) { @@ -180,7 +183,8 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { * activity. */ public static boolean updateRuntimeFlagsForActivityTarget( - ItemInfoWithIcon info, LauncherActivityInfo lai, UserIconInfo userIconInfo) { + ItemInfoWithIcon info, LauncherActivityInfo lai, UserIconInfo userIconInfo, + ApiWrapper apiWrapper) { final int oldProgressLevel = info.getProgressLevel(); final int oldRuntimeStatusFlags = info.runtimeStatusFlags; ApplicationInfo appInfo = lai.getApplicationInfo(); @@ -211,6 +215,7 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { info.setProgressLevel( PackageManagerHelper.getLoadingProgress(lai), PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING); + info.setNonResizeable(apiWrapper.isNonResizeableActivity(lai)); return (oldProgressLevel != info.getProgressLevel()) || (oldRuntimeStatusFlags != info.runtimeStatusFlags); } diff --git a/src/com/android/launcher3/model/data/AppPairInfo.kt b/src/com/android/launcher3/model/data/AppPairInfo.kt index 3dbd45b0f4..2eb6154476 100644 --- a/src/com/android/launcher3/model/data/AppPairInfo.kt +++ b/src/com/android/launcher3/model/data/AppPairInfo.kt @@ -73,8 +73,8 @@ class AppPairInfo() : CollectionInfo() { val isTablet = (ActivityContext.lookupContext(context) as ActivityContext).getDeviceProfile().isTablet return Pair( - isTablet || !getFirstApp().hasStatusFlag(WorkspaceItemInfo.FLAG_NON_RESIZEABLE), - isTablet || !getSecondApp().hasStatusFlag(WorkspaceItemInfo.FLAG_NON_RESIZEABLE) + isTablet || !getFirstApp().isNonResizeable(), + isTablet || !getSecondApp().isNonResizeable() ) } diff --git a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java index 3a74ff236d..d4c25cba8c 100644 --- a/src/com/android/launcher3/model/data/ItemInfoWithIcon.java +++ b/src/com/android/launcher3/model/data/ItemInfoWithIcon.java @@ -121,6 +121,11 @@ public abstract class ItemInfoWithIcon extends ItemInfo { */ public static final int FLAG_ARCHIVED = 1 << 14; + /** + * Flag indicating whether the package related to the item & user does not support resizing. + */ + public static final int FLAG_NOT_RESIZEABLE = 1 << 15; + /** * Status associated with the system state of the underlying item. This is calculated every * time a new info is created and not persisted on the disk. @@ -246,6 +251,24 @@ public abstract class ItemInfoWithIcon extends ItemInfo { } } + /** + * Sets whether this app info is non-resizeable. + */ + public void setNonResizeable(boolean nonResizeable) { + if (nonResizeable) { + runtimeStatusFlags |= FLAG_NOT_RESIZEABLE; + } else { + runtimeStatusFlags &= ~FLAG_NOT_RESIZEABLE; + } + } + + /** + * Returns whether this app info is resizeable. + */ + public boolean isNonResizeable() { + return (runtimeStatusFlags & FLAG_NOT_RESIZEABLE) != 0; + } + /** Creates an intent to that launches the app store at this app's page. */ @Nullable public Intent getMarketIntent(Context context) { diff --git a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java index 5ae70039ab..2c533ac7fd 100644 --- a/src/com/android/launcher3/model/data/WorkspaceItemInfo.java +++ b/src/com/android/launcher3/model/data/WorkspaceItemInfo.java @@ -74,12 +74,6 @@ public class WorkspaceItemInfo extends ItemInfoWithIcon { */ public static final int FLAG_START_FOR_RESULT = 1 << 4; - /** - * The app is flagged non-resizeable, meaning that it does not support multi-window on small - * screens. - */ - public static final int FLAG_NON_RESIZEABLE = 1 << 5; - /** * The intent used to start the application. */