Move out picker related methods from widgets model

* The WidgetsBaseEntry and related types are specific to picker UI.
So, moved them to a entry builder class.

Bug: 353347512
Flag: EXEMPT BUGFIX
Test: Unit test
Change-Id: I42b3083b42ee03dc8d548e7464689ea270a36f22
This commit is contained in:
Shamali P
2024-07-18 14:22:12 +00:00
parent 1407aeca8d
commit 54bd36ef81
6 changed files with 262 additions and 76 deletions

View File

@@ -47,11 +47,11 @@ import com.android.launcher3.model.WidgetItem;
import com.android.launcher3.model.WidgetPredictionsRequester;
import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.PackageItemInfo;
import com.android.launcher3.popup.PopupDataProvider;
import com.android.launcher3.util.ComponentKey;
import com.android.launcher3.widget.WidgetCell;
import com.android.launcher3.widget.model.WidgetsListBaseEntriesBuilder;
import com.android.launcher3.widget.model.WidgetsListBaseEntry;
import com.android.launcher3.widget.model.WidgetsListContentEntry;
import com.android.launcher3.widget.picker.WidgetsFullSheet;
import java.util.ArrayList;
@@ -60,10 +60,8 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
/** An Activity that can host Launcher's widget picker. */
public class WidgetPickerActivity extends BaseActivity {
@@ -112,7 +110,8 @@ public class WidgetPickerActivity extends BaseActivity {
private WidgetsModel mModel;
private LauncherAppState mApp;
private WidgetPredictionsRequester mWidgetPredictionsRequester;
private final PopupDataProvider mPopupDataProvider = new PopupDataProvider(i -> {});
private final PopupDataProvider mPopupDataProvider = new PopupDataProvider(i -> {
});
private int mDesiredWidgetWidth;
private int mDesiredWidgetHeight;
@@ -287,45 +286,41 @@ public class WidgetPickerActivity extends BaseActivity {
};
}
/** Updates the model with widgets, applies filters and launches the widgets sheet once
* widgets are available */
/**
* Updates the model with widgets, applies filters and launches the widgets sheet once
* widgets are available
*/
private void refreshAndBindWidgets() {
MODEL_EXECUTOR.execute(() -> {
LauncherAppState app = LauncherAppState.getInstance(this);
Context context = app.getContext();
mModel.update(app, null);
final List<WidgetsListBaseEntry> allWidgets =
mModel.getFilteredWidgetsListForPicker(context, mWidgetsFilter);
final List<WidgetsListBaseEntry> defaultWidgets =
shouldShowDefaultWidgets() ? mModel.getFilteredWidgetsListForPicker(context,
mDefaultWidgetsFilter) : List.of();
bindWidgets(allWidgets, defaultWidgets);
bindWidgets(mModel.getWidgetsByPackageItem());
// Open sheet once widgets are available, so that it doesn't interrupt the open
// animation.
openWidgetsSheet();
if (mUiSurface != null) {
Map<ComponentKey, WidgetItem> allWidgetItems = allWidgets.stream()
.filter(entry -> entry instanceof WidgetsListContentEntry)
.flatMap(entry -> entry.mWidgets.stream())
.distinct()
.collect(Collectors.toMap(
widget -> new ComponentKey(widget.componentName, widget.user),
Function.identity()
));
mWidgetPredictionsRequester = new WidgetPredictionsRequester(app.getContext(),
mUiSurface, allWidgetItems);
mUiSurface, mModel.getWidgetsByComponentKey());
mWidgetPredictionsRequester.request(mAddedWidgets, this::bindRecommendedWidgets);
}
});
}
private void bindWidgets(List<WidgetsListBaseEntry> allWidgets,
List<WidgetsListBaseEntry> defaultWidgets) {
private void bindWidgets(Map<PackageItemInfo, List<WidgetItem>> widgets) {
WidgetsListBaseEntriesBuilder builder = new WidgetsListBaseEntriesBuilder(
mApp.getContext());
final List<WidgetsListBaseEntry> allWidgets = builder.build(widgets, mWidgetsFilter);
final List<WidgetsListBaseEntry> defaultWidgets =
shouldShowDefaultWidgets() ? builder.build(widgets,
mDefaultWidgetsFilter) : List.of();
MAIN_EXECUTOR.execute(() -> mPopupDataProvider.setAllWidgets(allWidgets, defaultWidgets));
}
private void openWidgetsSheet() {
private void openWidgetsSheet() {
MAIN_EXECUTOR.execute(() -> {
mWidgetSheet = WidgetsFullSheet.show(this, true);
mWidgetSheet.mayUpdateTitleAndDescription(mTitle, mDescription);
@@ -392,7 +387,7 @@ public class WidgetPickerActivity extends BaseActivity {
mActiveOnBackAnimationCallback.onBackCancelled();
mActiveOnBackAnimationCallback = null;
}
};
}
private boolean shouldShowDefaultWidgets() {
// If optional filters such as size filter are present, we display them as default widgets.