diff --git a/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java b/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java index 5b2541c8e7d10..2d8defafdcc5b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java +++ b/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java @@ -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); } } diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java index 61ca13d2819a8..9d6505bc51309 100755 --- a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java +++ b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java @@ -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; + } } diff --git a/packages/SettingsLib/tests/integ/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java b/packages/SettingsLib/tests/integ/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java index 4de2c1249241a..83667ea00629c 100644 --- a/packages/SettingsLib/tests/integ/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java +++ b/packages/SettingsLib/tests/integ/src/com/android/settingslib/graph/BatteryMeterDrawableBaseTest.java @@ -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); } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java index 962c4e7c3a279..69efc9e76ae07 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java @@ -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); } } diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java index d57e88cce351e..911ef244177cf 100644 --- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java +++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java @@ -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( diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java index 8209ee2d5d993..ecc275db46b6c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java @@ -181,7 +181,7 @@ public class BatterySaverTile extends QSTileImpl 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); diff --git a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java index 6b47ada8fea7e..e1f56a47e6413 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/BatteryMeterDrawableTest.java @@ -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);