Skip to content

Commit 830b4d0

Browse files
committed
searchfilters: make SearchFilterDialogGenerator DividerItem aware
Refactor createUiChipElementsForFilterGroupItems and make this method aware of DividerItem Make classes inheritable (changes private to protected for some methods/variables)
1 parent e4d3778 commit 830b4d0

2 files changed

Lines changed: 76 additions & 32 deletions

File tree

app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterDialogFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
*/
1818
public class SearchFilterDialogFragment extends BaseSearchFilterDialogFragment {
1919

20-
private SearchFilterDialogFragmentBinding binding;
20+
protected SearchFilterDialogFragmentBinding binding;
2121

2222
@Override
2323
protected BaseSearchFilterUiGenerator createSearchFilterDialogGenerator() {

app/src/main/java/org/schabi/newpipe/fragments/list/search/filter/SearchFilterDialogGenerator.java

Lines changed: 75 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerator {
3030
private static final int CHIP_GROUP_ELEMENTS_THRESHOLD = 2;
3131
private static final int CHIP_MIN_TOUCH_TARGET_SIZE_DP = 40;
32-
private final GridLayout globalLayout;
32+
protected final GridLayout globalLayout;
3333

3434
public SearchFilterDialogGenerator(
3535
@NonNull final SearchFilterLogic logic,
@@ -67,16 +67,7 @@ protected void createFilterGroup(@NonNull final FilterGroup filterGroup,
6767

6868
final TextView filterLabel;
6969
if (filterGroup.getNameId() != null) {
70-
filterLabel = new TextView(context);
71-
72-
filterLabel.setId(filterGroup.getIdentifier());
73-
filterLabel.setText(
74-
ServiceHelper.getTranslatedFilterString(filterGroup.getNameId(), context));
75-
filterLabel.setGravity(Gravity.CENTER_VERTICAL);
76-
setDefaultMargin(layoutParams);
77-
setZeroPadding(filterLabel);
78-
79-
filterLabel.setLayoutParams(layoutParams);
70+
filterLabel = createFilterLabel(filterGroup, layoutParams);
8071
viewsWrapper.add(filterLabel);
8172
} else {
8273
filterLabel = null;
@@ -113,13 +104,30 @@ protected void createFilterGroup(@NonNull final FilterGroup filterGroup,
113104
clipFreeRightColumnLayoutParams(doSpanDataOverMultipleCells));
114105
chipGroup.setSingleLine(false);
115106

116-
createUiElementsForMultipleSelectableItemsFilterGroup(
107+
createUiChipElementsForFilterGroupItems(
117108
filterGroup, wrapperDelegate, selectorDelegate, chipGroup);
118109
}
119110

120111
wrapperDelegate.put(filterGroup.getIdentifier(), viewsWrapper);
121112
}
122113

114+
@NonNull
115+
protected TextView createFilterLabel(@NonNull final FilterGroup filterGroup,
116+
@NonNull final GridLayout.LayoutParams layoutParams) {
117+
final TextView filterLabel;
118+
filterLabel = new TextView(context);
119+
120+
filterLabel.setId(filterGroup.getIdentifier());
121+
filterLabel.setText(
122+
ServiceHelper.getTranslatedFilterString(filterGroup.getNameId(), context));
123+
filterLabel.setGravity(Gravity.CENTER_VERTICAL);
124+
setDefaultMargin(layoutParams);
125+
setZeroPadding(filterLabel);
126+
127+
filterLabel.setLayoutParams(layoutParams);
128+
return filterLabel;
129+
}
130+
123131
private boolean chooseParentViewForFilterLabelAndAdd(
124132
@NonNull final FilterGroup filterGroup,
125133
final boolean doSpanDataOverMultipleCells,
@@ -169,29 +177,65 @@ public void onNothingSelected(final AdapterView<?> parent) {
169177
filterDataSpinner.setOnItemSelectedListener(listener);
170178
}
171179

172-
private void createUiElementsForMultipleSelectableItemsFilterGroup(
180+
protected void createUiChipElementsForFilterGroupItems(
173181
@NonNull final FilterGroup filterGroup,
174182
@NonNull final UiWrapperMapDelegate wrapperDelegate,
175183
@NonNull final UiSelectorDelegate selectorDelegate,
176184
@NonNull final ChipGroup chipGroup) {
177185
for (final FilterItem item : filterGroup.getFilterItems()) {
178-
final Chip chip = (Chip) LayoutInflater.from(context).inflate(
179-
R.layout.chip_search_filter, chipGroup, false);
180-
chip.ensureAccessibleTouchTarget(
181-
DeviceUtils.dpToPx(CHIP_MIN_TOUCH_TARGET_SIZE_DP, context));
182-
chip.setText(ServiceHelper.getTranslatedFilterString(item.getNameId(), context));
183-
chip.setId(item.getIdentifier());
184-
chip.setCheckable(true);
185-
final View.OnClickListener listener;
186-
listener = view -> selectorDelegate.selectFilter(view.getId());
187-
188-
chip.setOnClickListener(listener);
189-
chipGroup.addView(chip);
190-
wrapperDelegate.put(item.getIdentifier(), new UiItemWrapperChip(
191-
item, chip, chipGroup));
186+
187+
if (item instanceof InjectFilterItem.DividerItem) {
188+
final InjectFilterItem.DividerItem dividerItem =
189+
(InjectFilterItem.DividerItem) item;
190+
191+
final GridLayout.LayoutParams layoutParams = getLayoutParamsViews();
192+
final TextView dividerLabel = createDividerLabel(dividerItem, layoutParams);
193+
chipGroup.addView(dividerLabel);
194+
} else {
195+
final Chip chip = createChipView(chipGroup, item);
196+
197+
final View.OnClickListener listener;
198+
listener = view -> selectorDelegate.selectFilter(view.getId());
199+
chip.setOnClickListener(listener);
200+
201+
chipGroup.addView(chip);
202+
wrapperDelegate.put(item.getIdentifier(),
203+
new UiItemWrapperChip(item, chip, chipGroup));
204+
}
192205
}
193206
}
194207

208+
@NonNull
209+
private Chip createChipView(@NonNull final ChipGroup chipGroup,
210+
@NonNull final FilterItem item) {
211+
final Chip chip = (Chip) LayoutInflater.from(context).inflate(
212+
R.layout.chip_search_filter, chipGroup, false);
213+
chip.ensureAccessibleTouchTarget(
214+
DeviceUtils.dpToPx(CHIP_MIN_TOUCH_TARGET_SIZE_DP, context));
215+
chip.setText(ServiceHelper.getTranslatedFilterString(item.getNameId(), context));
216+
chip.setId(item.getIdentifier());
217+
chip.setCheckable(true);
218+
return chip;
219+
}
220+
221+
@NonNull
222+
private TextView createDividerLabel(
223+
@NonNull final InjectFilterItem.DividerItem dividerItem,
224+
@NonNull final GridLayout.LayoutParams layoutParams) {
225+
final TextView dividerLabel;
226+
dividerLabel = new TextView(context);
227+
dividerLabel.setEnabled(true);
228+
229+
dividerLabel.setGravity(Gravity.CENTER_VERTICAL);
230+
setDefaultMargin(layoutParams);
231+
layoutParams.height = DeviceUtils.dpToPx(CHIP_MIN_TOUCH_TARGET_SIZE_DP, context);
232+
dividerLabel.setLayoutParams(layoutParams);
233+
final String menuDividerTitle =
234+
context.getString(dividerItem.getStringResId()) + ":";
235+
dividerLabel.setText(menuDividerTitle);
236+
return dividerLabel;
237+
}
238+
195239
@NonNull
196240
private View createSeparatorLine() {
197241
return createSeparatorLine(clipFreeRightColumnLayoutParams(true));
@@ -221,7 +265,7 @@ private GridLayout createGridLayout() {
221265
}
222266

223267
@NonNull
224-
private GridLayout.LayoutParams clipFreeRightColumnLayoutParams(final boolean doColumnSpan) {
268+
protected GridLayout.LayoutParams clipFreeRightColumnLayoutParams(final boolean doColumnSpan) {
225269
final GridLayout.LayoutParams layoutParams = new GridLayout.LayoutParams();
226270
// https://stackoverflow.com/questions/37744672/gridlayout-children-are-being-clipped
227271
layoutParams.width = 0;
@@ -245,8 +289,8 @@ private GridLayout.LayoutParams getLayoutParamsViews() {
245289
}
246290

247291
@NonNull
248-
private GridLayout.LayoutParams setDefaultMargin(
249-
@NonNull final GridLayout.LayoutParams layoutParams) {
292+
protected ViewGroup.MarginLayoutParams setDefaultMargin(
293+
@NonNull final ViewGroup.MarginLayoutParams layoutParams) {
250294
layoutParams.setMargins(
251295
DeviceUtils.dpToPx(4, context),
252296
DeviceUtils.dpToPx(2, context),
@@ -257,7 +301,7 @@ private GridLayout.LayoutParams setDefaultMargin(
257301
}
258302

259303
@NonNull
260-
private View setZeroPadding(@NonNull final View view) {
304+
protected View setZeroPadding(@NonNull final View view) {
261305
view.setPadding(0, 0, 0, 0);
262306
return view;
263307
}

0 commit comments

Comments
 (0)