From ff5bd948b0b5fc2122b4fe9dafe5245a2c05694c Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Tue, 4 Apr 2017 10:54:21 -0700 Subject: [PATCH] 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 --- .../src/com/android/settingslib/BatteryInfo.java | 26 ++++++++--------- .../graph/BatteryMeterDrawableBase.java | 34 ++++++++++++++++------ .../graph/BatteryMeterDrawableBaseTest.java | 4 +-- .../com/android/settingslib/BatteryInfoTest.java | 15 ++++++++-- .../src/com/android/systemui/BatteryMeterView.java | 2 +- .../systemui/qs/tiles/BatterySaverTile.java | 2 +- .../android/systemui/BatteryMeterDrawableTest.java | 10 +++---- 7 files changed, 60 insertions(+), 33 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java b/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java index 5b2541c8e7d1..2d8defafdcc5 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 61ca13d2819a..9d6505bc5130 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 4de2c1249241..83667ea00629 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 962c4e7c3a27..69efc9e76ae0 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 d57e88cce351..911ef244177c 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 8209ee2d5d99..ecc275db46b6 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 6b47ada8fea7..e1f56a47e641 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); -- 2.11.0