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

Commit fa234b2f authored by Daniel Sandler's avatar Daniel Sandler Committed by Android (Google) Code Review
Browse files

Merge changes from topic 'battery3'

* changes:
  Fix regression in battery size.
  Clean up BatteryMeterDrawable internal api.
parents a327386e 6cfde402
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -58,8 +58,8 @@
    <dimen name="drawer_item_top_bottom_margin">4dp</dimen>
    <dimen name="drawer_item_top_bottom_margin">4dp</dimen>
    <dimen name="drawer_spacer_height">32dp</dimen>
    <dimen name="drawer_spacer_height">32dp</dimen>


    <dimen name="battery_height">48dp</dimen>
    <dimen name="battery_height">14.5dp</dimen>
    <dimen name="battery_width">38dp</dimen>
    <dimen name="battery_width">9.5dp</dimen>


    <!-- Margin on the right side of the system icon group on Keyguard. -->
    <!-- Margin on the right side of the system icon group on Keyguard. -->
    <fraction name="battery_button_height_fraction">10.5%</fraction>
    <fraction name="battery_button_height_fraction">10.5%</fraction>
+28 −31
Original line number Original line Diff line number Diff line
@@ -37,14 +37,13 @@ public class BatteryMeterDrawableBase extends Drawable {


    private static final float ASPECT_RATIO = 9.5f / 14.5f;
    private static final float ASPECT_RATIO = 9.5f / 14.5f;
    public static final String TAG = BatteryMeterDrawableBase.class.getSimpleName();
    public static final String TAG = BatteryMeterDrawableBase.class.getSimpleName();
    public static final String SHOW_PERCENT_SETTING = "status_bar_show_battery_percent";


    protected final Context mContext;
    protected final Context mContext;


    protected int mLevel = -1;
    private int mLevel = -1;
    protected boolean mPluggedIn;
    private boolean mPluggedIn;
    protected boolean mPowerSaveEnabled;
    private boolean mPowerSaveEnabled;
    protected boolean mShowPercent;
    private boolean mShowPercent;


    private static final boolean SINGLE_DIGIT_PERCENT = false;
    private static final boolean SINGLE_DIGIT_PERCENT = false;


@@ -104,7 +103,7 @@ public class BatteryMeterDrawableBase extends Drawable {
        }
        }
        levels.recycle();
        levels.recycle();
        colors.recycle();
        colors.recycle();
        updateShowPercent();

        mWarningString = context.getString(R.string.battery_meter_very_low_overlay_symbol);
        mWarningString = context.getString(R.string.battery_meter_very_low_overlay_symbol);
        mCriticalLevel = mContext.getResources().getInteger(
        mCriticalLevel = mContext.getResources().getInteger(
                com.android.internal.R.integer.config_criticalBatteryWarningLevel);
                com.android.internal.R.integer.config_criticalBatteryWarningLevel);
