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

Commit 73bf5eb0 authored by Evan Laird's avatar Evan Laird Committed by android-build-merger
Browse files

Merge "Use BatteryMeterDrawableBase as QS icon for Battery Saver" into oc-dr1-dev am: be196018

am: fdef07d9

Change-Id: I8d8b1f126ed3a7690cc09d9fc38f12583210b407
parents 8ad1d780 fdef07d9
Loading
Loading
Loading
Loading
+39 −6
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Path.Direction;
import android.graphics.Path.FillType;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
@@ -82,6 +83,7 @@ public class BatteryMeterDrawableBase extends Drawable {
    private final float[] mPlusPoints;
    private final Path mPlusPath = new Path();

    private final Rect mPadding = new Rect();
    private final RectF mFrame = new RectF();
    private final RectF mButtonFrame = new RectF();
    private final RectF mBoltFrame = new RectF();
@@ -219,12 +221,40 @@ public class BatteryMeterDrawableBase extends Drawable {
    @Override
    public void setBounds(int left, int top, int right, int bottom) {
        super.setBounds(left, top, right, bottom);
        mHeight = bottom - top;
        mWidth = right - left;
        updateSize();
    }

    private void updateSize() {
        final Rect bounds = getBounds();

        mHeight = (bounds.bottom - mPadding.bottom) - (bounds.top + mPadding.top);
        mWidth = (bounds.right - mPadding.right) - (bounds.left + mPadding.left);
        mWarningTextPaint.setTextSize(mHeight * 0.75f);
        mWarningTextHeight = -mWarningTextPaint.getFontMetrics().ascent;
    }

    @Override
    public boolean getPadding(Rect padding) {
        if (mPadding.left == 0
            && mPadding.top == 0
            && mPadding.right == 0
            && mPadding.bottom == 0) {
            return super.getPadding(padding);
        }

        padding.set(mPadding);
        return true;
    }

    public void setPadding(int left, int top, int right, int bottom) {
        mPadding.left = left;
        mPadding.top = top;
        mPadding.right = right;
        mPadding.bottom = bottom;

        updateSize();
    }

    private int getColorForLevel(int percent) {
        // If we are in power save mode, always use the normal color.
        if (mPowerSaveEnabled) {
@@ -255,6 +285,10 @@ public class BatteryMeterDrawableBase extends Drawable {
        invalidateSelf();
    }

    protected int batteryColorForLevel(int level) {
        return mCharging ? mChargeColor : getColorForLevel(level);
    }

    @Override
    public void draw(Canvas c) {
        final int level = mLevel;
@@ -264,11 +298,10 @@ public class BatteryMeterDrawableBase extends Drawable {
        float drawFrac = (float) level / 100f;
        final int height = mHeight;
        final int width = (int) (ASPECT_RATIO * mHeight);
        int px = (mWidth - width) / 2;

        final int px = (mWidth - width) / 2;
        final int buttonHeight = Math.round(height * mButtonHeightFraction);

        mFrame.set(0, 0, width, height);
        mFrame.set(mPadding.left, mPadding.top, width + mPadding.left, height + mPadding.top);
        mFrame.offset(px, 0);

        // button-frame: area above the battery body
@@ -282,7 +315,7 @@ public class BatteryMeterDrawableBase extends Drawable {
        mFrame.top += buttonHeight;

        // set the battery charging color
        mBatteryPaint.setColor(mCharging ? mChargeColor : getColorForLevel(level));
        mBatteryPaint.setColor(batteryColorForLevel(level));

        if (level >= FULL) {
            drawFrac = 1f;
+33 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@ package com.android.settingslib.graph;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.support.test.runner.AndroidJUnit4;
@@ -68,4 +69,36 @@ public class BatteryMeterDrawableBaseTest {
            }
        }
    }

    @Test
    public void testPadding_returnsCorrectValues() {
        // different pads on each side to differentiate
        final int left = 1;
        final int top = 2;
        final int right = 3;
        final int bottom = 4;

        final Rect expected = new Rect(left, top, right, bottom);
        final Rect padding = new Rect();

        mBatteryDrawable.setPadding(left, top, right, bottom);

        assertThat(mBatteryDrawable.getPadding(padding)).isEqualTo(true);
        assertThat(padding).isEqualTo(expected);
    }

    @Test
    public void testPadding_falseIfUnsetOrZero() {
        final Rect padding = new Rect();
        assertThat(mBatteryDrawable.getPadding(padding)).isEqualTo(false);
        assertThat(isRectZero(padding)).isEqualTo(true);

        mBatteryDrawable.setPadding(0, 0, 0, 0);
        assertThat(mBatteryDrawable.getPadding(padding)).isEqualTo(false);
        assertThat(isRectZero(padding)).isEqualTo(true);
    }

    private boolean isRectZero(Rect r) {
        return r.left == 0 && r.top == 0 && r.right == 0 && r.bottom == 0;
    }
}
+44 −2
Original line number Diff line number Diff line
@@ -15,10 +15,13 @@
 */
package com.android.systemui.qs.tiles;

import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.service.quicksettings.Tile;
import android.widget.Switch;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.graph.BatteryMeterDrawableBase;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
@@ -79,7 +82,9 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements
    protected void handleUpdateState(BooleanState state, Object arg) {
        state.state = mCharging ? Tile.STATE_UNAVAILABLE
                : mPowerSave ? Tile.STATE_ACTIVE : Tile.STATE_INACTIVE;
        state.icon = ResourceIcon.get(R.drawable.ic_qs_battery_saver);
        BatterySaverIcon bsi = new BatterySaverIcon();
        bsi.mState = state.state;
        state.icon = bsi;
        state.label = mContext.getString(R.string.battery_detail_switch_title);
        state.contentDescription = state.label;
        state.value = mPowerSave;
@@ -99,4 +104,41 @@ public class BatterySaverTile extends QSTileImpl<BooleanState> implements
        mPowerSave = isPowerSave;
        refreshState(null);
    }

    public static class BatterySaverIcon extends Icon {
        private int mState;

        @Override
        public Drawable getDrawable(Context context) {
            BatterySaverDrawable b = new BatterySaverDrawable(context, 0);
            b.mState = mState;
            final int pad = context.getResources()
                    .getDimensionPixelSize(R.dimen.qs_tile_divider_height);
            b.setPadding(pad, pad, pad, pad);
            return b;
        }
    }

    private static class BatterySaverDrawable extends BatteryMeterDrawableBase {
        private int mState;
        private static final int MAX_BATTERY = 100;

        BatterySaverDrawable(Context context, int frameColor) {
            super(context, frameColor);
            // Show as full so it's always uniform color
            super.setBatteryLevel(MAX_BATTERY);
            setPowerSave(true);
            setCharging(false);
        }

        @Override
        protected int batteryColorForLevel(int level) {
            return QSTileImpl.getColorForState(mContext, mState);
        }

        @Override
        public void setBatteryLevel(int val) {
            // Don't change the actual level, otherwise this won't draw correctly
        }
    }
}