mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-03-02 08:56:55 +00:00
Merge "Reset visible entries when the app tile of the same app no longer match" into sc-dev
This commit is contained in:
@@ -33,6 +33,7 @@ import androidx.recyclerview.widget.RecyclerView.ViewHolder;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.WidgetPreviewLoader;
|
||||
import com.android.launcher3.icons.IconCache;
|
||||
import com.android.launcher3.model.data.PackageItemInfo;
|
||||
import com.android.launcher3.recyclerview.ViewHolderBinder;
|
||||
import com.android.launcher3.util.LabelComparator;
|
||||
import com.android.launcher3.util.PackageUserKey;
|
||||
@@ -47,6 +48,7 @@ import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -153,6 +155,9 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC
|
||||
public void setWidgets(List<WidgetsListBaseEntry> tempEntries) {
|
||||
mAllEntries = tempEntries.stream().sorted(mRowComparator)
|
||||
.collect(Collectors.toList());
|
||||
if (shouldClearVisibleEntries()) {
|
||||
mVisibleEntries.clear();
|
||||
}
|
||||
updateVisibleEntries();
|
||||
}
|
||||
|
||||
@@ -272,6 +277,30 @@ public class WidgetsListAdapter extends Adapter<ViewHolder> implements OnHeaderC
|
||||
mWidgetsListTableViewHolderBinder.setMaxSpansPerRow(maxHorizontalSpans);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns {@code true} if there is a change in {@link #mAllEntries} that results in an
|
||||
* invalidation of {@link #mVisibleEntries}. e.g. there is change in the device language.
|
||||
*/
|
||||
private boolean shouldClearVisibleEntries() {
|
||||
Map<PackageUserKey, PackageItemInfo> packagesInfo =
|
||||
mAllEntries.stream()
|
||||
.filter(entry -> entry instanceof WidgetsListHeaderEntry)
|
||||
.map(entry -> entry.mPkgItem)
|
||||
.collect(Collectors.toMap(
|
||||
entry -> new PackageUserKey(entry.packageName, entry.user),
|
||||
entry -> entry));
|
||||
for (WidgetsListBaseEntry visibleEntry: mVisibleEntries) {
|
||||
PackageUserKey key = new PackageUserKey(visibleEntry.mPkgItem.packageName,
|
||||
visibleEntry.mPkgItem.user);
|
||||
PackageItemInfo packageItemInfo = packagesInfo.get(key);
|
||||
if (packageItemInfo != null
|
||||
&& !visibleEntry.mPkgItem.title.equals(packageItemInfo.title)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Comparator for sorting WidgetListRowEntry based on package title. */
|
||||
public static class WidgetListBaseRowEntryComparator implements
|
||||
Comparator<WidgetsListBaseEntry> {
|
||||
|
||||
Reference in New Issue
Block a user