mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-04 18:06:48 +00:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user