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:
jackqdyulei
2017-04-04 10:54:21 -07:00
parent 4a30689414
commit ff5bd948b0
7 changed files with 60 additions and 33 deletions

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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(

View File

@@ -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);

View File

@@ -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);