1171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan/*
2171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * Copyright (C) 2016 The Android Open Source Project
3171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan *
4171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * Licensed under the Apache License, Version 2.0 (the "License");
5171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * you may not use this file except in compliance with the License.
6171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * You may obtain a copy of the License at
7171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan *
8171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan *      http://www.apache.org/licenses/LICENSE-2.0
9171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan *
10171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * Unless required by applicable law or agreed to in writing, software
11171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * distributed under the License is distributed on an "AS IS" BASIS,
12171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * See the License for the specific language governing permissions and
14171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * limitations under the License.
15171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan */
16171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
17171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanpackage com.android.documentsui.sorting;
18171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
19171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanimport android.annotation.IntDef;
20171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanimport android.os.Parcel;
21171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanimport android.os.Parcelable;
22171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanimport android.support.annotation.StringRes;
23171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanimport android.view.View;
24171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
25171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanimport java.lang.annotation.Retention;
26171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanimport java.lang.annotation.RetentionPolicy;
27171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
28171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan/**
29171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan * A model class that describes a sort dimension and its sort state.
30171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan */
31171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tanpublic class SortDimension implements Parcelable {
32171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
33171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    /**
34171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan     * This enum is defined as flag because it's also used to denote whether a column can be sorted
35171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan     * in a certain direction.
36171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan     */
37171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @IntDef(flag = true, value = {
38171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SORT_DIRECTION_NONE,
39171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SORT_DIRECTION_ASCENDING,
40171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SORT_DIRECTION_DESCENDING
41171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    })
42171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @Retention(RetentionPolicy.SOURCE)
43171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @interface SortDirection {}
44171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static final int SORT_DIRECTION_NONE = 0;
45171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static final int SORT_DIRECTION_ASCENDING = 1;
46171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static final int SORT_DIRECTION_DESCENDING = 2;
47171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
48171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @IntDef({
49171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SORT_CAPABILITY_NONE,
50171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SORT_CAPABILITY_BOTH_DIRECTION
51171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    })
52171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @Retention(RetentionPolicy.SOURCE)
53171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @interface SortCapability {}
54171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static final int SORT_CAPABILITY_NONE = 0;
55171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static final int SORT_CAPABILITY_BOTH_DIRECTION =
56171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SORT_DIRECTION_ASCENDING | SORT_DIRECTION_DESCENDING;
57171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
58171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @IntDef({
59171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            DATA_TYPE_STRING,
60171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            DATA_TYPE_NUMBER
61171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    })
62171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @Retention(RetentionPolicy.SOURCE)
63171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @interface DataType {}
64171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static final int DATA_TYPE_STRING = 0;
65171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static final int DATA_TYPE_NUMBER = 1;
66171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
67171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    private final int mId;
68171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    private final @StringRes int mLabelId;
69171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    private final @DataType int mDataType;
70171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    private final @SortCapability int mSortCapability;
71171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    private final @SortDirection int mDefaultSortDirection;
72171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
73171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @SortDirection int mSortDirection = SORT_DIRECTION_NONE;
74171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    int mVisibility;
75171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
76171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    private SortDimension(int id, @StringRes int labelId, @DataType int dataType,
77171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            @SortCapability int sortCapability, @SortDirection int defaultSortDirection) {
78171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        mId = id;
79171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        mLabelId = labelId;
80171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        mDataType = dataType;
81171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        mSortCapability = sortCapability;
82171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        mDefaultSortDirection = defaultSortDirection;
83171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
84171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
85171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public int getId() {
86171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return mId;
87171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
88171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
89171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @StringRes int getLabelId() {
90171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return mLabelId;
91171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
92171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
93171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @DataType int getDataType() {
94171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return mDataType;
95171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
96171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
97171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @SortCapability int getSortCapability() {
98171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return mSortCapability;
99171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
100171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
101171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @SortDirection int getDefaultSortDirection() {
102171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return mDefaultSortDirection;
103171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
104171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
105171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @SortDirection int getNextDirection() {
106171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        @SortDimension.SortDirection int alternativeDirection =
107171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                (mDefaultSortDirection == SortDimension.SORT_DIRECTION_ASCENDING)
108171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                        ? SortDimension.SORT_DIRECTION_DESCENDING
109171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                        : SortDimension.SORT_DIRECTION_ASCENDING;
110171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        @SortDimension.SortDirection int direction =
111171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                (mSortDirection == mDefaultSortDirection)
112171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                        ? alternativeDirection
113171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                        : mDefaultSortDirection;
114171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
115171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return direction;
116171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
117171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
118171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public @SortDirection int getSortDirection() {
119171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return mSortDirection;
120171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
121171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
122171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public int getVisibility() {
123171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return mVisibility;
124171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
125171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
126171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @Override
12700ee050745f8c3558e7ee93d56abeb0a4ad82472Steve McKay    public int hashCode() {
12800ee050745f8c3558e7ee93d56abeb0a4ad82472Steve McKay        return mId;
12900ee050745f8c3558e7ee93d56abeb0a4ad82472Steve McKay    }
13000ee050745f8c3558e7ee93d56abeb0a4ad82472Steve McKay
13100ee050745f8c3558e7ee93d56abeb0a4ad82472Steve McKay    @Override
13211d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan    public boolean equals(Object o) {
13311d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan        if (o == null || !(o instanceof SortDimension)) {
13411d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan            return false;
13511d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan        }
13611d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan
13711d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan        if (this == o) {
13811d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan            return true;
13911d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan        }
14011d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan
14111d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan        SortDimension other = (SortDimension) o;
14211d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan
14311d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan        return mId == other.mId
14411d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                && mLabelId == other.mLabelId
14511d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                && mDataType == other.mDataType
14611d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                && mSortCapability == other.mSortCapability
14711d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                && mDefaultSortDirection == other.mDefaultSortDirection
14811d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                && mSortDirection == other.mSortDirection
14911d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                && mVisibility == other.mVisibility;
15011d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan    }
15111d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan
15211d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan    @Override
15311d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan    public String toString() {
15411d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan        return new StringBuilder().append("SortDimension{")
15511d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append("id=").append(mId)
15611d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append(", labelId=").append(mLabelId)
15711d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append(", dataType=").append(mDataType)
15811d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append(", sortCapability=").append(mSortCapability)
15911d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append(", defaultSortDirection=").append(mDefaultSortDirection)
16011d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append(", sortDirection=").append(mSortDirection)
16111d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append(", visibility=").append(mVisibility)
16211d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .append("}")
16311d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                .toString();
16411d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan    }
16511d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan
16611d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan    @Override
167171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public int describeContents() {
168171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        return 0;
169171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
170171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
171171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    @Override
172171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public void writeToParcel(Parcel out, int flag) {
173171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        out.writeInt(mId);
174171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        out.writeInt(mLabelId);
175171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        out.writeInt(mDataType);
176171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        out.writeInt(mSortCapability);
177171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        out.writeInt(mDefaultSortDirection);
178171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        out.writeInt(mSortDirection);
179171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        out.writeInt(mVisibility);
180171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
181171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
182171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    public static Parcelable.Creator<SortDimension> CREATOR =
183171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            new Parcelable.Creator<SortDimension>() {
184171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
185171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        @Override
186171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        public SortDimension createFromParcel(Parcel in) {
187171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            int id = in.readInt();
18811d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan            @StringRes int labelId = in.readInt();
189171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            @DataType  int dataType = in.readInt();
190171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            int sortCapability = in.readInt();
191171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            int defaultSortDirection = in.readInt();
192171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
193171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SortDimension column =
19411d23483bf28768c04c25e4056df648fa8301aefGarfield, Tan                    new SortDimension(id, labelId, dataType, sortCapability, defaultSortDirection);
195171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
196171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            column.mSortDirection = in.readInt();
197171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            column.mVisibility = in.readInt();
198171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
199171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return column;
200171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
201171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
202171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        @Override
203171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        public SortDimension[] newArray(int size) {
204171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return new SortDimension[size];
205171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
206171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    };
207171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
208171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    static class Builder {
209171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        private int mId;
210171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        private @StringRes int mLabelId;
211171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        private @DataType int mDataType = DATA_TYPE_STRING;
212171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        private @SortCapability int mSortCapability = SORT_CAPABILITY_BOTH_DIRECTION;
213171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        private @SortDirection int mDefaultSortDirection = SORT_DIRECTION_ASCENDING;
214171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        private int mVisibility = View.VISIBLE;
215171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
216171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        Builder withId(int id) {
217171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            mId = id;
218171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return this;
219171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
220171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
221171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        Builder withLabelId(@StringRes int labelId) {
222171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            mLabelId = labelId;
223171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return this;
224171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
225171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
226171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        Builder withDataType(@DataType int dataType) {
227171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            mDataType = dataType;
228171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return this;
229171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
230171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
231171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        Builder withSortCapability(@SortCapability int sortCapability) {
232171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            mSortCapability = sortCapability;
233171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return this;
234171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
235171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
236171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        Builder withVisibility(int visibility) {
237171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            mVisibility = visibility;
238171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return this;
239171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
240171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
241171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        Builder withDefaultSortDirection(@SortDirection int defaultSortDirection) {
242171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            mDefaultSortDirection = defaultSortDirection;
243171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return this;
244171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
245171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
246171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        SortDimension build() {
247171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            if (mLabelId == 0) {
248171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                throw new IllegalStateException("Must set labelId.");
249171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            }
250171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan
251171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            SortDimension dimension = new SortDimension(
252171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan                    mId, mLabelId, mDataType, mSortCapability, mDefaultSortDirection);
253171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            dimension.mVisibility = mVisibility;
254171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan            return dimension;
255171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan        }
256171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan    }
257171e6f53d114c3fe5ee69bc4e2bafb53daa4bda5Garfield, Tan}
258