From 28896636b0c3bf5e9a95460021b7d31d465cb9f5 Mon Sep 17 00:00:00 2001 From: ykhung Date: Mon, 10 May 2021 00:18:54 +0800 Subject: [PATCH] Support old pixel devices to adopt non-clickable chart design For clickable devices: https://screenshot.googleplex.com/ktBfjhhHQVYfTmF https://screenshot.googleplex.com/BYutnpu9Dys2sa6 For non-clickable devices: https://screenshot.googleplex.com/64NaKhRDrhfBqBQ Bug: 185308803 Test: make SettingsRoboTests Change-Id: I5bc0bb31946ccb20007ea31d90c05673a200e072 --- .../settings/fuelgauge/BatteryChartView.java | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryChartView.java b/src/com/android/settings/fuelgauge/BatteryChartView.java index ac71812fbd2..cd76d0e80c8 100644 --- a/src/com/android/settings/fuelgauge/BatteryChartView.java +++ b/src/com/android/settings/fuelgauge/BatteryChartView.java @@ -80,6 +80,7 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick private Paint mTextPaint; private Paint mDividerPaint; private Paint mTrapezoidPaint; + private Paint mTrapezoidCurvePaint = null; private TrapezoidSlot[] mTrapezoidSlots; // Records the location to calculate selected index. private MotionEvent mTouchUpEvent; @@ -231,7 +232,7 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick final int trapezoidIndex = getTrapezoidIndex(mTouchUpEvent.getX()); // Ignores the click event if the level is zero. if (trapezoidIndex == SELECTED_INDEX_INVALID - || (trapezoidIndex >= 0 && mLevels[trapezoidIndex] == 0)) { + || !isValidToDraw(trapezoidIndex)) { return; } // Selects all if users click the same trapezoid item two times. @@ -253,6 +254,14 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick .isChartGraphSlotsEnabled(context); Log.d(TAG, "isChartGraphSlotsEnabled:" + mIsSlotsClickable); setClickable(isClickable()); + // Initializes the trapezoid curve paint for non-clickable case. + if (!mIsSlotsClickable && mTrapezoidCurvePaint == null) { + mTrapezoidCurvePaint = new Paint(); + mTrapezoidCurvePaint.setAntiAlias(true); + mTrapezoidCurvePaint.setColor(mTrapezoidSolidColor); + mTrapezoidCurvePaint.setStyle(Paint.Style.STROKE); + mTrapezoidCurvePaint.setStrokeWidth(mDividerWidth * 2); + } } @Override @@ -391,16 +400,24 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick final float unitHeight = availableSpace / 100f; // Draws all trapezoid shapes into the canvas. final Path trapezoidPath = new Path(); + Path trapezoidCurvePath = null; for (int index = 0; index < mTrapezoidCount; index++) { // Not draws the trapezoid for corner or not initialization cases. - if (mLevels[index] == 0 || mLevels[index + 1] == 0) { + if (!isValidToDraw(index)) { + if (mTrapezoidCurvePaint != null && trapezoidCurvePath != null) { + canvas.drawPath(trapezoidCurvePath, mTrapezoidCurvePaint); + trapezoidCurvePath = null; + } continue; } // Configures the trapezoid paint color. - mTrapezoidPaint.setColor( - mSelectedIndex == index || mSelectedIndex == SELECTED_INDEX_ALL - ? mTrapezoidSolidColor - : mTrapezoidColor); + final int trapezoidColor = + !mIsSlotsClickable + ? mTrapezoidColor + : mSelectedIndex == index || mSelectedIndex == SELECTED_INDEX_ALL + ? mTrapezoidSolidColor : mTrapezoidColor; + mTrapezoidPaint.setColor(trapezoidColor); + final float leftTop = round(trapezoidBottom - mLevels[index] * unitHeight); final float rightTop = round(trapezoidBottom - mLevels[index + 1] * unitHeight); trapezoidPath.reset(); @@ -413,6 +430,22 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick trapezoidPath.lineTo(mTrapezoidSlots[index].mLeft, leftTop); // Draws the trapezoid shape into canvas. canvas.drawPath(trapezoidPath, mTrapezoidPaint); + + // Generates path for non-clickable trapezoid curve. + if (mTrapezoidCurvePaint != null) { + if (trapezoidCurvePath == null) { + trapezoidCurvePath= new Path(); + trapezoidCurvePath.moveTo(mTrapezoidSlots[index].mLeft, leftTop); + } else { + trapezoidCurvePath.lineTo(mTrapezoidSlots[index].mLeft, leftTop); + } + trapezoidCurvePath.lineTo(mTrapezoidSlots[index].mRight, rightTop); + } + } + // Draws the trapezoid curve for non-clickable case. + if (mTrapezoidCurvePaint != null && trapezoidCurvePath != null) { + canvas.drawPath(trapezoidCurvePath, mTrapezoidCurvePaint); + trapezoidCurvePath = null; } } @@ -428,6 +461,14 @@ public class BatteryChartView extends AppCompatImageView implements View.OnClick return SELECTED_INDEX_INVALID; } + private boolean isValidToDraw(int trapezoidIndex) { + return mLevels != null + && trapezoidIndex >= 0 + && trapezoidIndex < mLevels.length - 1 + && mLevels[trapezoidIndex] != 0 + && mLevels[trapezoidIndex + 1] != 0; + } + // A container class for each trapezoid left and right location. private static final class TrapezoidSlot { public float mLeft;