[android] Extracted all util filter methods into separate FilterUtils class

This commit is contained in:
Александр Зацепин 2018-04-02 13:16:28 +03:00 committed by Arsentiy Milchakov
parent d638f81e1e
commit 4c4e02da8c
2 changed files with 127 additions and 100 deletions

View file

@ -33,10 +33,15 @@ import com.mapswithme.util.statistics.Statistics;
import java.text.DateFormat;
import java.util.Calendar;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import static com.mapswithme.maps.search.FilterUtils.combineFilters;
import static com.mapswithme.maps.search.FilterUtils.findPriceFilter;
import static com.mapswithme.maps.search.FilterUtils.findRatingFilter;
import static com.mapswithme.maps.search.FilterUtils.findTypeFilter;
import static com.mapswithme.maps.search.FilterUtils.makeOneOf;
public class FilterFragment extends BaseMwmToolbarFragment
implements HotelsTypeAdapter.OnTypeSelectedListener
{
@ -336,35 +341,6 @@ public class FilterFragment extends BaseMwmToolbarFragment
return combineFilters(rating, price, oneOf);
}
@Nullable
private HotelsFilter.OneOf makeOneOf(@NonNull Iterator<HotelsFilter.HotelType> iterator)
{
if (!iterator.hasNext())
return null;
HotelsFilter.HotelType type = iterator.next();
return new HotelsFilter.OneOf(type, makeOneOf(iterator));
}
@Nullable
private HotelsFilter combineFilters(@NonNull HotelsFilter... filters)
{
HotelsFilter result = null;
for (HotelsFilter filter : filters)
{
if (result == null)
{
result = filter;
continue;
}
if (filter != null)
result = new HotelsFilter.And(filter, result);
}
return result;
}
private void updateViews(@Nullable HotelsFilter filter, @Nullable BookingFilterParams params)
{
if (filter == null)
@ -408,76 +384,6 @@ public class FilterFragment extends BaseMwmToolbarFragment
}
}
@Nullable
private HotelsFilter.RatingFilter findRatingFilter(@NonNull HotelsFilter filter)
{
if (filter instanceof HotelsFilter.RatingFilter)
return (HotelsFilter.RatingFilter) filter;
HotelsFilter.RatingFilter result;
if (filter instanceof HotelsFilter.And)
{
HotelsFilter.And and = (HotelsFilter.And) filter;
result = findRatingFilter(and.mLhs);
if (result == null)
result = findRatingFilter(and.mRhs);
return result;
}
return null;
}
@Nullable
private HotelsFilter findPriceFilter(@NonNull HotelsFilter filter)
{
if (filter instanceof HotelsFilter.PriceRateFilter)
return filter;
if (filter instanceof HotelsFilter.Or)
{
HotelsFilter.Or or = (HotelsFilter.Or) filter;
if (or.mLhs instanceof HotelsFilter.PriceRateFilter
&& or.mRhs instanceof HotelsFilter.PriceRateFilter )
{
return filter;
}
}
HotelsFilter result;
if (filter instanceof HotelsFilter.And)
{
HotelsFilter.And and = (HotelsFilter.And) filter;
result = findPriceFilter(and.mLhs);
if (result == null)
result = findPriceFilter(and.mRhs);
return result;
}
return null;
}
@Nullable
private HotelsFilter.OneOf findTypeFilter(@NonNull HotelsFilter filter)
{
if (filter instanceof HotelsFilter.OneOf)
return (HotelsFilter.OneOf) filter;
HotelsFilter.OneOf result;
if (filter instanceof HotelsFilter.And)
{
HotelsFilter.And and = (HotelsFilter.And) filter;
result = findTypeFilter(and.mLhs);
if (result == null)
result = findTypeFilter(and.mRhs);
return result;
}
return null;
}
private void updateTypeAdapter(@NonNull HotelsTypeAdapter typeAdapter,
@Nullable HotelsFilter.OneOf types)
{

View file

@ -0,0 +1,121 @@
package com.mapswithme.maps.search;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import java.util.Iterator;
public class FilterUtils
{
private FilterUtils()
{
}
@Nullable
static HotelsFilter.OneOf makeOneOf(@NonNull Iterator<HotelsFilter.HotelType> iterator)
{
if (!iterator.hasNext())
return null;
HotelsFilter.HotelType type = iterator.next();
return new HotelsFilter.OneOf(type, makeOneOf(iterator));
}
@Nullable
static HotelsFilter combineFilters(@NonNull HotelsFilter... filters)
{
HotelsFilter result = null;
for (HotelsFilter filter : filters)
{
if (result == null)
{
result = filter;
continue;
}
if (filter != null)
result = new HotelsFilter.And(filter, result);
}
return result;
}
@Nullable
static HotelsFilter findPriceFilter(@NonNull HotelsFilter filter)
{
if (filter instanceof HotelsFilter.PriceRateFilter)
return filter;
if (filter instanceof HotelsFilter.Or)
{
HotelsFilter.Or or = (HotelsFilter.Or) filter;
if (or.mLhs instanceof HotelsFilter.PriceRateFilter
&& or.mRhs instanceof HotelsFilter.PriceRateFilter )
{
return filter;
}
}
HotelsFilter result;
if (filter instanceof HotelsFilter.And)
{
HotelsFilter.And and = (HotelsFilter.And) filter;
result = findPriceFilter(and.mLhs);
if (result == null)
result = findPriceFilter(and.mRhs);
return result;
}
return null;
}
@Nullable
static HotelsFilter.OneOf findTypeFilter(@NonNull HotelsFilter filter)
{
if (filter instanceof HotelsFilter.OneOf)
return (HotelsFilter.OneOf) filter;
HotelsFilter.OneOf result;
if (filter instanceof HotelsFilter.And)
{
HotelsFilter.And and = (HotelsFilter.And) filter;
result = findTypeFilter(and.mLhs);
if (result == null)
result = findTypeFilter(and.mRhs);
return result;
}
return null;
}
@Nullable
static HotelsFilter.RatingFilter findRatingFilter(@NonNull HotelsFilter filter)
{
if (filter instanceof HotelsFilter.RatingFilter)
return (HotelsFilter.RatingFilter) filter;
HotelsFilter.RatingFilter result;
if (filter instanceof HotelsFilter.And)
{
HotelsFilter.And and = (HotelsFilter.And) filter;
result = findRatingFilter(and.mLhs);
if (result == null)
result = findRatingFilter(and.mRhs);
return result;
}
return null;
}
@Nullable
static HotelsFilter createHotelFilter(int rating, int priceRate,
@Nullable HotelsFilter.HotelType type)
{
//TODO: implement it.
return null;
}
}