package com.beloo.widget.chipslayoutmanager.layouter;
import android.view.View;
import com.beloo.widget.chipslayoutmanager.ChipsLayoutManager;
import com.beloo.widget.chipslayoutmanager.IScrollingController;
import com.beloo.widget.chipslayoutmanager.anchor.AnchorViewState;
import com.beloo.widget.chipslayoutmanager.anchor.ColumnsAnchorFactory;
import com.beloo.widget.chipslayoutmanager.anchor.IAnchorFactory;
import com.beloo.widget.chipslayoutmanager.cache.IViewCacheStorage;
import com.beloo.widget.chipslayoutmanager.gravity.ColumnGravityModifiersFactory;
import com.beloo.widget.chipslayoutmanager.gravity.ColumnStrategyFactory;
import com.beloo.widget.chipslayoutmanager.gravity.IRowStrategyFactory;
import com.beloo.widget.chipslayoutmanager.layouter.breaker.DecoratorBreakerFactory;
import com.beloo.widget.chipslayoutmanager.layouter.breaker.ColumnBreakerFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.AbstractCriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.ColumnsCriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.InfiniteCriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
import com.beloo.widget.chipslayoutmanager.util.StateHelper;
public class ColumnsStateFactory implements IStateFactory {
private ChipsLayoutManager lm;
private IRowStrategyFactory rowStrategyFactory;
public ColumnsStateFactory(ChipsLayoutManager lm) {
this.lm = lm;
rowStrategyFactory = new ColumnStrategyFactory();
}
@Override
public LayouterFactory createLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory) {
IViewCacheStorage cacheStorage = lm.getViewPositionsStorage();
return createColumnLayouterFactory(criteriaFactory, placerFactory, cacheStorage);
}
private LayouterFactory createColumnLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory, IViewCacheStorage cacheStorage) {
return new LayouterFactory(lm,
new ColumnsCreator(lm),
new DecoratorBreakerFactory(cacheStorage, lm.getRowBreaker(), lm.getMaxViewsInRow(), new ColumnBreakerFactory()),
criteriaFactory,
placerFactory,
new ColumnGravityModifiersFactory(),
rowStrategyFactory.createRowStrategy(lm.getRowStrategyType()));
}
@Override
public AbstractCriteriaFactory createDefaultFinishingCriteriaFactory() {
return StateHelper.isInfinite(this)? new InfiniteCriteriaFactory() : new ColumnsCriteriaFactory();
}
@Override
public IAnchorFactory anchorFactory() {
return new ColumnsAnchorFactory(lm, lm.getCanvas());
}
@Override
public IScrollingController scrollingController() {
return lm.horizontalScrollingController();
}
@Override
public ICanvas createCanvas() {
return new ColumnSquare(lm);
}
@Override
public int getSizeMode() {
return lm.getWidthMode();
}
@Override
public int getStart() {
return 0;
}
@Override
public int getStart(View view) {
return lm.getDecoratedLeft(view);
}
@Override
public int getStart(AnchorViewState anchor) {
return anchor.getAnchorViewRect().left;
}
@Override
public int getEnd() {
return lm.getWidth();
}
@Override
public int getEnd(View view) {
return lm.getDecoratedRight(view);
}
@Override
public int getEnd(AnchorViewState anchor) {
return anchor.getAnchorViewRect().right;
}
@Override
public int getEndViewPosition() {
return lm.getPosition(lm.getCanvas().getBottomView());
}
@Override
public int getStartAfterPadding() {
return lm.getPaddingLeft();
}
@Override
public int getStartViewPosition() {
return lm.getPosition(lm.getCanvas().getTopView());
}
@Override
public int getEndAfterPadding() {
return lm.getWidth() - lm.getPaddingRight();
}
@Override
public int getStartViewBound() {
return getStart(lm.getCanvas().getLeftView());
}
@Override
public int getEndViewBound() {
return getEnd(lm.getCanvas().getRightView());
}
@Override
public int getTotalSpace() {
return lm.getWidth() - lm.getPaddingLeft()
- lm.getPaddingRight();
}
}