From eec3cec52cb32b380c1a759ebd18981c1aa44178 Mon Sep 17 00:00:00 2001 From: evermind Date: Fri, 11 Nov 2022 22:35:53 +0100 Subject: [PATCH] searchfilters: replace Map with SparseArrayCompat --- .../SearchFilterDialogSpinnerAdapter.java | 7 ++- .../list/search/filter/SearchFilterLogic.java | 45 ++++++++++--------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterDialogSpinnerAdapter.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterDialogSpinnerAdapter.java index 58c0a196b..a160a7c96 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterDialogSpinnerAdapter.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterDialogSpinnerAdapter.java @@ -18,10 +18,9 @@ import org.schabi.newpipe.extractor.search.filter.FilterItem; import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.ServiceHelper; -import java.util.HashMap; -import java.util.Map; import java.util.Objects; +import androidx.collection.SparseArrayCompat; public class SearchFilterDialogSpinnerAdapter extends BaseAdapter { @@ -30,8 +29,8 @@ public class SearchFilterDialogSpinnerAdapter extends BaseAdapter { private final BaseSearchFilterUiGenerator.UiWrapperMapDelegate wrapperDelegate; private final Spinner spinner; private final SparseIntArray id2PosMap = new SparseIntArray(); - private final Map - viewWrapperMap = new HashMap<>(); + private final SparseArrayCompat + viewWrapperMap = new SparseArrayCompat<>(); public SearchFilterDialogSpinnerAdapter( final Context context, diff --git a/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterLogic.java b/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterLogic.java index 6e227b1d8..e23c4d545 100644 --- a/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterLogic.java +++ b/app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterLogic.java @@ -13,14 +13,13 @@ import org.schabi.newpipe.fragments.list.search.SearchFragment; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.HashSet; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Set; import androidx.annotation.Nullable; +import androidx.collection.SparseArrayCompat; import static org.schabi.newpipe.extractor.search.filter.FilterContainer.ITEM_IDENTIFIER_UNKNOWN; @@ -46,10 +45,12 @@ public class SearchFilterLogic { private final SearchQueryHandlerFactory searchQHFactory; private final ExclusiveGroups contentFilterExclusive = new ExclusiveGroups(); private final ExclusiveGroups sortFilterExclusive = new ExclusiveGroups(); - private final Map contentFilterIdToUiItemMap = new HashMap<>(); - private final Map sortFilterIdToUiItemMap = new HashMap<>(); - private final Map contentFilterFidToSupersetSortFilterMap = - new HashMap<>(); + private final SparseArrayCompat contentFilterIdToUiItemMap = + new SparseArrayCompat<>(); + private final SparseArrayCompat sortFilterIdToUiItemMap = + new SparseArrayCompat<>(); + private final SparseArrayCompat contentFilterFidToSupersetSortFilterMap = + new SparseArrayCompat<>(); private final Callback callback; /** * This list is used to store via Icepick and eventual store as preset @@ -118,7 +119,7 @@ public class SearchFilterLogic { } private void reselectUiItems(final List selectedFilters, - final Map filterIdToUiItemMap) { + final SparseArrayCompat filterIdToUiItemMap) { for (final int id : selectedFilters) { final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap.get(id); if (iUiItemWrapper != null) { @@ -127,10 +128,10 @@ public class SearchFilterLogic { } } - private void deselectUiItems(final Map filterIdToUiItemMap) { - for (final Map.Entry entry : filterIdToUiItemMap.entrySet()) { - if (entry != null && entry.getValue() != null) { - final IUiItemWrapper iUiItemWrapper = entry.getValue(); + private void deselectUiItems(final SparseArrayCompat filterIdToUiItemMap) { + for (int index = 0; index < filterIdToUiItemMap.size(); index++) { + final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap.valueAt(index); + if (iUiItemWrapper != null) { iUiItemWrapper.setChecked(false); } } @@ -190,7 +191,7 @@ public class SearchFilterLogic { * @param createUiForFiltersWorker the implementation how to create the UI. */ private void initFiltersUi(final FilterGroup[] filterGroups, - final Map filterIdToUiItemMap, + final SparseArrayCompat filterIdToUiItemMap, final ICreateUiForFiltersWorker createUiForFiltersWorker) { filterIdToUiItemMap.clear(); @@ -225,7 +226,7 @@ public class SearchFilterLogic { final FilterGroup[] filterGroups, final ExclusiveGroups exclusive, final List selectedFilters, - @Nullable final Map fidToSupersetSortFilterMap) { + @Nullable final SparseArrayCompat fidToSupersetSortFilterMap) { selectedFilters.clear(); exclusive.clear(); @@ -389,16 +390,18 @@ public class SearchFilterLogic { * See {@link SearchFilterOptionMenuAlikeDialogGenerator} */ protected void showAllAvailableSortFilters() { - contentFilterFidToSupersetSortFilterMap.values().stream() - .filter(Objects::nonNull) - .distinct() - .forEach(container -> - setUiItemsVisibility(container, true, sortFilterIdToUiItemMap)); + for (int index = 0; index < contentFilterFidToSupersetSortFilterMap.size(); index++) { + final FilterContainer container = + contentFilterFidToSupersetSortFilterMap.valueAt(index); + if (container != null) { + setUiItemsVisibility(container, true, sortFilterIdToUiItemMap); + } + } } private void setUiItemsVisibility(final FilterContainer filters, final boolean isVisible, - final Map filterIdToUiItemMap) { + final SparseArrayCompat filterIdToUiItemMap) { if (filters != null && filters.getFilterGroups() != null) { for (final FilterGroup filterGroup : filters.getFilterGroups()) { setUiItemVisible(isVisible, filterIdToUiItemMap, filterGroup.getIdentifier()); @@ -410,7 +413,7 @@ public class SearchFilterLogic { } private void setUiItemVisible(final boolean isVisible, - final Map filterIdToUiItemMap, + final SparseArrayCompat filterIdToUiItemMap, final int id) { final IUiItemWrapper uiWrapper = filterIdToUiItemMap.get(id); if (uiWrapper != null) { @@ -473,7 +476,7 @@ public class SearchFilterLogic { } private void selectFilter(final int id, - final Map filterIdToUiItemMap, + final SparseArrayCompat filterIdToUiItemMap, final List selectedFilter, final ExclusiveGroups exclusive) { final IUiItemWrapper uiItemWrapper =