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
diff --git a/src/com/android/settings/fuelgauge/BatteryChartView.java b/src/com/android/settings/fuelgauge/BatteryChartView.java
index ac71812..cd76d0e 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartView.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartView.java
@@ -80,6 +80,7 @@
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 @@
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 @@
.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 @@
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 @@
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 @@
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;