mirror of
https://github.com/MaintainTeam/LastPipeBender.git
synced 2025-03-01 22:08:22 +03:00
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)
This commit is contained in:
parent
e4d3778cce
commit
830b4d0c9b
2 changed files with 75 additions and 31 deletions
|
@ -17,7 +17,7 @@ import androidx.appcompat.widget.Toolbar;
|
||||||
*/
|
*/
|
||||||
public class SearchFilterDialogFragment extends BaseSearchFilterDialogFragment {
|
public class SearchFilterDialogFragment extends BaseSearchFilterDialogFragment {
|
||||||
|
|
||||||
private SearchFilterDialogFragmentBinding binding;
|
protected SearchFilterDialogFragmentBinding binding;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected BaseSearchFilterUiGenerator createSearchFilterDialogGenerator() {
|
protected BaseSearchFilterUiGenerator createSearchFilterDialogGenerator() {
|
||||||
|
|
|
@ -29,7 +29,7 @@ import androidx.annotation.Nullable;
|
||||||
public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerator {
|
public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerator {
|
||||||
private static final int CHIP_GROUP_ELEMENTS_THRESHOLD = 2;
|
private static final int CHIP_GROUP_ELEMENTS_THRESHOLD = 2;
|
||||||
private static final int CHIP_MIN_TOUCH_TARGET_SIZE_DP = 40;
|
private static final int CHIP_MIN_TOUCH_TARGET_SIZE_DP = 40;
|
||||||
private final GridLayout globalLayout;
|
protected final GridLayout globalLayout;
|
||||||
|
|
||||||
public SearchFilterDialogGenerator(
|
public SearchFilterDialogGenerator(
|
||||||
@NonNull final SearchFilterLogic logic,
|
@NonNull final SearchFilterLogic logic,
|
||||||
|
@ -67,16 +67,7 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
|
|
||||||
final TextView filterLabel;
|
final TextView filterLabel;
|
||||||
if (filterGroup.getNameId() != null) {
|
if (filterGroup.getNameId() != null) {
|
||||||
filterLabel = new TextView(context);
|
filterLabel = createFilterLabel(filterGroup, layoutParams);
|
||||||
|
|
||||||
filterLabel.setId(filterGroup.getIdentifier());
|
|
||||||
filterLabel.setText(
|
|
||||||
ServiceHelper.getTranslatedFilterString(filterGroup.getNameId(), context));
|
|
||||||
filterLabel.setGravity(Gravity.CENTER_VERTICAL);
|
|
||||||
setDefaultMargin(layoutParams);
|
|
||||||
setZeroPadding(filterLabel);
|
|
||||||
|
|
||||||
filterLabel.setLayoutParams(layoutParams);
|
|
||||||
viewsWrapper.add(filterLabel);
|
viewsWrapper.add(filterLabel);
|
||||||
} else {
|
} else {
|
||||||
filterLabel = null;
|
filterLabel = null;
|
||||||
|
@ -113,13 +104,30 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
clipFreeRightColumnLayoutParams(doSpanDataOverMultipleCells));
|
clipFreeRightColumnLayoutParams(doSpanDataOverMultipleCells));
|
||||||
chipGroup.setSingleLine(false);
|
chipGroup.setSingleLine(false);
|
||||||
|
|
||||||
createUiElementsForMultipleSelectableItemsFilterGroup(
|
createUiChipElementsForFilterGroupItems(
|
||||||
filterGroup, wrapperDelegate, selectorDelegate, chipGroup);
|
filterGroup, wrapperDelegate, selectorDelegate, chipGroup);
|
||||||
}
|
}
|
||||||
|
|
||||||
wrapperDelegate.put(filterGroup.getIdentifier(), viewsWrapper);
|
wrapperDelegate.put(filterGroup.getIdentifier(), viewsWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
protected TextView createFilterLabel(@NonNull final FilterGroup filterGroup,
|
||||||
|
@NonNull final GridLayout.LayoutParams layoutParams) {
|
||||||
|
final TextView filterLabel;
|
||||||
|
filterLabel = new TextView(context);
|
||||||
|
|
||||||
|
filterLabel.setId(filterGroup.getIdentifier());
|
||||||
|
filterLabel.setText(
|
||||||
|
ServiceHelper.getTranslatedFilterString(filterGroup.getNameId(), context));
|
||||||
|
filterLabel.setGravity(Gravity.CENTER_VERTICAL);
|
||||||
|
setDefaultMargin(layoutParams);
|
||||||
|
setZeroPadding(filterLabel);
|
||||||
|
|
||||||
|
filterLabel.setLayoutParams(layoutParams);
|
||||||
|
return filterLabel;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean chooseParentViewForFilterLabelAndAdd(
|
private boolean chooseParentViewForFilterLabelAndAdd(
|
||||||
@NonNull final FilterGroup filterGroup,
|
@NonNull final FilterGroup filterGroup,
|
||||||
final boolean doSpanDataOverMultipleCells,
|
final boolean doSpanDataOverMultipleCells,
|
||||||
|
@ -169,29 +177,65 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
filterDataSpinner.setOnItemSelectedListener(listener);
|
filterDataSpinner.setOnItemSelectedListener(listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createUiElementsForMultipleSelectableItemsFilterGroup(
|
protected void createUiChipElementsForFilterGroupItems(
|
||||||
@NonNull final FilterGroup filterGroup,
|
@NonNull final FilterGroup filterGroup,
|
||||||
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
@NonNull final UiWrapperMapDelegate wrapperDelegate,
|
||||||
@NonNull final UiSelectorDelegate selectorDelegate,
|
@NonNull final UiSelectorDelegate selectorDelegate,
|
||||||
@NonNull final ChipGroup chipGroup) {
|
@NonNull final ChipGroup chipGroup) {
|
||||||
for (final FilterItem item : filterGroup.getFilterItems()) {
|
for (final FilterItem item : filterGroup.getFilterItems()) {
|
||||||
final Chip chip = (Chip) LayoutInflater.from(context).inflate(
|
|
||||||
R.layout.chip_search_filter, chipGroup, false);
|
|
||||||
chip.ensureAccessibleTouchTarget(
|
|
||||||
DeviceUtils.dpToPx(CHIP_MIN_TOUCH_TARGET_SIZE_DP, context));
|
|
||||||
chip.setText(ServiceHelper.getTranslatedFilterString(item.getNameId(), context));
|
|
||||||
chip.setId(item.getIdentifier());
|
|
||||||
chip.setCheckable(true);
|
|
||||||
final View.OnClickListener listener;
|
|
||||||
listener = view -> selectorDelegate.selectFilter(view.getId());
|
|
||||||
|
|
||||||
chip.setOnClickListener(listener);
|
if (item instanceof InjectFilterItem.DividerItem) {
|
||||||
chipGroup.addView(chip);
|
final InjectFilterItem.DividerItem dividerItem =
|
||||||
wrapperDelegate.put(item.getIdentifier(), new UiItemWrapperChip(
|
(InjectFilterItem.DividerItem) item;
|
||||||
item, chip, chipGroup));
|
|
||||||
|
final GridLayout.LayoutParams layoutParams = getLayoutParamsViews();
|
||||||
|
final TextView dividerLabel = createDividerLabel(dividerItem, layoutParams);
|
||||||
|
chipGroup.addView(dividerLabel);
|
||||||
|
} else {
|
||||||
|
final Chip chip = createChipView(chipGroup, item);
|
||||||
|
|
||||||
|
final View.OnClickListener listener;
|
||||||
|
listener = view -> selectorDelegate.selectFilter(view.getId());
|
||||||
|
chip.setOnClickListener(listener);
|
||||||
|
|
||||||
|
chipGroup.addView(chip);
|
||||||
|
wrapperDelegate.put(item.getIdentifier(),
|
||||||
|
new UiItemWrapperChip(item, chip, chipGroup));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private Chip createChipView(@NonNull final ChipGroup chipGroup,
|
||||||
|
@NonNull final FilterItem item) {
|
||||||
|
final Chip chip = (Chip) LayoutInflater.from(context).inflate(
|
||||||
|
R.layout.chip_search_filter, chipGroup, false);
|
||||||
|
chip.ensureAccessibleTouchTarget(
|
||||||
|
DeviceUtils.dpToPx(CHIP_MIN_TOUCH_TARGET_SIZE_DP, context));
|
||||||
|
chip.setText(ServiceHelper.getTranslatedFilterString(item.getNameId(), context));
|
||||||
|
chip.setId(item.getIdentifier());
|
||||||
|
chip.setCheckable(true);
|
||||||
|
return chip;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
private TextView createDividerLabel(
|
||||||
|
@NonNull final InjectFilterItem.DividerItem dividerItem,
|
||||||
|
@NonNull final GridLayout.LayoutParams layoutParams) {
|
||||||
|
final TextView dividerLabel;
|
||||||
|
dividerLabel = new TextView(context);
|
||||||
|
dividerLabel.setEnabled(true);
|
||||||
|
|
||||||
|
dividerLabel.setGravity(Gravity.CENTER_VERTICAL);
|
||||||
|
setDefaultMargin(layoutParams);
|
||||||
|
layoutParams.height = DeviceUtils.dpToPx(CHIP_MIN_TOUCH_TARGET_SIZE_DP, context);
|
||||||
|
dividerLabel.setLayoutParams(layoutParams);
|
||||||
|
final String menuDividerTitle =
|
||||||
|
context.getString(dividerItem.getStringResId()) + ":";
|
||||||
|
dividerLabel.setText(menuDividerTitle);
|
||||||
|
return dividerLabel;
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private View createSeparatorLine() {
|
private View createSeparatorLine() {
|
||||||
return createSeparatorLine(clipFreeRightColumnLayoutParams(true));
|
return createSeparatorLine(clipFreeRightColumnLayoutParams(true));
|
||||||
|
@ -221,7 +265,7 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private GridLayout.LayoutParams clipFreeRightColumnLayoutParams(final boolean doColumnSpan) {
|
protected 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
|
||||||
layoutParams.width = 0;
|
layoutParams.width = 0;
|
||||||
|
@ -245,8 +289,8 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private GridLayout.LayoutParams setDefaultMargin(
|
protected ViewGroup.MarginLayoutParams setDefaultMargin(
|
||||||
@NonNull final GridLayout.LayoutParams layoutParams) {
|
@NonNull final ViewGroup.MarginLayoutParams layoutParams) {
|
||||||
layoutParams.setMargins(
|
layoutParams.setMargins(
|
||||||
DeviceUtils.dpToPx(4, context),
|
DeviceUtils.dpToPx(4, context),
|
||||||
DeviceUtils.dpToPx(2, context),
|
DeviceUtils.dpToPx(2, context),
|
||||||
|
@ -257,7 +301,7 @@ public class SearchFilterDialogGenerator extends BaseSearchFilterUiDialogGenerat
|
||||||
}
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private View setZeroPadding(@NonNull final View view) {
|
protected View setZeroPadding(@NonNull final View view) {
|
||||||
view.setPadding(0, 0, 0, 0);
|
view.setPadding(0, 0, 0, 0);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue