1313import java .util .ArrayList ;
1414import java .util .Arrays ;
1515import java .util .Collections ;
16- import java .util .HashMap ;
1716import java .util .HashSet ;
1817import java .util .List ;
19- import java .util .Map ;
2018import java .util .Objects ;
2119import java .util .Set ;
2220
2321import androidx .annotation .Nullable ;
22+ import androidx .collection .SparseArrayCompat ;
2423
2524import static org .schabi .newpipe .extractor .search .filter .FilterContainer .ITEM_IDENTIFIER_UNKNOWN ;
2625
@@ -46,10 +45,12 @@ public class SearchFilterLogic {
4645 private final SearchQueryHandlerFactory searchQHFactory ;
4746 private final ExclusiveGroups contentFilterExclusive = new ExclusiveGroups ();
4847 private final ExclusiveGroups sortFilterExclusive = new ExclusiveGroups ();
49- private final Map <Integer , IUiItemWrapper > contentFilterIdToUiItemMap = new HashMap <>();
50- private final Map <Integer , IUiItemWrapper > sortFilterIdToUiItemMap = new HashMap <>();
51- private final Map <Integer , FilterContainer > contentFilterFidToSupersetSortFilterMap =
52- new HashMap <>();
48+ private final SparseArrayCompat <IUiItemWrapper > contentFilterIdToUiItemMap =
49+ new SparseArrayCompat <>();
50+ private final SparseArrayCompat <IUiItemWrapper > sortFilterIdToUiItemMap =
51+ new SparseArrayCompat <>();
52+ private final SparseArrayCompat <FilterContainer > contentFilterFidToSupersetSortFilterMap =
53+ new SparseArrayCompat <>();
5354 private final Callback callback ;
5455 /**
5556 * This list is used to store via Icepick and eventual store as preset
@@ -118,7 +119,7 @@ public void restorePreviouslySelectedFilters(final List<Integer> selectedContent
118119 }
119120
120121 private void reselectUiItems (final List <Integer > selectedFilters ,
121- final Map < Integer , IUiItemWrapper > filterIdToUiItemMap ) {
122+ final SparseArrayCompat < IUiItemWrapper > filterIdToUiItemMap ) {
122123 for (final int id : selectedFilters ) {
123124 final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap .get (id );
124125 if (iUiItemWrapper != null ) {
@@ -127,10 +128,10 @@ private void reselectUiItems(final List<Integer> selectedFilters,
127128 }
128129 }
129130
130- private void deselectUiItems (final Map < Integer , IUiItemWrapper > filterIdToUiItemMap ) {
131- for (final Map . Entry < Integer , IUiItemWrapper > entry : filterIdToUiItemMap .entrySet () ) {
132- if ( entry != null && entry . getValue () != null ) {
133- final IUiItemWrapper iUiItemWrapper = entry . getValue ();
131+ private void deselectUiItems (final SparseArrayCompat < IUiItemWrapper > filterIdToUiItemMap ) {
132+ for (int index = 0 ; index < filterIdToUiItemMap .size (); index ++ ) {
133+ final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap . valueAt ( index );
134+ if ( iUiItemWrapper != null ) {
134135 iUiItemWrapper .setChecked (false );
135136 }
136137 }
@@ -190,7 +191,7 @@ public void initSortFiltersUi(final ICreateUiForFiltersWorker createUiForFilters
190191 * @param createUiForFiltersWorker the implementation how to create the UI.
191192 */
192193 private void initFiltersUi (final FilterGroup [] filterGroups ,
193- final Map < Integer , IUiItemWrapper > filterIdToUiItemMap ,
194+ final SparseArrayCompat < IUiItemWrapper > filterIdToUiItemMap ,
194195 final ICreateUiForFiltersWorker createUiForFiltersWorker ) {
195196
196197 filterIdToUiItemMap .clear ();
@@ -225,7 +226,7 @@ private void initFilters(
225226 final FilterGroup [] filterGroups ,
226227 final ExclusiveGroups exclusive ,
227228 final List <Integer > selectedFilters ,
228- @ Nullable final Map < Integer , FilterContainer > fidToSupersetSortFilterMap ) {
229+ @ Nullable final SparseArrayCompat < FilterContainer > fidToSupersetSortFilterMap ) {
229230 selectedFilters .clear ();
230231 exclusive .clear ();
231232
@@ -389,16 +390,18 @@ private void showSortFilterIdContainerUI(final int contentFilterId) {
389390 * See {@link SearchFilterOptionMenuAlikeDialogGenerator}
390391 */
391392 protected void showAllAvailableSortFilters () {
392- contentFilterFidToSupersetSortFilterMap .values ().stream ()
393- .filter (Objects ::nonNull )
394- .distinct ()
395- .forEach (container ->
396- setUiItemsVisibility (container , true , sortFilterIdToUiItemMap ));
393+ for (int index = 0 ; index < contentFilterFidToSupersetSortFilterMap .size (); index ++) {
394+ final FilterContainer container =
395+ contentFilterFidToSupersetSortFilterMap .valueAt (index );
396+ if (container != null ) {
397+ setUiItemsVisibility (container , true , sortFilterIdToUiItemMap );
398+ }
399+ }
397400 }
398401
399402 private void setUiItemsVisibility (final FilterContainer filters ,
400403 final boolean isVisible ,
401- final Map < Integer , IUiItemWrapper > filterIdToUiItemMap ) {
404+ final SparseArrayCompat < IUiItemWrapper > filterIdToUiItemMap ) {
402405 if (filters != null && filters .getFilterGroups () != null ) {
403406 for (final FilterGroup filterGroup : filters .getFilterGroups ()) {
404407 setUiItemVisible (isVisible , filterIdToUiItemMap , filterGroup .getIdentifier ());
@@ -410,7 +413,7 @@ private void setUiItemsVisibility(final FilterContainer filters,
410413 }
411414
412415 private void setUiItemVisible (final boolean isVisible ,
413- final Map < Integer , IUiItemWrapper > filterIdToUiItemMap ,
416+ final SparseArrayCompat < IUiItemWrapper > filterIdToUiItemMap ,
414417 final int id ) {
415418 final IUiItemWrapper uiWrapper = filterIdToUiItemMap .get (id );
416419 if (uiWrapper != null ) {
@@ -473,7 +476,7 @@ public synchronized void selectSortFilter(final int filterId) {
473476 }
474477
475478 private void selectFilter (final int id ,
476- final Map < Integer , IUiItemWrapper > filterIdToUiItemMap ,
479+ final SparseArrayCompat < IUiItemWrapper > filterIdToUiItemMap ,
477480 final List <Integer > selectedFilter ,
478481 final ExclusiveGroups exclusive ) {
479482 final IUiItemWrapper uiItemWrapper =
0 commit comments