1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5  * except in compliance with the License. You may obtain a copy of the License at
6  *
7  *      http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the
10  * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11  * KIND, either express or implied. See the License for the specific language governing
12  * permissions and limitations under the License.
13  */
14 
15 package com.android.settings;
16 
17 import android.content.Context;
18 import android.text.TextUtils;
19 import android.util.AttributeSet;
20 import android.view.View;
21 import android.widget.ProgressBar;
22 import android.widget.TextView;
23 
24 import androidx.preference.Preference;
25 import androidx.preference.PreferenceViewHolder;
26 
27 /**
28  * Provides a summary of a setting page in a preference.  Such as memory or data usage.
29  */
30 public class SummaryPreference extends Preference {
31 
32     private static final String TAG = "SummaryPreference";
33     private String mAmount;
34     private String mUnits;
35 
36     private boolean mChartEnabled = true;
37     private float mLeftRatio, mMiddleRatio, mRightRatio;
38     private String mStartLabel;
39     private String mEndLabel;
40 
SummaryPreference(Context context, AttributeSet attrs)41     public SummaryPreference(Context context, AttributeSet attrs) {
42         super(context, attrs);
43         setLayoutResource(R.layout.settings_summary_preference);
44     }
45 
setChartEnabled(boolean enabled)46     public void setChartEnabled(boolean enabled) {
47         if (mChartEnabled != enabled) {
48             mChartEnabled = enabled;
49             notifyChanged();
50         }
51     }
52 
setAmount(String amount)53     public void setAmount(String amount) {
54         mAmount = amount;
55         if (mAmount != null && mUnits != null) {
56             setTitle(TextUtils.expandTemplate(getContext().getText(R.string.storage_size_large),
57                     mAmount, mUnits));
58         }
59     }
60 
setUnits(String units)61     public void setUnits(String units) {
62         mUnits = units;
63         if (mAmount != null && mUnits != null) {
64             setTitle(TextUtils.expandTemplate(getContext().getText(R.string.storage_size_large),
65                     mAmount, mUnits));
66         }
67     }
68 
setLabels(String start, String end)69     public void setLabels(String start, String end) {
70         mStartLabel = start;
71         mEndLabel = end;
72         notifyChanged();
73     }
74 
setRatios(float left, float middle, float right)75     public void setRatios(float left, float middle, float right) {
76         mLeftRatio = left;
77         mMiddleRatio = middle;
78         mRightRatio = right;
79         notifyChanged();
80     }
81 
82     @Override
onBindViewHolder(PreferenceViewHolder holder)83     public void onBindViewHolder(PreferenceViewHolder holder) {
84         super.onBindViewHolder(holder);
85 
86         final ProgressBar colorBar = holder.itemView.findViewById(R.id.color_bar);
87 
88         if (mChartEnabled) {
89             colorBar.setVisibility(View.VISIBLE);
90             int progress = (int) (mLeftRatio * 100);
91             colorBar.setProgress(progress);
92             colorBar.setSecondaryProgress(progress + (int) (mMiddleRatio * 100));
93         } else {
94             colorBar.setVisibility(View.GONE);
95         }
96 
97         if (mChartEnabled && (!TextUtils.isEmpty(mStartLabel) || !TextUtils.isEmpty(mEndLabel))) {
98             holder.findViewById(R.id.label_bar).setVisibility(View.VISIBLE);
99             ((TextView) holder.findViewById(android.R.id.text1)).setText(mStartLabel);
100             ((TextView) holder.findViewById(android.R.id.text2)).setText(mEndLabel);
101         } else {
102             holder.findViewById(R.id.label_bar).setVisibility(View.GONE);
103         }
104     }
105 }
106