@@ -143,10 +142,10 @@ public class BatteryMeterDrawableBase extends Drawable {


        mBoltPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mBoltPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        mBoltPaint.setColor(Utils.getDefaultColor(mContext, R.color.batterymeter_bolt_color));
        mBoltPaint.setColor(Utils.getDefaultColor(mContext, R.color.batterymeter_bolt_color));
        mBoltPoints = loadBoltPoints(res);
        mBoltPoints = loadPoints(res, R.array.batterymeter_bolt_points);


        mPlusPaint = new Paint(mBoltPaint);
        mPlusPaint = new Paint(mBoltPaint);
        mPlusPoints = loadPlusPoints(res);
        mPlusPoints = loadPoints(res, R.array.batterymeter_plus_points);


        mDarkModeBackgroundColor =
        mDarkModeBackgroundColor =
                Utils.getDefaultColor(mContext, R.color.dark_mode_icon_color_dual_tone_background);
                Utils.getDefaultColor(mContext, R.color.dark_mode_icon_color_dual_tone_background);
@@ -171,32 +170,34 @@ public class BatteryMeterDrawableBase extends Drawable {
        return mIntrinsicWidth;
        return mIntrinsicWidth;
    }
    }


    public void disableShowPercent() {
    public void setShowPercent(boolean show) {
        mShowPercent = false;
        mShowPercent = show;
        postInvalidate();
        postInvalidate();
    }
    }


    protected void postInvalidate() {
    public void setPluggedIn(boolean val) {
        scheduleSelf(this::invalidateSelf, 0);
        mPluggedIn = val;
        postInvalidate();
    }
    }


    private static float[] loadBoltPoints(Resources res) {
    public void setBatteryLevel(int val) {
        final int[] pts = res.getIntArray(R.array.batterymeter_bolt_points);
        mLevel = val;
        int maxX = 0, maxY = 0;
        postInvalidate();
        for (int i = 0; i < pts.length; i += 2) {
            maxX = Math.max(maxX, pts[i]);
            maxY = Math.max(maxY, pts[i + 1]);
    }
    }
        final float[] ptsF = new float[pts.length];

        for (int i = 0; i < pts.length; i += 2) {
    public void setPowerSave(boolean val) {
            ptsF[i] = (float) pts[i] / maxX;
        mPowerSaveEnabled = val;
            ptsF[i + 1] = (float) pts[i + 1] / maxY;
        postInvalidate();
    }
    }
        return ptsF;

    // an approximation of View.postInvalidate()
    protected void postInvalidate() {
        unscheduleSelf(this::invalidateSelf);
        scheduleSelf(this::invalidateSelf, 0);
    }
    }


    private static float[] loadPlusPoints(Resources res) {
    private static float[] loadPoints(Resources res, int pointArrayRes) {
        final int[] pts = res.getIntArray(R.array.batterymeter_plus_points);
        final int[] pts = res.getIntArray(pointArrayRes);
        int maxX = 0, maxY = 0;
        int maxX = 0, maxY = 0;
        for (int i = 0; i < pts.length; i += 2) {
        for (int i = 0; i < pts.length; i += 2) {
            maxX = Math.max(maxX, pts[i]);
            maxX = Math.max(maxX, pts[i]);
@@ -219,10 +220,6 @@ public class BatteryMeterDrawableBase extends Drawable {
        mWarningTextHeight = -mWarningTextPaint.getFontMetrics().ascent;
        mWarningTextHeight = -mWarningTextPaint.getFontMetrics().ascent;
    }
    }


    protected void updateShowPercent() {
        mShowPercent = true;
    }

    private int getColorForLevel(int percent) {
    private int getColorForLevel(int percent) {
        // If we are in power save mode, always use the normal color.
        // If we are in power save mode, always use the normal color.
        if (mPowerSaveEnabled) {
        if (mPowerSaveEnabled) {
+20 −0
Original line number Original line Diff line number Diff line
@@ -48,4 +48,24 @@ public class BatteryMeterDrawableBaseTest {
        verify(canvas, never()).drawPath(any(), any());
        verify(canvas, never()).drawPath(any(), any());
        verify(canvas, never()).drawText(anyString(), anyFloat(), anyFloat(), any());
        verify(canvas, never()).drawText(anyString(), anyFloat(), anyFloat(), any());
    }
    }

    @Test
    public void testDrawingForTypicalValues() {
        final Canvas canvas = mock(Canvas.class);
        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 saver : bools) {
                    for (boolean percent : bools) {
                        mBatteryDrawable.setBatteryLevel(l);
                        mBatteryDrawable.setPowerSave(saver);
                        mBatteryDrawable.setPluggedIn(plugged);
                        mBatteryDrawable.setShowPercent(percent);
                        mBatteryDrawable.draw(canvas);
                    }
                }
            }
        }
    }
}
}
+8 −10
Original line number Original line Diff line number Diff line
@@ -27,6 +27,8 @@ import com.android.systemui.statusbar.policy.BatteryController;
public class BatteryMeterDrawable extends BatteryMeterDrawableBase implements
public class BatteryMeterDrawable extends BatteryMeterDrawableBase implements
        BatteryController.BatteryStateChangeCallback {
        BatteryController.BatteryStateChangeCallback {


    public static final String SHOW_PERCENT_SETTING = "status_bar_show_battery_percent";

    private BatteryController mBatteryController;
    private BatteryController mBatteryController;
    private SettingObserver mSettingObserver;
    private SettingObserver mSettingObserver;


@@ -38,16 +40,13 @@ public class BatteryMeterDrawable extends BatteryMeterDrawableBase implements


    @Override
    @Override
    public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
    public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
        mLevel = level;
        setBatteryLevel(level);
        mPluggedIn = pluggedIn;
        setPluggedIn(pluggedIn);

        postInvalidate();
    }
    }


    @Override
    @Override
    public void onPowerSaveChanged(boolean isPowerSave) {
    public void onPowerSaveChanged(boolean isPowerSave) {
        mPowerSaveEnabled = isPowerSave;
        setPowerSave(isPowerSave);
        invalidateSelf();
    }
    }


    public void startListening() {
    public void startListening() {
@@ -62,15 +61,14 @@ public class BatteryMeterDrawable extends BatteryMeterDrawableBase implements
        mBatteryController.removeCallback(this);
        mBatteryController.removeCallback(this);
    }
    }


    @Override
    protected void updateShowPercent() {
    protected void updateShowPercent() {
        mShowPercent = 0 != Settings.System.getInt(mContext.getContentResolver(),
        setShowPercent(0 != Settings.System.getInt(mContext.getContentResolver(),
                SHOW_PERCENT_SETTING, 0);
                SHOW_PERCENT_SETTING, 0));
    }
    }


    public void setBatteryController(BatteryController batteryController) {
    public void setBatteryController(BatteryController batteryController) {
        mBatteryController = batteryController;
        mBatteryController = batteryController;
        mPowerSaveEnabled = mBatteryController.isPowerSave();
        setPowerSave(mBatteryController.isPowerSave());
    }
    }


    private final class SettingObserver extends ContentObserver {
    private final class SettingObserver extends ContentObserver {
+1 −1
Original line number Original line Diff line number Diff line
@@ -197,7 +197,7 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll
            }
            }
            mDrawable.onBatteryLevelChanged(100, false, false);
            mDrawable.onBatteryLevelChanged(100, false, false);
            mDrawable.onPowerSaveChanged(true);
            mDrawable.onPowerSaveChanged(true);
            mDrawable.disableShowPercent();
            mDrawable.setShowPercent(false);
            ((ImageView) mCurrentView.findViewById(android.R.id.icon)).setImageDrawable(mDrawable);
            ((ImageView) mCurrentView.findViewById(android.R.id.icon)).setImageDrawable(mDrawable);
            Checkable checkbox = (Checkable) mCurrentView.findViewById(android.R.id.toggle);
            Checkable checkbox = (Checkable) mCurrentView.findViewById(android.R.id.toggle);
            checkbox.setChecked(mPowerSave);
            checkbox.setChecked(mPowerSave);
Loading