diff --git a/res/layout/battery_history_chart.xml b/res/layout/battery_history_chart.xml
deleted file mode 100644
index c0c37f12951..00000000000
--- a/res/layout/battery_history_chart.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 7bdbe6dab14..b77c5442f7e 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -15,35 +15,6 @@
-->
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 234172827ba..024d212b9e0 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -33,8 +33,6 @@
16dip
8dip
- 120dp
-
228dip
440dip
36sp
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java b/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
deleted file mode 100644
index e442a071bd1..00000000000
--- a/src/com/android/settings/fuelgauge/BatteryHistoryChart.java
+++ /dev/null
@@ -1,1366 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import android.content.Context;
-import android.content.Intent;
-import android.content.res.ColorStateList;
-import android.content.res.TypedArray;
-import android.graphics.Bitmap;
-import android.graphics.Canvas;
-import android.graphics.DashPathEffect;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.Typeface;
-import android.os.BatteryStats;
-import android.os.BatteryStats.HistoryItem;
-import android.os.SystemClock;
-import android.telephony.ServiceState;
-import android.text.TextPaint;
-import android.text.format.DateFormat;
-import android.text.format.Formatter;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.TimeUtils;
-import android.util.TypedValue;
-import android.view.View;
-
-import com.android.settings.R;
-import com.android.settings.Utils;
-
-import libcore.icu.LocaleData;
-
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Locale;
-
-public class BatteryHistoryChart extends View {
- static final boolean DEBUG = false;
- static final String TAG = "BatteryHistoryChart";
-
- static final int CHART_DATA_X_MASK = 0x0000ffff;
- static final int CHART_DATA_BIN_MASK = 0xffff0000;
- static final int CHART_DATA_BIN_SHIFT = 16;
-
- static class ChartData {
- int[] mColors;
- Paint[] mPaints;
-
- int mNumTicks;
- int[] mTicks;
- int mLastBin;
-
- void setColors(int[] colors) {
- mColors = colors;
- mPaints = new Paint[colors.length];
- for (int i=0; i 0) {
- mTicks = new int[width*2];
- } else {
- mTicks = null;
- }
- mNumTicks = 0;
- mLastBin = 0;
- }
-
- void addTick(int x, int bin) {
- if (bin != mLastBin && mNumTicks < mTicks.length) {
- mTicks[mNumTicks] = (x&CHART_DATA_X_MASK) | (bin<> CHART_DATA_BIN_SHIFT;
- if (lastBin != 0) {
- canvas.drawRect(lastX, top, x, bottom, mPaints[lastBin]);
- }
- lastBin = bin;
- lastX = x;
- }
-
- }
- }
-
- static final int SANS = 1;
- static final int SERIF = 2;
- static final int MONOSPACE = 3;
-
- // First value if for phone off; first value is "scanning"; following values
- // are battery stats signal strength buckets.
- static final int NUM_PHONE_SIGNALS = 7;
-
- final Paint mBatteryBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- final Paint mBatteryGoodPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- final Paint mBatteryWarnPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- final Paint mBatteryCriticalPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- final Paint mTimeRemainPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
- final Paint mChargingPaint = new Paint();
- final Paint mScreenOnPaint = new Paint();
- final Paint mGpsOnPaint = new Paint();
- final Paint mFlashlightOnPaint = new Paint();
- final Paint mCameraOnPaint = new Paint();
- final Paint mWifiRunningPaint = new Paint();
- final Paint mCpuRunningPaint = new Paint();
- final Paint mDateLinePaint = new Paint();
- final ChartData mPhoneSignalChart = new ChartData();
- final TextPaint mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
- final TextPaint mHeaderTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
- final Paint mDebugRectPaint = new Paint();
-
- final Path mBatLevelPath = new Path();
- final Path mBatGoodPath = new Path();
- final Path mBatWarnPath = new Path();
- final Path mBatCriticalPath = new Path();
- final Path mTimeRemainPath = new Path();
- final Path mChargingPath = new Path();
- final Path mScreenOnPath = new Path();
- final Path mGpsOnPath = new Path();
- final Path mFlashlightOnPath = new Path();
- final Path mCameraOnPath = new Path();
- final Path mWifiRunningPath = new Path();
- final Path mCpuRunningPath = new Path();
- final Path mDateLinePath = new Path();
-
- BatteryStats mStats;
- Intent mBatteryBroadcast;
- long mStatsPeriod;
- String mMaxPercentLabelString;
- String mMinPercentLabelString;
- String mDurationString;
- String mChargeDurationString;
- String mDrainString;
- String mChargingLabel;
- String mScreenOnLabel;
- String mGpsOnLabel;
- String mCameraOnLabel;
- String mFlashlightOnLabel;
- String mWifiRunningLabel;
- String mCpuRunningLabel;
- String mPhoneSignalLabel;
-
- BatteryInfo mInfo;
-
- int mChartMinHeight;
- int mHeaderHeight;
-
- int mBatteryWarnLevel;
- int mBatteryCriticalLevel;
-
- int mTextAscent;
- int mTextDescent;
- int mHeaderTextAscent;
- int mHeaderTextDescent;
- int mMaxPercentLabelStringWidth;
- int mMinPercentLabelStringWidth;
- int mDurationStringWidth;
- int mChargeLabelStringWidth;
- int mChargeDurationStringWidth;
- int mDrainStringWidth;
-
- boolean mLargeMode;
-
- int mLastWidth = -1;
- int mLastHeight = -1;
-
- int mLineWidth;
- int mThinLineWidth;
- int mChargingOffset;
- int mScreenOnOffset;
- int mGpsOnOffset;
- int mFlashlightOnOffset;
- int mCameraOnOffset;
- int mWifiRunningOffset;
- int mCpuRunningOffset;
- int mPhoneSignalOffset;
- int mLevelOffset;
- int mLevelTop;
- int mLevelBottom;
- int mLevelLeft;
- int mLevelRight;
-
- int mNumHist;
- long mHistStart;
- long mHistDataEnd;
- long mHistEnd;
- long mStartWallTime;
- long mEndDataWallTime;
- long mEndWallTime;
- int mBatLow;
- int mBatHigh;
- boolean mHaveWifi;
- boolean mHaveGps;
- boolean mHavePhoneSignal;
- boolean mHaveCamera;
- boolean mHaveFlashlight;
-
- final ArrayList mTimeLabels = new ArrayList();
- final ArrayList mDateLabels = new ArrayList();
-
- Bitmap mBitmap;
- Canvas mCanvas;
-
- static class TextAttrs {
- ColorStateList textColor = null;
- int textSize = 15;
- int typefaceIndex = -1;
- int styleIndex = -1;
-
- void retrieve(Context context, TypedArray from, int index) {
- TypedArray appearance = null;
- int ap = from.getResourceId(index, -1);
- if (ap != -1) {
- appearance = context.obtainStyledAttributes(ap,
- com.android.internal.R.styleable.TextAppearance);
- }
- if (appearance != null) {
- int n = appearance.getIndexCount();
- for (int i = 0; i < n; i++) {
- int attr = appearance.getIndex(i);
-
- switch (attr) {
- case com.android.internal.R.styleable.TextAppearance_textColor:
- textColor = appearance.getColorStateList(attr);
- break;
-
- case com.android.internal.R.styleable.TextAppearance_textSize:
- textSize = appearance.getDimensionPixelSize(attr, textSize);
- break;
-
- case com.android.internal.R.styleable.TextAppearance_typeface:
- typefaceIndex = appearance.getInt(attr, -1);
- break;
-
- case com.android.internal.R.styleable.TextAppearance_textStyle:
- styleIndex = appearance.getInt(attr, -1);
- break;
- }
- }
-
- appearance.recycle();
- }
- }
-
- void apply(Context context, TextPaint paint) {
- paint.density = context.getResources().getDisplayMetrics().density;
- paint.setCompatibilityScaling(
- context.getResources().getCompatibilityInfo().applicationScale);
-
- paint.setColor(textColor.getDefaultColor());
- paint.setTextSize(textSize);
-
- Typeface tf = null;
- switch (typefaceIndex) {
- case SANS:
- tf = Typeface.SANS_SERIF;
- break;
-
- case SERIF:
- tf = Typeface.SERIF;
- break;
-
- case MONOSPACE:
- tf = Typeface.MONOSPACE;
- break;
- }
-
- setTypeface(paint, tf, styleIndex);
- }
-
- public void setTypeface(TextPaint paint, Typeface tf, int style) {
- if (style > 0) {
- if (tf == null) {
- tf = Typeface.defaultFromStyle(style);
- } else {
- tf = Typeface.create(tf, style);
- }
-
- paint.setTypeface(tf);
- // now compute what (if any) algorithmic styling is needed
- int typefaceStyle = tf != null ? tf.getStyle() : 0;
- int need = style & ~typefaceStyle;
- paint.setFakeBoldText((need & Typeface.BOLD) != 0);
- paint.setTextSkewX((need & Typeface.ITALIC) != 0 ? -0.25f : 0);
- } else {
- paint.setFakeBoldText(false);
- paint.setTextSkewX(0);
- paint.setTypeface(tf);
- }
- }
- }
-
- static class TimeLabel {
- final int x;
- final String label;
- final int width;
-
- TimeLabel(TextPaint paint, int x, Calendar cal, boolean use24hr) {
- this.x = x;
- final String bestFormat = DateFormat.getBestDateTimePattern(
- Locale.getDefault(), use24hr ? "km" : "ha");
- label = DateFormat.format(bestFormat, cal).toString();
- width = (int)paint.measureText(label);
- }
- }
-
- static class DateLabel {
- final int x;
- final String label;
- final int width;
-
- DateLabel(TextPaint paint, int x, Calendar cal, boolean dayFirst) {
- this.x = x;
- final String bestFormat = DateFormat.getBestDateTimePattern(
- Locale.getDefault(), dayFirst ? "dM" : "Md");
- label = DateFormat.format(bestFormat, cal).toString();
- width = (int)paint.measureText(label);
- }
- }
-
- public BatteryHistoryChart(Context context, AttributeSet attrs) {
- super(context, attrs);
-
- if (DEBUG) Log.d(TAG, "New BatteryHistoryChart!");
-
- mBatteryWarnLevel = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_lowBatteryWarningLevel);
- mBatteryCriticalLevel = mContext.getResources().getInteger(
- com.android.internal.R.integer.config_criticalBatteryWarningLevel);
-
- mThinLineWidth = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
- 2, getResources().getDisplayMetrics());
-
- int accentColor = Utils.getColorAccentDefaultColor(mContext);
- mBatteryBackgroundPaint.setColor(accentColor);
- mBatteryBackgroundPaint.setStyle(Paint.Style.FILL);
- mBatteryGoodPaint.setARGB(128, 0, 128, 0);
- mBatteryGoodPaint.setStyle(Paint.Style.STROKE);
- mBatteryWarnPaint.setARGB(128, 128, 128, 0);
- mBatteryWarnPaint.setStyle(Paint.Style.STROKE);
- mBatteryCriticalPaint.setARGB(192, 128, 0, 0);
- mBatteryCriticalPaint.setStyle(Paint.Style.STROKE);
- mTimeRemainPaint.setColor(0xFFCED7BB);
- mTimeRemainPaint.setStyle(Paint.Style.FILL);
- mChargingPaint.setStyle(Paint.Style.STROKE);
- mScreenOnPaint.setStyle(Paint.Style.STROKE);
- mGpsOnPaint.setStyle(Paint.Style.STROKE);
- mCameraOnPaint.setStyle(Paint.Style.STROKE);
- mFlashlightOnPaint.setStyle(Paint.Style.STROKE);
- mWifiRunningPaint.setStyle(Paint.Style.STROKE);
- mCpuRunningPaint.setStyle(Paint.Style.STROKE);
- mPhoneSignalChart.setColors(com.android.settings.Utils.BADNESS_COLORS);
- mDebugRectPaint.setARGB(255, 255, 0, 0);
- mDebugRectPaint.setStyle(Paint.Style.STROKE);
- mScreenOnPaint.setColor(accentColor);
- mGpsOnPaint.setColor(accentColor);
- mCameraOnPaint.setColor(accentColor);
- mFlashlightOnPaint.setColor(accentColor);
- mWifiRunningPaint.setColor(accentColor);
- mCpuRunningPaint.setColor(accentColor);
- mChargingPaint.setColor(accentColor);
-
- TypedArray a =
- context.obtainStyledAttributes(
- attrs, R.styleable.BatteryHistoryChart, 0, 0);
-
- final TextAttrs mainTextAttrs = new TextAttrs();
- final TextAttrs headTextAttrs = new TextAttrs();
- mainTextAttrs.retrieve(context, a, R.styleable.BatteryHistoryChart_android_textAppearance);
- headTextAttrs.retrieve(context, a, R.styleable.BatteryHistoryChart_headerAppearance);
-
- int shadowcolor = 0;
- float dx=0, dy=0, r=0;
-
- int n = a.getIndexCount();
- for (int i = 0; i < n; i++) {
- int attr = a.getIndex(i);
-
- switch (attr) {
- case R.styleable.BatteryHistoryChart_android_shadowColor:
- shadowcolor = a.getInt(attr, 0);
- break;
-
- case R.styleable.BatteryHistoryChart_android_shadowDx:
- dx = a.getFloat(attr, 0);
- break;
-
- case R.styleable.BatteryHistoryChart_android_shadowDy:
- dy = a.getFloat(attr, 0);
- break;
-
- case R.styleable.BatteryHistoryChart_android_shadowRadius:
- r = a.getFloat(attr, 0);
- break;
-
- case R.styleable.BatteryHistoryChart_android_textColor:
- mainTextAttrs.textColor = a.getColorStateList(attr);
- headTextAttrs.textColor = a.getColorStateList(attr);
- break;
-
- case R.styleable.BatteryHistoryChart_android_textSize:
- mainTextAttrs.textSize = a.getDimensionPixelSize(attr, mainTextAttrs.textSize);
- headTextAttrs.textSize = a.getDimensionPixelSize(attr, headTextAttrs.textSize);
- break;
-
- case R.styleable.BatteryHistoryChart_android_typeface:
- mainTextAttrs.typefaceIndex = a.getInt(attr, mainTextAttrs.typefaceIndex);
- headTextAttrs.typefaceIndex = a.getInt(attr, headTextAttrs.typefaceIndex);
- break;
-
- case R.styleable.BatteryHistoryChart_android_textStyle:
- mainTextAttrs.styleIndex = a.getInt(attr, mainTextAttrs.styleIndex);
- headTextAttrs.styleIndex = a.getInt(attr, headTextAttrs.styleIndex);
- break;
-
- case R.styleable.BatteryHistoryChart_barPrimaryColor:
- mBatteryBackgroundPaint.setColor(a.getInt(attr, 0));
- mScreenOnPaint.setColor(a.getInt(attr, 0));
- mGpsOnPaint.setColor(a.getInt(attr, 0));
- mCameraOnPaint.setColor(a.getInt(attr, 0));
- mFlashlightOnPaint.setColor(a.getInt(attr, 0));
- mWifiRunningPaint.setColor(a.getInt(attr, 0));
- mCpuRunningPaint.setColor(a.getInt(attr, 0));
- mChargingPaint.setColor(a.getInt(attr, 0));
- break;
-
- case R.styleable.BatteryHistoryChart_barPredictionColor:
- mTimeRemainPaint.setColor(a.getInt(attr, 0));
- break;
-
- case R.styleable.BatteryHistoryChart_chartMinHeight:
- mChartMinHeight = a.getDimensionPixelSize(attr, 0);
- break;
- }
- }
-
- a.recycle();
-
- mainTextAttrs.apply(context, mTextPaint);
- headTextAttrs.apply(context, mHeaderTextPaint);
-
- mDateLinePaint.set(mTextPaint);
- mDateLinePaint.setStyle(Paint.Style.STROKE);
- int hairlineWidth = mThinLineWidth/2;
- if (hairlineWidth < 1) {
- hairlineWidth = 1;
- }
- mDateLinePaint.setStrokeWidth(hairlineWidth);
- mDateLinePaint.setPathEffect(new DashPathEffect(new float[] {
- mThinLineWidth * 2, mThinLineWidth * 2 }, 0));
-
- if (shadowcolor != 0) {
- mTextPaint.setShadowLayer(r, dx, dy, shadowcolor);
- mHeaderTextPaint.setShadowLayer(r, dx, dy, shadowcolor);
- }
- }
-
- void setStats(BatteryStats stats, Intent broadcast) {
- mStats = stats;
- mBatteryBroadcast = broadcast;
-
- if (DEBUG) Log.d(TAG, "Setting stats...");
-
- final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
-
- long uSecTime = mStats.computeBatteryRealtime(elapsedRealtimeUs,
- BatteryStats.STATS_SINCE_CHARGED);
- mStatsPeriod = uSecTime;
- mChargingLabel = getContext().getString(R.string.battery_stats_charging_label);
- mScreenOnLabel = getContext().getString(R.string.battery_stats_screen_on_label);
- mGpsOnLabel = getContext().getString(R.string.battery_stats_gps_on_label);
- mCameraOnLabel = getContext().getString(R.string.battery_stats_camera_on_label);
- mFlashlightOnLabel = getContext().getString(R.string.battery_stats_flashlight_on_label);
- mWifiRunningLabel = getContext().getString(R.string.battery_stats_wifi_running_label);
- mCpuRunningLabel = getContext().getString(R.string.battery_stats_wake_lock_label);
- mPhoneSignalLabel = getContext().getString(R.string.battery_stats_phone_signal_label);
-
- mMaxPercentLabelString = Utils.formatPercentage(100);
- mMinPercentLabelString = Utils.formatPercentage(0);
- BatteryInfo.getBatteryInfo(getContext(), info -> {
- mInfo = info;
- mDrainString = "";
- mChargeDurationString = "";
- setContentDescription(mInfo.chargeLabel);
-
- int pos = 0;
- int lastInteresting = 0;
- byte lastLevel = -1;
- mBatLow = 0;
- mBatHigh = 100;
- mStartWallTime = 0;
- mEndDataWallTime = 0;
- mEndWallTime = 0;
- mHistStart = 0;
- mHistEnd = 0;
- long lastWallTime = 0;
- long lastRealtime = 0;
- int aggrStates = 0;
- int aggrStates2 = 0;
- boolean first = true;
- if (stats.startIteratingHistoryLocked()) {
- final HistoryItem rec = new HistoryItem();
- while (stats.getNextHistoryLocked(rec)) {
- pos++;
- if (first) {
- first = false;
- mHistStart = rec.time;
- }
- if (rec.cmd == HistoryItem.CMD_CURRENT_TIME
- || rec.cmd == HistoryItem.CMD_RESET) {
- // If there is a ridiculously large jump in time, then we won't be
- // able to create a good chart with that data, so just ignore the
- // times we got before and pretend like our data extends back from
- // the time we have now.
- // Also, if we are getting a time change and we are less than 5 minutes
- // since the start of the history real time, then also use this new
- // time to compute the base time, since whatever time we had before is
- // pretty much just noise.
- if (rec.currentTime > (lastWallTime+(180*24*60*60*1000L))
- || rec.time < (mHistStart+(5*60*1000L))) {
- mStartWallTime = 0;
- }
- lastWallTime = rec.currentTime;
- lastRealtime = rec.time;
- if (mStartWallTime == 0) {
- mStartWallTime = lastWallTime - (lastRealtime-mHistStart);
- }
- }
- if (rec.isDeltaData()) {
- if (rec.batteryLevel != lastLevel || pos == 1) {
- lastLevel = rec.batteryLevel;
- }
- lastInteresting = pos;
- mHistDataEnd = rec.time;
- aggrStates |= rec.states;
- aggrStates2 |= rec.states2;
- }
- }
- }
- mHistEnd = mHistDataEnd + (mInfo.remainingTimeUs/1000);
- mEndDataWallTime = lastWallTime + mHistDataEnd - lastRealtime;
- mEndWallTime = mEndDataWallTime + (mInfo.remainingTimeUs/1000);
- mNumHist = lastInteresting;
- mHaveGps = (aggrStates&HistoryItem.STATE_GPS_ON_FLAG) != 0;
- mHaveFlashlight = (aggrStates2&HistoryItem.STATE2_FLASHLIGHT_FLAG) != 0;
- mHaveCamera = (aggrStates2&HistoryItem.STATE2_CAMERA_FLAG) != 0;
- mHaveWifi = (aggrStates2&HistoryItem.STATE2_WIFI_RUNNING_FLAG) != 0
- || (aggrStates&(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG
- |HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG
- |HistoryItem.STATE_WIFI_SCAN_FLAG)) != 0;
- if (!com.android.settingslib.Utils.isWifiOnly(getContext())) {
- mHavePhoneSignal = true;
- }
- if (mHistEnd <= mHistStart) mHistEnd = mHistStart+1;
- }, mStats, false /* shortString */);
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- mMaxPercentLabelStringWidth = (int)mTextPaint.measureText(mMaxPercentLabelString);
- mMinPercentLabelStringWidth = (int)mTextPaint.measureText(mMinPercentLabelString);
- mDrainStringWidth = (int)mHeaderTextPaint.measureText(mDrainString);
- mChargeLabelStringWidth = (int) mHeaderTextPaint.measureText(
- mInfo.chargeLabel.toString());
- mChargeDurationStringWidth = (int)mHeaderTextPaint.measureText(mChargeDurationString);
- mTextAscent = (int)mTextPaint.ascent();
- mTextDescent = (int)mTextPaint.descent();
- mHeaderTextAscent = (int)mHeaderTextPaint.ascent();
- mHeaderTextDescent = (int)mHeaderTextPaint.descent();
- int headerTextHeight = mHeaderTextDescent - mHeaderTextAscent;
- mHeaderHeight = headerTextHeight*2 - mTextAscent;
- setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
- getDefaultSize(mChartMinHeight+mHeaderHeight, heightMeasureSpec));
- }
-
- void finishPaths(int w, int h, int levelh, int startX, int y, Path curLevelPath,
- int lastX, boolean lastCharging, boolean lastScreenOn, boolean lastGpsOn,
- boolean lastFlashlightOn, boolean lastCameraOn, boolean lastWifiRunning,
- boolean lastCpuRunning, Path lastPath) {
- if (curLevelPath != null) {
- if (lastX >= 0 && lastX < w) {
- if (lastPath != null) {
- lastPath.lineTo(w, y);
- }
- curLevelPath.lineTo(w, y);
- }
- curLevelPath.lineTo(w, mLevelTop+levelh);
- curLevelPath.lineTo(startX, mLevelTop+levelh);
- curLevelPath.close();
- }
-
- if (lastCharging) {
- mChargingPath.lineTo(w, h-mChargingOffset);
- }
- if (lastScreenOn) {
- mScreenOnPath.lineTo(w, h-mScreenOnOffset);
- }
- if (lastGpsOn) {
- mGpsOnPath.lineTo(w, h-mGpsOnOffset);
- }
- if (lastFlashlightOn) {
- mFlashlightOnPath.lineTo(w, h-mFlashlightOnOffset);
- }
- if (lastCameraOn) {
- mCameraOnPath.lineTo(w, h-mCameraOnOffset);
- }
- if (lastWifiRunning) {
- mWifiRunningPath.lineTo(w, h-mWifiRunningOffset);
- }
- if (lastCpuRunning) {
- mCpuRunningPath.lineTo(w, h - mCpuRunningOffset);
- }
- if (mHavePhoneSignal) {
- mPhoneSignalChart.finish(w);
- }
- }
-
- private boolean is24Hour() {
- return DateFormat.is24HourFormat(getContext());
- }
-
- private boolean isDayFirst() {
- final String value = LocaleData.get(getResources().getConfiguration().locale)
- .getDateFormat(java.text.DateFormat.SHORT);
- return value.indexOf('M') > value.indexOf('d');
- }
-
- @Override
- protected void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
-
- if (DEBUG) Log.d(TAG, "onSizeChanged: " + oldw + "x" + oldh + " to " + w + "x" + h);
-
- if (mLastWidth == w && mLastHeight == h) {
- return;
- }
-
- if (mLastWidth == 0 || mLastHeight == 0) {
- return;
- }
-
- if (DEBUG) Log.d(TAG, "Rebuilding chart for: " + w + "x" + h);
-
- mLastWidth = w;
- mLastHeight = h;
- mBitmap = null;
- mCanvas = null;
-
- int textHeight = mTextDescent - mTextAscent;
- if (h > ((textHeight*10)+mChartMinHeight)) {
- mLargeMode = true;
- if (h > (textHeight*15)) {
- // Plenty of room for the chart.
- mLineWidth = textHeight/2;
- } else {
- // Compress lines to make more room for chart.
- mLineWidth = textHeight/3;
- }
- } else {
- mLargeMode = false;
- mLineWidth = mThinLineWidth;
- }
- if (mLineWidth <= 0) mLineWidth = 1;
-
- mLevelTop = mHeaderHeight;
- mLevelLeft = mMaxPercentLabelStringWidth + mThinLineWidth*3;
- mLevelRight = w;
- int levelWidth = mLevelRight-mLevelLeft;
-
- mTextPaint.setStrokeWidth(mThinLineWidth);
- mBatteryGoodPaint.setStrokeWidth(mThinLineWidth);
- mBatteryWarnPaint.setStrokeWidth(mThinLineWidth);
- mBatteryCriticalPaint.setStrokeWidth(mThinLineWidth);
- mChargingPaint.setStrokeWidth(mLineWidth);
- mScreenOnPaint.setStrokeWidth(mLineWidth);
- mGpsOnPaint.setStrokeWidth(mLineWidth);
- mCameraOnPaint.setStrokeWidth(mLineWidth);
- mFlashlightOnPaint.setStrokeWidth(mLineWidth);
- mWifiRunningPaint.setStrokeWidth(mLineWidth);
- mCpuRunningPaint.setStrokeWidth(mLineWidth);
- mDebugRectPaint.setStrokeWidth(1);
-
- int fullBarOffset = textHeight + mLineWidth;
-
- if (mLargeMode) {
- mChargingOffset = mLineWidth;
- mScreenOnOffset = mChargingOffset + fullBarOffset;
- mCpuRunningOffset = mScreenOnOffset + fullBarOffset;
- mWifiRunningOffset = mCpuRunningOffset + fullBarOffset;
- mGpsOnOffset = mWifiRunningOffset + (mHaveWifi ? fullBarOffset : 0);
- mFlashlightOnOffset = mGpsOnOffset + (mHaveGps ? fullBarOffset : 0);
- mCameraOnOffset = mFlashlightOnOffset + (mHaveFlashlight ? fullBarOffset : 0);
- mPhoneSignalOffset = mCameraOnOffset + (mHaveCamera ? fullBarOffset : 0);
- mLevelOffset = mPhoneSignalOffset + (mHavePhoneSignal ? fullBarOffset : 0)
- + mLineWidth*2 + mLineWidth/2;
- if (mHavePhoneSignal) {
- mPhoneSignalChart.init(w);
- }
- } else {
- mScreenOnOffset = mGpsOnOffset = mCameraOnOffset = mFlashlightOnOffset =
- mWifiRunningOffset = mCpuRunningOffset = mChargingOffset =
- mPhoneSignalOffset = 0;
- mLevelOffset = fullBarOffset + mThinLineWidth*4;
- if (mHavePhoneSignal) {
- mPhoneSignalChart.init(0);
- }
- }
-
- mBatLevelPath.reset();
- mBatGoodPath.reset();
- mBatWarnPath.reset();
- mTimeRemainPath.reset();
- mBatCriticalPath.reset();
- mScreenOnPath.reset();
- mGpsOnPath.reset();
- mFlashlightOnPath.reset();
- mCameraOnPath.reset();
- mWifiRunningPath.reset();
- mCpuRunningPath.reset();
- mChargingPath.reset();
-
- mTimeLabels.clear();
- mDateLabels.clear();
-
- final long walltimeStart = mStartWallTime;
- final long walltimeChange = mEndWallTime > walltimeStart
- ? (mEndWallTime-walltimeStart) : 1;
- long curWalltime = mStartWallTime;
- long lastRealtime = 0;
-
- final int batLow = mBatLow;
- final int batChange = mBatHigh-mBatLow;
-
- final int levelh = h - mLevelOffset - mLevelTop;
- mLevelBottom = mLevelTop + levelh;
-
- int x = mLevelLeft, y = 0, startX = mLevelLeft, lastX = -1, lastY = -1;
- int i = 0;
- Path curLevelPath = null;
- Path lastLinePath = null;
- boolean lastCharging = false, lastScreenOn = false, lastGpsOn = false;
- boolean lastFlashlightOn = false, lastCameraOn = false;
- boolean lastWifiRunning = false, lastWifiSupplRunning = false, lastCpuRunning = false;
- int lastWifiSupplState = BatteryStats.WIFI_SUPPL_STATE_INVALID;
- final int N = mNumHist;
- if (mEndDataWallTime > mStartWallTime && mStats.startIteratingHistoryLocked()) {
- final HistoryItem rec = new HistoryItem();
- while (mStats.getNextHistoryLocked(rec) && i < N) {
- if (rec.isDeltaData()) {
- curWalltime += rec.time-lastRealtime;
- lastRealtime = rec.time;
- x = mLevelLeft + (int)(((curWalltime-walltimeStart)*levelWidth)/walltimeChange);
- if (x < 0) {
- x = 0;
- }
- if (false) {
- StringBuilder sb = new StringBuilder(128);
- sb.append("walloff=");
- TimeUtils.formatDuration(curWalltime - walltimeStart, sb);
- sb.append(" wallchange=");
- TimeUtils.formatDuration(walltimeChange, sb);
- sb.append(" x=");
- sb.append(x);
- Log.d("foo", sb.toString());
- }
- y = mLevelTop + levelh - ((rec.batteryLevel-batLow)*(levelh-1))/batChange;
-
- if (lastX != x) {
- // We have moved by at least a pixel.
- if (lastY != y) {
- // Don't plot changes within a pixel.
- Path path;
- byte value = rec.batteryLevel;
- if (value <= mBatteryCriticalLevel) path = mBatCriticalPath;
- else if (value <= mBatteryWarnLevel) path = mBatWarnPath;
- else path = null; //mBatGoodPath;
-
- if (path != lastLinePath) {
- if (lastLinePath != null) {
- lastLinePath.lineTo(x, y);
- }
- if (path != null) {
- path.moveTo(x, y);
- }
- lastLinePath = path;
- } else if (path != null) {
- path.lineTo(x, y);
- }
-
- if (curLevelPath == null) {
- curLevelPath = mBatLevelPath;
- curLevelPath.moveTo(x, y);
- startX = x;
- } else {
- curLevelPath.lineTo(x, y);
- }
- lastX = x;
- lastY = y;
- }
- }
-
- if (mLargeMode) {
- final boolean charging =
- (rec.states&HistoryItem.STATE_BATTERY_PLUGGED_FLAG) != 0;
- if (charging != lastCharging) {
- if (charging) {
- mChargingPath.moveTo(x, h-mChargingOffset);
- } else {
- mChargingPath.lineTo(x, h-mChargingOffset);
- }
- lastCharging = charging;
- }
-
- final boolean screenOn =
- (rec.states&HistoryItem.STATE_SCREEN_ON_FLAG) != 0;
- if (screenOn != lastScreenOn) {
- if (screenOn) {
- mScreenOnPath.moveTo(x, h-mScreenOnOffset);
- } else {
- mScreenOnPath.lineTo(x, h-mScreenOnOffset);
- }
- lastScreenOn = screenOn;
- }
-
- final boolean gpsOn =
- (rec.states&HistoryItem.STATE_GPS_ON_FLAG) != 0;
- if (gpsOn != lastGpsOn) {
- if (gpsOn) {
- mGpsOnPath.moveTo(x, h-mGpsOnOffset);
- } else {
- mGpsOnPath.lineTo(x, h-mGpsOnOffset);
- }
- lastGpsOn = gpsOn;
- }
-
- final boolean flashlightOn =
- (rec.states2&HistoryItem.STATE2_FLASHLIGHT_FLAG) != 0;
- if (flashlightOn != lastFlashlightOn) {
- if (flashlightOn) {
- mFlashlightOnPath.moveTo(x, h-mFlashlightOnOffset);
- } else {
- mFlashlightOnPath.lineTo(x, h-mFlashlightOnOffset);
- }
- lastFlashlightOn = flashlightOn;
- }
-
- final boolean cameraOn =
- (rec.states2&HistoryItem.STATE2_CAMERA_FLAG) != 0;
- if (cameraOn != lastCameraOn) {
- if (cameraOn) {
- mCameraOnPath.moveTo(x, h-mCameraOnOffset);
- } else {
- mCameraOnPath.lineTo(x, h-mCameraOnOffset);
- }
- lastCameraOn = cameraOn;
- }
-
- final int wifiSupplState =
- ((rec.states2&HistoryItem.STATE2_WIFI_SUPPL_STATE_MASK)
- >> HistoryItem.STATE2_WIFI_SUPPL_STATE_SHIFT);
- boolean wifiRunning;
- if (lastWifiSupplState != wifiSupplState) {
- lastWifiSupplState = wifiSupplState;
- switch (wifiSupplState) {
- case BatteryStats.WIFI_SUPPL_STATE_DISCONNECTED:
- case BatteryStats.WIFI_SUPPL_STATE_DORMANT:
- case BatteryStats.WIFI_SUPPL_STATE_INACTIVE:
- case BatteryStats.WIFI_SUPPL_STATE_INTERFACE_DISABLED:
- case BatteryStats.WIFI_SUPPL_STATE_INVALID:
- case BatteryStats.WIFI_SUPPL_STATE_UNINITIALIZED:
- wifiRunning = lastWifiSupplRunning = false;
- break;
- default:
- wifiRunning = lastWifiSupplRunning = true;
- break;
- }
- } else {
- wifiRunning = lastWifiSupplRunning;
- }
- if ((rec.states&(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG
- |HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG
- |HistoryItem.STATE_WIFI_SCAN_FLAG)) != 0) {
- wifiRunning = true;
- }
- if (wifiRunning != lastWifiRunning) {
- if (wifiRunning) {
- mWifiRunningPath.moveTo(x, h-mWifiRunningOffset);
- } else {
- mWifiRunningPath.lineTo(x, h-mWifiRunningOffset);
- }
- lastWifiRunning = wifiRunning;
- }
-
- final boolean cpuRunning =
- (rec.states&HistoryItem.STATE_CPU_RUNNING_FLAG) != 0;
- if (cpuRunning != lastCpuRunning) {
- if (cpuRunning) {
- mCpuRunningPath.moveTo(x, h - mCpuRunningOffset);
- } else {
- mCpuRunningPath.lineTo(x, h - mCpuRunningOffset);
- }
- lastCpuRunning = cpuRunning;
- }
-
- if (mLargeMode && mHavePhoneSignal) {
- int bin;
- if (((rec.states&HistoryItem.STATE_PHONE_STATE_MASK)
- >> HistoryItem.STATE_PHONE_STATE_SHIFT)
- == ServiceState.STATE_POWER_OFF) {
- bin = 0;
- } else if ((rec.states&HistoryItem.STATE_PHONE_SCANNING_FLAG) != 0) {
- bin = 1;
- } else {
- bin = (rec.states&HistoryItem.STATE_PHONE_SIGNAL_STRENGTH_MASK)
- >> HistoryItem.STATE_PHONE_SIGNAL_STRENGTH_SHIFT;
- bin += 2;
- }
- mPhoneSignalChart.addTick(x, bin);
- }
- }
-
- } else {
- long lastWalltime = curWalltime;
- if (rec.cmd == HistoryItem.CMD_CURRENT_TIME
- || rec.cmd == HistoryItem.CMD_RESET) {
- if (rec.currentTime >= mStartWallTime) {
- curWalltime = rec.currentTime;
- } else {
- curWalltime = mStartWallTime + (rec.time-mHistStart);
- }
- lastRealtime = rec.time;
- }
-
- if (rec.cmd != HistoryItem.CMD_OVERFLOW
- && (rec.cmd != HistoryItem.CMD_CURRENT_TIME
- || Math.abs(lastWalltime-curWalltime) > (60*60*1000))) {
- if (curLevelPath != null) {
- finishPaths(x+1, h, levelh, startX, lastY, curLevelPath, lastX,
- lastCharging, lastScreenOn, lastGpsOn, lastFlashlightOn,
- lastCameraOn, lastWifiRunning, lastCpuRunning, lastLinePath);
- lastX = lastY = -1;
- curLevelPath = null;
- lastLinePath = null;
- lastCharging = lastScreenOn = lastGpsOn = lastFlashlightOn =
- lastCameraOn = lastCpuRunning = false;
- }
- }
- }
-
- i++;
- }
- mStats.finishIteratingHistoryLocked();
- }
-
- if (lastY < 0 || lastX < 0) {
- // Didn't get any data...
- x = lastX = mLevelLeft;
- y = lastY = mLevelTop + levelh - ((mInfo.batteryLevel -batLow)*(levelh-1))/batChange;
- Path path;
- byte value = (byte)mInfo.batteryLevel;
- if (value <= mBatteryCriticalLevel) path = mBatCriticalPath;
- else if (value <= mBatteryWarnLevel) path = mBatWarnPath;
- else path = null; //mBatGoodPath;
- if (path != null) {
- path.moveTo(x, y);
- lastLinePath = path;
- }
- mBatLevelPath.moveTo(x, y);
- curLevelPath = mBatLevelPath;
- x = w;
- } else {
- // Figure out where the actual data ends on the screen.
- x = mLevelLeft + (int)(((mEndDataWallTime-walltimeStart)*levelWidth)/walltimeChange);
- if (x < 0) {
- x = 0;
- }
- }
-
- finishPaths(x, h, levelh, startX, lastY, curLevelPath, lastX,
- lastCharging, lastScreenOn, lastGpsOn, lastFlashlightOn, lastCameraOn,
- lastWifiRunning, lastCpuRunning, lastLinePath);
-
- if (x < w) {
- // If we reserved room for the remaining time, create a final path to draw
- // that part of the UI.
- mTimeRemainPath.moveTo(x, lastY);
- int fullY = mLevelTop + levelh - ((100-batLow)*(levelh-1))/batChange;
- int emptyY = mLevelTop + levelh - ((0-batLow)*(levelh-1))/batChange;
- if (mInfo.discharging) {
- mTimeRemainPath.lineTo(mLevelRight, emptyY);
- } else {
- mTimeRemainPath.lineTo(mLevelRight, fullY);
- mTimeRemainPath.lineTo(mLevelRight, emptyY);
- }
- mTimeRemainPath.lineTo(x, emptyY);
- mTimeRemainPath.close();
- }
-
- if (mStartWallTime > 0 && mEndWallTime > mStartWallTime) {
- // Create the time labels at the bottom.
- boolean is24hr = is24Hour();
- Calendar calStart = Calendar.getInstance();
- calStart.setTimeInMillis(mStartWallTime);
- calStart.set(Calendar.MILLISECOND, 0);
- calStart.set(Calendar.SECOND, 0);
- calStart.set(Calendar.MINUTE, 0);
- long startRoundTime = calStart.getTimeInMillis();
- if (startRoundTime < mStartWallTime) {
- calStart.set(Calendar.HOUR_OF_DAY, calStart.get(Calendar.HOUR_OF_DAY)+1);
- startRoundTime = calStart.getTimeInMillis();
- }
- Calendar calEnd = Calendar.getInstance();
- calEnd.setTimeInMillis(mEndWallTime);
- calEnd.set(Calendar.MILLISECOND, 0);
- calEnd.set(Calendar.SECOND, 0);
- calEnd.set(Calendar.MINUTE, 0);
- long endRoundTime = calEnd.getTimeInMillis();
- if (startRoundTime < endRoundTime) {
- addTimeLabel(calStart, mLevelLeft, mLevelRight, is24hr);
- Calendar calMid = Calendar.getInstance();
- calMid.setTimeInMillis(mStartWallTime+((mEndWallTime-mStartWallTime)/2));
- calMid.set(Calendar.MILLISECOND, 0);
- calMid.set(Calendar.SECOND, 0);
- calMid.set(Calendar.MINUTE, 0);
- long calMidMillis = calMid.getTimeInMillis();
- if (calMidMillis > startRoundTime && calMidMillis < endRoundTime) {
- addTimeLabel(calMid, mLevelLeft, mLevelRight, is24hr);
- }
- addTimeLabel(calEnd, mLevelLeft, mLevelRight, is24hr);
- }
-
- // Create the date labels if the chart includes multiple days
- if (calStart.get(Calendar.DAY_OF_YEAR) != calEnd.get(Calendar.DAY_OF_YEAR) ||
- calStart.get(Calendar.YEAR) != calEnd.get(Calendar.YEAR)) {
- boolean isDayFirst = isDayFirst();
- calStart.set(Calendar.HOUR_OF_DAY, 0);
- startRoundTime = calStart.getTimeInMillis();
- if (startRoundTime < mStartWallTime) {
- calStart.set(Calendar.DAY_OF_YEAR, calStart.get(Calendar.DAY_OF_YEAR) + 1);
- startRoundTime = calStart.getTimeInMillis();
- }
- calEnd.set(Calendar.HOUR_OF_DAY, 0);
- endRoundTime = calEnd.getTimeInMillis();
- if (startRoundTime < endRoundTime) {
- addDateLabel(calStart, mLevelLeft, mLevelRight, isDayFirst);
- Calendar calMid = Calendar.getInstance();
-
- // The middle between two beginnings of days can be anywhere between -1 to 13
- // after the beginning of the "median" day.
- calMid.setTimeInMillis(startRoundTime + ((endRoundTime - startRoundTime) / 2)
- + 2 * 60 * 60 * 1000);
- calMid.set(Calendar.HOUR_OF_DAY, 0);
- calMid.set(Calendar.MINUTE, 0);
- long calMidMillis = calMid.getTimeInMillis();
- if (calMidMillis > startRoundTime && calMidMillis < endRoundTime) {
- addDateLabel(calMid, mLevelLeft, mLevelRight, isDayFirst);
- }
- }
- addDateLabel(calEnd, mLevelLeft, mLevelRight, isDayFirst);
- }
- }
-
- if (mTimeLabels.size() < 2) {
- // If there are fewer than 2 time labels, then they are useless. Just
- // show an axis label giving the entire duration.
- mDurationString = Formatter.formatShortElapsedTime(getContext(),
- mEndWallTime - mStartWallTime);
- mDurationStringWidth = (int)mTextPaint.measureText(mDurationString);
- } else {
- mDurationString = null;
- mDurationStringWidth = 0;
- }
- }
-
- void addTimeLabel(Calendar cal, int levelLeft, int levelRight, boolean is24hr) {
- final long walltimeStart = mStartWallTime;
- final long walltimeChange = mEndWallTime-walltimeStart;
- mTimeLabels.add(new TimeLabel(mTextPaint,
- levelLeft + (int)(((cal.getTimeInMillis()-walltimeStart)*(levelRight-levelLeft))
- / walltimeChange),
- cal, is24hr));
- }
-
- void addDateLabel(Calendar cal, int levelLeft, int levelRight, boolean isDayFirst) {
- final long walltimeStart = mStartWallTime;
- final long walltimeChange = mEndWallTime-walltimeStart;
- mDateLabels.add(new DateLabel(mTextPaint,
- levelLeft + (int)(((cal.getTimeInMillis()-walltimeStart)*(levelRight-levelLeft))
- / walltimeChange),
- cal, isDayFirst));
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
-
- final int width = getWidth();
- final int height = getHeight();
-
- //buildBitmap(width, height);
-
- if (DEBUG) Log.d(TAG, "onDraw: " + width + "x" + height);
- //canvas.drawBitmap(mBitmap, 0, 0, null);
- drawChart(canvas, width, height);
- }
-
- void buildBitmap(int width, int height) {
- if (mBitmap != null && width == mBitmap.getWidth() && height == mBitmap.getHeight()) {
- return;
- }
-
- if (DEBUG) Log.d(TAG, "buildBitmap: " + width + "x" + height);
-
- mBitmap = Bitmap.createBitmap(getResources().getDisplayMetrics(), width, height,
- Bitmap.Config.ARGB_8888);
- mCanvas = new Canvas(mBitmap);
- drawChart(mCanvas, width, height);
- }
-
- void drawChart(Canvas canvas, int width, int height) {
- final boolean layoutRtl = isLayoutRtl();
- final int textStartX = layoutRtl ? width : 0;
- final int textEndX = layoutRtl ? 0 : width;
- final Paint.Align textAlignLeft = layoutRtl ? Paint.Align.RIGHT : Paint.Align.LEFT;
- final Paint.Align textAlignRight = layoutRtl ? Paint.Align.LEFT : Paint.Align.RIGHT;
-
- if (DEBUG) {
- canvas.drawRect(1, 1, width, height, mDebugRectPaint);
- }
-
- if (DEBUG) Log.d(TAG, "Drawing level path.");
- canvas.drawPath(mBatLevelPath, mBatteryBackgroundPaint);
- if (!mTimeRemainPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing time remain path.");
- canvas.drawPath(mTimeRemainPath, mTimeRemainPaint);
- }
- if (mTimeLabels.size() > 1) {
- int y = mLevelBottom - mTextAscent + (mThinLineWidth*4);
- int ytick = mLevelBottom+mThinLineWidth+(mThinLineWidth/2);
- mTextPaint.setTextAlign(Paint.Align.LEFT);
- int lastX = 0;
- for (int i=0; i (width-nextLabel.width-mTextAscent)) {
- continue;
- }
- if (DEBUG) Log.d(TAG, "Drawing middle label: " + label.label + " @ " + x);
- canvas.drawText(label.label, x, y, mTextPaint);
- canvas.drawLine(label.x, ytick, label.x, ytick + mThinLineWidth, mTextPaint);
- lastX = x + label.width;
- } else {
- int x = label.x - label.width/2;
- if ((x+label.width) >= width) {
- x = width-1-label.width;
- }
- if (DEBUG) Log.d(TAG, "Drawing right label: " + label.label + " @ " + x);
- canvas.drawText(label.label, x, y, mTextPaint);
- canvas.drawLine(label.x, ytick, label.x, ytick+mThinLineWidth, mTextPaint);
- }
- }
- } else if (mDurationString != null) {
- int y = mLevelBottom - mTextAscent + (mThinLineWidth*4);
- mTextPaint.setTextAlign(Paint.Align.LEFT);
- canvas.drawText(mDurationString,
- mLevelLeft + (mLevelRight-mLevelLeft)/2 - mDurationStringWidth/2,
- y, mTextPaint);
- }
-
- int headerTop = -mHeaderTextAscent + (mHeaderTextDescent-mHeaderTextAscent)/3;
- mHeaderTextPaint.setTextAlign(textAlignLeft);
- if (DEBUG) Log.d(TAG, "Drawing charge label string: " + mInfo.chargeLabel);
- canvas.drawText(mInfo.chargeLabel.toString(), textStartX, headerTop,
- mHeaderTextPaint);
- int stringHalfWidth = mChargeDurationStringWidth / 2;
- if (layoutRtl) stringHalfWidth = -stringHalfWidth;
- int headerCenter = ((width-mChargeDurationStringWidth-mDrainStringWidth)/2)
- + (layoutRtl ? mDrainStringWidth : mChargeLabelStringWidth);
- if (DEBUG) Log.d(TAG, "Drawing charge duration string: " + mChargeDurationString);
- canvas.drawText(mChargeDurationString, headerCenter - stringHalfWidth, headerTop,
- mHeaderTextPaint);
- mHeaderTextPaint.setTextAlign(textAlignRight);
- if (DEBUG) Log.d(TAG, "Drawing drain string: " + mDrainString);
- canvas.drawText(mDrainString, textEndX, headerTop, mHeaderTextPaint);
-
- if (!mBatGoodPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing good battery path");
- canvas.drawPath(mBatGoodPath, mBatteryGoodPaint);
- }
- if (!mBatWarnPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing warn battery path");
- canvas.drawPath(mBatWarnPath, mBatteryWarnPaint);
- }
- if (!mBatCriticalPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing critical battery path");
- canvas.drawPath(mBatCriticalPath, mBatteryCriticalPaint);
- }
- if (mHavePhoneSignal) {
- if (DEBUG) Log.d(TAG, "Drawing phone signal path");
- int top = height-mPhoneSignalOffset - (mLineWidth/2);
- mPhoneSignalChart.draw(canvas, top, mLineWidth);
- }
- if (!mScreenOnPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing screen on path");
- canvas.drawPath(mScreenOnPath, mScreenOnPaint);
- }
- if (!mChargingPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing charging path");
- canvas.drawPath(mChargingPath, mChargingPaint);
- }
- if (mHaveGps) {
- if (!mGpsOnPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing gps path");
- canvas.drawPath(mGpsOnPath, mGpsOnPaint);
- }
- }
- if (mHaveFlashlight) {
- if (!mFlashlightOnPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing flashlight path");
- canvas.drawPath(mFlashlightOnPath, mFlashlightOnPaint);
- }
- }
- if (mHaveCamera) {
- if (!mCameraOnPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing camera path");
- canvas.drawPath(mCameraOnPath, mCameraOnPaint);
- }
- }
- if (mHaveWifi) {
- if (!mWifiRunningPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing wifi path");
- canvas.drawPath(mWifiRunningPath, mWifiRunningPaint);
- }
- }
- if (!mCpuRunningPath.isEmpty()) {
- if (DEBUG) Log.d(TAG, "Drawing running path");
- canvas.drawPath(mCpuRunningPath, mCpuRunningPaint);
- }
-
- if (mLargeMode) {
- if (DEBUG) Log.d(TAG, "Drawing large mode labels");
- Paint.Align align = mTextPaint.getTextAlign();
- mTextPaint.setTextAlign(textAlignLeft); // large-mode labels always aligned to start
- if (mHavePhoneSignal) {
- canvas.drawText(mPhoneSignalLabel, textStartX,
- height - mPhoneSignalOffset - mTextDescent, mTextPaint);
- }
- if (mHaveGps) {
- canvas.drawText(mGpsOnLabel, textStartX,
- height - mGpsOnOffset - mTextDescent, mTextPaint);
- }
- if (mHaveFlashlight) {
- canvas.drawText(mFlashlightOnLabel, textStartX,
- height - mFlashlightOnOffset - mTextDescent, mTextPaint);
- }
- if (mHaveCamera) {
- canvas.drawText(mCameraOnLabel, textStartX,
- height - mCameraOnOffset - mTextDescent, mTextPaint);
- }
- if (mHaveWifi) {
- canvas.drawText(mWifiRunningLabel, textStartX,
- height - mWifiRunningOffset - mTextDescent, mTextPaint);
- }
- canvas.drawText(mCpuRunningLabel, textStartX,
- height - mCpuRunningOffset - mTextDescent, mTextPaint);
- canvas.drawText(mChargingLabel, textStartX,
- height - mChargingOffset - mTextDescent, mTextPaint);
- canvas.drawText(mScreenOnLabel, textStartX,
- height - mScreenOnOffset - mTextDescent, mTextPaint);
- mTextPaint.setTextAlign(align);
- }
-
- canvas.drawLine(mLevelLeft-mThinLineWidth, mLevelTop, mLevelLeft-mThinLineWidth,
- mLevelBottom+(mThinLineWidth/2), mTextPaint);
- if (mLargeMode) {
- for (int i=0; i<10; i++) {
- int y = mLevelTop + mThinLineWidth/2 + ((mLevelBottom-mLevelTop)*i)/10;
- canvas.drawLine(mLevelLeft-mThinLineWidth*2-mThinLineWidth/2, y,
- mLevelLeft-mThinLineWidth-mThinLineWidth/2, y, mTextPaint);
- }
- }
- if (DEBUG) Log.d(TAG, "Drawing max percent, origw=" + mMaxPercentLabelStringWidth
- + ", noww=" + (int)mTextPaint.measureText(mMaxPercentLabelString));
- canvas.drawText(mMaxPercentLabelString, 0, mLevelTop, mTextPaint);
- canvas.drawText(mMinPercentLabelString,
- mMaxPercentLabelStringWidth-mMinPercentLabelStringWidth,
- mLevelBottom - mThinLineWidth, mTextPaint);
- canvas.drawLine(mLevelLeft/2, mLevelBottom+mThinLineWidth, width,
- mLevelBottom+mThinLineWidth, mTextPaint);
-
- if (mDateLabels.size() > 0) {
- int ytop = mLevelTop + mTextAscent;
- int ybottom = mLevelBottom;
- int lastLeft = mLevelRight;
- mTextPaint.setTextAlign(Paint.Align.LEFT);
- for (int i=mDateLabels.size()-1; i>=0; i--) {
- DateLabel label = mDateLabels.get(i);
- int left = label.x - mThinLineWidth;
- int x = label.x + mThinLineWidth*2;
- if ((x+label.width) >= lastLeft) {
- x = label.x - mThinLineWidth*2 - label.width;
- left = x - mThinLineWidth;
- if (left >= lastLeft) {
- // okay we give up.
- continue;
- }
- }
- if (left < mLevelLeft) {
- // Won't fit on left, give up.
- continue;
- }
- mDateLinePath.reset();
- mDateLinePath.moveTo(label.x, ytop);
- mDateLinePath.lineTo(label.x, ybottom);
- canvas.drawPath(mDateLinePath, mDateLinePaint);
- canvas.drawText(label.label, x, ytop - mTextAscent, mTextPaint);
- }
- }
- }
-}
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryDetail.java b/src/com/android/settings/fuelgauge/BatteryHistoryDetail.java
deleted file mode 100644
index 1343fefca60..00000000000
--- a/src/com/android/settings/fuelgauge/BatteryHistoryDetail.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge;
-
-import android.content.Intent;
-import android.os.BatteryStats;
-import android.os.BatteryStats.HistoryItem;
-import android.os.Bundle;
-import android.util.TypedValue;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
-import com.android.internal.os.BatteryStatsHelper;
-import com.android.settings.R;
-import com.android.settings.SettingsPreferenceFragment;
-import com.android.settings.fuelgauge.BatteryActiveView.BatteryActiveProvider;
-import com.android.settings.widget.UsageView;
-
-public class BatteryHistoryDetail extends SettingsPreferenceFragment {
- public static final String EXTRA_STATS = "stats";
- public static final String EXTRA_BROADCAST = "broadcast";
- public static final String BATTERY_HISTORY_FILE = "tmp_bat_history.bin";
-
- private BatteryStats mStats;
- private Intent mBatteryBroadcast;
-
- private BatteryFlagParser mChargingParser;
- private BatteryFlagParser mScreenOn;
- private BatteryFlagParser mGpsParser;
- private BatteryFlagParser mFlashlightParser;
- private BatteryFlagParser mCameraParser;
- private BatteryWifiParser mWifiParser;
- private BatteryFlagParser mCpuParser;
- private BatteryCellParser mPhoneParser;
-
- @Override
- public void onCreate(Bundle icicle) {
- super.onCreate(icicle);
- String histFile = getArguments().getString(EXTRA_STATS);
- mStats = BatteryStatsHelper.statsFromFile(getActivity(), histFile);
- mBatteryBroadcast = getArguments().getParcelable(EXTRA_BROADCAST);
-
- TypedValue value = new TypedValue();
- getContext().getTheme().resolveAttribute(android.R.attr.colorAccent, value, true);
- int accentColor = getContext().getColor(value.resourceId);
-
- mChargingParser = new BatteryFlagParser(accentColor, false,
- HistoryItem.STATE_BATTERY_PLUGGED_FLAG);
- mScreenOn = new BatteryFlagParser(accentColor, false,
- HistoryItem.STATE_SCREEN_ON_FLAG);
- mGpsParser = new BatteryFlagParser(accentColor, false,
- HistoryItem.STATE_GPS_ON_FLAG);
- mFlashlightParser = new BatteryFlagParser(accentColor, true,
- HistoryItem.STATE2_FLASHLIGHT_FLAG);
- mCameraParser = new BatteryFlagParser(accentColor, true,
- HistoryItem.STATE2_CAMERA_FLAG);
- mWifiParser = new BatteryWifiParser(accentColor);
- mCpuParser = new BatteryFlagParser(accentColor, false,
- HistoryItem.STATE_CPU_RUNNING_FLAG);
- mPhoneParser = new BatteryCellParser();
- setHasOptionsMenu(true);
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- return inflater.inflate(R.layout.battery_history_detail, container, false);
- }
-
- @Override
- public void onViewCreated(View view, Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- updateEverything();
- }
-
- private void updateEverything() {
- BatteryInfo.getBatteryInfo(getContext(), info -> {
- final View view = getView();
- info.bindHistory((UsageView) view.findViewById(R.id.battery_usage), mChargingParser,
- mScreenOn, mGpsParser, mFlashlightParser, mCameraParser, mWifiParser,
- mCpuParser, mPhoneParser);
- ((TextView) view.findViewById(R.id.charge)).setText(info.batteryPercentString);
- ((TextView) view.findViewById(R.id.estimation)).setText(info.remainingLabel);
-
- bindData(mChargingParser, R.string.battery_stats_charging_label, R.id.charging_group);
- bindData(mScreenOn, R.string.battery_stats_screen_on_label, R.id.screen_on_group);
- bindData(mGpsParser, R.string.battery_stats_gps_on_label, R.id.gps_group);
- bindData(mFlashlightParser, R.string.battery_stats_flashlight_on_label,
- R.id.flashlight_group);
- bindData(mCameraParser, R.string.battery_stats_camera_on_label, R.id.camera_group);
- bindData(mWifiParser, R.string.battery_stats_wifi_running_label, R.id.wifi_group);
- bindData(mCpuParser, R.string.battery_stats_wake_lock_label, R.id.cpu_group);
- bindData(mPhoneParser, R.string.battery_stats_phone_signal_label,
- R.id.cell_network_group);
- }, mStats, false /* shortString */);
- }
-
- private void bindData(BatteryActiveProvider provider, int label, int groupId) {
- View group = getView().findViewById(groupId);
- group.setVisibility(provider.hasData() ? View.VISIBLE : View.GONE);
- ((TextView) group.findViewById(android.R.id.title)).setText(label);
- ((BatteryActiveView) group.findViewById(R.id.battery_active)).setProvider(provider);
- }
-
- @Override
- public int getMetricsCategory() {
- return MetricsEvent.FUELGAUGE_BATTERY_HISTORY_DETAIL;
- }
-}
diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java
index 06200a3cc3c..a11270befb7 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageBase.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java
@@ -72,8 +72,6 @@ public abstract class PowerUsageBase extends DashboardFragment {
@Override
public void onResume() {
super.onResume();
-
- BatteryStatsHelper.dropFile(getActivity(), BatteryHistoryDetail.BATTERY_HISTORY_FILE);
mBatteryBroadcastReceiver.register();
}
diff --git a/tests/robotests/assets/grandfather_not_implementing_index_provider b/tests/robotests/assets/grandfather_not_implementing_index_provider
index 37869e97cf2..1a7b28958a5 100644
--- a/tests/robotests/assets/grandfather_not_implementing_index_provider
+++ b/tests/robotests/assets/grandfather_not_implementing_index_provider
@@ -39,7 +39,6 @@ com.android.settings.enterprise.ApplicationListFragment$AdminGrantedPermissionMi
com.android.settings.enterprise.ApplicationListFragment$EnterpriseInstalledPackages
com.android.settings.enterprise.EnterpriseSetDefaultAppsListFragment
com.android.settings.fuelgauge.AdvancedPowerUsageDetail
-com.android.settings.fuelgauge.BatteryHistoryDetail
com.android.settings.fuelgauge.InactiveApps
com.android.settings.fuelgauge.RestrictedAppDetails
com.android.settings.IccLockSettings