Clamp large data usage values.

Without clamping, they can wrap around to negative values and cause
all sorts of havok.  1TB ought to be enough for anyone: that's 3Mbps
for a solid month.

Bug: 24555152
Change-Id: If92c87f9920c3f05cd3ff2cc6630b1bbb65335b8
This commit is contained in:
Jeff Sharkey
2015-10-19 16:41:53 -07:00
parent cdcba9ce5f
commit 3105ea30d4

View File

@@ -22,6 +22,7 @@ import android.content.Context;
import android.content.res.Resources; import android.content.res.Resources;
import android.net.NetworkPolicy; import android.net.NetworkPolicy;
import android.net.NetworkStatsHistory; import android.net.NetworkStatsHistory;
import android.net.TrafficStats;
import android.os.Handler; import android.os.Handler;
import android.os.Message; import android.os.Message;
import android.text.Spannable; import android.text.Spannable;
@@ -33,6 +34,7 @@ import android.text.format.Formatter.BytesResult;
import android.text.format.Time; import android.text.format.Time;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.util.MathUtils;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
@@ -535,6 +537,7 @@ public class ChartDataUsageView extends ChartView {
@Override @Override
public long buildLabel(Resources res, SpannableStringBuilder builder, long value) { public long buildLabel(Resources res, SpannableStringBuilder builder, long value) {
value = MathUtils.constrain(value, 0, TrafficStats.TB_IN_BYTES);
final BytesResult result = Formatter.formatBytes(res, value, final BytesResult result = Formatter.formatBytes(res, value,
Formatter.FLAG_SHORTER | Formatter.FLAG_CALCULATE_ROUNDED); Formatter.FLAG_SHORTER | Formatter.FLAG_CALCULATE_ROUNDED);
setText(builder, sSpanSize, result.value, "^1"); setText(builder, sSpanSize, result.value, "^1");