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

Commit be196018 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents 5345fce5 6f4179c3
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
        }
    }
}