Loading packages/SettingsLib/res/layout/usage_view.xml +4 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ <LinearLayout android:id="@+id/graph_label_group" android:layout_width="match_parent" android:layout_height="@dimen/usage_graph_area_height" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" android:clipChildren="false" android:clipToPadding="false"> Loading @@ -37,6 +38,7 @@ layout="@layout/usage_side_label" /> <Space android:id="@+id/space1" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" /> Loading @@ -45,6 +47,7 @@ layout="@layout/usage_side_label" /> <Space android:id="@+id/space2" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" /> Loading packages/SettingsLib/src/com/android/settingslib/graph/UsageGraph.java +37 −9 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; Loading @@ -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(); Loading @@ -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); Loading @@ -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); } Loading @@ -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)); Loading Loading @@ -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; } Loading @@ -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()); } Loading @@ -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; Loading Loading @@ -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); } } packages/SettingsLib/src/com/android/settingslib/graph/UsageView.java +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); Loading packages/SystemUI/res/layout/battery_detail.xml +1 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ <com.android.settingslib.graph.UsageView android:id="@+id/battery_usage" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_height="141dp" android:layout_marginStart="16dp" android:layout_marginEnd="24dp" systemui:sideLabels="@array/battery_labels" Loading Loading
packages/SettingsLib/res/layout/usage_view.xml +4 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,8 @@ <LinearLayout android:id="@+id/graph_label_group" android:layout_width="match_parent" android:layout_height="@dimen/usage_graph_area_height" android:layout_height="0dp" android:layout_weight="1" android:orientation="horizontal" android:clipChildren="false" android:clipToPadding="false"> Loading @@ -37,6 +38,7 @@ layout="@layout/usage_side_label" /> <Space android:id="@+id/space1" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" /> Loading @@ -45,6 +47,7 @@ layout="@layout/usage_side_label" /> <Space android:id="@+id/space2" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" /> Loading
packages/SettingsLib/src/com/android/settingslib/graph/UsageGraph.java +37 −9 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; Loading @@ -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(); Loading @@ -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); Loading @@ -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); } Loading @@ -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)); Loading Loading @@ -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; } Loading @@ -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()); } Loading @@ -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; Loading Loading @@ -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); } }
packages/SettingsLib/src/com/android/settingslib/graph/UsageView.java +21 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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"); Loading
packages/SystemUI/res/layout/battery_detail.xml +1 −1 Original line number Diff line number Diff line Loading @@ -33,7 +33,7 @@ <com.android.settingslib.graph.UsageView android:id="@+id/battery_usage" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_height="141dp" android:layout_marginStart="16dp" android:layout_marginEnd="24dp" systemui:sideLabels="@array/battery_labels" Loading