2 * Copyright (C) 2014 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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
17 package com.android.systemui.qs.tiles;
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;
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;
34 import java.text.DecimalFormat;
37 * Layout for the data usage detail in quick settings.
39 public class DataUsageDetailView extends LinearLayout {
41 private static final double KB = 1024;
42 private static final double MB = 1024 * KB;
43 private static final double GB = 1024 * MB;
45 private final DecimalFormat FORMAT = new DecimalFormat("#.##");
47 public DataUsageDetailView(Context context, AttributeSet attrs) {
48 super(context, attrs);
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);
65 public void bind(DataUsageController.DataUsageInfo info) {
66 final Resources res = mContext.getResources();
69 @ColorInt int usageColor = 0;
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));
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);
97 if (usageColor == 0) {
98 usageColor = Utils.getColorAccent(mContext);
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);
120 private String formatBytes(long bytes) {
121 final long b = Math.abs(bytes);
127 } else if (b > 100 * KB) {
134 return FORMAT.format(val * (bytes < 0 ? -1 : 1)) + " " + suffix;