package com.beloo.widget.chipslayoutmanager.layouter.breaker;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
public class DecoratorBreakerFactory implements IBreakerFactory {
private IBreakerFactory breakerFactory;
private IViewCacheStorage cacheStorage;
private IRowBreaker rowBreaker;
/** Max items in row restriction. Layout of row should be stopped when this count of views reached*/
@Nullable
private Integer maxViewsInRow;
public DecoratorBreakerFactory(@NonNull IViewCacheStorage cacheStorage,
@NonNull IRowBreaker rowBreaker,
@Nullable Integer maxViewsInRow,
@NonNull IBreakerFactory breakerFactory) {
this.cacheStorage = cacheStorage;
this.rowBreaker = rowBreaker;
this.maxViewsInRow = maxViewsInRow;
this.breakerFactory = breakerFactory;
}
@Override
public ILayoutRowBreaker createBackwardRowBreaker() {
ILayoutRowBreaker breaker = breakerFactory.createBackwardRowBreaker();
breaker = new BackwardBreakerContract(rowBreaker, new CacheRowBreaker(cacheStorage, breaker));
if (maxViewsInRow != null) {
breaker = new MaxViewsBreaker(maxViewsInRow, breaker);
}
return breaker;
}
@Override
public ILayoutRowBreaker createForwardRowBreaker() {
ILayoutRowBreaker breaker = breakerFactory.createForwardRowBreaker();
breaker = new ForwardBreakerContract(rowBreaker, breaker);
if (maxViewsInRow != null) {
breaker = new MaxViewsBreaker(maxViewsInRow, breaker);
}
return breaker;
}
}