OSDN Git Service

DO NOT MERGE. Grant MMS Uri permissions as the calling UID.
[android-x86/frameworks-base.git] / packages / SystemUI / src / com / android / systemui / qs / tiles / DataUsageDetailView.java
1 /*
2  * Copyright (C) 2014 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License
15  */
16
17 package com.android.systemui.qs.tiles;
18
19 import android.annotation.ColorInt;
20 import android.content.Context;
21 import android.content.res.Configuration;
22 import android.content.res.Resources;
23 import android.util.AttributeSet;
24 import android.view.View;
25 import android.widget.LinearLayout;
26 import android.widget.TextView;
27
28 import com.android.settingslib.Utils;
29 import com.android.settingslib.net.DataUsageController;
30 import com.android.systemui.FontSizeUtils;
31 import com.android.systemui.R;
32 import com.android.systemui.qs.DataUsageGraph;
33
34 import java.text.DecimalFormat;
35
36 /**
37  * Layout for the data usage detail in quick settings.
38  */
39 public class DataUsageDetailView extends LinearLayout {
40
41     private static final double KB = 1024;
42     private static final double MB = 1024 * KB;
43     private static final double GB = 1024 * MB;
44
45     private final DecimalFormat FORMAT = new DecimalFormat("#.##");
46
47     public DataUsageDetailView(Context context, AttributeSet attrs) {
48         super(context, attrs);
49     }
50
51     @Override
52     protected void onConfigurationChanged(Configuration newConfig) {
53         super.onConfigurationChanged(newConfig);
54         FontSizeUtils.updateFontSize(this, android.R.id.title, R.dimen.qs_data_usage_text_size);
55         FontSizeUtils.updateFontSize(this, R.id.usage_text, R.dimen.qs_data_usage_usage_text_size);
56         FontSizeUtils.updateFontSize(this, R.id.usage_carrier_text,
57                 R.dimen.qs_data_usage_text_size);
58         FontSizeUtils.updateFontSize(this, R.id.usage_info_top_text,
59                 R.dimen.qs_data_usage_text_size);
60         FontSizeUtils.updateFontSize(this, R.id.usage_period_text, R.dimen.qs_data_usage_text_size);
61         FontSizeUtils.updateFontSize(this, R.id.usage_info_bottom_text,
62                 R.dimen.qs_data_usage_text_size);
63     }
64
65     public void bind(DataUsageController.DataUsageInfo info) {
66         final Resources res = mContext.getResources();
67         final int titleId;
68         final long bytes;
69         @ColorInt int usageColor = 0;
70         final String top;
71         String bottom = null;
72         if (info.usageLevel < info.warningLevel || info.limitLevel <= 0) {
73             // under warning, or no limit
74             titleId = R.string.quick_settings_cellular_detail_data_usage;
75             bytes = info.usageLevel;
76             top = res.getString(R.string.quick_settings_cellular_detail_data_warning,
77                     formatBytes(info.warningLevel));
78         } else if (info.usageLevel <= info.limitLevel) {
79             // over warning, under limit
80             titleId = R.string.quick_settings_cellular_detail_remaining_data;
81             bytes = info.limitLevel - info.usageLevel;
82             top = res.getString(R.string.quick_settings_cellular_detail_data_used,
83                     formatBytes(info.usageLevel));
84             bottom = res.getString(R.string.quick_settings_cellular_detail_data_limit,
85                     formatBytes(info.limitLevel));
86         } else {
87             // over limit
88             titleId = R.string.quick_settings_cellular_detail_over_limit;
89             bytes = info.usageLevel - info.limitLevel;
90             top = res.getString(R.string.quick_settings_cellular_detail_data_used,
91                     formatBytes(info.usageLevel));
92             bottom = res.getString(R.string.quick_settings_cellular_detail_data_limit,
93                     formatBytes(info.limitLevel));
94             usageColor = mContext.getColor(R.color.system_warning_color);
95         }
96
97         if (usageColor == 0) {
98             usageColor = Utils.getColorAccent(mContext);
99         }
100
101         final TextView title = (TextView) findViewById(android.R.id.title);
102         title.setText(titleId);
103         final TextView usage = (TextView) findViewById(R.id.usage_text);
104         usage.setText(formatBytes(bytes));
105         usage.setTextColor(usageColor);
106         final DataUsageGraph graph = (DataUsageGraph) findViewById(R.id.usage_graph);
107         graph.setLevels(info.limitLevel, info.warningLevel, info.usageLevel);
108         final TextView carrier = (TextView) findViewById(R.id.usage_carrier_text);
109         carrier.setText(info.carrier);
110         final TextView period = (TextView) findViewById(R.id.usage_period_text);
111         period.setText(info.period);
112         final TextView infoTop = (TextView) findViewById(R.id.usage_info_top_text);
113         infoTop.setVisibility(top != null ? View.VISIBLE : View.GONE);
114         infoTop.setText(top);
115         final TextView infoBottom = (TextView) findViewById(R.id.usage_info_bottom_text);
116         infoBottom.setVisibility(bottom != null ? View.VISIBLE : View.GONE);
117         infoBottom.setText(bottom);
118     }
119
120     private String formatBytes(long bytes) {
121         final long b = Math.abs(bytes);
122         double val;
123         String suffix;
124         if (b > 100 * MB) {
125             val = b / GB;
126             suffix = "GB";
127         } else if (b > 100 * KB) {
128             val = b / MB;
129             suffix = "MB";
130         } else {
131             val = b / KB;
132             suffix = "KB";
133         }
134         return FORMAT.format(val * (bytes < 0 ? -1 : 1)) + " " + suffix;
135     }
136 }