mirror of
https://github.com/MaintainTeam/LastPipeBender.git
synced 2025-03-02 22:38:20 +03:00
searchfilters: annotate methods and parameters with Nullable or NotNull inside search/filter/.*
This commit is contained in:
parent
f24fdcd9e3
commit
a4b8c0b3fd
15 changed files with 256 additions and 163 deletions
|
@ -12,6 +12,8 @@ import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Common base for the {@link SearchFilterDialogGenerator} and
|
* Common base for the {@link SearchFilterDialogGenerator} and
|
||||||
* {@link SearchFilterOptionMenuAlikeDialogGenerator}'s
|
* {@link SearchFilterOptionMenuAlikeDialogGenerator}'s
|
||||||
|
@ -20,13 +22,16 @@ import java.util.List;
|
||||||
public abstract class BaseCreateSearchFilterUI
|
public abstract class BaseCreateSearchFilterUI
|
||||||
implements SearchFilterLogic.ICreateUiForFiltersWorker {
|
implements SearchFilterLogic.ICreateUiForFiltersWorker {
|
||||||
|
|
||||||
|
@NonNull
|
||||||
protected final BaseSearchFilterUiDialogGenerator dialogGenBase;
|
protected final BaseSearchFilterUiDialogGenerator dialogGenBase;
|
||||||
|
@NonNull
|
||||||
protected final Context context;
|
protected final Context context;
|
||||||
protected final List<View> titleViewElements = new ArrayList<>();
|
protected final List<View> titleViewElements = new ArrayList<>();
|
||||||
protected int titleResId;
|
protected int titleResId;
|
||||||
|
|
||||||
protected BaseCreateSearchFilterUI(final BaseSearchFilterUiDialogGenerator dialogGenBase,
|
protected BaseCreateSearchFilterUI(
|
||||||
final Context context,
|
@NonNull final BaseSearchFilterUiDialogGenerator dialogGenBase,
|
||||||
|
@NonNull final Context context,
|
||||||
final int titleResId) {
|
final int titleResId) {
|
||||||
this.dialogGenBase = dialogGenBase;
|
this.dialogGenBase = dialogGenBase;
|
||||||
this.context = context;
|
this.context = context;
|
||||||
|
@ -34,12 +39,13 @@ public abstract class BaseCreateSearchFilterUI
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterItem(final FilterItem filterItem, final FilterGroup filterGroup) {
|
public void createFilterItem(@NonNull final FilterItem filterItem,
|
||||||
|
@NonNull final FilterGroup filterGroup) {
|
||||||
// no implementation here all creation stuff is done in createFilterGroupBeforeItems
|
// no implementation here all creation stuff is done in createFilterGroupBeforeItems
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupAfterItems(final FilterGroup filterGroup) {
|
public void createFilterGroupAfterItems(@NonNull final FilterGroup filterGroup) {
|
||||||
// no implementation here all creation stuff is done in createFilterGroupBeforeItems
|
// no implementation here all creation stuff is done in createFilterGroupBeforeItems
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,15 +72,16 @@ public abstract class BaseCreateSearchFilterUI
|
||||||
|
|
||||||
public static class CreateContentFilterUI extends CreateSortFilterUI {
|
public static class CreateContentFilterUI extends CreateSortFilterUI {
|
||||||
|
|
||||||
public CreateContentFilterUI(final BaseSearchFilterUiDialogGenerator dialogGenBase,
|
public CreateContentFilterUI(
|
||||||
final Context context) {
|
@NonNull final BaseSearchFilterUiDialogGenerator dialogGenBase,
|
||||||
|
@NonNull final Context context) {
|
||||||
super(dialogGenBase, context);
|
super(dialogGenBase, context);
|
||||||
this.titleResId = R.string.filter_search_content_filters;
|
this.titleResId = R.string.filter_search_content_filters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupBeforeItems(
|
public void createFilterGroupBeforeItems(
|
||||||
final FilterGroup filterGroup) {
|
@NonNull final FilterGroup filterGroup) {
|
||||||
dialogGenBase.createFilterGroup(filterGroup,
|
dialogGenBase.createFilterGroup(filterGroup,
|
||||||
dialogGenBase::addContentFilterUiWrapperToItemMap,
|
dialogGenBase::addContentFilterUiWrapperToItemMap,
|
||||||
dialogGenBase::selectContentFilter);
|
dialogGenBase::selectContentFilter);
|
||||||
|
@ -88,8 +95,9 @@ public abstract class BaseCreateSearchFilterUI
|
||||||
|
|
||||||
public static class CreateSortFilterUI extends BaseCreateSearchFilterUI {
|
public static class CreateSortFilterUI extends BaseCreateSearchFilterUI {
|
||||||
|
|
||||||
public CreateSortFilterUI(final BaseSearchFilterUiDialogGenerator dialogGenBase,
|
public CreateSortFilterUI(
|
||||||
final Context context) {
|
@NonNull final BaseSearchFilterUiDialogGenerator dialogGenBase,
|
||||||
|
@NonNull final Context context) {
|
||||||
super(dialogGenBase, context, R.string.filter_search_sort_filters);
|
super(dialogGenBase, context, R.string.filter_search_sort_filters);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +107,7 @@ public abstract class BaseCreateSearchFilterUI
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupBeforeItems(final FilterGroup filterGroup) {
|
public void createFilterGroupBeforeItems(@NonNull final FilterGroup filterGroup) {
|
||||||
dialogGenBase.createFilterGroup(filterGroup,
|
dialogGenBase.createFilterGroup(filterGroup,
|
||||||
dialogGenBase::addSortFilterUiWrapperToItemMap,
|
dialogGenBase::addSortFilterUiWrapperToItemMap,
|
||||||
dialogGenBase::selectSortFilter);
|
dialogGenBase::selectSortFilter);
|
||||||
|
|
|
@ -4,11 +4,13 @@ package org.schabi.newpipe.fragments.list.search.filter;
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||||
|
|
||||||
public abstract class BaseItemWrapper implements SearchFilterLogic.IUiItemWrapper {
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
public abstract class BaseItemWrapper implements SearchFilterLogic.IUiItemWrapper {
|
||||||
|
@NonNull
|
||||||
protected final FilterItem item;
|
protected final FilterItem item;
|
||||||
|
|
||||||
protected BaseItemWrapper(final FilterItem item) {
|
protected BaseItemWrapper(@NonNull final FilterItem item) {
|
||||||
this.item = item;
|
this.item = item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.fragment.app.DialogFragment;
|
import androidx.fragment.app.DialogFragment;
|
||||||
import icepick.Icepick;
|
import icepick.Icepick;
|
||||||
|
@ -39,7 +40,7 @@ public abstract class BaseSearchFilterDialogFragment extends DialogFragment {
|
||||||
ArrayList<Integer> userSelectedSortFilterList = null;
|
ArrayList<Integer> userSelectedSortFilterList = null;
|
||||||
|
|
||||||
protected static DialogFragment initDialogArguments(
|
protected static DialogFragment initDialogArguments(
|
||||||
final DialogFragment dialogFragment,
|
@NonNull final DialogFragment dialogFragment,
|
||||||
final int serviceId,
|
final int serviceId,
|
||||||
final List<Integer> userSelectedContentFilter,
|
final List<Integer> userSelectedContentFilter,
|
||||||
final List<Integer> userSelectedSortFilter) {
|
final List<Integer> userSelectedSortFilter) {
|
||||||
|
@ -92,16 +93,17 @@ public abstract class BaseSearchFilterDialogFragment extends DialogFragment {
|
||||||
/**
|
/**
|
||||||
* As we have different bindings we need to get this sorted in a method.
|
* As we have different bindings we need to get this sorted in a method.
|
||||||
*
|
*
|
||||||
* @return the {@link Toolbar}
|
* @return the {@link Toolbar} null if there is no toolbar available.
|
||||||
*/
|
*/
|
||||||
|
@Nullable
|
||||||
protected abstract Toolbar getToolbar();
|
protected abstract Toolbar getToolbar();
|
||||||
|
|
||||||
protected abstract View getRootView(LayoutInflater inflater,
|
protected abstract View getRootView(@NonNull LayoutInflater inflater,
|
||||||
ViewGroup container);
|
@Nullable ViewGroup container);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(@NonNull final LayoutInflater inflater,
|
public View onCreateView(@NonNull final LayoutInflater inflater,
|
||||||
final ViewGroup container,
|
@Nullable final ViewGroup container,
|
||||||
final Bundle savedInstanceState) {
|
final Bundle savedInstanceState) {
|
||||||
final View rootView = getRootView(inflater, container);
|
final View rootView = getRootView(inflater, container);
|
||||||
initializeFilterData();
|
initializeFilterData();
|
||||||
|
@ -113,10 +115,20 @@ public abstract class BaseSearchFilterDialogFragment extends DialogFragment {
|
||||||
super.onViewCreated(view, savedInstanceState);
|
super.onViewCreated(view, savedInstanceState);
|
||||||
Icepick.restoreInstanceState(this, savedInstanceState);
|
Icepick.restoreInstanceState(this, savedInstanceState);
|
||||||
|
|
||||||
initToolbar(getToolbar());
|
final Toolbar toolbar = getToolbar();
|
||||||
|
if (toolbar != null) {
|
||||||
|
initToolbar(toolbar);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initToolbar(final Toolbar toolbar) {
|
/**
|
||||||
|
* Initialize the toolbar.
|
||||||
|
* <p>
|
||||||
|
* This method is only called if {@link #getToolbar()} is implemented to return a toolbar.
|
||||||
|
*
|
||||||
|
* @param toolbar the actual toolbar for this dialog fragment
|
||||||
|
*/
|
||||||
|
protected void initToolbar(@NonNull final Toolbar toolbar) {
|
||||||
toolbar.setTitle(R.string.filter);
|
toolbar.setTitle(R.string.filter);
|
||||||
toolbar.setNavigationIcon(R.drawable.ic_arrow_back);
|
toolbar.setNavigationIcon(R.drawable.ic_arrow_back);
|
||||||
toolbar.inflateMenu(R.menu.menu_search_filter_dialog_fragment);
|
toolbar.inflateMenu(R.menu.menu_search_filter_dialog_fragment);
|
||||||
|
|
|
@ -12,23 +12,27 @@ import org.schabi.newpipe.extractor.search.filter.FilterGroup;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
||||||
|
|
||||||
public abstract class BaseSearchFilterUiDialogGenerator extends BaseSearchFilterUiGenerator {
|
public abstract class BaseSearchFilterUiDialogGenerator extends BaseSearchFilterUiGenerator {
|
||||||
private static final float FONT_SIZE_TITLE_ITEMS_IN_DIP = 20f;
|
private static final float FONT_SIZE_TITLE_ITEMS_IN_DIP = 20f;
|
||||||
|
|
||||||
protected BaseSearchFilterUiDialogGenerator(
|
protected BaseSearchFilterUiDialogGenerator(
|
||||||
final SearchQueryHandlerFactory linkHandlerFactory,
|
@NonNull final SearchQueryHandlerFactory linkHandlerFactory,
|
||||||
final Callback callback,
|
@Nullable final Callback callback,
|
||||||
final Context context) {
|
@NonNull final Context context) {
|
||||||
super(linkHandlerFactory, callback, context);
|
super(linkHandlerFactory, callback, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected abstract void createTitle(String name, List<View> titleViewElements);
|
protected abstract void createTitle(@NonNull String name,
|
||||||
|
@NonNull List<View> titleViewElements);
|
||||||
|
|
||||||
protected abstract void createFilterGroup(FilterGroup filterGroup,
|
protected abstract void createFilterGroup(@NonNull FilterGroup filterGroup,
|
||||||
UiWrapperMapDelegate wrapperDelegate,
|
@NonNull UiWrapperMapDelegate wrapperDelegate,
|
||||||
UiSelectorDelegate selectorDelegate);
|
@NonNull UiSelectorDelegate selectorDelegate);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected ICreateUiForFiltersWorker createContentFilterWorker() {
|
protected ICreateUiForFiltersWorker createContentFilterWorker() {
|
||||||
|
@ -40,7 +44,8 @@ public abstract class BaseSearchFilterUiDialogGenerator extends BaseSearchFilter
|
||||||
return new BaseCreateSearchFilterUI.CreateSortFilterUI(this, context);
|
return new BaseCreateSearchFilterUI.CreateSortFilterUI(this, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected View createSeparatorLine(final ViewGroup.LayoutParams layoutParams) {
|
@NonNull
|
||||||
|
protected View createSeparatorLine(@NonNull final ViewGroup.LayoutParams layoutParams) {
|
||||||
final View separatorLine = new View(context);
|
final View separatorLine = new View(context);
|
||||||
separatorLine.setBackgroundColor(getSeparatorLineColorFromTheme());
|
separatorLine.setBackgroundColor(getSeparatorLineColorFromTheme());
|
||||||
layoutParams.height = 1; // always set the separator to the height of 1
|
layoutParams.height = 1; // always set the separator to the height of 1
|
||||||
|
@ -48,8 +53,9 @@ public abstract class BaseSearchFilterUiDialogGenerator extends BaseSearchFilter
|
||||||
return separatorLine;
|
return separatorLine;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected TextView createTitleText(final String name,
|
@NonNull
|
||||||
final ViewGroup.LayoutParams layoutParams) {
|
protected TextView createTitleText(@NonNull final String name,
|
||||||
|
@NonNull final ViewGroup.LayoutParams layoutParams) {
|
||||||
final TextView title = new TextView(context);
|
final TextView title = new TextView(context);
|
||||||
title.setText(name);
|
title.setText(name);
|
||||||
title.setTextSize(COMPLEX_UNIT_DIP, FONT_SIZE_TITLE_ITEMS_IN_DIP);
|
title.setTextSize(COMPLEX_UNIT_DIP, FONT_SIZE_TITLE_ITEMS_IN_DIP);
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
package org.schabi.newpipe.fragments.list.search.filter;
|
package org.schabi.newpipe.fragments.list.search.filter;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
|
@ -21,9 +23,10 @@ public abstract class BaseSearchFilterUiGenerator extends SearchFilterLogic {
|
||||||
protected final ICreateUiForFiltersWorker sortFilterWorker;
|
protected final ICreateUiForFiltersWorker sortFilterWorker;
|
||||||
protected final Context context;
|
protected final Context context;
|
||||||
|
|
||||||
protected BaseSearchFilterUiGenerator(final SearchQueryHandlerFactory linkHandlerFactory,
|
protected BaseSearchFilterUiGenerator(
|
||||||
final Callback callback,
|
@NonNull final SearchQueryHandlerFactory linkHandlerFactory,
|
||||||
final Context context) {
|
@Nullable final Callback callback,
|
||||||
|
@NonNull final Context context) {
|
||||||
super(linkHandlerFactory, callback);
|
super(linkHandlerFactory, callback);
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.contentFilterWorker = createContentFilterWorker();
|
this.contentFilterWorker = createContentFilterWorker();
|
||||||
|
|
|
@ -6,12 +6,14 @@ import android.view.View;
|
||||||
|
|
||||||
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
import org.schabi.newpipe.extractor.search.filter.FilterItem;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
public abstract class BaseUiItemWrapper extends BaseItemWrapper {
|
public abstract class BaseUiItemWrapper extends BaseItemWrapper {
|
||||||
|
@NonNull
|
||||||
protected final View view;
|
protected final View view;
|
||||||
|
|
||||||
protected BaseUiItemWrapper(final FilterItem item,
|
protected BaseUiItemWrapper(@NonNull final FilterItem item,
|
||||||
final View view) {
|
@NonNull final View view) {
|
||||||
super(item);
|
super(item);
|
||||||
this.view = view;
|
this.view = view;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,8 @@ import org.schabi.newpipe.extractor.StreamingService;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.fragment.app.DialogFragment;
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
|
||||||
|
@ -41,13 +43,14 @@ public class SearchFilterDialogFragment extends BaseSearchFilterDialogFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nullable
|
||||||
protected Toolbar getToolbar() {
|
protected Toolbar getToolbar() {
|
||||||
return binding.toolbarLayout.toolbar;
|
return binding.toolbarLayout.toolbar;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected View getRootView(final LayoutInflater inflater,
|
protected View getRootView(@NonNull final LayoutInflater inflater,
|
||||||
final ViewGroup container) {
|
@Nullable final ViewGroup container) {
|
||||||
binding = SearchFilterDialogFragmentBinding
|
binding = SearchFilterDialogFragmentBinding
|
||||||
.inflate(inflater, container, false);
|
.inflate(inflater, container, false);
|
||||||
return binding.getRoot();
|
return binding.getRoot();
|
||||||
|
|
|
@ -23,23 +23,25 @@ import org.schabi.newpipe.util.ServiceHelper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.view.ContextThemeWrapper;
|
import androidx.appcompat.view.ContextThemeWrapper;
|
||||||
|
|
||||||
public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerator {
|
public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerator {
|
||||||
private final GridLayout globalLayout;
|
private final GridLayout globalLayout;
|
||||||
|
|
||||||
public SearchFilterDialogGenerator(final StreamingService service,
|
public SearchFilterDialogGenerator(@NonNull final StreamingService service,
|
||||||
final ViewGroup root,
|
@NonNull final ViewGroup root,
|
||||||
final Context context,
|
@NonNull final Context context,
|
||||||
final SearchFilterLogic.Callback callback) {
|
@Nullable final SearchFilterLogic.Callback callback) {
|
||||||
super(service.getSearchQHFactory(), callback, context);
|
super(service.getSearchQHFactory(), callback, context);
|
||||||
this.globalLayout = createGridLayout();
|
this.globalLayout = createGridLayout();
|
||||||
root.addView(globalLayout);
|
root.addView(globalLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createTitle(final String name,
|
protected void createTitle(@NonNull final String name,
|
||||||
final List<View> titleViewElements) {
|
@NonNull final List<View> titleViewElements) {
|
||||||
final TextView titleView = createTitleText(name);
|
final TextView titleView = createTitleText(name);
|
||||||
final View separatorLine = createSeparatorLine();
|
final View separatorLine = createSeparatorLine();
|
||||||
final View separatorLine2 = createSeparatorLine();
|
final View separatorLine2 = createSeparatorLine();
|
||||||
|
@ -54,9 +56,9 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createFilterGroup(final FilterGroup filterGroup,
|
protected void createFilterGroup(@NonNull final FilterGroup filterGroup,
|
||||||
final UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
||||||
final UiSelectorDelegate selectorDelegate) {
|
@NonNull final UiSelectorDelegate selectorDelegate) {
|
||||||
final GridLayout.LayoutParams layoutParams = getLayoutParamsViews();
|
final GridLayout.LayoutParams layoutParams = getLayoutParamsViews();
|
||||||
boolean doSpanDataOverMultipleCells = false;
|
boolean doSpanDataOverMultipleCells = false;
|
||||||
final UiItemWrapperViews viewsWrapper = new UiItemWrapperViews(
|
final UiItemWrapperViews viewsWrapper = new UiItemWrapperViews(
|
||||||
|
@ -111,10 +113,10 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createUiElementsForSingleSelectableItemsFilterGroup(
|
private void createUiElementsForSingleSelectableItemsFilterGroup(
|
||||||
final FilterGroup filterGroup,
|
@NonNull final FilterGroup filterGroup,
|
||||||
final UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
||||||
final UiSelectorDelegate selectorDelegate,
|
@NonNull final UiSelectorDelegate selectorDelegate,
|
||||||
final Spinner filterDataSpinner) {
|
@NonNull final Spinner filterDataSpinner) {
|
||||||
filterDataSpinner.setAdapter(new SearchFilterDialogSpinnerAdapter(
|
filterDataSpinner.setAdapter(new SearchFilterDialogSpinnerAdapter(
|
||||||
context, filterGroup, wrapperDelegate, filterDataSpinner));
|
context, filterGroup, wrapperDelegate, filterDataSpinner));
|
||||||
|
|
||||||
|
@ -138,10 +140,10 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createUiElementsForMultipleSelectableItemsFilterGroup(
|
private void createUiElementsForMultipleSelectableItemsFilterGroup(
|
||||||
final FilterGroup filterGroup,
|
@NonNull final FilterGroup filterGroup,
|
||||||
final UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
||||||
final UiSelectorDelegate selectorDelegate,
|
@NonNull final UiSelectorDelegate selectorDelegate,
|
||||||
final ChipGroup chipGroup) {
|
@NonNull final ChipGroup chipGroup) {
|
||||||
for (final FilterItem item : filterGroup.getFilterItems()) {
|
for (final FilterItem item : filterGroup.getFilterItems()) {
|
||||||
final Chip chip = new Chip(new ContextThemeWrapper(
|
final Chip chip = new Chip(new ContextThemeWrapper(
|
||||||
context, R.style.Theme_MaterialComponents_Light));
|
context, R.style.Theme_MaterialComponents_Light));
|
||||||
|
@ -158,10 +160,12 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private View createSeparatorLine() {
|
private View createSeparatorLine() {
|
||||||
return createSeparatorLine(clipFreeRightColumnLayoutParams(true));
|
return createSeparatorLine(clipFreeRightColumnLayoutParams(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private TextView createTitleText(final String name) {
|
private TextView createTitleText(final String name) {
|
||||||
final TextView title = createTitleText(name,
|
final TextView title = createTitleText(name,
|
||||||
clipFreeRightColumnLayoutParams(true));
|
clipFreeRightColumnLayoutParams(true));
|
||||||
|
@ -169,6 +173,7 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private GridLayout createGridLayout() {
|
private GridLayout createGridLayout() {
|
||||||
final GridLayout layout = new GridLayout(context);
|
final GridLayout layout = new GridLayout(context);
|
||||||
|
|
||||||
|
@ -183,6 +188,7 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
return layout;
|
return layout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private GridLayout.LayoutParams clipFreeRightColumnLayoutParams(final boolean doColumnSpan) {
|
private GridLayout.LayoutParams clipFreeRightColumnLayoutParams(final boolean doColumnSpan) {
|
||||||
final GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
|
final GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
|
||||||
// https://stackoverflow.com/questions/37744672/gridlayout-children-are-being-clipped
|
// https://stackoverflow.com/questions/37744672/gridlayout-children-are-being-clipped
|
||||||
|
@ -198,6 +204,7 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
return layoutParams;
|
return layoutParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private GridLayout.LayoutParams getLayoutParamsViews() {
|
private GridLayout.LayoutParams getLayoutParamsViews() {
|
||||||
final GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
|
final GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
|
||||||
layoutParams.setGravity(Gravity.TOP);
|
layoutParams.setGravity(Gravity.TOP);
|
||||||
|
@ -205,7 +212,9 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
return layoutParams;
|
return layoutParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
private GridLayout.LayoutParams setDefaultMargin(final GridLayout.LayoutParams layoutParams) {
|
@NonNull
|
||||||
|
private GridLayout.LayoutParams setDefaultMargin(
|
||||||
|
@NonNull final GridLayout.LayoutParams layoutParams) {
|
||||||
layoutParams.setMargins(
|
layoutParams.setMargins(
|
||||||
DeviceUtils.dpToPx(4, context),
|
DeviceUtils.dpToPx(4, context),
|
||||||
DeviceUtils.dpToPx(2, context),
|
DeviceUtils.dpToPx(2, context),
|
||||||
|
@ -215,18 +224,20 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
return layoutParams;
|
return layoutParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
private View setZeroPadding(final View view) {
|
@NonNull
|
||||||
|
private View setZeroPadding(@NonNull final View view) {
|
||||||
view.setPadding(0, 0, 0, 0);
|
view.setPadding(0, 0, 0, 0);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class UiItemWrapperChip extends BaseUiItemWrapper {
|
public static class UiItemWrapperChip extends BaseUiItemWrapper {
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private final ChipGroup chipGroup;
|
private final ChipGroup chipGroup;
|
||||||
|
|
||||||
public UiItemWrapperChip(final FilterItem item,
|
public UiItemWrapperChip(@NonNull final FilterItem item,
|
||||||
final View view,
|
@NonNull final View view,
|
||||||
final ChipGroup chipGroup) {
|
@NonNull final ChipGroup chipGroup) {
|
||||||
super(item, view);
|
super(item, view);
|
||||||
this.chipGroup = chipGroup;
|
this.chipGroup = chipGroup;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.schabi.newpipe.util.ServiceHelper;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.collection.SparseArrayCompat;
|
import androidx.collection.SparseArrayCompat;
|
||||||
|
|
||||||
public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
|
public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
|
||||||
|
@ -33,10 +34,10 @@ public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
|
||||||
viewWrapperMap = new SparseArrayCompat<>();
|
viewWrapperMap = new SparseArrayCompat<>();
|
||||||
|
|
||||||
public SearchFilterDialogSpinnerAdapter(
|
public SearchFilterDialogSpinnerAdapter(
|
||||||
final Context context,
|
@NonNull final Context context,
|
||||||
final FilterGroup group,
|
@NonNull final FilterGroup group,
|
||||||
final BaseSearchFilterUiGenerator.UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final BaseSearchFilterUiGenerator.UiWrapperMapDelegate wrapperDelegate,
|
||||||
final Spinner filterDataSpinner) {
|
@NonNull final Spinner filterDataSpinner) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.group = group;
|
this.group = group;
|
||||||
this.wrapperDelegate = wrapperDelegate;
|
this.wrapperDelegate = wrapperDelegate;
|
||||||
|
@ -123,6 +124,7 @@ public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private TextView createViewItem() {
|
private TextView createViewItem() {
|
||||||
final TextView view = new TextView(context);
|
final TextView view = new TextView(context);
|
||||||
view.setLayoutParams(new ViewGroup.LayoutParams(
|
view.setLayoutParams(new ViewGroup.LayoutParams(
|
||||||
|
@ -145,12 +147,13 @@ public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
|
||||||
public boolean isEnabled(final int position) {
|
public boolean isEnabled(final int position) {
|
||||||
final UiItemWrapperSpinner wrappedView =
|
final UiItemWrapperSpinner wrappedView =
|
||||||
viewWrapperMap.get(position);
|
viewWrapperMap.get(position);
|
||||||
Objects.nonNull(wrappedView);
|
Objects.requireNonNull(wrappedView);
|
||||||
return wrappedView.isEnabled();
|
return wrappedView.isEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class UiItemWrapperSpinner
|
private static class UiItemWrapperSpinner
|
||||||
extends BaseItemWrapper {
|
extends BaseItemWrapper {
|
||||||
|
@NonNull
|
||||||
private final Spinner spinner;
|
private final Spinner spinner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -165,10 +168,10 @@ public class SearchFilterDialogSpinnerAdapter extends BaseAdapter {
|
||||||
private int visibility;
|
private int visibility;
|
||||||
private boolean enabled;
|
private boolean enabled;
|
||||||
|
|
||||||
UiItemWrapperSpinner(final FilterItem item,
|
UiItemWrapperSpinner(@NonNull final FilterItem item,
|
||||||
final int initialVisibility,
|
final int initialVisibility,
|
||||||
final boolean isInitialEnabled,
|
final boolean isInitialEnabled,
|
||||||
final Spinner spinner) {
|
@NonNull final Spinner spinner) {
|
||||||
super(item);
|
super(item);
|
||||||
this.spinner = spinner;
|
this.spinner = spinner;
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.collection.SparseArrayCompat;
|
import androidx.collection.SparseArrayCompat;
|
||||||
|
|
||||||
|
@ -73,8 +74,8 @@ public class SearchFilterLogic {
|
||||||
private ICreateUiForFiltersWorker uiSortFilterWorker;
|
private ICreateUiForFiltersWorker uiSortFilterWorker;
|
||||||
|
|
||||||
|
|
||||||
public SearchFilterLogic(final SearchQueryHandlerFactory searchQHFactory,
|
public SearchFilterLogic(@NonNull final SearchQueryHandlerFactory searchQHFactory,
|
||||||
final Callback callback) {
|
@Nullable final Callback callback) {
|
||||||
this.searchQHFactory = searchQHFactory;
|
this.searchQHFactory = searchQHFactory;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
initContentFilters();
|
initContentFilters();
|
||||||
|
@ -91,8 +92,8 @@ public class SearchFilterLogic {
|
||||||
showSortFilterContainerUI();
|
showSortFilterContainerUI();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reInitExclusiveFilterIds(final List<Integer> selectedFilters,
|
private void reInitExclusiveFilterIds(@NonNull final List<Integer> selectedFilters,
|
||||||
final ExclusiveGroups exclusive) {
|
@NonNull final ExclusiveGroups exclusive) {
|
||||||
checkIfIdsAreValid(selectedFilters, exclusive);
|
checkIfIdsAreValid(selectedFilters, exclusive);
|
||||||
|
|
||||||
for (final int id : selectedFilters) {
|
for (final int id : selectedFilters) {
|
||||||
|
@ -101,8 +102,9 @@ public class SearchFilterLogic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void restorePreviouslySelectedFilters(final List<Integer> selectedContentFilterList,
|
public void restorePreviouslySelectedFilters(
|
||||||
final List<Integer> selectedSortFilterList) {
|
@Nullable final List<Integer> selectedContentFilterList,
|
||||||
|
@Nullable final List<Integer> selectedSortFilterList) {
|
||||||
if (selectedContentFilterList != null && selectedSortFilterList != null
|
if (selectedContentFilterList != null && selectedSortFilterList != null
|
||||||
&& !selectedContentFilterList.isEmpty()) {
|
&& !selectedContentFilterList.isEmpty()) {
|
||||||
reInitExclusiveFilterIds(selectedContentFilterList, contentFilterExclusive);
|
reInitExclusiveFilterIds(selectedContentFilterList, contentFilterExclusive);
|
||||||
|
@ -116,8 +118,9 @@ public class SearchFilterLogic {
|
||||||
createSortFilterItemListFromIdentifiersList();
|
createSortFilterItemListFromIdentifiersList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reselectUiItems(final List<Integer> selectedFilters,
|
private void reselectUiItems(
|
||||||
final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap) {
|
@NonNull final List<Integer> selectedFilters,
|
||||||
|
@NonNull 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) {
|
||||||
|
@ -126,7 +129,8 @@ public class SearchFilterLogic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void deselectUiItems(final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap) {
|
private void deselectUiItems(
|
||||||
|
@NonNull final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap) {
|
||||||
for (int index = 0; index < filterIdToUiItemMap.size(); index++) {
|
for (int index = 0; index < filterIdToUiItemMap.size(); index++) {
|
||||||
final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap.valueAt(index);
|
final IUiItemWrapper iUiItemWrapper = filterIdToUiItemMap.valueAt(index);
|
||||||
if (iUiItemWrapper != null) {
|
if (iUiItemWrapper != null) {
|
||||||
|
@ -136,26 +140,31 @@ public class SearchFilterLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
// get copy of internal list
|
// get copy of internal list
|
||||||
|
@NonNull
|
||||||
public ArrayList<Integer> getSelectedContentFilters() {
|
public ArrayList<Integer> getSelectedContentFilters() {
|
||||||
return new ArrayList<>(this.selectedContentFilters);
|
return new ArrayList<>(this.selectedContentFilters);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get copy of internal list
|
// get copy of internal list
|
||||||
|
@NonNull
|
||||||
public ArrayList<Integer> getSelectedSortFilters() {
|
public ArrayList<Integer> getSelectedSortFilters() {
|
||||||
return new ArrayList<>(this.selectedSortFilters);
|
return new ArrayList<>(this.selectedSortFilters);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get copy of internal list, elements are not copied
|
// get copy of internal list, elements are not copied
|
||||||
|
@NonNull
|
||||||
public List<FilterItem> getSelectedContentFilterItems() {
|
public List<FilterItem> getSelectedContentFilterItems() {
|
||||||
return new ArrayList<>(this.userSelectedContentFilters);
|
return new ArrayList<>(this.userSelectedContentFilters);
|
||||||
}
|
}
|
||||||
|
|
||||||
// get copy of internal list, elements are not copied
|
// get copy of internal list, elements are not copied
|
||||||
|
@NonNull
|
||||||
public List<FilterItem> getSelectedSortFiltersItems() {
|
public List<FilterItem> getSelectedSortFiltersItems() {
|
||||||
return new ArrayList<>(this.userSelectedSortFilters);
|
return new ArrayList<>(this.userSelectedSortFilters);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initContentFiltersUi(final ICreateUiForFiltersWorker createUiForFiltersWorker) {
|
public void initContentFiltersUi(
|
||||||
|
@NonNull final ICreateUiForFiltersWorker createUiForFiltersWorker) {
|
||||||
final FilterContainer filters = searchQHFactory.getAvailableContentFilter();
|
final FilterContainer filters = searchQHFactory.getAvailableContentFilter();
|
||||||
|
|
||||||
if (filters != null && filters.getFilterGroups() != null) {
|
if (filters != null && filters.getFilterGroups() != null) {
|
||||||
|
@ -167,7 +176,8 @@ public class SearchFilterLogic {
|
||||||
reselectUiItems(selectedContentFilters, contentFilterIdToUiItemMap);
|
reselectUiItems(selectedContentFilters, contentFilterIdToUiItemMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initSortFiltersUi(final ICreateUiForFiltersWorker createUiForFiltersWorker) {
|
public void initSortFiltersUi(
|
||||||
|
@NonNull final ICreateUiForFiltersWorker createUiForFiltersWorker) {
|
||||||
final FilterContainer filters = searchQHFactory.getAvailableContentFilter();
|
final FilterContainer filters = searchQHFactory.getAvailableContentFilter();
|
||||||
final List<FilterGroup> sortGroups = getAllSortFilterGroups(filters);
|
final List<FilterGroup> sortGroups = getAllSortFilterGroups(filters);
|
||||||
uiSortFilterWorker = createUiForFiltersWorker;
|
uiSortFilterWorker = createUiForFiltersWorker;
|
||||||
|
@ -188,9 +198,10 @@ public class SearchFilterLogic {
|
||||||
* called clear() on here.
|
* called clear() on here.
|
||||||
* @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 SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
|
@NonNull final FilterGroup[] filterGroups,
|
||||||
final ICreateUiForFiltersWorker createUiForFiltersWorker) {
|
@NonNull final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
|
||||||
|
@NonNull final ICreateUiForFiltersWorker createUiForFiltersWorker) {
|
||||||
|
|
||||||
filterIdToUiItemMap.clear();
|
filterIdToUiItemMap.clear();
|
||||||
Objects.requireNonNull(createUiForFiltersWorker);
|
Objects.requireNonNull(createUiForFiltersWorker);
|
||||||
|
@ -221,9 +232,9 @@ public class SearchFilterLogic {
|
||||||
* @param fidToSupersetSortFilterMap null possible, only for content filters relevant
|
* @param fidToSupersetSortFilterMap null possible, only for content filters relevant
|
||||||
*/
|
*/
|
||||||
private void initFilters(
|
private void initFilters(
|
||||||
final FilterGroup[] filterGroups,
|
@NonNull final FilterGroup[] filterGroups,
|
||||||
final ExclusiveGroups exclusive,
|
@NonNull final ExclusiveGroups exclusive,
|
||||||
final List<Integer> selectedFilters,
|
@NonNull final List<Integer> selectedFilters,
|
||||||
@Nullable final SparseArrayCompat<FilterContainer> fidToSupersetSortFilterMap) {
|
@Nullable final SparseArrayCompat<FilterContainer> fidToSupersetSortFilterMap) {
|
||||||
selectedFilters.clear();
|
selectedFilters.clear();
|
||||||
exclusive.clear();
|
exclusive.clear();
|
||||||
|
@ -253,8 +264,8 @@ public class SearchFilterLogic {
|
||||||
checkIfIdsAreValid(selectedFilters, exclusive);
|
checkIfIdsAreValid(selectedFilters, exclusive);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkIfIdsAreValid(final List<Integer> selectedFilters,
|
private void checkIfIdsAreValid(@NonNull final List<Integer> selectedFilters,
|
||||||
final ExclusiveGroups exclusive) {
|
@NonNull final ExclusiveGroups exclusive) {
|
||||||
for (final int id : selectedFilters) {
|
for (final int id : selectedFilters) {
|
||||||
if (!exclusive.filterIdToGroupIdMapContainsId(id)) {
|
if (!exclusive.filterIdToGroupIdMapContainsId(id)) {
|
||||||
throw new RuntimeException("The id " + id + " is invalid");
|
throw new RuntimeException("The id " + id + " is invalid");
|
||||||
|
@ -334,7 +345,7 @@ public class SearchFilterLogic {
|
||||||
*
|
*
|
||||||
* @param contentFilterIds content filter ids list
|
* @param contentFilterIds content filter ids list
|
||||||
*/
|
*/
|
||||||
private void showSortFilterIdsContainerUI(final List<Integer> contentFilterIds) {
|
private void showSortFilterIdsContainerUI(@NonNull final List<Integer> contentFilterIds) {
|
||||||
for (final int contentFilterId : contentFilterIds) {
|
for (final int contentFilterId : contentFilterIds) {
|
||||||
showSortFilterIdContainerUI(contentFilterId);
|
showSortFilterIdContainerUI(contentFilterId);
|
||||||
}
|
}
|
||||||
|
@ -397,9 +408,10 @@ public class SearchFilterLogic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUiItemsVisibility(final FilterContainer filters,
|
private void setUiItemsVisibility(
|
||||||
|
@Nullable final FilterContainer filters,
|
||||||
final boolean isVisible,
|
final boolean isVisible,
|
||||||
final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap) {
|
@NonNull 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,8 +422,9 @@ public class SearchFilterLogic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setUiItemVisible(final boolean isVisible,
|
private void setUiItemVisible(
|
||||||
final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
|
final boolean isVisible,
|
||||||
|
@NonNull 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) {
|
||||||
|
@ -427,7 +440,8 @@ public class SearchFilterLogic {
|
||||||
* @return the sort filter groups. Empty list if either param filters or no
|
* @return the sort filter groups. Empty list if either param filters or no
|
||||||
* filter groups available
|
* filter groups available
|
||||||
*/
|
*/
|
||||||
private List<FilterGroup> getAllSortFilterGroups(final FilterContainer filters) {
|
@NonNull
|
||||||
|
private List<FilterGroup> getAllSortFilterGroups(@Nullable final FilterContainer filters) {
|
||||||
if (filters != null && filters.getFilterGroups() != null) {
|
if (filters != null && filters.getFilterGroups() != null) {
|
||||||
final List<FilterGroup> sortGroups = new ArrayList<>();
|
final List<FilterGroup> sortGroups = new ArrayList<>();
|
||||||
for (final FilterGroup filterGroup : filters.getFilterGroups()) {
|
for (final FilterGroup filterGroup : filters.getFilterGroups()) {
|
||||||
|
@ -442,8 +456,8 @@ public class SearchFilterLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void handleIdInNonExclusiveGroup(final int filterId,
|
protected void handleIdInNonExclusiveGroup(final int filterId,
|
||||||
final IUiItemWrapper uiItemWrapper,
|
@Nullable final IUiItemWrapper uiItemWrapper,
|
||||||
final List<Integer> selectedFilter) {
|
@NonNull final List<Integer> selectedFilter) {
|
||||||
if (uiItemWrapper != null) { // could be null if there is no UI
|
if (uiItemWrapper != null) { // could be null if there is no UI
|
||||||
if (uiItemWrapper.isChecked()) {
|
if (uiItemWrapper.isChecked()) {
|
||||||
if (!selectedFilter.contains(filterId)) {
|
if (!selectedFilter.contains(filterId)) {
|
||||||
|
@ -473,10 +487,11 @@ public class SearchFilterLogic {
|
||||||
selectFilter(filterId, sortFilterIdToUiItemMap, selectedSortFilters, sortFilterExclusive);
|
selectFilter(filterId, sortFilterIdToUiItemMap, selectedSortFilters, sortFilterExclusive);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void selectFilter(final int id,
|
private void selectFilter(
|
||||||
final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
|
final int id,
|
||||||
final List<Integer> selectedFilter,
|
@NonNull final SparseArrayCompat<IUiItemWrapper> filterIdToUiItemMap,
|
||||||
final ExclusiveGroups exclusive) {
|
@NonNull final List<Integer> selectedFilter,
|
||||||
|
@NonNull final ExclusiveGroups exclusive) {
|
||||||
final IUiItemWrapper uiItemWrapper =
|
final IUiItemWrapper uiItemWrapper =
|
||||||
filterIdToUiItemMap.get(id);
|
filterIdToUiItemMap.get(id);
|
||||||
|
|
||||||
|
@ -518,8 +533,9 @@ public class SearchFilterLogic {
|
||||||
* @param id the id of a content filter
|
* @param id the id of a content filter
|
||||||
* @param uiItemWrapper the wrapped UI {@link android.view.View} for that content filter
|
* @param uiItemWrapper the wrapped UI {@link android.view.View} for that content filter
|
||||||
*/
|
*/
|
||||||
protected void addContentFilterUiWrapperToItemMap(final int id,
|
protected void addContentFilterUiWrapperToItemMap(
|
||||||
final IUiItemWrapper uiItemWrapper) {
|
final int id,
|
||||||
|
@NonNull final IUiItemWrapper uiItemWrapper) {
|
||||||
contentFilterIdToUiItemMap.put(id, uiItemWrapper);
|
contentFilterIdToUiItemMap.put(id, uiItemWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -533,8 +549,9 @@ public class SearchFilterLogic {
|
||||||
* @param id the id of a sort filter
|
* @param id the id of a sort filter
|
||||||
* @param uiItemWrapper the wrapped UI {@link android.view.View} for that sort filter
|
* @param uiItemWrapper the wrapped UI {@link android.view.View} for that sort filter
|
||||||
*/
|
*/
|
||||||
protected void addSortFilterUiWrapperToItemMap(final int id,
|
protected void addSortFilterUiWrapperToItemMap(
|
||||||
final IUiItemWrapper uiItemWrapper) {
|
final int id,
|
||||||
|
@NonNull final IUiItemWrapper uiItemWrapper) {
|
||||||
sortFilterIdToUiItemMap.put(id, uiItemWrapper);
|
sortFilterIdToUiItemMap.put(id, uiItemWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -591,7 +608,7 @@ public class SearchFilterLogic {
|
||||||
*
|
*
|
||||||
* @param filterGroup one group each time from {@link FilterContainer#getFilterGroups()}
|
* @param filterGroup one group each time from {@link FilterContainer#getFilterGroups()}
|
||||||
*/
|
*/
|
||||||
void createFilterGroupBeforeItems(FilterGroup filterGroup);
|
void createFilterGroupBeforeItems(@NonNull FilterGroup filterGroup);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create Ui elements specifically related to a {@link FilterItem} itself.
|
* Create Ui elements specifically related to a {@link FilterItem} itself.
|
||||||
|
@ -600,7 +617,7 @@ public class SearchFilterLogic {
|
||||||
* @param filterGroup (optional) one group each time from
|
* @param filterGroup (optional) one group each time from
|
||||||
* {@link FilterContainer#getFilterGroups()}
|
* {@link FilterContainer#getFilterGroups()}
|
||||||
*/
|
*/
|
||||||
void createFilterItem(FilterItem filterItem, FilterGroup filterGroup);
|
void createFilterItem(@NonNull FilterItem filterItem, @NonNull FilterGroup filterGroup);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create Ui elements specifically related to the {@link FilterGroup} itself.
|
* Create Ui elements specifically related to the {@link FilterGroup} itself.
|
||||||
|
@ -610,7 +627,7 @@ public class SearchFilterLogic {
|
||||||
*
|
*
|
||||||
* @param filterGroup one group each time from {@link FilterContainer#getFilterGroups()}
|
* @param filterGroup one group each time from {@link FilterContainer#getFilterGroups()}
|
||||||
*/
|
*/
|
||||||
void createFilterGroupAfterItems(FilterGroup filterGroup);
|
void createFilterGroupAfterItems(@NonNull FilterGroup filterGroup);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* do anything you might want to clean up or whatever.
|
* do anything you might want to clean up or whatever.
|
||||||
|
@ -629,8 +646,8 @@ public class SearchFilterLogic {
|
||||||
* This callback will be called if a search with additional filters should occur.
|
* This callback will be called if a search with additional filters should occur.
|
||||||
*/
|
*/
|
||||||
public interface Callback {
|
public interface Callback {
|
||||||
void selectedFilters(List<FilterItem> userSelectedContentFilter,
|
void selectedFilters(@NonNull List<FilterItem> userSelectedContentFilter,
|
||||||
List<FilterItem> userSelectedSortFilter);
|
@NonNull List<FilterItem> userSelectedSortFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -676,7 +693,8 @@ public class SearchFilterLogic {
|
||||||
|
|
||||||
public boolean isFilterIdPartOfAnExclusiveGroup(final int filterId) {
|
public boolean isFilterIdPartOfAnExclusiveGroup(final int filterId) {
|
||||||
if (filterIdToGroupIdMapContainsId(filterId)) {
|
if (filterIdToGroupIdMapContainsId(filterId)) {
|
||||||
final int filterGroupId = filterIdToGroupIdMap.get(filterId);
|
final int filterGroupId =
|
||||||
|
Objects.requireNonNull(filterIdToGroupIdMap.get(filterId));
|
||||||
return exclusiveGroupsIdSet.contains(filterGroupId);
|
return exclusiveGroupsIdSet.contains(filterGroupId);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -688,7 +706,7 @@ public class SearchFilterLogic {
|
||||||
* @return true if exclusive group
|
* @return true if exclusive group
|
||||||
*/
|
*/
|
||||||
private boolean handleIdInExclusiveGroup(final int filterId,
|
private boolean handleIdInExclusiveGroup(final int filterId,
|
||||||
final List<Integer> selectedFilter) {
|
@NonNull final List<Integer> selectedFilter) {
|
||||||
// case exclusive group selection
|
// case exclusive group selection
|
||||||
if (isFilterIdPartOfAnExclusiveGroup(filterId)) {
|
if (isFilterIdPartOfAnExclusiveGroup(filterId)) {
|
||||||
final int previousSelectedId =
|
final int previousSelectedId =
|
||||||
|
@ -729,7 +747,8 @@ public class SearchFilterLogic {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addIdIfBelongsToExclusiveGroup(final int filterId) {
|
private void addIdIfBelongsToExclusiveGroup(final int filterId) {
|
||||||
final int filterGroupId = filterIdToGroupIdMap.get(filterId);
|
final int filterGroupId =
|
||||||
|
Objects.requireNonNull(filterIdToGroupIdMap.get(filterId));
|
||||||
if (exclusiveGroupsIdSet.contains(filterGroupId)) {
|
if (exclusiveGroupsIdSet.contains(filterGroupId)) {
|
||||||
actualSelectedFilterIdInExclusiveGroupMap.put(filterGroupId, filterId);
|
actualSelectedFilterIdInExclusiveGroupMap.put(filterGroupId, filterId);
|
||||||
}
|
}
|
||||||
|
@ -747,7 +766,8 @@ public class SearchFilterLogic {
|
||||||
|
|
||||||
private int ifInExclusiveGroupRemovePreviouslySelectedId(final int filterId) {
|
private int ifInExclusiveGroupRemovePreviouslySelectedId(final int filterId) {
|
||||||
int previousFilterId = ITEM_IDENTIFIER_UNKNOWN;
|
int previousFilterId = ITEM_IDENTIFIER_UNKNOWN;
|
||||||
final int filterGroupId = filterIdToGroupIdMap.get(filterId);
|
final int filterGroupId =
|
||||||
|
Objects.requireNonNull(filterIdToGroupIdMap.get(filterId));
|
||||||
|
|
||||||
final int index = actualSelectedFilterIdInExclusiveGroupMap.indexOfKey(filterGroupId);
|
final int index = actualSelectedFilterIdInExclusiveGroupMap.indexOfKey(filterGroupId);
|
||||||
if (exclusiveGroupsIdSet.contains(filterGroupId) && index >= 0) {
|
if (exclusiveGroupsIdSet.contains(filterGroupId) && index >= 0) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ import org.schabi.newpipe.extractor.StreamingService;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.widget.Toolbar;
|
import androidx.appcompat.widget.Toolbar;
|
||||||
import androidx.fragment.app.DialogFragment;
|
import androidx.fragment.app.DialogFragment;
|
||||||
|
|
||||||
|
@ -27,10 +28,11 @@ public class SearchFilterOptionMenuAlikeDialogFragment extends BaseSearchFilterD
|
||||||
|
|
||||||
private SearchFilterOptionMenuAlikeDialogFragmentBinding binding;
|
private SearchFilterOptionMenuAlikeDialogFragmentBinding binding;
|
||||||
|
|
||||||
|
@NonNull
|
||||||
public static DialogFragment newInstance(
|
public static DialogFragment newInstance(
|
||||||
final int serviceId,
|
final int serviceId,
|
||||||
final ArrayList<Integer> userSelectedContentFilter,
|
@Nullable final ArrayList<Integer> userSelectedContentFilter,
|
||||||
final ArrayList<Integer> userSelectedSortFilter) {
|
@Nullable final ArrayList<Integer> userSelectedSortFilter) {
|
||||||
return initDialogArguments(
|
return initDialogArguments(
|
||||||
new SearchFilterOptionMenuAlikeDialogFragment(),
|
new SearchFilterOptionMenuAlikeDialogFragment(),
|
||||||
serviceId,
|
serviceId,
|
||||||
|
@ -47,12 +49,13 @@ public class SearchFilterOptionMenuAlikeDialogFragment extends BaseSearchFilterD
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@Nullable
|
||||||
protected Toolbar getToolbar() {
|
protected Toolbar getToolbar() {
|
||||||
return binding.toolbarLayout.toolbar;
|
return binding.toolbarLayout.toolbar;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected View getRootView(final LayoutInflater inflater,
|
protected View getRootView(@NonNull final LayoutInflater inflater,
|
||||||
final ViewGroup container) {
|
final ViewGroup container) {
|
||||||
binding = SearchFilterOptionMenuAlikeDialogFragmentBinding
|
binding = SearchFilterOptionMenuAlikeDialogFragmentBinding
|
||||||
.inflate(inflater, container, false);
|
.inflate(inflater, container, false);
|
||||||
|
@ -83,7 +86,8 @@ public class SearchFilterOptionMenuAlikeDialogFragment extends BaseSearchFilterD
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void initToolbar(final Toolbar toolbar) {
|
@Override
|
||||||
|
protected void initToolbar(final @NonNull Toolbar toolbar) {
|
||||||
super.initToolbar(toolbar);
|
super.initToolbar(toolbar);
|
||||||
// no room for a title
|
// no room for a title
|
||||||
toolbar.setTitle("");
|
toolbar.setTitle("");
|
||||||
|
|
|
@ -21,6 +21,7 @@ import org.schabi.newpipe.util.ServiceHelper;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
|
||||||
|
|
||||||
|
@ -30,10 +31,10 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
private static final int VIEW_ITEMS_MIN_WIDTH_IN_DIP = 168;
|
private static final int VIEW_ITEMS_MIN_WIDTH_IN_DIP = 168;
|
||||||
private final LinearLayout globalLayout;
|
private final LinearLayout globalLayout;
|
||||||
|
|
||||||
public SearchFilterOptionMenuAlikeDialogGenerator(final StreamingService service,
|
public SearchFilterOptionMenuAlikeDialogGenerator(@NonNull final StreamingService service,
|
||||||
final ViewGroup root,
|
@NonNull final ViewGroup root,
|
||||||
final Context context,
|
@NonNull final Context context,
|
||||||
final Callback callback) {
|
@Nullable final Callback callback) {
|
||||||
super(service.getSearchQHFactory(), callback, context);
|
super(service.getSearchQHFactory(), callback, context);
|
||||||
this.globalLayout = createLinearLayout();
|
this.globalLayout = createLinearLayout();
|
||||||
root.addView(globalLayout);
|
root.addView(globalLayout);
|
||||||
|
@ -85,8 +86,8 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createTitle(final String name,
|
protected void createTitle(@NonNull final String name,
|
||||||
final List<View> titleViewElements) {
|
@NonNull final List<View> titleViewElements) {
|
||||||
final TextView titleView = createTitleText(name);
|
final TextView titleView = createTitleText(name);
|
||||||
titleView.setTag(NO_RESIZE_VIEW_TAG);
|
titleView.setTag(NO_RESIZE_VIEW_TAG);
|
||||||
final View separatorLine = createSeparatorLine();
|
final View separatorLine = createSeparatorLine();
|
||||||
|
@ -105,9 +106,9 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void createFilterGroup(final FilterGroup filterGroup,
|
protected void createFilterGroup(@NonNull final FilterGroup filterGroup,
|
||||||
final UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
||||||
final UiSelectorDelegate selectorDelegate) {
|
@NonNull final UiSelectorDelegate selectorDelegate) {
|
||||||
final UiItemWrapperViews viewsWrapper = new UiItemWrapperViews(
|
final UiItemWrapperViews viewsWrapper = new UiItemWrapperViews(
|
||||||
filterGroup.getIdentifier());
|
filterGroup.getIdentifier());
|
||||||
|
|
||||||
|
@ -142,10 +143,10 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createUiElementsForSingleSelectableItemsFilterGroup(
|
private void createUiElementsForSingleSelectableItemsFilterGroup(
|
||||||
final FilterGroup filterGroup,
|
@NonNull final FilterGroup filterGroup,
|
||||||
final UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
||||||
final UiSelectorDelegate selectorDelegate,
|
@NonNull final UiSelectorDelegate selectorDelegate,
|
||||||
final RadioGroup radioGroup) {
|
@NonNull final RadioGroup radioGroup) {
|
||||||
for (final FilterItem item : filterGroup.getFilterItems()) {
|
for (final FilterItem item : filterGroup.getFilterItems()) {
|
||||||
|
|
||||||
final View view;
|
final View view;
|
||||||
|
@ -170,9 +171,9 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createUiElementsForMultipleSelectableItemsFilterGroup(
|
private void createUiElementsForMultipleSelectableItemsFilterGroup(
|
||||||
final FilterGroup filterGroup,
|
@NonNull final FilterGroup filterGroup,
|
||||||
final UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
||||||
final UiSelectorDelegate selectorDelegate) {
|
@NonNull final UiSelectorDelegate selectorDelegate) {
|
||||||
for (final FilterItem item : filterGroup.getFilterItems()) {
|
for (final FilterItem item : filterGroup.getFilterItems()) {
|
||||||
final View view;
|
final View view;
|
||||||
if (item instanceof FilterItem.DividerItem) {
|
if (item instanceof FilterItem.DividerItem) {
|
||||||
|
@ -197,6 +198,7 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private LinearLayout createLinearLayout() {
|
private LinearLayout createLinearLayout() {
|
||||||
final LinearLayout linearLayout = new LinearLayout(context);
|
final LinearLayout linearLayout = new LinearLayout(context);
|
||||||
|
|
||||||
|
@ -215,6 +217,7 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
return linearLayout;
|
return linearLayout;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private LinearLayout.LayoutParams getLayoutForSeparatorLine() {
|
private LinearLayout.LayoutParams getLayoutForSeparatorLine() {
|
||||||
final LinearLayout.LayoutParams layoutParams = getLayoutParamsLabelLeft();
|
final LinearLayout.LayoutParams layoutParams = getLayoutParamsLabelLeft();
|
||||||
layoutParams.width = 0;
|
layoutParams.width = 0;
|
||||||
|
@ -222,10 +225,12 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
return layoutParams;
|
return layoutParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private View createSeparatorLine() {
|
private View createSeparatorLine() {
|
||||||
return createSeparatorLine(getLayoutForSeparatorLine());
|
return createSeparatorLine(getLayoutForSeparatorLine());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
private TextView createTitleText(final String name) {
|
private TextView createTitleText(final String name) {
|
||||||
final LinearLayout.LayoutParams layoutParams = getLayoutParamsLabelLeft();
|
final LinearLayout.LayoutParams layoutParams = getLayoutParamsLabelLeft();
|
||||||
layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
|
layoutParams.gravity = Gravity.CENTER_HORIZONTAL;
|
||||||
|
@ -234,7 +239,8 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
private View setPadding(final View view, final int sizeInDip) {
|
@NonNull
|
||||||
|
private View setPadding(@NonNull final View view, final int sizeInDip) {
|
||||||
final int sizeInPx = DeviceUtils.dpToPx(sizeInDip, context);
|
final int sizeInPx = DeviceUtils.dpToPx(sizeInDip, context);
|
||||||
view.setPadding(
|
view.setPadding(
|
||||||
sizeInPx,
|
sizeInPx,
|
||||||
|
@ -244,8 +250,9 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextView createFilterGroupLabel(final FilterGroup filterGroup,
|
@NonNull
|
||||||
final ViewGroup.LayoutParams layoutParams) {
|
private TextView createFilterGroupLabel(@NonNull final FilterGroup filterGroup,
|
||||||
|
@NonNull final ViewGroup.LayoutParams layoutParams) {
|
||||||
final TextView filterLabel = new TextView(context);
|
final TextView filterLabel = new TextView(context);
|
||||||
filterLabel.setId(filterGroup.getIdentifier());
|
filterLabel.setId(filterGroup.getIdentifier());
|
||||||
filterLabel.setText(ServiceHelper
|
filterLabel.setText(ServiceHelper
|
||||||
|
@ -257,8 +264,9 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
return filterLabel;
|
return filterLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
private CheckBox createCheckBox(final FilterItem item,
|
@NonNull
|
||||||
final ViewGroup.LayoutParams layoutParams) {
|
private CheckBox createCheckBox(@NonNull final FilterItem item,
|
||||||
|
@NonNull final ViewGroup.LayoutParams layoutParams) {
|
||||||
final CheckBox checkBox = new CheckBox(context);
|
final CheckBox checkBox = new CheckBox(context);
|
||||||
checkBox.setLayoutParams(layoutParams);
|
checkBox.setLayoutParams(layoutParams);
|
||||||
checkBox.setText(ServiceHelper.getTranslatedFilterString(
|
checkBox.setText(ServiceHelper.getTranslatedFilterString(
|
||||||
|
@ -268,8 +276,9 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
return checkBox;
|
return checkBox;
|
||||||
}
|
}
|
||||||
|
|
||||||
private TextView createDividerTextView(final FilterItem item,
|
@NonNull
|
||||||
final ViewGroup.LayoutParams layoutParams) {
|
private TextView createDividerTextView(@NonNull final FilterItem item,
|
||||||
|
@NonNull final ViewGroup.LayoutParams layoutParams) {
|
||||||
final TextView view = new TextView(context);
|
final TextView view = new TextView(context);
|
||||||
view.setEnabled(true);
|
view.setEnabled(true);
|
||||||
final String menuDividerTitle =
|
final String menuDividerTitle =
|
||||||
|
@ -280,8 +289,9 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private RadioButton createViewItemRadio(final FilterItem item,
|
@NonNull
|
||||||
final ViewGroup.LayoutParams layoutParams) {
|
private RadioButton createViewItemRadio(@NonNull final FilterItem item,
|
||||||
|
@NonNull final ViewGroup.LayoutParams layoutParams) {
|
||||||
final RadioButton view = new RadioButton(context);
|
final RadioButton view = new RadioButton(context);
|
||||||
view.setId(item.getIdentifier());
|
view.setId(item.getIdentifier());
|
||||||
view.setText(ServiceHelper.getTranslatedFilterString(item.getNameId(), context));
|
view.setText(ServiceHelper.getTranslatedFilterString(item.getNameId(), context));
|
||||||
|
@ -319,11 +329,12 @@ public class SearchFilterOptionMenuAlikeDialogGenerator extends BaseSearchFilter
|
||||||
private static final class UiItemWrapperCheckBoxAndRadioButton
|
private static final class UiItemWrapperCheckBoxAndRadioButton
|
||||||
extends BaseUiItemWrapper {
|
extends BaseUiItemWrapper {
|
||||||
|
|
||||||
|
@Nullable
|
||||||
private final View group;
|
private final View group;
|
||||||
|
|
||||||
private UiItemWrapperCheckBoxAndRadioButton(final FilterItem item,
|
private UiItemWrapperCheckBoxAndRadioButton(@NonNull final FilterItem item,
|
||||||
final View view,
|
@NonNull final View view,
|
||||||
final View group) {
|
@Nullable final View group) {
|
||||||
super(item, view);
|
super(item, view);
|
||||||
this.group = group;
|
this.group = group;
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,8 +19,10 @@ import org.schabi.newpipe.util.ServiceHelper;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.appcompat.view.menu.MenuBuilder;
|
import androidx.appcompat.view.menu.MenuBuilder;
|
||||||
import androidx.core.view.MenuCompat;
|
import androidx.core.view.MenuCompat;
|
||||||
|
|
||||||
|
@ -41,9 +43,9 @@ public class SearchFilterUIOptionMenu extends BaseSearchFilterUiGenerator {
|
||||||
private int newLastUsedGroupId = MENU_GROUP_SEARCH_RESET_BUTTONS + 1;
|
private int newLastUsedGroupId = MENU_GROUP_SEARCH_RESET_BUTTONS + 1;
|
||||||
private int firstSortFilterGroupId;
|
private int firstSortFilterGroupId;
|
||||||
|
|
||||||
public SearchFilterUIOptionMenu(final StreamingService service,
|
public SearchFilterUIOptionMenu(@NonNull final StreamingService service,
|
||||||
final Callback callback,
|
@Nullable final Callback callback,
|
||||||
final Context context) {
|
@NonNull final Context context) {
|
||||||
super(service.getSearchQHFactory(), callback, context);
|
super(service.getSearchQHFactory(), callback, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,8 +55,10 @@ public class SearchFilterUIOptionMenu extends BaseSearchFilterUiGenerator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void handleIdInNonExclusiveGroup(final int filterId,
|
protected void handleIdInNonExclusiveGroup(final int filterId,
|
||||||
final IUiItemWrapper uiItemWrapper,
|
@Nullable final IUiItemWrapper uiItemWrapper,
|
||||||
final List<Integer> selectedFilter) {
|
@NonNull final List<Integer> selectedFilter) {
|
||||||
|
// here it should never be null as the UI is the action menu
|
||||||
|
Objects.requireNonNull(uiItemWrapper);
|
||||||
uiItemWrapper.setChecked(!uiItemWrapper.isChecked()); // toggle
|
uiItemWrapper.setChecked(!uiItemWrapper.isChecked()); // toggle
|
||||||
super.handleIdInNonExclusiveGroup(filterId, uiItemWrapper, selectedFilter);
|
super.handleIdInNonExclusiveGroup(filterId, uiItemWrapper, selectedFilter);
|
||||||
}
|
}
|
||||||
|
@ -206,7 +210,7 @@ public class SearchFilterUIOptionMenu extends BaseSearchFilterUiGenerator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupBeforeItems(
|
public void createFilterGroupBeforeItems(
|
||||||
final FilterGroup filterGroup) {
|
@NonNull final FilterGroup filterGroup) {
|
||||||
if (filterGroup.getNameId() != null) {
|
if (filterGroup.getNameId() != null) {
|
||||||
createNotEnabledAndUncheckableGroupTitleMenuItem(
|
createNotEnabledAndUncheckableGroupTitleMenuItem(
|
||||||
FilterContainer.ITEM_IDENTIFIER_UNKNOWN, filterGroup.getNameId());
|
FilterContainer.ITEM_IDENTIFIER_UNKNOWN, filterGroup.getNameId());
|
||||||
|
@ -230,8 +234,8 @@ public class SearchFilterUIOptionMenu extends BaseSearchFilterUiGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterItem(final FilterItem filterItem,
|
public void createFilterItem(@NonNull final FilterItem filterItem,
|
||||||
final FilterGroup filterGroup) {
|
@NonNull final FilterGroup filterGroup) {
|
||||||
final MenuItem item = createMenuItem(filterItem);
|
final MenuItem item = createMenuItem(filterItem);
|
||||||
|
|
||||||
if (filterItem instanceof FilterItem.DividerItem) {
|
if (filterItem instanceof FilterItem.DividerItem) {
|
||||||
|
@ -255,7 +259,7 @@ public class SearchFilterUIOptionMenu extends BaseSearchFilterUiGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupAfterItems(final FilterGroup filterGroup) {
|
public void createFilterGroupAfterItems(@NonNull final FilterGroup filterGroup) {
|
||||||
makeAllowedMenuItemInGroupCheckable(filterGroup.isOnlyOneCheckable(),
|
makeAllowedMenuItemInGroupCheckable(filterGroup.isOnlyOneCheckable(),
|
||||||
getLastUsedGroupIdThanIncrement());
|
getLastUsedGroupIdThanIncrement());
|
||||||
}
|
}
|
||||||
|
@ -285,7 +289,7 @@ public class SearchFilterUIOptionMenu extends BaseSearchFilterUiGenerator {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupBeforeItems(
|
public void createFilterGroupBeforeItems(
|
||||||
final FilterGroup filterGroup) {
|
@NonNull final FilterGroup filterGroup) {
|
||||||
if (filterGroup.getNameId() != null) {
|
if (filterGroup.getNameId() != null) {
|
||||||
final MenuItem item = createNotEnabledAndUncheckableGroupTitleMenuItem(
|
final MenuItem item = createNotEnabledAndUncheckableGroupTitleMenuItem(
|
||||||
filterGroup.getIdentifier(), filterGroup.getNameId());
|
filterGroup.getIdentifier(), filterGroup.getNameId());
|
||||||
|
@ -294,8 +298,8 @@ public class SearchFilterUIOptionMenu extends BaseSearchFilterUiGenerator {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterItem(final FilterItem filterItem,
|
public void createFilterItem(@NonNull final FilterItem filterItem,
|
||||||
final FilterGroup filterGroup) {
|
@NonNull final FilterGroup filterGroup) {
|
||||||
final MenuItem item = createMenuItem(filterItem);
|
final MenuItem item = createMenuItem(filterItem);
|
||||||
addSortFilterUiToItemMap(filterItem.getIdentifier(), item);
|
addSortFilterUiToItemMap(filterItem.getIdentifier(), item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,8 @@ import android.view.View;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wrapper for views that are either just labels or eg. a RadioGroup container
|
* Wrapper for views that are either just labels or eg. a RadioGroup container
|
||||||
* etc. that represent a {@link org.schabi.newpipe.extractor.search.filter.FilterGroup}.
|
* etc. that represent a {@link org.schabi.newpipe.extractor.search.filter.FilterGroup}.
|
||||||
|
@ -20,7 +22,7 @@ final class UiItemWrapperViews implements SearchFilterLogic.IUiItemWrapper {
|
||||||
this.itemId = itemId;
|
this.itemId = itemId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(final View view) {
|
public void add(@NonNull final View view) {
|
||||||
this.views.add(view);
|
this.views.add(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,8 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
@ -140,8 +142,8 @@ public class SearchFilterLogicAndUiGeneratorTest {
|
||||||
public void contentFilterItemsIdsMatchIdsAndCallbackTest() throws ExtractionException {
|
public void contentFilterItemsIdsMatchIdsAndCallbackTest() throws ExtractionException {
|
||||||
setupEach(false, new SearchFilterLogic.Callback() {
|
setupEach(false, new SearchFilterLogic.Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void selectedFilters(final List<FilterItem> userSelectedContentFilter,
|
public void selectedFilters(@NonNull final List<FilterItem> userSelectedContentFilter,
|
||||||
final List<FilterItem> userSelectedSortFilter) {
|
@NonNull final List<FilterItem> userSelectedSortFilter) {
|
||||||
fromCallbackContentFilterItems = userSelectedContentFilter;
|
fromCallbackContentFilterItems = userSelectedContentFilter;
|
||||||
fromCallbackSortFilterItems = userSelectedSortFilter;
|
fromCallbackSortFilterItems = userSelectedSortFilter;
|
||||||
}
|
}
|
||||||
|
@ -497,7 +499,7 @@ public class SearchFilterLogicAndUiGeneratorTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupBeforeItems(final FilterGroup filterGroup) {
|
public void createFilterGroupBeforeItems(@NonNull final FilterGroup filterGroup) {
|
||||||
for (final FilterItem item : filterGroup.getFilterItems()) {
|
for (final FilterItem item : filterGroup.getFilterItems()) {
|
||||||
final ElementsWrapper element =
|
final ElementsWrapper element =
|
||||||
new ElementsWrapper(item, filterGroup.getIdentifier());
|
new ElementsWrapper(item, filterGroup.getIdentifier());
|
||||||
|
@ -511,12 +513,12 @@ public class SearchFilterLogicAndUiGeneratorTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterItem(final FilterItem filterItem,
|
public void createFilterItem(@NonNull final FilterItem filterItem,
|
||||||
final FilterGroup filterGroup) {
|
@NonNull final FilterGroup filterGroup) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createFilterGroupAfterItems(final FilterGroup filterGroup) {
|
public void createFilterGroupAfterItems(@NonNull final FilterGroup filterGroup) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Add table
Reference in a new issue