Add a flag to enable custom local filter for recommended widgets
Test: Run WidgetsPredictionUpdateTaskTest Bug: 186648032 Change-Id: I2bd5e2c81f971e0a40a4b05c8cab2a7adb171f96
This commit is contained in:
@@ -16,16 +16,17 @@
|
||||
package com.android.launcher3.model;
|
||||
|
||||
import android.app.prediction.AppTarget;
|
||||
import android.content.ComponentName;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.android.launcher3.LauncherAppState;
|
||||
import com.android.launcher3.config.FeatureFlags;
|
||||
import com.android.launcher3.model.BgDataModel.FixedContainerItems;
|
||||
import com.android.launcher3.model.QuickstepModelDelegate.PredictorState;
|
||||
import com.android.launcher3.model.data.ItemInfo;
|
||||
import com.android.launcher3.util.ComponentKey;
|
||||
import com.android.launcher3.util.PackageUserKey;
|
||||
import com.android.launcher3.widget.PendingAddWidgetInfo;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
@@ -56,25 +57,43 @@ public final class WidgetsPredictionUpdateTask extends BaseModelUpdateTask {
|
||||
Map<PackageUserKey, List<WidgetItem>> allWidgets =
|
||||
dataModel.widgetsModel.getAllWidgetsWithoutShortcuts();
|
||||
|
||||
ArrayList<ItemInfo> recommendedWidgetsInDescendingOrder = new ArrayList<>();
|
||||
for (AppTarget app : mTargets) {
|
||||
PackageUserKey packageUserKey = new PackageUserKey(app.getPackageName(), app.getUser());
|
||||
if (allWidgets.containsKey(packageUserKey)) {
|
||||
List<WidgetItem> notAddedWidgets = allWidgets.get(packageUserKey).stream()
|
||||
.filter(item ->
|
||||
!widgetsInWorkspace.contains(
|
||||
new ComponentKey(item.componentName, item.user)))
|
||||
.collect(Collectors.toList());
|
||||
if (notAddedWidgets.size() > 0) {
|
||||
// Even an apps have more than one widgets, we only include one widget.
|
||||
recommendedWidgetsInDescendingOrder.add(
|
||||
new PendingAddWidgetInfo(notAddedWidgets.get(0).widgetInfo));
|
||||
FixedContainerItems fixedContainerItems = mPredictorState.items;
|
||||
fixedContainerItems.items.clear();
|
||||
|
||||
if (FeatureFlags.ENABLE_LOCAL_RECOMMENDED_WIDGETS_FILTER.get()) {
|
||||
for (AppTarget app : mTargets) {
|
||||
PackageUserKey packageUserKey = new PackageUserKey(app.getPackageName(),
|
||||
app.getUser());
|
||||
if (allWidgets.containsKey(packageUserKey)) {
|
||||
List<WidgetItem> notAddedWidgets = allWidgets.get(packageUserKey).stream()
|
||||
.filter(item ->
|
||||
!widgetsInWorkspace.contains(
|
||||
new ComponentKey(item.componentName, item.user)))
|
||||
.collect(Collectors.toList());
|
||||
if (notAddedWidgets.size() > 0) {
|
||||
// Even an apps have more than one widgets, we only include one widget.
|
||||
fixedContainerItems.items.add(
|
||||
new PendingAddWidgetInfo(notAddedWidgets.get(0).widgetInfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Map<ComponentKey, WidgetItem> widgetItems =
|
||||
allWidgets.values().stream().flatMap(List::stream)
|
||||
.collect(Collectors.toMap(widget -> (ComponentKey) widget,
|
||||
widget -> widget));
|
||||
for (AppTarget app : mTargets) {
|
||||
if (TextUtils.isEmpty(app.getClassName())) {
|
||||
continue;
|
||||
}
|
||||
ComponentKey targetWidget = new ComponentKey(
|
||||
new ComponentName(app.getPackageName(), app.getClassName()), app.getUser());
|
||||
if (widgetItems.containsKey(targetWidget)) {
|
||||
fixedContainerItems.items.add(
|
||||
new PendingAddWidgetInfo(widgetItems.get(targetWidget).widgetInfo));
|
||||
}
|
||||
}
|
||||
}
|
||||
FixedContainerItems fixedContainerItems = mPredictorState.items;
|
||||
fixedContainerItems.items.clear();
|
||||
fixedContainerItems.items.addAll(recommendedWidgetsInDescendingOrder);
|
||||
bindExtraContainerItems(fixedContainerItems);
|
||||
|
||||
// Don't store widgets prediction to disk because it is not used frequently.
|
||||
|
||||
Reference in New Issue
Block a user