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.IAnchorFactory;
import com.beloo.widget.chipslayoutmanager.anchor.RowsAnchorFactory;
import com.beloo.widget.chipslayoutmanager.gravity.RowGravityModifiersFactory;
import com.beloo.widget.chipslayoutmanager.layouter.breaker.DecoratorBreakerFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.AbstractCriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.ICriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.InfiniteCriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.criteria.RowsCriteriaFactory;
import com.beloo.widget.chipslayoutmanager.layouter.placer.IPlacerFactory;
import com.beloo.widget.chipslayoutmanager.util.StateHelper;
public class RowsStateFactory implements IStateFactory {
private ChipsLayoutManager lm;
public RowsStateFactory(ChipsLayoutManager lm) {
this.lm = lm;
}
private IOrientationStateFactory createOrientationStateFactory() {
return lm.isLayoutRTL() ? new RTLRowsOrientationStateFactory() : new LTRRowsOrientationStateFactory();
}
@Override
public LayouterFactory createLayouterFactory(ICriteriaFactory criteriaFactory, IPlacerFactory placerFactory) {
IOrientationStateFactory orientationStateFactory = createOrientationStateFactory();
return new LayouterFactory(lm,
orientationStateFactory.createLayouterCreator(lm),
new DecoratorBreakerFactory(
lm.getViewPositionsStorage(),
lm.getRowBreaker(),
lm.getMaxViewsInRow(),
orientationStateFactory.createDefaultBreaker()),
criteriaFactory,
placerFactory,
new RowGravityModifiersFactory(),
orientationStateFactory.createRowStrategyFactory().createRowStrategy(lm.getRowStrategyType()));
}
@Override
public AbstractCriteriaFactory createDefaultFinishingCriteriaFactory() {
return StateHelper.isInfinite(this)? new InfiniteCriteriaFactory() : new RowsCriteriaFactory();
}
@Override
public IAnchorFactory anchorFactory() {
return new RowsAnchorFactory(lm, lm.getCanvas());
}
@Override
public IScrollingController scrollingController() {
return lm.verticalScrollingController();
}
@Override
public ICanvas createCanvas() {
return new RowSquare(lm);
}
@Override
public int getSizeMode() {
return lm.getHeightMode();
}
@Override
public int getStart() {
return 0;
}
@Override
public int getStart(View view) {
return lm.getDecoratedTop(view);
}
@Override
public int getStart(AnchorViewState anchor) {
return anchor.getAnchorViewRect().top;
}
@Override
public int getEnd() {
return lm.getHeight();
}
@Override
public int getEnd(View view) {
return lm.getDecoratedBottom(view);
}
@Override
public int getEnd(AnchorViewState anchor) {
return anchor.getAnchorViewRect().bottom;
}
@Override
public int getEndViewPosition() {
return lm.getPosition(lm.getCanvas().getRightView());
}
@Override
public int getStartAfterPadding() {
return lm.getPaddingTop();
}
@Override
public int getStartViewPosition() {
return lm.getPosition(lm.getCanvas().getLeftView());
}
@Override
public int getEndAfterPadding() {
return lm.getHeight() - lm.getPaddingBottom();
}
@Override
public int getStartViewBound() {
return getStart(lm.getCanvas().getTopView());
}
@Override
public int getEndViewBound() {
return getEnd(lm.getCanvas().getBottomView());
}
@Override
public int getTotalSpace() {
return lm.getHeight() - lm.getPaddingTop()
- lm.getPaddingBottom();
}
}