diff --git a/packages/SettingsLib/res/layout/usage_view.xml b/packages/SettingsLib/res/layout/usage_view.xml index 28981f87978f8..aa1a046974f0e 100644 --- a/packages/SettingsLib/res/layout/usage_view.xml +++ b/packages/SettingsLib/res/layout/usage_view.xml @@ -22,7 +22,8 @@ @@ -37,6 +38,7 @@ layout="@layout/usage_side_label" /> @@ -45,6 +47,7 @@ layout="@layout/usage_side_label" /> diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/UsageGraph.java b/packages/SettingsLib/src/com/android/settingslib/graph/UsageGraph.java index 530ec16d5ccab..1fff0fbb3f619 100644 --- a/packages/SettingsLib/src/com/android/settingslib/graph/UsageGraph.java +++ b/packages/SettingsLib/src/com/android/settingslib/graph/UsageGraph.java @@ -43,6 +43,7 @@ public class UsageGraph extends View { private final Paint mDottedPaint; private final Drawable mDivider; + private final Drawable mTintedDivider; private final int mDividerSize; private final Path mPath = new Path(); @@ -51,6 +52,7 @@ public class UsageGraph extends View { private final SparseIntArray mPaths = new SparseIntArray(); // Paths in local coordinates for drawing. private final SparseIntArray mLocalPaths = new SparseIntArray(); + private final int mCornerRadius; private int mAccentColor; private boolean mShowProjection; @@ -59,6 +61,10 @@ public class UsageGraph extends View { private float mMaxX = 100; private float mMaxY = 100; + private float mMiddleDividerLoc = .5f; + private int mMiddleDividerTint = -1; + private int mTopDividerTint = -1; + public UsageGraph(Context context, @Nullable AttributeSet attrs) { super(context, attrs); final Resources resources = context.getResources(); @@ -68,8 +74,8 @@ public class UsageGraph extends View { mLinePaint.setStrokeCap(Cap.ROUND); mLinePaint.setStrokeJoin(Join.ROUND); mLinePaint.setAntiAlias(true); - mLinePaint.setPathEffect(new CornerPathEffect(resources.getDimensionPixelSize( - R.dimen.usage_graph_line_corner_radius))); + mCornerRadius = resources.getDimensionPixelSize(R.dimen.usage_graph_line_corner_radius); + mLinePaint.setPathEffect(new CornerPathEffect(mCornerRadius)); mLinePaint.setStrokeWidth(resources.getDimensionPixelSize(R.dimen.usage_graph_line_width)); mFillPaint = new Paint(mLinePaint); @@ -86,6 +92,7 @@ public class UsageGraph extends View { TypedValue v = new TypedValue(); context.getTheme().resolveAttribute(com.android.internal.R.attr.listDivider, v, true); mDivider = context.getDrawable(v.resourceId); + mTintedDivider = context.getDrawable(v.resourceId); mDividerSize = resources.getDimensionPixelSize(R.dimen.usage_graph_divider_size); } @@ -98,6 +105,15 @@ public class UsageGraph extends View { mMaxY = maxY; } + void setDividerLoc(int height) { + mMiddleDividerLoc = 1 - height / mMaxY; + } + + void setDividerColors(int middleColor, int topColor) { + mMiddleDividerTint = middleColor; + mTopDividerTint = topColor; + } + public void addPath(SparseIntArray points) { for (int i = 0; i < points.size(); i++) { mPaths.put(points.keyAt(i), points.valueAt(i)); @@ -150,7 +166,7 @@ public class UsageGraph extends View { if (mLocalPaths.size() > 0) { int lastX = mLocalPaths.keyAt(mLocalPaths.size() - 1); int lastY = mLocalPaths.valueAt(mLocalPaths.size() - 1); - if (lastY != PATH_DELIM && (lastX == lx || lastY == ly)) { + if (lastY != PATH_DELIM && !hasDiff(lastX, lx) && !hasDiff(lastY, ly)) { pendingYLoc = ly; continue; } @@ -160,6 +176,10 @@ public class UsageGraph extends View { } } + private boolean hasDiff(int x1, int x2) { + return Math.abs(x2 - x1) >= mCornerRadius; + } + private int getX(float x) { return (int) (x / mMaxX * getWidth()); } @@ -180,9 +200,12 @@ public class UsageGraph extends View { @Override protected void onDraw(Canvas canvas) { // Draw lines across the top, middle, and bottom. - drawDivider(0, canvas); - drawDivider((canvas.getHeight() - mDividerSize) / 2, canvas); - drawDivider(canvas.getHeight() - mDividerSize, canvas); + if (mMiddleDividerLoc != 0) { + drawDivider(0, canvas, mTopDividerTint); + } + drawDivider((int) ((canvas.getHeight() - mDividerSize) * mMiddleDividerLoc), canvas, + mMiddleDividerTint); + drawDivider(canvas.getHeight() - mDividerSize, canvas, -1); if (mLocalPaths.size() == 0) { return; @@ -242,8 +265,13 @@ public class UsageGraph extends View { canvas.drawPath(mPath, mFillPaint); } - private void drawDivider(int y, Canvas canvas) { - mDivider.setBounds(0, y, canvas.getWidth(), y + mDividerSize); - mDivider.draw(canvas); + private void drawDivider(int y, Canvas canvas, int tintColor) { + Drawable d = mDivider; + if (tintColor != -1) { + mTintedDivider.setTint(tintColor); + d = mTintedDivider; + } + d.setBounds(0, y, canvas.getWidth(), y + mDividerSize); + d.draw(canvas); } } diff --git a/packages/SettingsLib/src/com/android/settingslib/graph/UsageView.java b/packages/SettingsLib/src/com/android/settingslib/graph/UsageView.java index f95a97ad00720..ee1821dc6bbe5 100644 --- a/packages/SettingsLib/src/com/android/settingslib/graph/UsageView.java +++ b/packages/SettingsLib/src/com/android/settingslib/graph/UsageView.java @@ -20,6 +20,7 @@ import android.util.AttributeSet; import android.util.SparseIntArray; import android.view.Gravity; import android.view.LayoutInflater; +import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; @@ -98,6 +99,26 @@ public class UsageView extends FrameLayout { mUsageGraph.setAccentColor(color); } + public void setDividerLoc(int dividerLoc) { + mUsageGraph.setDividerLoc(dividerLoc); + } + + public void setDividerColors(int middleColor, int topColor) { + mUsageGraph.setDividerColors(middleColor, topColor); + } + + public void setSideLabelWeights(float before, float after) { + setWeight(R.id.space1, before); + setWeight(R.id.space2, after); + } + + private void setWeight(int id, float weight) { + View v = findViewById(id); + LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) v.getLayoutParams(); + params.weight = weight; + v.setLayoutParams(params); + } + public void setSideLabels(CharSequence[] labels) { if (labels.length != mLabels.length) { throw new IllegalArgumentException("Invalid number of labels"); diff --git a/packages/SystemUI/res/layout/battery_detail.xml b/packages/SystemUI/res/layout/battery_detail.xml index 99121a9966d6e..af3e3796d1576 100644 --- a/packages/SystemUI/res/layout/battery_detail.xml +++ b/packages/SystemUI/res/layout/battery_detail.xml @@ -33,7 +33,7 @@