Merge "Refine BatteryInfo and battery drawable" into oc-dev
am: 57af565fb7
Change-Id: Ie9fce326b23293e9f66d71f4be4b166aae310eb0
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