searchfilters: fixup 4th dialog to draw a separator line between FilterGroup without a label

This commit is contained in:
evermind 2022-12-03 22:01:28 +01:00
parent 161eb16906
commit 90e434663c
3 changed files with 38 additions and 3 deletions

View file

@ -42,9 +42,17 @@ public abstract class BaseSearchFilterUiDialogGenerator extends BaseSearchFilter
return new BaseCreateSearchFilterUI.CreateSortFilterUI(this, context, logic);
}
/**
* Create a View that acts as a separator between two other {@link View}-Elements.
*
* @param layoutParams this layout will be modified to have the height of 1 -> to have a
* the actual separator line.
* @return the created {@link SeparatorLineView}
*/
@NonNull
protected View createSeparatorLine(@NonNull final ViewGroup.LayoutParams layoutParams) {
final View separatorLine = new View(context);
protected SeparatorLineView createSeparatorLine(
@NonNull final ViewGroup.LayoutParams layoutParams) {
final SeparatorLineView separatorLine = new SeparatorLineView(context);
separatorLine.setBackgroundColor(getSeparatorLineColorFromTheme());
layoutParams.height = 1; // always set the separator to the height of 1
separatorLine.setLayoutParams(layoutParams);
@ -60,4 +68,17 @@ public abstract class BaseSearchFilterUiDialogGenerator extends BaseSearchFilter
title.setLayoutParams(layoutParams);
return title;
}
/**
* A special view to separate two other {@link View}s.
* <p>
* class only needed to distinct this special view from other View based views.
* (eg. instanceof)
*/
protected static final class SeparatorLineView extends View {
private SeparatorLineView(@NonNull final Context context) {
super(context);
}
}
}

View file

@ -3,6 +3,7 @@
package org.schabi.newpipe.fragments.list.search.filter;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridLayout;
import android.widget.TextView;
@ -37,6 +38,10 @@ public class SearchFilterChipDialogGenerator extends SearchFilterDialogGenerator
final TextView filterLabel = createFilterLabel(filterGroup, layoutParams);
globalLayout.addView(filterLabel);
viewsWrapper.add(filterLabel);
} else if (doWeNeedASeparatorView()) {
final SeparatorLineView separatorLineView = createSeparatorLine();
globalLayout.addView(separatorLineView);
viewsWrapper.add(separatorLineView);
}
final ChipGroup chipGroup = new ChipGroup(context);
@ -55,6 +60,15 @@ public class SearchFilterChipDialogGenerator extends SearchFilterDialogGenerator
viewsWrapper.add(chipGroup);
}
private boolean doWeNeedASeparatorView() {
// if 0 than there is nothing to separate
if (globalLayout.getChildCount() == 0) {
return false;
}
final View lastView = globalLayout.getChildAt(globalLayout.getChildCount() - 1);
return !(lastView instanceof SeparatorLineView);
}
private ViewGroup.MarginLayoutParams setDefaultMarginInDp(
@NonNull final ViewGroup.MarginLayoutParams layoutParams,
final int left, final int top, final int right, final int bottom) {

View file

@ -239,7 +239,7 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
}
@NonNull
private View createSeparatorLine() {
protected SeparatorLineView createSeparatorLine() {
return createSeparatorLine(clipFreeRightColumnLayoutParams(true));
}