Add a resource override for providing default widgets filter.

The implementation in this CL is no-op i.e. all widgets will be shown

Bug: 356127021
Flag: com.android.launcher3.enable_tiered_widgets_by_default_in_picker
Test: Verified with other child cls
Change-Id: I0a6f8973dc8ec58fd87d29b3f291b5e290ea988d
This commit is contained in:
Shamali P
2024-11-04 21:35:38 +00:00
parent 4f793a31d8
commit ea078cb647
15 changed files with 318 additions and 37 deletions

View File

@@ -23,6 +23,8 @@ import static android.view.WindowInsets.Type.statusBars;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
import static java.util.Collections.emptyList;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.content.ClipData;
@@ -44,6 +46,7 @@ import com.android.launcher3.dragndrop.SimpleDragLayer;
import com.android.launcher3.model.StringCache;
import com.android.launcher3.model.WidgetItem;
import com.android.launcher3.model.WidgetPredictionsRequester;
import com.android.launcher3.model.WidgetsFilterDataProvider;
import com.android.launcher3.model.WidgetsModel;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.PackageItemInfo;
@@ -112,6 +115,7 @@ public class WidgetPickerActivity extends BaseActivity {
private WidgetPredictionsRequester mWidgetPredictionsRequester;
private final WidgetPickerDataProvider mWidgetPickerDataProvider =
new WidgetPickerDataProvider();
private WidgetsFilterDataProvider mWidgetsFilterDataProvider;
private int mDesiredWidgetWidth;
private int mDesiredWidgetHeight;
@@ -133,13 +137,13 @@ public class WidgetPickerActivity extends BaseActivity {
@Nullable
private WidgetsFullSheet mWidgetSheet;
private final Predicate<WidgetItem> mWidgetsFilter = widget -> {
private final Predicate<WidgetItem> mNoShortcutsFilter = widget -> {
final WidgetAcceptabilityVerdict verdict =
isWidgetAcceptable(widget, /* applySizeFilter=*/ false);
verdict.maybeLogVerdict();
return verdict.isAcceptable;
};
private final Predicate<WidgetItem> mDefaultWidgetsFilter = widget -> {
private final Predicate<WidgetItem> mHostSizeAndNoShortcutsFilter = widget -> {
final WidgetAcceptabilityVerdict verdict =
isWidgetAcceptable(widget, /* applySizeFilter=*/ true);
verdict.maybeLogVerdict();
@@ -157,6 +161,7 @@ public class WidgetPickerActivity extends BaseActivity {
InvariantDeviceProfile idp = mApp.getInvariantDeviceProfile();
mDeviceProfile = idp.getDeviceProfile(this);
mModel = new WidgetsModel();
mWidgetsFilterDataProvider = WidgetsFilterDataProvider.Companion.newInstance(this);
setContentView(R.layout.widget_picker_activity);
mDragLayer = findViewById(R.id.drag_layer);
@@ -288,13 +293,16 @@ public class WidgetPickerActivity extends BaseActivity {
private void refreshAndBindWidgets() {
MODEL_EXECUTOR.execute(() -> {
LauncherAppState app = LauncherAppState.getInstance(this);
// Don't have to setup filters - its setup when launcher loads
// Just refresh filters with available cached info.
mModel.updateWidgetFilters(mWidgetsFilterDataProvider);
mModel.update(app, null);
StringCache stringCache = new StringCache();
stringCache.loadStrings(this);
bindStringCache(stringCache);
bindWidgets(mModel.getWidgetsByPackageItem());
bindWidgets(mModel.getWidgetsByPackageItem(), mModel.getDefaultWidgetsFilter());
// Open sheet once widgets are available, so that it doesn't interrupt the open
// animation.
openWidgetsSheet();
@@ -310,14 +318,23 @@ public class WidgetPickerActivity extends BaseActivity {
MAIN_EXECUTOR.execute(() -> mStringCache = stringCache);
}
private void bindWidgets(Map<PackageItemInfo, List<WidgetItem>> widgets) {
private void bindWidgets(Map<PackageItemInfo, List<WidgetItem>> widgets,
@Nullable Predicate<WidgetItem> defaultWidgetsFilter) {
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();
final List<WidgetsListBaseEntry> allWidgets = builder.build(widgets, mNoShortcutsFilter);
// Default list is shown if either defaultWidgetsFilter exists or host has additionally
// enforced size filtering.
@Nullable Predicate<WidgetItem> defaultListFilter =
hasHostSizeFilters() ? mHostSizeAndNoShortcutsFilter : null;
if (defaultWidgetsFilter != null) {
defaultListFilter = defaultListFilter != null ? defaultListFilter.and(
defaultWidgetsFilter) : defaultWidgetsFilter;
}
final List<WidgetsListBaseEntry> defaultWidgets = defaultListFilter != null ? builder.build(
widgets, defaultListFilter) : emptyList();
MAIN_EXECUTOR.execute(
() -> mWidgetPickerDataProvider.setWidgets(allWidgets, defaultWidgets));
@@ -342,6 +359,7 @@ public class WidgetPickerActivity extends BaseActivity {
@Override
protected void onDestroy() {
super.onDestroy();
MODEL_EXECUTOR.execute(() -> mWidgetsFilterDataProvider.destroy());
if (mWidgetPredictionsRequester != null) {
mWidgetPredictionsRequester.clear();
}
@@ -398,7 +416,7 @@ public class WidgetPickerActivity extends BaseActivity {
}
}
private boolean shouldShowDefaultWidgets() {
private boolean hasHostSizeFilters() {
// If optional filters such as size filter are present, we display them as default widgets.
return mDesiredWidgetWidth != 0 || mDesiredWidgetHeight != 0;
}