diff --git a/packages/SettingsLib/res/color/batterymeter_plus_color.xml b/packages/SettingsLib/res/color/batterymeter_plus_color.xml new file mode 100644 index 0000000000000..949bedeb8ac47 --- /dev/null +++ b/packages/SettingsLib/res/color/batterymeter_plus_color.xml @@ -0,0 +1,18 @@ + + + + + diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java index 4fe9d56a4179e..e2f279a92796c 100644 --- a/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java +++ b/packages/SettingsLib/src/com/android/settingslib/graph/BatteryMeterDrawableBase.java @@ -54,6 +54,7 @@ public class BatteryMeterDrawableBase extends Drawable { private int mLevel = -1; private boolean mCharging; private boolean mPowerSaveEnabled; + private boolean mPowerSaveAsColorError = true; private boolean mShowPercent; private static final boolean SINGLE_DIGIT_PERCENT = false; @@ -150,7 +151,8 @@ public class BatteryMeterDrawableBase extends Drawable { mBoltPaint.setColor(Utils.getDefaultColor(mContext, R.color.batterymeter_bolt_color)); mBoltPoints = loadPoints(res, R.array.batterymeter_bolt_points); - mPlusPaint = new Paint(mBoltPaint); + mPlusPaint = new Paint(Paint.ANTI_ALIAS_FLAG); + mPlusPaint.setColor(Utils.getDefaultColor(mContext, R.color.batterymeter_plus_color)); mPlusPoints = loadPoints(res, R.array.batterymeter_plus_points); mIntrinsicWidth = context.getResources().getDimensionPixelSize(R.dimen.battery_width); @@ -195,6 +197,10 @@ public class BatteryMeterDrawableBase extends Drawable { postInvalidate(); } + protected void setPowerSaveAsColorError(boolean asError) { + mPowerSaveAsColorError = asError; + } + // an approximation of View.postInvalidate() protected void postInvalidate() { unscheduleSelf(this::invalidateSelf); @@ -254,10 +260,6 @@ public class BatteryMeterDrawableBase extends Drawable { } private int getColorForLevel(int percent) { - // If we are in power save mode, always use the normal color. - if (mPowerSaveEnabled) { - return mIconTint; - } int thresh, color = 0; for (int i = 0; i < mColors.length; i += 2) { thresh = mColors[i]; @@ -279,7 +281,6 @@ public class BatteryMeterDrawableBase extends Drawable { mIconTint = fillColor; mFramePaint.setColor(backgroundColor); mBoltPaint.setColor(fillColor); - mPlusPaint.setColor(fillColor); mChargeColor = fillColor; invalidateSelf(); } @@ -392,14 +393,16 @@ public class BatteryMeterDrawableBase extends Drawable { mPlusFrame.top + mPlusPoints[1] * mPlusFrame.height()); } - float boltPct = (mPlusFrame.bottom - levelTop) / (mPlusFrame.bottom - mPlusFrame.top); - boltPct = Math.min(Math.max(boltPct, 0), 1); - if (boltPct <= BOLT_LEVEL_THRESHOLD) { - // draw the bolt if opaque + float fillPct = (mPlusFrame.bottom - levelTop) / (mPlusFrame.bottom - mPlusFrame.top); + fillPct = Math.min(Math.max(fillPct, 0), 1); + if (fillPct <= BOLT_LEVEL_THRESHOLD) { + // draw the plus if opaque c.drawPath(mPlusPath, mPlusPaint); } else { - // otherwise cut the bolt out of the overall shape mShapePath.op(mPlusPath, Path.Op.DIFFERENCE); + if (mPowerSaveAsColorError) { + c.drawPath(mPlusPath, mPlusPaint); + } } } 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 95504edf2e105..89f86c539b747 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatterySaverTile.java @@ -129,6 +129,7 @@ public class BatterySaverTile extends QSTileImpl implements super.setBatteryLevel(MAX_BATTERY); setPowerSave(true); setCharging(false); + setPowerSaveAsColorError(false); } @Override