From 2f5648a9117c8e19a5785ffb2eff26373fb3c24c Mon Sep 17 00:00:00 2001 From: Steven Ng Date: Mon, 8 Feb 2021 17:18:25 +0000 Subject: Refactoring before adding a new view type in the WidgetsListAdapter Changes made: 1. Model: added an abstract class for storing common information for entries shown in the full page widgets picker. 2. Introduced a ViewHolderBinder interface to split the logic of binding data to ViewHolder into separate classes. 3. Move the view holder binding of WidgetsListRow from WidgetListAdapter to its new class. 4. Move some widgets picker classes into a new picker package. Test: Auto: Run WidgetsListAdapterTest, WidgetsListRowEntryTest and WidgetsListRowViewHolderBinderTest. Manual: open the all apps widgets tray and navigate the list. Bug: 179797520 Change-Id: Iab29557842bb79156cad84d00a4c5d0db0c5aa06 --- .../com/android/launcher3/model/LoaderResults.java | 6 ++--- .../com/android/launcher3/model/WidgetsModel.java | 31 +++++++++++----------- 2 files changed, 18 insertions(+), 19 deletions(-) (limited to 'src_shortcuts_overrides') diff --git a/src_shortcuts_overrides/com/android/launcher3/model/LoaderResults.java b/src_shortcuts_overrides/com/android/launcher3/model/LoaderResults.java index 269af7bcc5..73b1601c34 100644 --- a/src_shortcuts_overrides/com/android/launcher3/model/LoaderResults.java +++ b/src_shortcuts_overrides/com/android/launcher3/model/LoaderResults.java @@ -21,10 +21,10 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import com.android.launcher3.LauncherAppState; import com.android.launcher3.model.BgDataModel.Callbacks; import com.android.launcher3.util.ComponentKey; -import com.android.launcher3.widget.WidgetListRowEntry; +import com.android.launcher3.widget.model.WidgetsListBaseEntry; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * Helper class to handle results of {@link com.android.launcher3.model.LoaderTask}. @@ -47,7 +47,7 @@ public class LoaderResults extends BaseLoaderResults { @Override public void bindWidgets() { - final ArrayList widgets = + final List widgets = mBgDataModel.widgetsModel.getWidgetsList(mApp.getContext()); executeCallbacksTask(c -> c.bindAllWidgets(widgets), mUiExecutor); } diff --git a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java index b4e45f835a..f27922b757 100644 --- a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java +++ b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java @@ -28,12 +28,12 @@ import com.android.launcher3.model.data.PackageItemInfo; import com.android.launcher3.pm.ShortcutConfigActivityInfo; import com.android.launcher3.util.PackageUserKey; import com.android.launcher3.util.Preconditions; -import com.android.launcher3.widget.WidgetItemComparator; -import com.android.launcher3.widget.WidgetListRowEntry; import com.android.launcher3.widget.WidgetManagerHelper; +import com.android.launcher3.widget.model.WidgetsListBaseEntry; +import com.android.launcher3.widget.model.WidgetsListContentEntry; +import com.android.launcher3.widget.picker.WidgetsDiffReporter; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -60,24 +60,23 @@ public class WidgetsModel { private final Map> mWidgetsList = new HashMap<>(); /** - * Returns a list of {@link WidgetListRowEntry}. All {@link WidgetItem} in a single row - * are sorted (based on label and user), but the overall list of {@link WidgetListRowEntry}s - * is not sorted. This list is sorted at the UI when using - * {@link com.android.launcher3.widget.WidgetsDiffReporter} + * Returns a list of {@link WidgetsListBaseEntry}. All {@link WidgetItem} in a single row + * are sorted (based on label and user), but the overall list of + * {@link WidgetsListBaseEntry}s is not sorted. This list is sorted at the UI when using + * {@link WidgetsDiffReporter} * - * @see com.android.launcher3.widget.WidgetsListAdapter#setWidgets(ArrayList) + * @see com.android.launcher3.widget.picker.WidgetsListAdapter#setWidgets(List) */ - public synchronized ArrayList getWidgetsList(Context context) { - ArrayList result = new ArrayList<>(); + public synchronized ArrayList getWidgetsList(Context context) { + ArrayList result = new ArrayList<>(); AlphabeticIndexCompat indexer = new AlphabeticIndexCompat(context); - WidgetItemComparator widgetComparator = new WidgetItemComparator(); for (Map.Entry> entry : mWidgetsList.entrySet()) { - WidgetListRowEntry row = new WidgetListRowEntry( - entry.getKey(), new ArrayList<>(entry.getValue())); - row.titleSectionName = (row.pkgItem.title == null) ? "" : - indexer.computeSectionName(row.pkgItem.title); - Collections.sort(row.widgets, widgetComparator); + PackageItemInfo pkgItem = entry.getKey(); + String sectionName = (pkgItem.title == null) ? "" : + indexer.computeSectionName(pkgItem.title); + WidgetsListContentEntry row = + new WidgetsListContentEntry(pkgItem, sectionName, entry.getValue()); result.add(row); } return result; -- cgit v1.2.3