summaryrefslogtreecommitdiffstats
path: root/packages/SettingsLib/BarChartPreference/src/com/android/settingslib/widget/BarChartInfo.java
blob: eeaf2737a2fd4b197a524d3082cb6cd40d7b514c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*
 * Copyright (C) 2019 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 com.android.settingslib.widget;

import android.view.View;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;

import java.util.ArrayList;
import java.util.List;

/**
 * BarChartInfo is responsible for storing information about {@link BarChartPreference}.
 */
public class BarChartInfo {
    @StringRes
    private final int mTitle;
    @StringRes
    private final int mDetails;
    @StringRes
    private final int mEmptyText;
    private final View.OnClickListener mDetailsOnClickListener;

    private BarViewInfo[] mBarViewInfos;

    /**
     * Gets the resource id for the title shown in {@link BarChartPreference}.
     *
     * @return the string resource id for title.
     */
    public int getTitle() {
        return mTitle;
    }

    /**
     * Gets the resource id for the details shown in {@link BarChartPreference}.
     *
     * @return the string resource id for details.
     */
    public int getDetails() {
        return mDetails;
    }

    /**
     * Gets the resource id for the empty text shown in {@link BarChartPreference} when there is no
     * any bar view in {@link BarChartPreference}.
     *
     * @return the string resource id for empty text.
     */
    public int getEmptyText() {
        return mEmptyText;
    }

    /**
     * Gets the click listener for the details view.
     *
     * @return click listener for details view.
     */
    public View.OnClickListener getDetailsOnClickListener() {
        return mDetailsOnClickListener;
    }

    /**
     * Gets an array which contains up to four {@link BarViewInfo}
     *
     * @return an array holding the current all {@link BarViewInfo} state of the bar chart.
     */
    public BarViewInfo[] getBarViewInfos() {
        return mBarViewInfos;
    }

    void setBarViewInfos(BarViewInfo[] barViewInfos) {
        mBarViewInfos = barViewInfos;
    }

    private BarChartInfo(Builder builder) {
        mTitle = builder.mTitle;
        mDetails = builder.mDetails;
        mEmptyText = builder.mEmptyText;
        mDetailsOnClickListener = builder.mDetailsOnClickListener;

        if (builder.mBarViewInfos != null) {
            mBarViewInfos = builder.mBarViewInfos.stream().toArray(BarViewInfo[]::new);
        }
    }

    /**
     * Builder class for {@link BarChartInfo}
     */
    public static class Builder {
        @StringRes
        private int mTitle;
        @StringRes
        private int mDetails;
        @StringRes
        private int mEmptyText;
        private View.OnClickListener mDetailsOnClickListener;
        private List<BarViewInfo> mBarViewInfos;

        /**
         * Creates an instance of a {@link BarChartInfo} based on the current builder settings.
         *
         * @return The {@link BarChartInfo}.
         */
        public BarChartInfo build() {
            if (mTitle == 0) {
                throw new IllegalStateException("You must call Builder#setTitle() once.");
            }
            return new BarChartInfo(this);
        }

        /**
         * Sets the string resource id for the title.
         */
        public Builder setTitle(@StringRes int title) {
            mTitle = title;
            return this;
        }

        /**
         * Sets the string resource id for the details.
         */
        public Builder setDetails(@StringRes int details) {
            mDetails = details;
            return this;
        }

        /**
         * Sets the string resource id for the empty text.
         */
        public Builder setEmptyText(@StringRes int emptyText) {
            mEmptyText = emptyText;
            return this;
        }

        /**
         * Sets the click listener for details view.
         */
        public Builder setDetailsOnClickListener(
                @Nullable View.OnClickListener clickListener) {
            mDetailsOnClickListener = clickListener;
            return this;
        }

        /**
         * Adds a {@link BarViewInfo} for {@link BarChartPreference}.
         * Maximum of 4 {@link BarViewInfo} can be added.
         */
        public Builder addBarViewInfo(@NonNull BarViewInfo barViewInfo) {
            if (mBarViewInfos == null) {
                mBarViewInfos = new ArrayList<>();
            }
            if (mBarViewInfos.size() >= BarChartPreference.MAXIMUM_BAR_VIEWS) {
                throw new IllegalStateException("We only support up to four bar views");
            }
            mBarViewInfos.add(barViewInfo);
            return this;
        }
    }
}