Linear bytes scale, time ticks on first week day.
Move bytes to linear instead of logarithmic scale. Also render time ticks on first week day based on locale. Also enable testing of specific IMSI through setprop. Bug: 5452612, 5829693 Change-Id: I13200cf58a39bfe0ac343e1f83165e899867641b
This commit is contained in:
@@ -151,7 +151,9 @@ public class DataUsageSummary extends Fragment {
|
||||
// TODO: remove this testing code
|
||||
private static final boolean TEST_ANIM = false;
|
||||
private static final boolean TEST_RADIOS = false;
|
||||
|
||||
private static final String TEST_RADIOS_PROP = "test.radios";
|
||||
private static final String TEST_SUBSCRIBER_PROP = "test.subscriberid";
|
||||
|
||||
private static final String TAB_3G = "3g";
|
||||
private static final String TAB_4G = "4g";
|
||||
@@ -1217,7 +1219,8 @@ public class DataUsageSummary extends Fragment {
|
||||
private static String getActiveSubscriberId(Context context) {
|
||||
final TelephonyManager telephony = (TelephonyManager) context.getSystemService(
|
||||
Context.TELEPHONY_SERVICE);
|
||||
return telephony.getSubscriberId();
|
||||
final String actualSubscriberId = telephony.getSubscriberId();
|
||||
return SystemProperties.get(TEST_SUBSCRIBER_PROP, actualSubscriberId);
|
||||
}
|
||||
|
||||
private DataUsageChartListener mChartListener = new DataUsageChartListener() {
|
||||
|
@@ -29,6 +29,7 @@ import android.text.Spannable;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.TextUtils;
|
||||
import android.text.format.DateUtils;
|
||||
import android.text.format.Time;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
@@ -37,6 +38,9 @@ import com.android.internal.util.Objects;
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.widget.ChartSweepView.OnSweepListener;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
|
||||
/**
|
||||
* Specific {@link ChartView} that displays {@link ChartNetworkSeriesView} along
|
||||
* with {@link ChartSweepView} for inspection ranges and warning/limits.
|
||||
@@ -449,7 +453,7 @@ public class ChartDataUsageView extends ChartView {
|
||||
}
|
||||
|
||||
public static class TimeAxis implements ChartAxis {
|
||||
private static final long TICK_INTERVAL = DateUtils.DAY_IN_MILLIS * 7;
|
||||
private static final int FIRST_DAY_OF_WEEK = Calendar.getInstance().getFirstDayOfWeek() - 1;
|
||||
|
||||
private long mMin;
|
||||
private long mMax;
|
||||
@@ -505,13 +509,27 @@ public class ChartDataUsageView extends ChartView {
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public float[] getTickPoints() {
|
||||
// tick mark for every week
|
||||
final int tickCount = (int) ((mMax - mMin) / TICK_INTERVAL);
|
||||
final float[] tickPoints = new float[tickCount];
|
||||
for (int i = 0; i < tickCount; i++) {
|
||||
tickPoints[i] = convertToPoint(mMax - (TICK_INTERVAL * (i + 1)));
|
||||
final float[] ticks = new float[32];
|
||||
int i = 0;
|
||||
|
||||
// tick mark for first day of each week
|
||||
final Time time = new Time();
|
||||
time.set(mMax);
|
||||
time.monthDay -= time.weekDay - FIRST_DAY_OF_WEEK;
|
||||
time.hour = time.minute = time.second = 0;
|
||||
|
||||
time.normalize(true);
|
||||
long timeMillis = time.toMillis(true);
|
||||
while (timeMillis > mMin) {
|
||||
if (timeMillis <= mMax) {
|
||||
ticks[i++] = convertToPoint(timeMillis);
|
||||
}
|
||||
return tickPoints;
|
||||
time.monthDay -= 7;
|
||||
time.normalize(true);
|
||||
timeMillis = time.toMillis(true);
|
||||
}
|
||||
|
||||
return Arrays.copyOf(ticks, i);
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
@@ -526,6 +544,8 @@ public class ChartDataUsageView extends ChartView {
|
||||
private long mMax;
|
||||
private float mSize;
|
||||
|
||||
private static final boolean LOG_SCALE = false;
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(mMin, mMax, mSize);
|
||||
@@ -554,19 +574,27 @@ public class ChartDataUsageView extends ChartView {
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public float convertToPoint(long value) {
|
||||
if (LOG_SCALE) {
|
||||
// derived polynomial fit to make lower values more visible
|
||||
final double normalized = ((double) value - mMin) / (mMax - mMin);
|
||||
final double fraction = Math.pow(
|
||||
10, 0.36884343106175121463 * Math.log10(normalized) + -0.04328199452018252624);
|
||||
final double fraction = Math.pow(10,
|
||||
0.36884343106175121463 * Math.log10(normalized) + -0.04328199452018252624);
|
||||
return (float) (fraction * mSize);
|
||||
} else {
|
||||
return (mSize * (value - mMin)) / (mMax - mMin);
|
||||
}
|
||||
}
|
||||
|
||||
/** {@inheritDoc} */
|
||||
public long convertToValue(float point) {
|
||||
if (LOG_SCALE) {
|
||||
final double normalized = point / mSize;
|
||||
final double fraction = 1.3102228476089056629
|
||||
* Math.pow(normalized, 2.7111774693164631640);
|
||||
return (long) (mMin + (fraction * (mMax - mMin)));
|
||||
} else {
|
||||
return (long) (mMin + ((point * (mMax - mMin)) / mSize));
|
||||
}
|
||||
}
|
||||
|
||||
private static final Object sSpanSize = new Object();
|
||||
|
Reference in New Issue
Block a user