Index: third_party/android_data_chart/java/src/org/chromium/third_party/android/datausagechart/ChartGridView.java |
diff --git a/third_party/android_data_chart/java/src/org/chromium/third_party/android/datausagechart/ChartGridView.java b/third_party/android_data_chart/java/src/org/chromium/third_party/android/datausagechart/ChartGridView.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..971c23df0aee4d998029a29cbfe75d11bd161203 |
--- /dev/null |
+++ b/third_party/android_data_chart/java/src/org/chromium/third_party/android/datausagechart/ChartGridView.java |
@@ -0,0 +1,114 @@ |
+/* |
+ * Copyright (C) 2013 The Android Open Source Project |
+ * |
+ * Licensed under the Apache License, Version 2.0 (the "License"); |
+ * you may not use this file except in compliance with the License. |
+ * You may obtain a copy of the License at |
+ * |
+ * http://www.apache.org/licenses/LICENSE-2.0 |
+ * |
+ * Unless required by applicable law or agreed to in writing, software |
+ * distributed under the License is distributed on an "AS IS" BASIS, |
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+ * See the License for the specific language governing permissions and |
+ * limitations under the License. |
+ */ |
+ |
+package org.chromium.third_party.android.datausagechart; |
+ |
+import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH; |
+import static android.text.format.DateUtils.FORMAT_SHOW_DATE; |
+ |
+import android.content.Context; |
+import android.content.res.TypedArray; |
+import android.graphics.Canvas; |
+import android.graphics.drawable.Drawable; |
+import android.text.format.DateUtils; |
+import android.util.AttributeSet; |
+import android.view.View; |
+ |
+import org.chromium.third_party.android.R; |
+ |
+import java.util.Locale; |
+ |
+/** |
+ * Background of {@link ChartView} that renders grid lines as requested by |
+ * {@link ChartAxis#getTickPoints()}. |
+ * This is derived from com.android.settings.widget.ChartGridView. |
+ */ |
+public class ChartGridView extends View { |
+ |
+ private ChartAxis mHoriz; |
+ private ChartAxis mVert; |
+ |
+ private Drawable mPrimary; |
+ private Drawable mSecondary; |
+ private Drawable mBorder; |
+ |
+ public static String formatDateRange(Context context, long start, long end) { |
+ final int flags = FORMAT_SHOW_DATE | FORMAT_ABBREV_MONTH; |
+ final StringBuilder builder = new StringBuilder(50); |
+ final java.util.Formatter formatter = new java.util.Formatter( |
+ builder, Locale.getDefault()); |
+ return DateUtils.formatDateRange(context, formatter, start, end, flags, null).toString(); |
+ } |
+ |
+ public ChartGridView(Context context) { |
+ this(context, null, 0); |
+ } |
+ |
+ public ChartGridView(Context context, AttributeSet attrs) { |
+ this(context, attrs, 0); |
+ } |
+ |
+ public ChartGridView(Context context, AttributeSet attrs, int defStyle) { |
+ super(context, attrs, defStyle); |
+ |
+ setWillNotDraw(false); |
+ |
+ final TypedArray a = context.obtainStyledAttributes( |
+ attrs, R.styleable.ChartGridView, defStyle, 0); |
+ |
+ mPrimary = a.getDrawable(R.styleable.ChartGridView_primaryDrawable); |
+ mSecondary = a.getDrawable(R.styleable.ChartGridView_secondaryDrawable); |
+ mBorder = a.getDrawable(R.styleable.ChartGridView_borderDrawable); |
+ a.recycle(); |
+ } |
+ |
+ void init(ChartAxis horiz, ChartAxis vert) { |
+ if (horiz == null) throw new NullPointerException("missing horiz"); |
+ if (vert == null) throw new NullPointerException("missing vert"); |
+ mHoriz = horiz; |
+ mVert = vert; |
+ } |
+ |
+ @Override |
+ protected void onDraw(Canvas canvas) { |
+ final int width = getWidth(); |
+ final int height = getHeight(); |
+ |
+ final Drawable secondary = mSecondary; |
+ float density = getResources().getDisplayMetrics().density; |
+ final int secondaryHeight = Math.max(1, Math.round(density)); |
+ |
+ final float[] vertTicks = mVert.getTickPoints(); |
+ for (float y : vertTicks) { |
+ final int bottom = (int) Math.min(y + secondaryHeight, height); |
+ secondary.setBounds(0, (int) y, width, bottom); |
+ secondary.draw(canvas); |
+ } |
+ |
+ final Drawable primary = mPrimary; |
+ final int primaryWidth = secondaryHeight; |
+ |
+ final float[] horizTicks = mHoriz.getTickPoints(); |
+ for (float x : horizTicks) { |
+ final int right = (int) Math.min(x + primaryWidth, width); |
+ primary.setBounds((int) x, 0, right, height); |
+ primary.draw(canvas); |
+ } |
+ |
+ mBorder.setBounds(0, 0, width, height); |
+ mBorder.draw(canvas); |
+ } |
+} |