2929public 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