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();
|
}
|
}
|