Merge "Replacing custom parcelables with platform types for test APIs" into main
diff --git a/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java b/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java
index cd08897..fd71151 100644
--- a/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java
+++ b/quickstep/src/com/android/launcher3/model/PredictionUpdateTask.java
@@ -96,7 +96,7 @@
itemInfo = apps.data.stream()
.filter(info -> user.equals(info.user) && cn.equals(info.componentName))
.map(ai -> {
- app.getIconCache().getTitleAndIcon(ai, DEFAULT_LOOKUP_FLAG);
+ app.getIconCache().getTitleAndIcon(ai, mPredictorState.lookupFlag);
return ai.makeWorkspaceItem(context);
})
.findAny()
diff --git a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java
index daba0dd..25e1813 100644
--- a/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java
+++ b/quickstep/src/com/android/launcher3/model/QuickstepModelDelegate.java
@@ -23,6 +23,7 @@
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_HOTSEAT_PREDICTION;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_PREDICTION;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_WIDGETS_PREDICTION;
+import static com.android.launcher3.LauncherSettings.Favorites.DESKTOP_ICON_FLAG;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT;
import static com.android.launcher3.hybridhotseat.HotseatPredictionModel.convertDataModelToAppTargetBundle;
@@ -60,6 +61,7 @@
import com.android.launcher3.InvariantDeviceProfile;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherPrefs;
+import com.android.launcher3.icons.cache.CacheLookupFlag;
import com.android.launcher3.logger.LauncherAtom;
import com.android.launcher3.logging.InstanceId;
import com.android.launcher3.logging.InstanceIdSequence;
@@ -102,14 +104,14 @@
nonRestorableItem("LAST_SNAPSHOT_TIME_MILLIS", 0L, ENCRYPTED);
@VisibleForTesting
- final PredictorState mAllAppsState =
- new PredictorState(CONTAINER_PREDICTION, "all_apps_predictions");
+ final PredictorState mAllAppsState = new PredictorState(
+ CONTAINER_PREDICTION, "all_apps_predictions", DEFAULT_LOOKUP_FLAG);
@VisibleForTesting
- final PredictorState mHotseatState =
- new PredictorState(CONTAINER_HOTSEAT_PREDICTION, "hotseat_predictions");
+ final PredictorState mHotseatState = new PredictorState(
+ CONTAINER_HOTSEAT_PREDICTION, "hotseat_predictions", DESKTOP_ICON_FLAG);
@VisibleForTesting
- final PredictorState mWidgetsRecommendationState =
- new PredictorState(CONTAINER_WIDGETS_PREDICTION, "widgets_prediction");
+ final PredictorState mWidgetsRecommendationState = new PredictorState(
+ CONTAINER_WIDGETS_PREDICTION, "widgets_prediction", DESKTOP_ICON_FLAG);
private final InvariantDeviceProfile mIDP;
private final AppEventProducer mAppEventProducer;
@@ -153,7 +155,7 @@
WorkspaceItemFactory factory =
new WorkspaceItemFactory(mApp, ums, mPmHelper, pinnedShortcuts, numColumns,
- state.containerId);
+ state.containerId, state.lookupFlag);
FixedContainerItems fci = new FixedContainerItems(state.containerId,
state.storage.read(mApp.getContext(), factory, ums.allUsers::get));
mDataModel.extraItems.put(state.containerId, fci);
@@ -479,13 +481,15 @@
public final int containerId;
public final PersistedItemArray<ItemInfo> storage;
public AppPredictor predictor;
+ public CacheLookupFlag lookupFlag;
private List<AppTarget> mLastTargets;
- PredictorState(int containerId, String storageName) {
+ PredictorState(int containerId, String storageName, CacheLookupFlag lookupFlag) {
this.containerId = containerId;
storage = new PersistedItemArray<>(storageName);
mLastTargets = Collections.emptyList();
+ this.lookupFlag = lookupFlag;
}
public void destroyPredictor() {
@@ -538,18 +542,20 @@
private final Map<ShortcutKey, ShortcutInfo> mPinnedShortcuts;
private final int mMaxCount;
private final int mContainer;
+ private final CacheLookupFlag mLookupFlag;
private int mReadCount = 0;
protected WorkspaceItemFactory(LauncherAppState appState, UserManagerState ums,
PackageManagerHelper pmHelper, Map<ShortcutKey, ShortcutInfo> pinnedShortcuts,
- int maxCount, int container) {
+ int maxCount, int container, CacheLookupFlag lookupFlag) {
mAppState = appState;
mUMS = ums;
mPmHelper = pmHelper;
mPinnedShortcuts = pinnedShortcuts;
mMaxCount = maxCount;
mContainer = container;
+ mLookupFlag = lookupFlag;
}
@Nullable
@@ -573,7 +579,7 @@
mPmHelper,
mUMS.isUserQuiet(user));
info.container = mContainer;
- mAppState.getIconCache().getTitleAndIcon(info, lai, DEFAULT_LOOKUP_FLAG);
+ mAppState.getIconCache().getTitleAndIcon(info, lai, mLookupFlag);
mReadCount++;
return info.makeWorkspaceItem(mAppState.getContext());
}
diff --git a/quickstep/tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java b/quickstep/tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
index 1c4ce74..fa2eb1e 100644
--- a/quickstep/tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
+++ b/quickstep/tests/src/com/android/launcher3/model/WidgetsPredicationUpdateTaskTest.java
@@ -20,6 +20,7 @@
import static android.os.Process.myUserHandle;
import static com.android.launcher3.LauncherSettings.Favorites.CONTAINER_WIDGETS_PREDICTION;
+import static com.android.launcher3.icons.cache.CacheLookupFlag.DEFAULT_LOOKUP_FLAG;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static com.android.launcher3.util.TestUtil.runOnExecutorSync;
@@ -277,7 +278,8 @@
private WidgetsPredictionUpdateTask newWidgetsPredicationTask(List<AppTarget> appTargets) {
return new WidgetsPredictionUpdateTask(
- new PredictorState(CONTAINER_WIDGETS_PREDICTION, "test_widgets_prediction"),
+ new PredictorState(CONTAINER_WIDGETS_PREDICTION, "test_widgets_prediction",
+ DEFAULT_LOOKUP_FLAG),
appTargets);
}
diff --git a/src/com/android/launcher3/LauncherSettings.java b/src/com/android/launcher3/LauncherSettings.java
index 1d2d161..5dc5d31 100644
--- a/src/com/android/launcher3/LauncherSettings.java
+++ b/src/com/android/launcher3/LauncherSettings.java
@@ -19,12 +19,15 @@
import static android.util.Base64.NO_PADDING;
import static android.util.Base64.NO_WRAP;
+import static com.android.launcher3.icons.cache.CacheLookupFlag.DEFAULT_LOOKUP_FLAG;
+
import android.database.sqlite.SQLiteDatabase;
import android.provider.BaseColumns;
import android.util.Base64;
import androidx.annotation.NonNull;
+import com.android.launcher3.icons.cache.CacheLookupFlag;
import com.android.launcher3.model.data.ItemInfo;
import java.util.LinkedHashMap;
@@ -352,6 +355,11 @@
public static String getColumns(long profileId) {
return String.join(", ", getColumnsToTypes(profileId).keySet());
}
+
+ /**
+ * Lookup flag to be used for items which are visible on the home screen
+ */
+ public static final CacheLookupFlag DESKTOP_ICON_FLAG = DEFAULT_LOOKUP_FLAG;
}
/**
diff --git a/src/com/android/launcher3/icons/IconCache.java b/src/com/android/launcher3/icons/IconCache.java
index 0ebd69f..88a60ea 100644
--- a/src/com/android/launcher3/icons/IconCache.java
+++ b/src/com/android/launcher3/icons/IconCache.java
@@ -349,10 +349,10 @@
*
* @param iconRequestInfos List of IconRequestInfos representing titles and icons to query.
* @param user UserHandle all the given iconRequestInfos share
- * @param useLowResIcons whether we should exclude the icon column from the sql results.
+ * @param lookupFlag what flags to use when loading the icon.
*/
private <T extends ItemInfoWithIcon> Cursor createBulkQueryCursor(
- List<IconRequestInfo<T>> iconRequestInfos, UserHandle user, boolean useLowResIcons)
+ List<IconRequestInfo<T>> iconRequestInfos, UserHandle user, CacheLookupFlag lookupFlag)
throws SQLiteException {
String[] queryParams = Stream.concat(
iconRequestInfos.stream()
@@ -365,7 +365,7 @@
",", Collections.nCopies(queryParams.length - 1, "?"));
return iconDb.query(
- useLowResIcons ? COLUMNS_LOW_RES : COLUMNS_HIGH_RES,
+ toLookupColumns(lookupFlag),
COLUMN_COMPONENT
+ " IN ( " + componentNameQuery + " )"
+ " AND " + COLUMN_USER + " = ?",
@@ -423,10 +423,11 @@
List<IconRequestInfo<T>> filteredList,
Map<ComponentName, List<IconRequestInfo<T>>> duplicateIconRequestsMap) {
Trace.beginSection("loadIconSubsectionWithDatabase");
+ CacheLookupFlag lookupFlag = DEFAULT_LOOKUP_FLAG.withUseLowRes(sectionKey.second);
try (Cursor c = createBulkQueryCursor(
filteredList,
/* user = */ sectionKey.first,
- /* useLowResIcons = */ sectionKey.second)) {
+ lookupFlag)) {
// Database title and icon loading
int componentNameColumnIndex = c.getColumnIndexOrThrow(COLUMN_COMPONENT);
while (c.moveToNext()) {
@@ -442,7 +443,7 @@
/* user = */ sectionKey.first,
() -> duplicateIconRequests.get(0).launcherActivityInfo,
LauncherActivityCachingLogic.INSTANCE,
- DEFAULT_LOOKUP_FLAG.withUseLowRes(sectionKey.second),
+ lookupFlag,
c);
for (IconRequestInfo<T> iconRequest : duplicateIconRequests) {
@@ -519,7 +520,7 @@
@NonNull final PackageItemInfo infoInOut,
@NonNull CacheLookupFlag lookupFlag) {
CacheEntry entry = getEntryForPackageLocked(
- infoInOut.packageName, infoInOut.user, lookupFlag.useLowRes());
+ infoInOut.packageName, infoInOut.user, lookupFlag);
applyCacheEntry(entry, infoInOut);
if (infoInOut.widgetCategory == NO_CATEGORY) {
return;
@@ -593,7 +594,7 @@
@VisibleForTesting
synchronized boolean isItemInDb(ComponentKey cacheKey) {
- return getEntryFromDBLocked(cacheKey, new CacheEntry(), false);
+ return getEntryFromDBLocked(cacheKey, new CacheEntry(), DEFAULT_LOOKUP_FLAG);
}
/**
diff --git a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
index b936adf..ddbbdc7 100644
--- a/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
+++ b/src/com/android/launcher3/model/AddWorkspaceItemsTask.java
@@ -15,6 +15,8 @@
*/
package com.android.launcher3.model;
+import static com.android.launcher3.LauncherSettings.Favorites.DESKTOP_ICON_FLAG;
+
import android.content.Context;
import android.content.Intent;
import android.content.pm.LauncherActivityInfo;
@@ -194,7 +196,7 @@
WorkspaceItemInfo wii = (WorkspaceItemInfo) itemInfo;
wii.title = "";
wii.bitmap = cache.getDefaultIcon(item.user);
- cache.getTitleAndIcon(wii, wii.getMatchingLookupFlag());
+ cache.getTitleAndIcon(wii, DESKTOP_ICON_FLAG);
}
}
diff --git a/src/com/android/launcher3/model/ItemInstallQueue.java b/src/com/android/launcher3/model/ItemInstallQueue.java
index c4f222f..8acd7e2 100644
--- a/src/com/android/launcher3/model/ItemInstallQueue.java
+++ b/src/com/android/launcher3/model/ItemInstallQueue.java
@@ -18,10 +18,10 @@
import static android.appwidget.AppWidgetManager.EXTRA_APPWIDGET_ID;
+import static com.android.launcher3.LauncherSettings.Favorites.DESKTOP_ICON_FLAG;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPLICATION;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_APPWIDGET;
import static com.android.launcher3.LauncherSettings.Favorites.ITEM_TYPE_DEEP_SHORTCUT;
-import static com.android.launcher3.icons.cache.CacheLookupFlag.DEFAULT_LOOKUP_FLAG;
import static com.android.launcher3.model.data.AppInfo.makeLaunchIntent;
import static com.android.launcher3.model.data.ItemInfoWithIcon.FLAG_ARCHIVED;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -310,7 +310,7 @@
}
LauncherAppState.getInstance(context).getIconCache()
.getTitleAndIcon(si, () -> lai,
- DEFAULT_LOOKUP_FLAG.withUsePackageIcon(usePackageIcon));
+ DESKTOP_ICON_FLAG.withUsePackageIcon(usePackageIcon));
return Pair.create(si, null);
}
case ITEM_TYPE_DEEP_SHORTCUT: {
diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java
index bc0d776..4e57944 100644
--- a/src/com/android/launcher3/model/LoaderTask.java
+++ b/src/com/android/launcher3/model/LoaderTask.java
@@ -23,9 +23,9 @@
import static com.android.launcher3.Flags.enableTieredWidgetsByDefaultInPicker;
import static com.android.launcher3.LauncherPrefs.IS_FIRST_LOAD_AFTER_RESTORE;
import static com.android.launcher3.LauncherPrefs.SHOULD_SHOW_SMARTSPACE;
+import static com.android.launcher3.LauncherSettings.Favorites.DESKTOP_ICON_FLAG;
import static com.android.launcher3.LauncherSettings.Favorites.TABLE_NAME;
import static com.android.launcher3.icons.CacheableShortcutInfo.convertShortcutsToCacheableShortcuts;
-import static com.android.launcher3.icons.cache.CacheLookupFlag.DEFAULT_LOOKUP_FLAG;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_HAS_SHORTCUT_PERMISSION;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_PRIVATE_PROFILE_QUIET_MODE_ENABLED;
import static com.android.launcher3.model.BgDataModel.Callbacks.FLAG_QUIET_MODE_CHANGE_PERMISSION;
@@ -603,10 +603,10 @@
info.rank = rank;
if (info instanceof WorkspaceItemInfo wii
- && wii.getMatchingLookupFlag().useLowRes()
+ && wii.getMatchingLookupFlag().isVisuallyLessThan(DESKTOP_ICON_FLAG)
&& wii.itemType == Favorites.ITEM_TYPE_APPLICATION
&& verifiers.stream().anyMatch(it -> it.isItemInPreview(info.rank))) {
- mIconCache.getTitleAndIcon(wii, DEFAULT_LOOKUP_FLAG);
+ mIconCache.getTitleAndIcon(wii, DESKTOP_ICON_FLAG);
} else if (info instanceof AppPairInfo api) {
api.fetchHiResIconsIfNeeded(mIconCache);
}
diff --git a/src/com/android/launcher3/model/data/AppPairInfo.kt b/src/com/android/launcher3/model/data/AppPairInfo.kt
index 073d0e0..e620ac9 100644
--- a/src/com/android/launcher3/model/data/AppPairInfo.kt
+++ b/src/com/android/launcher3/model/data/AppPairInfo.kt
@@ -18,9 +18,9 @@
import android.content.Context
import com.android.launcher3.LauncherSettings
+import com.android.launcher3.LauncherSettings.Favorites.DESKTOP_ICON_FLAG
import com.android.launcher3.R
import com.android.launcher3.icons.IconCache
-import com.android.launcher3.icons.cache.CacheLookupFlag.Companion.DEFAULT_LOOKUP_FLAG
import com.android.launcher3.logger.LauncherAtom
import com.android.launcher3.views.ActivityContext
@@ -82,8 +82,8 @@
fun fetchHiResIconsIfNeeded(iconCache: IconCache) {
getAppContents()
.stream()
- .filter { it.matchingLookupFlag.useLowRes() }
- .forEach { member -> iconCache.getTitleAndIcon(member, DEFAULT_LOOKUP_FLAG) }
+ .filter { it.matchingLookupFlag.isVisuallyLessThan(DESKTOP_ICON_FLAG) }
+ .forEach { member -> iconCache.getTitleAndIcon(member, DESKTOP_ICON_FLAG) }
}
/**
diff --git a/tests/multivalentTests/src/com/android/launcher3/icons/cache/CacheLookupFlagTest.kt b/tests/multivalentTests/src/com/android/launcher3/icons/cache/CacheLookupFlagTest.kt
index 7b1851d..8218181 100644
--- a/tests/multivalentTests/src/com/android/launcher3/icons/cache/CacheLookupFlagTest.kt
+++ b/tests/multivalentTests/src/com/android/launcher3/icons/cache/CacheLookupFlagTest.kt
@@ -78,4 +78,25 @@
assertTrue(flag.useLowRes())
assertFalse(flag.usePackageIcon())
}
+
+ @Test
+ fun `isVisuallyLessThan does not depend on package icon`() {
+ assertFalse(DEFAULT_LOOKUP_FLAG.isVisuallyLessThan(DEFAULT_LOOKUP_FLAG))
+ assertFalse(
+ DEFAULT_LOOKUP_FLAG.withUsePackageIcon().isVisuallyLessThan(DEFAULT_LOOKUP_FLAG)
+ )
+ assertFalse(
+ DEFAULT_LOOKUP_FLAG.isVisuallyLessThan(DEFAULT_LOOKUP_FLAG.withUsePackageIcon())
+ )
+ }
+
+ @Test
+ fun `isVisuallyLessThan depends on low res`() {
+ assertTrue(DEFAULT_LOOKUP_FLAG.withUseLowRes().isVisuallyLessThan(DEFAULT_LOOKUP_FLAG))
+ assertFalse(DEFAULT_LOOKUP_FLAG.isVisuallyLessThan(DEFAULT_LOOKUP_FLAG.withUseLowRes()))
+ assertTrue(
+ DEFAULT_LOOKUP_FLAG.withUseLowRes()
+ .isVisuallyLessThan(DEFAULT_LOOKUP_FLAG.withUsePackageIcon())
+ )
+ }
}