Loading src/com/android/launcher3/model/AllAppsList.java +4 −15 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.launcher3.model; import static com.android.launcher3.model.data.AppInfo.COMPONENT_KEY_COMPARATOR; import static com.android.launcher3.model.data.AppInfo.EMPTY_ARRAY; import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_ARCHIVED; import android.content.ComponentName; import android.content.Context; Loading @@ -33,14 +32,13 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.AppFilter; import com.android.launcher3.Flags; import com.android.launcher3.Utilities; import com.android.launcher3.compat.AlphabeticIndexCompat; import com.android.launcher3.icons.IconCache; import com.android.launcher3.model.BgDataModel.Callbacks; 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.FlagOp; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.SafeCloseable; Loading Loading @@ -300,6 +298,7 @@ public class AllAppsList { */ public List<LauncherActivityInfo> updatePackage( Context context, String packageName, UserHandle user) { final UserCache userCache = UserCache.getInstance(context); final List<LauncherActivityInfo> matches = context.getSystemService(LauncherApps.class) .getActivityList(packageName, user); if (matches.size() > 0) { Loading Loading @@ -327,19 +326,9 @@ public class AllAppsList { mIconCache.getTitleAndIcon(applicationInfo, info, false /* useLowResIcon */); applicationInfo.sectionName = mIndex.computeSectionName(applicationInfo.title); applicationInfo.setProgressLevel( PackageManagerHelper.getLoadingProgress(info), PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING); applicationInfo.intent = launchIntent; if (Flags.enableSupportForArchiving()) { // In case an app is archived, the respective item flag corresponding to // archiving should also be applied during package updates if (info.getActivityInfo().isArchived) { applicationInfo.runtimeStatusFlags |= FLAG_ARCHIVED; } else { applicationInfo.runtimeStatusFlags &= (~FLAG_ARCHIVED); } } AppInfo.updateRuntimeFlagsForActivityTarget(applicationInfo, info, userCache.getUserInfo(user)); mDataChanged = true; } } Loading src/com/android/launcher3/model/LoaderTask.java +1 −1 Original line number Diff line number Diff line Loading @@ -443,7 +443,7 @@ public class LoaderTask implements Runnable { List<IconRequestInfo<WorkspaceItemInfo>> iconRequestInfos = new ArrayList<>(); WorkspaceItemProcessor itemProcessor = new WorkspaceItemProcessor(c, memoryLogger, mUserManagerState, mLauncherApps, mPendingPackages, mUserCache, mUserManagerState, mLauncherApps, mPendingPackages, mShortcutKeyToPinnedShortcuts, mApp, mBgDataModel, mWidgetProvidersMap, installingPkgs, isSdCardReady, widgetInflater, pmHelper, iconRequestInfos, unlockedUsers, Loading src/com/android/launcher3/model/WorkspaceItemProcessor.kt +5 −4 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.launcher3.Utilities import com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RestoreError import com.android.launcher3.config.FeatureFlags import com.android.launcher3.logging.FileLog import com.android.launcher3.model.data.AppInfo import com.android.launcher3.model.data.AppPairInfo import com.android.launcher3.model.data.FolderInfo import com.android.launcher3.model.data.IconRequestInfo Loading @@ -41,6 +42,7 @@ import com.android.launcher3.model.data.ItemInfoWithIcon import com.android.launcher3.model.data.LauncherAppWidgetInfo import com.android.launcher3.model.data.WorkspaceItemInfo import com.android.launcher3.pm.PackageInstallInfo import com.android.launcher3.pm.UserCache import com.android.launcher3.shortcuts.ShortcutKey import com.android.launcher3.util.ApiWrapper import com.android.launcher3.util.ComponentKey Loading @@ -60,6 +62,7 @@ import com.android.launcher3.widget.util.WidgetSizes class WorkspaceItemProcessor( private val c: LoaderCursor, private val memoryLogger: LoaderMemoryLogger?, private val userCache: UserCache, private val userManagerState: UserManagerState, private val launcherApps: LauncherApps, private val pendingPackages: MutableSet<PackageUserKey>, Loading Loading @@ -329,10 +332,8 @@ class WorkspaceItemProcessor( if (ApiWrapper.INSTANCE.get(app.context).isNonResizeableActivity(activityInfo)) { info.status = info.status or WorkspaceItemInfo.FLAG_NON_RESIZEABLE } info.setProgressLevel( PackageManagerHelper.getLoadingProgress(activityInfo), PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING ) AppInfo.updateRuntimeFlagsForActivityTarget(info, activityInfo, userCache.getUserInfo(c.user)) } if ( (c.restoreFlag != 0 || Loading src/com/android/launcher3/model/data/AppInfo.java +19 −3 Original line number Diff line number Diff line Loading @@ -175,14 +175,26 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { return componentName; } public static void updateRuntimeFlagsForActivityTarget( /** * Updates the runtime status flags for the given info based on the state of the specified * activity. */ public static boolean updateRuntimeFlagsForActivityTarget( ItemInfoWithIcon info, LauncherActivityInfo lai, UserIconInfo userIconInfo) { final int oldProgressLevel = info.getProgressLevel(); final int oldRuntimeStatusFlags = info.runtimeStatusFlags; ApplicationInfo appInfo = lai.getApplicationInfo(); if (PackageManagerHelper.isAppSuspended(appInfo)) { info.runtimeStatusFlags |= FLAG_DISABLED_SUSPENDED; } else { info.runtimeStatusFlags &= ~FLAG_DISABLED_SUSPENDED; } if (Flags.enableSupportForArchiving() && lai.getActivityInfo().isArchived) { if (Flags.enableSupportForArchiving()) { if (lai.getActivityInfo().isArchived) { info.runtimeStatusFlags |= FLAG_ARCHIVED; } else { info.runtimeStatusFlags &= ~FLAG_ARCHIVED; } } info.runtimeStatusFlags |= (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 ? FLAG_SYSTEM_NO : FLAG_SYSTEM_YES; Loading @@ -190,6 +202,8 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { if (Flags.privateSpaceRestrictAccessibilityDrag()) { if (userIconInfo.isPrivate()) { info.runtimeStatusFlags |= FLAG_NOT_PINNABLE; } else { info.runtimeStatusFlags &= ~FLAG_NOT_PINNABLE; } } Loading @@ -197,6 +211,8 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { info.setProgressLevel( PackageManagerHelper.getLoadingProgress(lai), PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING); return (oldProgressLevel != info.getProgressLevel()) || (oldRuntimeStatusFlags != info.runtimeStatusFlags); } @Override Loading tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt +13 −0 Original line number Diff line number Diff line Loading @@ -37,10 +37,12 @@ import com.android.launcher3.model.data.FolderInfo import com.android.launcher3.model.data.IconRequestInfo 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.ComponentKey import com.android.launcher3.util.PackageManagerHelper import com.android.launcher3.util.PackageUserKey import com.android.launcher3.util.UserIconInfo import com.android.launcher3.widget.WidgetInflater import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage Loading Loading @@ -68,6 +70,7 @@ class WorkspaceItemProcessorTest { @Mock private lateinit var mockPmHelper: PackageManagerHelper @Mock private lateinit var mockLauncherApps: LauncherApps @Mock private lateinit var mockCursor: LoaderCursor @Mock private lateinit var mockUserCache: UserCache @Mock private lateinit var mockUserManagerState: UserManagerState @Mock private lateinit var mockWidgetInflater: WidgetInflater Loading Loading @@ -132,6 +135,14 @@ class WorkspaceItemProcessorTest { .thenReturn(mockWorkspaceInfo) whenever(createIconRequestInfo(any(), any())).thenReturn(mockIconRequestInfo) } mockUserCache = mock<UserCache>().apply { val userIconInfo = mock<UserIconInfo>().apply() { whenever(isPrivate).thenReturn(false) } whenever(getUserInfo(any())).thenReturn(userIconInfo) } mockUserManagerState = mock<UserManagerState>() mockWidgetInflater = mock<WidgetInflater>() keyToPinnedShortcutsMap = mutableMapOf() Loading @@ -147,6 +158,7 @@ class WorkspaceItemProcessorTest { private fun createWorkspaceItemProcessorUnderTest( cursor: LoaderCursor = mockCursor, memoryLogger: LoaderMemoryLogger? = null, userCache: UserCache = mockUserCache, userManagerState: UserManagerState = mockUserManagerState, launcherApps: LauncherApps = mockLauncherApps, shortcutKeyToPinnedShortcuts: Map<ShortcutKey, ShortcutInfo> = keyToPinnedShortcutsMap, Loading @@ -165,6 +177,7 @@ class WorkspaceItemProcessorTest { WorkspaceItemProcessor( c = cursor, memoryLogger = memoryLogger, userCache = userCache, userManagerState = userManagerState, launcherApps = launcherApps, app = app, Loading Loading
src/com/android/launcher3/model/AllAppsList.java +4 −15 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.launcher3.model; import static com.android.launcher3.model.data.AppInfo.COMPONENT_KEY_COMPARATOR; import static com.android.launcher3.model.data.AppInfo.EMPTY_ARRAY; import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_ARCHIVED; import android.content.ComponentName; import android.content.Context; Loading @@ -33,14 +32,13 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.AppFilter; import com.android.launcher3.Flags; import com.android.launcher3.Utilities; import com.android.launcher3.compat.AlphabeticIndexCompat; import com.android.launcher3.icons.IconCache; import com.android.launcher3.model.BgDataModel.Callbacks; 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.FlagOp; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.util.SafeCloseable; Loading Loading @@ -300,6 +298,7 @@ public class AllAppsList { */ public List<LauncherActivityInfo> updatePackage( Context context, String packageName, UserHandle user) { final UserCache userCache = UserCache.getInstance(context); final List<LauncherActivityInfo> matches = context.getSystemService(LauncherApps.class) .getActivityList(packageName, user); if (matches.size() > 0) { Loading Loading @@ -327,19 +326,9 @@ public class AllAppsList { mIconCache.getTitleAndIcon(applicationInfo, info, false /* useLowResIcon */); applicationInfo.sectionName = mIndex.computeSectionName(applicationInfo.title); applicationInfo.setProgressLevel( PackageManagerHelper.getLoadingProgress(info), PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING); applicationInfo.intent = launchIntent; if (Flags.enableSupportForArchiving()) { // In case an app is archived, the respective item flag corresponding to // archiving should also be applied during package updates if (info.getActivityInfo().isArchived) { applicationInfo.runtimeStatusFlags |= FLAG_ARCHIVED; } else { applicationInfo.runtimeStatusFlags &= (~FLAG_ARCHIVED); } } AppInfo.updateRuntimeFlagsForActivityTarget(applicationInfo, info, userCache.getUserInfo(user)); mDataChanged = true; } } Loading
src/com/android/launcher3/model/LoaderTask.java +1 −1 Original line number Diff line number Diff line Loading @@ -443,7 +443,7 @@ public class LoaderTask implements Runnable { List<IconRequestInfo<WorkspaceItemInfo>> iconRequestInfos = new ArrayList<>(); WorkspaceItemProcessor itemProcessor = new WorkspaceItemProcessor(c, memoryLogger, mUserManagerState, mLauncherApps, mPendingPackages, mUserCache, mUserManagerState, mLauncherApps, mPendingPackages, mShortcutKeyToPinnedShortcuts, mApp, mBgDataModel, mWidgetProvidersMap, installingPkgs, isSdCardReady, widgetInflater, pmHelper, iconRequestInfos, unlockedUsers, Loading
src/com/android/launcher3/model/WorkspaceItemProcessor.kt +5 −4 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.launcher3.Utilities import com.android.launcher3.backuprestore.LauncherRestoreEventLogger.RestoreError import com.android.launcher3.config.FeatureFlags import com.android.launcher3.logging.FileLog import com.android.launcher3.model.data.AppInfo import com.android.launcher3.model.data.AppPairInfo import com.android.launcher3.model.data.FolderInfo import com.android.launcher3.model.data.IconRequestInfo Loading @@ -41,6 +42,7 @@ import com.android.launcher3.model.data.ItemInfoWithIcon import com.android.launcher3.model.data.LauncherAppWidgetInfo import com.android.launcher3.model.data.WorkspaceItemInfo import com.android.launcher3.pm.PackageInstallInfo import com.android.launcher3.pm.UserCache import com.android.launcher3.shortcuts.ShortcutKey import com.android.launcher3.util.ApiWrapper import com.android.launcher3.util.ComponentKey Loading @@ -60,6 +62,7 @@ import com.android.launcher3.widget.util.WidgetSizes class WorkspaceItemProcessor( private val c: LoaderCursor, private val memoryLogger: LoaderMemoryLogger?, private val userCache: UserCache, private val userManagerState: UserManagerState, private val launcherApps: LauncherApps, private val pendingPackages: MutableSet<PackageUserKey>, Loading Loading @@ -329,10 +332,8 @@ class WorkspaceItemProcessor( if (ApiWrapper.INSTANCE.get(app.context).isNonResizeableActivity(activityInfo)) { info.status = info.status or WorkspaceItemInfo.FLAG_NON_RESIZEABLE } info.setProgressLevel( PackageManagerHelper.getLoadingProgress(activityInfo), PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING ) AppInfo.updateRuntimeFlagsForActivityTarget(info, activityInfo, userCache.getUserInfo(c.user)) } if ( (c.restoreFlag != 0 || Loading
src/com/android/launcher3/model/data/AppInfo.java +19 −3 Original line number Diff line number Diff line Loading @@ -175,14 +175,26 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { return componentName; } public static void updateRuntimeFlagsForActivityTarget( /** * Updates the runtime status flags for the given info based on the state of the specified * activity. */ public static boolean updateRuntimeFlagsForActivityTarget( ItemInfoWithIcon info, LauncherActivityInfo lai, UserIconInfo userIconInfo) { final int oldProgressLevel = info.getProgressLevel(); final int oldRuntimeStatusFlags = info.runtimeStatusFlags; ApplicationInfo appInfo = lai.getApplicationInfo(); if (PackageManagerHelper.isAppSuspended(appInfo)) { info.runtimeStatusFlags |= FLAG_DISABLED_SUSPENDED; } else { info.runtimeStatusFlags &= ~FLAG_DISABLED_SUSPENDED; } if (Flags.enableSupportForArchiving() && lai.getActivityInfo().isArchived) { if (Flags.enableSupportForArchiving()) { if (lai.getActivityInfo().isArchived) { info.runtimeStatusFlags |= FLAG_ARCHIVED; } else { info.runtimeStatusFlags &= ~FLAG_ARCHIVED; } } info.runtimeStatusFlags |= (appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0 ? FLAG_SYSTEM_NO : FLAG_SYSTEM_YES; Loading @@ -190,6 +202,8 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { if (Flags.privateSpaceRestrictAccessibilityDrag()) { if (userIconInfo.isPrivate()) { info.runtimeStatusFlags |= FLAG_NOT_PINNABLE; } else { info.runtimeStatusFlags &= ~FLAG_NOT_PINNABLE; } } Loading @@ -197,6 +211,8 @@ public class AppInfo extends ItemInfoWithIcon implements WorkspaceItemFactory { info.setProgressLevel( PackageManagerHelper.getLoadingProgress(lai), PackageInstallInfo.STATUS_INSTALLED_DOWNLOADING); return (oldProgressLevel != info.getProgressLevel()) || (oldRuntimeStatusFlags != info.runtimeStatusFlags); } @Override Loading
tests/src/com/android/launcher3/model/WorkspaceItemProcessorTest.kt +13 −0 Original line number Diff line number Diff line Loading @@ -37,10 +37,12 @@ import com.android.launcher3.model.data.FolderInfo import com.android.launcher3.model.data.IconRequestInfo 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.ComponentKey import com.android.launcher3.util.PackageManagerHelper import com.android.launcher3.util.PackageUserKey import com.android.launcher3.util.UserIconInfo import com.android.launcher3.widget.WidgetInflater import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertWithMessage Loading Loading @@ -68,6 +70,7 @@ class WorkspaceItemProcessorTest { @Mock private lateinit var mockPmHelper: PackageManagerHelper @Mock private lateinit var mockLauncherApps: LauncherApps @Mock private lateinit var mockCursor: LoaderCursor @Mock private lateinit var mockUserCache: UserCache @Mock private lateinit var mockUserManagerState: UserManagerState @Mock private lateinit var mockWidgetInflater: WidgetInflater Loading Loading @@ -132,6 +135,14 @@ class WorkspaceItemProcessorTest { .thenReturn(mockWorkspaceInfo) whenever(createIconRequestInfo(any(), any())).thenReturn(mockIconRequestInfo) } mockUserCache = mock<UserCache>().apply { val userIconInfo = mock<UserIconInfo>().apply() { whenever(isPrivate).thenReturn(false) } whenever(getUserInfo(any())).thenReturn(userIconInfo) } mockUserManagerState = mock<UserManagerState>() mockWidgetInflater = mock<WidgetInflater>() keyToPinnedShortcutsMap = mutableMapOf() Loading @@ -147,6 +158,7 @@ class WorkspaceItemProcessorTest { private fun createWorkspaceItemProcessorUnderTest( cursor: LoaderCursor = mockCursor, memoryLogger: LoaderMemoryLogger? = null, userCache: UserCache = mockUserCache, userManagerState: UserManagerState = mockUserManagerState, launcherApps: LauncherApps = mockLauncherApps, shortcutKeyToPinnedShortcuts: Map<ShortcutKey, ShortcutInfo> = keyToPinnedShortcutsMap, Loading @@ -165,6 +177,7 @@ class WorkspaceItemProcessorTest { WorkspaceItemProcessor( c = cursor, memoryLogger = memoryLogger, userCache = userCache, userManagerState = userManagerState, launcherApps = launcherApps, app = app, Loading