Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff5bd948 authored by jackqdyulei's avatar jackqdyulei
Browse files

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
parent 4a306894
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -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);
            }
        }
+25 −9
Original line number Diff line number Diff line
@@ -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;
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -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);
                    }
+13 −2
Original line number Diff line number Diff line
@@ -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);
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -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(
Loading