Merge "Refine BatteryInfo and battery drawable" into oc-dev

am: 57af565fb7

Change-Id: Ie9fce326b23293e9f66d71f4be4b166aae310eb0
This commit is contained in:
Lei Yu
2017-04-13 21:52:40 +00:00
committed by android-build-merger
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);