GridReference.java
/*
* Copyright (C) 2022 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.constraintlayout.core.state.helpers;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.constraintlayout.core.state.HelperReference;
import androidx.constraintlayout.core.state.State;
import androidx.constraintlayout.core.utils.GridCore;
import androidx.constraintlayout.core.widgets.HelperWidget;
import java.util.ArrayList;
/**
* A HelperReference of a Grid Helper that helps enable Grid in Compose
*/
public class GridReference extends HelperReference {
private static final String SPANS_RESPECT_WIDGET_ORDER = "spansrespectwidgetorder";
private static final String SUB_GRID_BY_COL_ROW = "subgridbycolrow";
public GridReference(@NonNull State state, @NonNull State.Helper type) {
super(state, type);
if (type == State.Helper.ROW) {
this.mRowsSet = 1;
} else if (type == State.Helper.COLUMN) {
this.mColumnsSet = 1;
}
}
/**
* The Grid Object
*/
private GridCore mGrid;
/**
* padding left
*/
private int mPaddingLeft = 0;
/**
* padding right
*/
private int mPaddingRight = 0;
/**
* padding top
*/
private int mPaddingTop = 0;
/**
* padding bottom
*/
private int mPaddingBottom = 0;
/**
* The orientation of the widgets arrangement horizontally or vertically
*/
private int mOrientation;
/**
* Number of rows of the Grid
*/
private int mRowsSet;
/**
* Number of columns of the Grid
*/
private int mColumnsSet;
/**
* The horizontal gaps between widgets
*/
private float mHorizontalGaps;
/**
* The vertical gaps between widgets
*/
private float mVerticalGaps;
/**
* The weight of each widget in a row
*/
private String mRowWeights;
/**
* The weight of each widget in a column
*/
private String mColumnWeights;
/**
* Specify the spanned areas of widgets
*/
private String mSpans;
/**
* Specify the positions to be skipped in the Grid
*/
private String mSkips;
/**
* All the flags of a Grid
*/
private int[] mFlags;
/**
* get padding left
* @return padding left
*/
public int getPaddingLeft() {
return mPaddingLeft;
}
/**
* set padding left
* @param paddingLeft padding left to be set
*/
public void setPaddingLeft(int paddingLeft) {
mPaddingLeft = paddingLeft;
}
/**
* get padding right
* @return padding right
*/
public int getPaddingRight() {
return mPaddingRight;
}
/**
* set padding right
* @param paddingRight padding right to be set
*/
public void setPaddingRight(int paddingRight) {
mPaddingRight = paddingRight;
}
/**
* get padding top
* @return padding top
*/
public int getPaddingTop() {
return mPaddingTop;
}
/**
* set padding top
* @param paddingTop padding top to be set
*/
public void setPaddingTop(int paddingTop) {
mPaddingTop = paddingTop;
}
/**
* get padding bottom
* @return padding bottom
*/
public int getPaddingBottom() {
return mPaddingBottom;
}
/**
* set padding bottom
* @param paddingBottom padding bottom to be set
*/
public void setPaddingBottom(int paddingBottom) {
mPaddingBottom = paddingBottom;
}
/**
* Get all the flags of a Grid
* @return a String array containing all the flags
*/
@NonNull
public int[] getFlags() {
return mFlags;
}
/**
* Set flags of a Grid
* @param flags a String array containing all the flags
*/
public void setFlags(@NonNull int[] flags) {
mFlags = flags;
}
/**
* Set flags of a Grid
* @param flags a String containing all the flags
*/
public void setFlags(@NonNull String flags) {
if (flags.length() == 0) {
return;
}
String[] strArr = flags.split("\|");
ArrayList<Integer> flagList = new ArrayList<>();
for (String flag: strArr) {
switch (flag.toLowerCase()) {
case SUB_GRID_BY_COL_ROW:
flagList.add(0);
break;
case SPANS_RESPECT_WIDGET_ORDER:
flagList.add(1);
break;
}
}
int[] flagArr = new int[flagList.size()];
int i = 0;
for (int flag: flagList) {
flagArr[i++] = flag;
}
mFlags = flagArr;
}
/**
* Get the number of rows
* @return the number of rows
*/
public int getRowsSet() {
return mRowsSet;
}
/**
* Set the number of rows
* @param rowsSet the number of rows
*/
public void setRowsSet(int rowsSet) {
if (super.getType() == State.Helper.COLUMN) {
return;
}
mRowsSet = rowsSet;
}
/**
* Get the number of columns
* @return the number of columns
*/
public int getColumnsSet() {
return mColumnsSet;
}
/**
* Set the number of columns
* @param columnsSet the number of columns
*/
public void setColumnsSet(int columnsSet) {
if (super.getType() == State.Helper.ROW) {
return;
}
mColumnsSet = columnsSet;
}
/**
* Get the horizontal gaps
* @return the horizontal gaps
*/
public float getHorizontalGaps() {
return mHorizontalGaps;
}
/**
* Set the horizontal gaps
* @param horizontalGaps the horizontal gaps
*/
public void setHorizontalGaps(float horizontalGaps) {
mHorizontalGaps = horizontalGaps;
}
/**
* Get the vertical gaps
* @return the vertical gaps
*/
public float getVerticalGaps() {
return mVerticalGaps;
}
/**
* Set the vertical gaps
* @param verticalGaps the vertical gaps
*/
public void setVerticalGaps(float verticalGaps) {
mVerticalGaps = verticalGaps;
}
/**
* Get the row weights
* @return the row weights
*/
@Nullable
public String getRowWeights() {
return mRowWeights;
}
/**
* Set the row weights
* @param rowWeights the row weights
*/
public void setRowWeights(@NonNull String rowWeights) {
mRowWeights = rowWeights;
}
/**
* Get the column weights
* @return the column weights
*/
@Nullable
public String getColumnWeights() {
return mColumnWeights;
}
/**
* Set the column weights
* @param columnWeights the column weights
*/
public void setColumnWeights(@NonNull String columnWeights) {
mColumnWeights = columnWeights;
}
/**
* Get the spans
* @return the spans
*/
@Nullable
public String getSpans() {
return mSpans;
}
/**
* Set the spans
* @param spans the spans
*/
public void setSpans(@NonNull String spans) {
mSpans = spans;
}
/**
* Get the skips
* @return the skips
*/
@Nullable
public String getSkips() {
return mSkips;
}
/**
* Set the skips
* @param skips the skips
*/
public void setSkips(@NonNull String skips) {
mSkips = skips;
}
/**
* Get the helper widget (Grid)
* @return the helper widget (Grid)
*/
@Override
@NonNull
public HelperWidget getHelperWidget() {
if (mGrid == null) {
mGrid = new GridCore();
}
return mGrid;
}
/**
* Set the helper widget (Grid)
* @param widget the helper widget (Grid)
*/
@Override
public void setHelperWidget(@Nullable HelperWidget widget) {
if (widget instanceof GridCore) {
mGrid = (GridCore) widget;
} else {
mGrid = null;
}
}
/**
* Get the Orientation
* @return the Orientation
*/
public int getOrientation() {
return mOrientation;
}
/**
* Set the Orientation
* @param orientation the Orientation
*/
public void setOrientation(int orientation) {
mOrientation = orientation;
}
/**
* Apply all the attributes to the helper widget (Grid)
*/
@Override
public void apply() {
getHelperWidget();
mGrid.setOrientation(mOrientation);
if (mRowsSet != 0) {
mGrid.setRows(mRowsSet);
}
if (mColumnsSet != 0) {
mGrid.setColumns(mColumnsSet);
}
if (mHorizontalGaps != 0) {
mGrid.setHorizontalGaps(mHorizontalGaps);
}
if (mVerticalGaps != 0) {
mGrid.setVerticalGaps(mVerticalGaps);
}
if (mRowWeights != null && !mRowWeights.equals("")) {
mGrid.setRowWeights(mRowWeights);
}
if (mColumnWeights != null && !mColumnWeights.equals("")) {
mGrid.setColumnWeights(mColumnWeights);
}
if (mSpans != null && !mSpans.equals("")) {
mGrid.setSpans(mSpans);
}
if (mSkips != null && !mSkips.equals("")) {
mGrid.setSkips(mSkips);
}
if (mFlags != null && mFlags.length > 0) {
mGrid.setFlags(mFlags);
}
// General attributes of a widget
applyBase();
}
}