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;