Refine BatteryInfo and battery drawable
1. Remove "m" prefix for all public field 2. Change logic about field "discharging", now it only controlled by whether it is plugged in. 3. Change Paint in drawable to protected Bug: 36862496 Test: RunSettingsLibTests Change-Id: I2908ae6868dc877d3ce6a8a63ec17826a6dcca1d
This commit is contained in:
@@ -25,22 +25,21 @@ import android.os.BatteryStats.HistoryItem;
|
||||
import android.os.Bundle;
|
||||
import android.os.SystemClock;
|
||||
import android.text.format.Formatter;
|
||||
import android.util.Log;
|
||||
import android.util.SparseIntArray;
|
||||
import com.android.internal.os.BatteryStatsHelper;
|
||||
import com.android.settingslib.graph.UsageView;
|
||||
|
||||
public class BatteryInfo {
|
||||
|
||||
public String mChargeLabelString;
|
||||
public int mBatteryLevel;
|
||||
public boolean mDischarging = true;
|
||||
public String chargeLabelString;
|
||||
public int batteryLevel;
|
||||
public boolean discharging = true;
|
||||
public long remainingTimeUs = 0;
|
||||
public String batteryPercentString;
|
||||
public String remainingLabel;
|
||||
public String statusLabel;
|
||||
private BatteryStats mStats;
|
||||
private boolean mCharging;
|
||||
private BatteryStats mStats;
|
||||
private long timePeriod;
|
||||
|
||||
public interface Callback {
|
||||
@@ -132,10 +131,11 @@ public class BatteryInfo {
|
||||
BatteryStats stats, long elapsedRealtimeUs, boolean shortString) {
|
||||
BatteryInfo info = new BatteryInfo();
|
||||
info.mStats = stats;
|
||||
info.mBatteryLevel = Utils.getBatteryLevel(batteryBroadcast);
|
||||
info.batteryPercentString = Utils.formatPercentage(info.mBatteryLevel);
|
||||
info.batteryLevel = Utils.getBatteryLevel(batteryBroadcast);
|
||||
info.batteryPercentString = Utils.formatPercentage(info.batteryLevel);
|
||||
info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
|
||||
final Resources resources = context.getResources();
|
||||
|
||||
info.statusLabel = Utils.getBatteryStatus(resources, batteryBroadcast);
|
||||
if (!info.mCharging) {
|
||||
final long drainTime = stats.computeBatteryTimeRemaining(elapsedRealtimeUs);
|
||||
@@ -147,20 +147,20 @@ public class BatteryInfo {
|
||||
shortString ? R.string.power_remaining_duration_only_short
|
||||
: R.string.power_remaining_duration_only,
|
||||
timeString);
|
||||
info.mChargeLabelString = resources.getString(
|
||||
info.chargeLabelString = resources.getString(
|
||||
shortString ? R.string.power_discharging_duration_short
|
||||
: R.string.power_discharging_duration,
|
||||
info.batteryPercentString, timeString);
|
||||
} else {
|
||||
info.remainingLabel = null;
|
||||
info.mChargeLabelString = info.batteryPercentString;
|
||||
info.chargeLabelString = info.batteryPercentString;
|
||||
}
|
||||
} else {
|
||||
final long chargeTime = stats.computeChargeTimeRemaining(elapsedRealtimeUs);
|
||||
final int status = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_STATUS,
|
||||
BatteryManager.BATTERY_STATUS_UNKNOWN);
|
||||
info.discharging = false;
|
||||
if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) {
|
||||
info.mDischarging = false;
|
||||
info.remainingTimeUs = chargeTime;
|
||||
String timeString = Formatter.formatShortElapsedTime(context,
|
||||
chargeTime / 1000);
|
||||
@@ -168,13 +168,13 @@ public class BatteryInfo {
|
||||
: R.string.power_charging_duration;
|
||||
info.remainingLabel = resources.getString(
|
||||
R.string.power_remaining_charging_duration_only, timeString);
|
||||
info.mChargeLabelString = resources.getString(resId, info.batteryPercentString,
|
||||
timeString);
|
||||
info.chargeLabelString = resources.getString(
|
||||
resId, info.batteryPercentString, timeString);
|
||||
} else {
|
||||
final String chargeStatusLabel = resources.getString(
|
||||
R.string.battery_info_status_charging_lower);
|
||||
info.remainingLabel = null;
|
||||
info.mChargeLabelString = resources.getString(
|
||||
info.chargeLabelString = resources.getString(
|
||||
R.string.power_charging, info.batteryPercentString, chargeStatusLabel);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,9 +40,15 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
public static final String TAG = BatteryMeterDrawableBase.class.getSimpleName();
|
||||
|
||||
protected final Context mContext;
|
||||
protected final Paint mFramePaint;
|
||||
protected final Paint mBatteryPaint;
|
||||
protected final Paint mWarningTextPaint;
|
||||
protected final Paint mTextPaint;
|
||||
protected final Paint mBoltPaint;
|
||||
protected final Paint mPlusPaint;
|
||||
|
||||
private int mLevel = -1;
|
||||
private boolean mPluggedIn;
|
||||
private boolean mCharging;
|
||||
private boolean mPowerSaveEnabled;
|
||||
private boolean mShowPercent;
|
||||
|
||||
@@ -59,8 +65,6 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
private float mButtonHeightFraction;
|
||||
private float mSubpixelSmoothingLeft;
|
||||
private float mSubpixelSmoothingRight;
|
||||
private final Paint mFramePaint, mBatteryPaint, mWarningTextPaint, mTextPaint, mBoltPaint,
|
||||
mPlusPaint;
|
||||
private float mTextHeight, mWarningTextHeight;
|
||||
private int mIconTint = Color.WHITE;
|
||||
private float mOldDarkIntensity = -1f;
|
||||
@@ -180,16 +184,24 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
postInvalidate();
|
||||
}
|
||||
|
||||
public void setPluggedIn(boolean val) {
|
||||
mPluggedIn = val;
|
||||
public void setCharging(boolean val) {
|
||||
mCharging = val;
|
||||
postInvalidate();
|
||||
}
|
||||
|
||||
public boolean getCharging() {
|
||||
return mCharging;
|
||||
}
|
||||
|
||||
public void setBatteryLevel(int val) {
|
||||
mLevel = val;
|
||||
postInvalidate();
|
||||
}
|
||||
|
||||
public int getBatteryLevel() {
|
||||
return mLevel;
|
||||
}
|
||||
|
||||
public void setPowerSave(boolean val) {
|
||||
mPowerSaveEnabled = val;
|
||||
postInvalidate();
|
||||
@@ -314,7 +326,7 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
mFrame.bottom -= mSubpixelSmoothingRight;
|
||||
|
||||
// set the battery charging color
|
||||
mBatteryPaint.setColor(mPluggedIn ? mChargeColor : getColorForLevel(level));
|
||||
mBatteryPaint.setColor(mCharging ? mChargeColor : getColorForLevel(level));
|
||||
|
||||
if (level >= FULL) {
|
||||
drawFrac = 1f;
|
||||
@@ -337,7 +349,7 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
mShapePath.lineTo(mButtonFrame.left, mFrame.top);
|
||||
mShapePath.lineTo(mButtonFrame.left, mButtonFrame.top);
|
||||
|
||||
if (mPluggedIn) {
|
||||
if (mCharging) {
|
||||
// define the bolt shape
|
||||
final float bl = mFrame.left + mFrame.width() / 4f;
|
||||
final float bt = mFrame.top + mFrame.height() / 6f;
|
||||
@@ -408,7 +420,7 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
boolean pctOpaque = false;
|
||||
float pctX = 0, pctY = 0;
|
||||
String pctText = null;
|
||||
if (!mPluggedIn && !mPowerSaveEnabled && level > mCriticalLevel && mShowPercent) {
|
||||
if (!mCharging && !mPowerSaveEnabled && level > mCriticalLevel && mShowPercent) {
|
||||
mTextPaint.setColor(getColorForLevel(level));
|
||||
mTextPaint.setTextSize(height *
|
||||
(SINGLE_DIGIT_PERCENT ? 0.75f
|
||||
@@ -436,7 +448,7 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
mShapePath.op(mClipPath, Path.Op.INTERSECT);
|
||||
c.drawPath(mShapePath, mBatteryPaint);
|
||||
|
||||
if (!mPluggedIn && !mPowerSaveEnabled) {
|
||||
if (!mCharging && !mPowerSaveEnabled) {
|
||||
if (level <= mCriticalLevel) {
|
||||
// draw the warning text
|
||||
final float x = mWidth * 0.5f;
|
||||
@@ -467,4 +479,8 @@ public class BatteryMeterDrawableBase extends Drawable {
|
||||
public int getOpacity() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getCriticalLevel() {
|
||||
return mCriticalLevel;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -55,12 +55,12 @@ public class BatteryMeterDrawableBaseTest {
|
||||
final int levels[] = { 0, 1, 5, 10, 25, 50, 75, 90, 95, 99, 100 };
|
||||
final boolean bools[] = { false, true };
|
||||
for (int l : levels) {
|
||||
for (boolean plugged : bools) {
|
||||
for (boolean charging : bools) {
|
||||
for (boolean saver : bools) {
|
||||
for (boolean percent : bools) {
|
||||
mBatteryDrawable.setBatteryLevel(l);
|
||||
mBatteryDrawable.setPowerSave(saver);
|
||||
mBatteryDrawable.setPluggedIn(plugged);
|
||||
mBatteryDrawable.setCharging(charging);
|
||||
mBatteryDrawable.setShowPercent(percent);
|
||||
mBatteryDrawable.draw(canvas);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyLong;
|
||||
import static org.mockito.Matchers.eq;
|
||||
@@ -44,10 +45,12 @@ public class BatteryInfoTest {
|
||||
private static final String STATUS_FULL = "Full";
|
||||
private static final String STATUS_CHARGING_NO_TIME = "Charging";
|
||||
private static final String STATUS_CHARGING_TIME = "Charging - 2h left";
|
||||
private static final int PLUGGED_IN = 1;
|
||||
private static final long REMAINING_TIME_NULL = -1;
|
||||
private static final long REMAINING_TIME = 2;
|
||||
private Intent mDisChargingBatteryBroadcast;
|
||||
private Intent mChargingBatteryBroadcast;
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private BatteryStats mBatteryStats;
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
@@ -95,7 +98,7 @@ public class BatteryInfoTest {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, false);
|
||||
|
||||
assertThat(info.mChargeLabelString).isEqualTo(STATUS_CHARGING_TIME);
|
||||
assertThat(info.chargeLabelString).isEqualTo(STATUS_CHARGING_TIME);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -104,6 +107,14 @@ public class BatteryInfoTest {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, false);
|
||||
|
||||
assertThat(info.mChargeLabelString).isEqualTo(STATUS_CHARGING_NO_TIME);
|
||||
assertThat(info.chargeLabelString).isEqualTo(STATUS_CHARGING_NO_TIME);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_pluggedIn_dischargingFalse() {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryStats, SystemClock.elapsedRealtime() * 1000, true);
|
||||
|
||||
assertThat(info.discharging).isEqualTo(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ public class BatteryMeterView extends LinearLayout implements
|
||||
@Override
|
||||
public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
|
||||
mDrawable.setBatteryLevel(level);
|
||||
mDrawable.setPluggedIn(pluggedIn);
|
||||
mDrawable.setCharging(pluggedIn);
|
||||
mLevel = level;
|
||||
updatePercentText();
|
||||
setContentDescription(
|
||||
|
||||
@@ -181,7 +181,7 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements
|
||||
return;
|
||||
}
|
||||
mDrawable.setBatteryLevel(100);
|
||||
mDrawable.setPluggedIn(false);
|
||||
mDrawable.setCharging(false);
|
||||
mDrawable.setPowerSave(true);
|
||||
mDrawable.setShowPercent(false);
|
||||
((ImageView) mCurrentView.findViewById(android.R.id.icon)).setImageDrawable(mDrawable);
|
||||
|
||||
@@ -53,7 +53,7 @@ public class BatteryMeterDrawableTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testDrawImageButNoTextIfPluggedIn() {
|
||||
mBatteryMeter.setBatteryLevel(0);
|
||||
mBatteryMeter.setPluggedIn(true);
|
||||
mBatteryMeter.setCharging(true);
|
||||
final Canvas canvas = mock(Canvas.class);
|
||||
mBatteryMeter.draw(canvas);
|
||||
verify(canvas, atLeastOnce()).drawPath(any(), any());
|
||||
@@ -63,7 +63,7 @@ public class BatteryMeterDrawableTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testDrawTextIfNotPluggedIn() {
|
||||
mBatteryMeter.setBatteryLevel(0);
|
||||
mBatteryMeter.setPluggedIn(false);
|
||||
mBatteryMeter.setCharging(false);
|
||||
final Canvas canvas = mock(Canvas.class);
|
||||
mBatteryMeter.draw(canvas);
|
||||
verify(canvas, times(1)).drawText(anyString(), anyFloat(), anyFloat(), any());
|
||||
@@ -72,7 +72,7 @@ public class BatteryMeterDrawableTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void testDrawNoTextIfPowerSaveEnabled() {
|
||||
mBatteryMeter.setBatteryLevel(0);
|
||||
mBatteryMeter.setPluggedIn(false);
|
||||
mBatteryMeter.setCharging(false);
|
||||
mBatteryMeter.setPowerSave(true);
|
||||
final Canvas canvas = mock(Canvas.class);
|
||||
mBatteryMeter.draw(canvas);
|
||||
@@ -84,7 +84,7 @@ public class BatteryMeterDrawableTest extends SysuiTestCase {
|
||||
int criticalLevel = mResources.getInteger(
|
||||
com.android.internal.R.integer.config_criticalBatteryWarningLevel);
|
||||
mBatteryMeter.setBatteryLevel(criticalLevel);
|
||||
mBatteryMeter.setPluggedIn(false);
|
||||
mBatteryMeter.setCharging(false);
|
||||
final Canvas canvas = mock(Canvas.class);
|
||||
mBatteryMeter.draw(canvas);
|
||||
String warningString = mResources.getString(R.string.battery_meter_very_low_overlay_symbol);
|
||||
@@ -96,7 +96,7 @@ public class BatteryMeterDrawableTest extends SysuiTestCase {
|
||||
int criticalLevel = mResources.getInteger(
|
||||
com.android.internal.R.integer.config_criticalBatteryWarningLevel);
|
||||
mBatteryMeter.setBatteryLevel(criticalLevel + 1);
|
||||
mBatteryMeter.setPluggedIn(false);
|
||||
mBatteryMeter.setCharging(false);
|
||||
final Canvas canvas = mock(Canvas.class);
|
||||
mBatteryMeter.draw(canvas);
|
||||
String warningString = mResources.getString(R.string.battery_meter_very_low_overlay_symbol);
|
||||
|
||||
Reference in New Issue
Block a user