searchfilters: replace Map<Integer, Object> with SparseArrayCompat

This commit is contained in:
evermind 2022-11-11 22:35:53 +01:00
parent 868be7a905
commit eec3cec52c
2 changed files with 27 additions and 25 deletions

View file

@ -18,10 +18,9 @@ import org.schabi.newpipe.extractor.search.filter.FilterItem;
import org.schabi.newpipe.util.DeviceUtils; import org.schabi.newpipe.util.DeviceUtils;
import org.schabi.newpipe.util.ServiceHelper; import org.schabi.newpipe.util.ServiceHelper;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import androidx.collection.SparseArrayCompat;
public class SearchFilterDialogSpinnerAdapter extends BaseAdapter { public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
@ -30,8 +29,8 @@ public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
private final BaseSearchFilterUiGenerator.UiWrapperMapDelegate wrapperDelegate; private final BaseSearchFilterUiGenerator.UiWrapperMapDelegate wrapperDelegate;
private final Spinner spinner; private final Spinner spinner;
private final SparseIntArray id2PosMap = new SparseIntArray(); private final SparseIntArray id2PosMap = new SparseIntArray();
private final Map<Integer, UiItemWrapperSpinner> private final SparseArrayCompat<UiItemWrapperSpinner>
viewWrapperMap = new HashMap<>(); viewWrapperMap = new SparseArrayCompat<>();
public SearchFilterDialogSpinnerAdapter( public SearchFilterDialogSpinnerAdapter(
final Context context, final Context context,

View file

@ -13,14 +13,13 @@ import org.schabi.newpipe.fragments.list.search.SearchFragment;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.collection.SparseArrayCompat;
import static org.schabi.newpipe.extractor.search.filter.FilterContainer.ITEM_IDENTIFIER_UNKNOWN; 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 SearchQueryHandlerFactory searchQHFactory;
private final ExclusiveGroups contentFilterExclusive = new ExclusiveGroups(); private final ExclusiveGroups contentFilterExclusive = new ExclusiveGroups();
private final ExclusiveGroups sortFilterExclusive = new ExclusiveGroups(); private final ExclusiveGroups sortFilterExclusive = new ExclusiveGroups();
private final Map<Integer, IUiItemWrapper> contentFilterIdToUiItemMap = new HashMap<>(); private final SparseArrayCompat<IUiItemWrapper> contentFilterIdToUiItemMap =
private final Map<Integer, IUiItemWrapper> sortFilterIdToUiItemMap = new HashMap<>(); new SparseArrayCompat<>();
private final Map<Integer, FilterContainer> contentFilterFidToSupersetSortFilterMap = private final SparseArrayCompat<IUiItemWrapper> sortFilterIdToUiItemMap =
new HashMap<>(); new SparseArrayCompat<>();
private final SparseArrayCompat<FilterContainer> contentFilterFidToSupersetSortFilterMap =
new SparseArrayCompat<>();
private final Callback callback; private final Callback callback;
/** /**
* This list is used to store via Icepick and eventual store as preset * 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<Integer> selectedFilters, private void reselectUiItems(final List<Integer> selectedFilters,
final Map<Integer, IUiItemWrapper> filterIdToUiItemMap) { final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap) {
for (final int id : selectedFilters) { for (final int id : selectedFilters) {
final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap.get(id); final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap.get(id);
if (iUiItemWrapper != null) { if (iUiItemWrapper != null) {
@ -127,10 +128,10 @@ public class SearchFilterLogic {
} }
} }
private void deselectUiItems(final Map<Integer, IUiItemWrapper> filterIdToUiItemMap) { private void deselectUiItems(final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap) {
for (final Map.Entry<Integer, IUiItemWrapper> entry : filterIdToUiItemMap.entrySet()) { for (int index = 0; index < filterIdToUiItemMap.size(); index++) {
if (entry != null && entry.getValue() != null) { final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap.valueAt(index);
final IUiItemWrapper iUiItemWrapper = entry.getValue(); if (iUiItemWrapper != null) {
iUiItemWrapper.setChecked(false); iUiItemWrapper.setChecked(false);
} }
} }
@ -190,7 +191,7 @@ public class SearchFilterLogic {
* @param createUiForFiltersWorker the implementation how to create the UI. * @param createUiForFiltersWorker the implementation how to create the UI.
*/ */
private void initFiltersUi(final FilterGroup[] filterGroups, private void initFiltersUi(final FilterGroup[] filterGroups,
final Map<Integer, IUiItemWrapper> filterIdToUiItemMap, final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
final ICreateUiForFiltersWorker createUiForFiltersWorker) { final ICreateUiForFiltersWorker createUiForFiltersWorker) {
filterIdToUiItemMap.clear(); filterIdToUiItemMap.clear();
@ -225,7 +226,7 @@ public class SearchFilterLogic {
final FilterGroup[] filterGroups, final FilterGroup[] filterGroups,
final ExclusiveGroups exclusive, final ExclusiveGroups exclusive,
final List<Integer> selectedFilters, final List<Integer> selectedFilters,
@Nullable final Map<Integer, FilterContainer> fidToSupersetSortFilterMap) { @Nullable final SparseArrayCompat<FilterContainer> fidToSupersetSortFilterMap) {
selectedFilters.clear(); selectedFilters.clear();
exclusive.clear(); exclusive.clear();
@ -389,16 +390,18 @@ public class SearchFilterLogic {
* See {@link SearchFilterOptionMenuAlikeDialogGenerator} * See {@link SearchFilterOptionMenuAlikeDialogGenerator}
*/ */
protected void showAllAvailableSortFilters() { protected void showAllAvailableSortFilters() {
contentFilterFidToSupersetSortFilterMap.values().stream() for (int index = 0; index < contentFilterFidToSupersetSortFilterMap.size(); index++) {
.filter(Objects::nonNull) final FilterContainer container =
.distinct() contentFilterFidToSupersetSortFilterMap.valueAt(index);
.forEach(container -> if (container != null) {
setUiItemsVisibility(container, true, sortFilterIdToUiItemMap)); setUiItemsVisibility(container, true, sortFilterIdToUiItemMap);
}
}
} }
private void setUiItemsVisibility(final FilterContainer filters, private void setUiItemsVisibility(final FilterContainer filters,
final boolean isVisible, final boolean isVisible,
final Map<Integer, IUiItemWrapper> filterIdToUiItemMap) { final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap) {
if (filters != null && filters.getFilterGroups() != null) { if (filters != null && filters.getFilterGroups() != null) {
for (final FilterGroup filterGroup : filters.getFilterGroups()) { for (final FilterGroup filterGroup : filters.getFilterGroups()) {
setUiItemVisible(isVisible, filterIdToUiItemMap, filterGroup.getIdentifier()); setUiItemVisible(isVisible, filterIdToUiItemMap, filterGroup.getIdentifier());
@ -410,7 +413,7 @@ public class SearchFilterLogic {
} }
private void setUiItemVisible(final boolean isVisible, private void setUiItemVisible(final boolean isVisible,
final Map<Integer, IUiItemWrapper> filterIdToUiItemMap, final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
final int id) { final int id) {
final IUiItemWrapper uiWrapper = filterIdToUiItemMap.get(id); final IUiItemWrapper uiWrapper = filterIdToUiItemMap.get(id);
if (uiWrapper != null) { if (uiWrapper != null) {
@ -473,7 +476,7 @@ public class SearchFilterLogic {
} }
private void selectFilter(final int id, private void selectFilter(final int id,
final Map<Integer, IUiItemWrapper> filterIdToUiItemMap, final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
final List<Integer> selectedFilter, final List<Integer> selectedFilter,
final ExclusiveGroups exclusive) { final ExclusiveGroups exclusive) {
final IUiItemWrapper uiItemWrapper = final IUiItemWrapper uiItemWrapper =