From 4662832d5c73b7bceba53c9dd948f8e9ff1f9026 Mon Sep 17 00:00:00 2001 From: guycnicholas Date: Wed, 8 Nov 2017 09:40:24 -0800 Subject: [PATCH 01/48] For issue #61 updated screenToSeriesY to use the vertical bounds rather than horizontal (#62) --- .../com/androidplot/xy/XYGraphWidget.java | 2 +- .../com/androidplot/xy/XYGraphWidgetTest.java | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/androidplot-core/src/main/java/com/androidplot/xy/XYGraphWidget.java b/androidplot-core/src/main/java/com/androidplot/xy/XYGraphWidget.java index a6460799..d1ce96ec 100644 --- a/androidplot-core/src/main/java/com/androidplot/xy/XYGraphWidget.java +++ b/androidplot-core/src/main/java/com/androidplot/xy/XYGraphWidget.java @@ -489,7 +489,7 @@ protected float seriesToScreenX(Number x) { protected float seriesToScreenY(Number y) { return (float) plot.getBounds().getyRegion(). - transform(y.doubleValue(), gridRect.left, gridRect.right, true); + transform(y.doubleValue(), gridRect.bottom, gridRect.top, true); } @Override diff --git a/androidplot-core/src/test/java/com/androidplot/xy/XYGraphWidgetTest.java b/androidplot-core/src/test/java/com/androidplot/xy/XYGraphWidgetTest.java index 4b9f156a..0bfe4d9d 100644 --- a/androidplot-core/src/test/java/com/androidplot/xy/XYGraphWidgetTest.java +++ b/androidplot-core/src/test/java/com/androidplot/xy/XYGraphWidgetTest.java @@ -79,7 +79,7 @@ public void setUp() throws Exception { xyPlot.setRangeStep(StepMode.INCREMENT_BY_VAL, 1); graphWidget = spy(new XYGraphWidget(layoutManager, xyPlot, size)); - graphWidget.setGridRect(new RectF(0, 0, 100, 100)); + graphWidget.setGridRect(new RectF(0, 0, 10, 100)); graphWidget.setLabelRect(new RectF(0, 0, 100, 100)); } @@ -253,11 +253,11 @@ public void testScreenToSeries() throws Exception { assertEquals(-100, coords.x.intValue()); assertEquals(100, coords.y.intValue()); - coords = graphWidget.screenToSeries(new PointF(100, 100)); + coords = graphWidget.screenToSeries(new PointF(10, 100)); assertEquals(100, coords.x.intValue()); assertEquals(-100, coords.y.intValue()); - coords = graphWidget.screenToSeries(new PointF(50, 50)); + coords = graphWidget.screenToSeries(new PointF(5, 50)); assertEquals(0, coords.x.intValue()); assertEquals(0, coords.y.intValue()); } @@ -271,11 +271,11 @@ public void testSeriesToScreen() throws Exception { assertEquals(0f, point.y); point = graphWidget.seriesToScreen(new XYCoords(100, -100)); - assertEquals(100f, point.x); + assertEquals(10f, point.x); assertEquals(100f, point.y); point = graphWidget.seriesToScreen(new XYCoords(0, 0)); - assertEquals(50f, point.x); + assertEquals(5f, point.x); assertEquals(50f, point.y); } @@ -284,8 +284,8 @@ public void testScreenToSeriesX() throws Exception { when(xyPlot.getBounds()).thenReturn(new RectRegion(-100, 100, -100, 100)); assertEquals(-100, graphWidget.screenToSeriesX(new PointF(0, 0)).intValue()); - assertEquals(100, graphWidget.screenToSeriesX(new PointF(100, 100)).intValue()); - assertEquals(0, graphWidget.screenToSeriesX(new PointF(50, 50)).intValue()); + assertEquals(100, graphWidget.screenToSeriesX(new PointF(10, 100)).intValue()); + assertEquals(0, graphWidget.screenToSeriesX(new PointF(5, 50)).intValue()); } @Test @@ -302,16 +302,16 @@ public void testSeriesToScreenX() throws Exception { when(xyPlot.getBounds()).thenReturn(new RectRegion(-100, 100, -100, 100)); assertEquals(0f, graphWidget.seriesToScreenX(-100)); - assertEquals(100f, graphWidget.seriesToScreenX(100)); - assertEquals(50f, graphWidget.seriesToScreenX(0)); + assertEquals(10f, graphWidget.seriesToScreenX(100)); + assertEquals(5f, graphWidget.seriesToScreenX(0)); } @Test public void testSeriesToScreenY() throws Exception { when(xyPlot.getBounds()).thenReturn(new RectRegion(-100, 100, -100, 100)); - assertEquals(0f, graphWidget.seriesToScreenY(100)); - assertEquals(100f, graphWidget.seriesToScreenY(-100)); + assertEquals(100f, graphWidget.seriesToScreenY(100)); + assertEquals(0f, graphWidget.seriesToScreenY(-100)); assertEquals(50f, graphWidget.seriesToScreenY(0)); } } From 55fce04bff334e0988aa253b25eeb667456d5be8 Mon Sep 17 00:00:00 2001 From: Nick Fellows Date: Fri, 8 Dec 2017 08:43:17 -0600 Subject: [PATCH 02/48] Androidplot 1.5.2 (#65) * target Android SDK 26 * update fig dependency for gradle 3.x.x support * adds custom renderer documentation * remove obsolete class / unnecessary casts * adds sizing section to plot_composition.md * adds more sizing and positioning documentation --- .circleci/config.yml | 2 +- androidplot-core/build.gradle | 6 +- .../src/main/java/com/androidplot/Plot.java | 8 +- .../java/com/androidplot/ui/Formatter.java | 6 +- .../java/com/androidplot/ui/SizeMetric.java | 1 - .../ui/widget/LegendItemOrganizer.java | 9 -- .../java/com/androidplot/xy/BarRenderer.java | 2 +- .../com/androidplot/xy/XYRegionFormatter.java | 6 +- .../src/main/res/values/attrs.xml | 51 ++++++- build.gradle | 13 +- demoapp-wearable/build.gradle | 2 +- demoapp/build.gradle | 11 +- .../demos/SimpleXYPlotActivity.java | 6 +- .../demos/TouchZoomExampleActivity.java | 8 +- .../demos/XYRegionExampleActivity.java | 12 +- .../src/main/res/layout/bar_plot_example.xml | 54 ++++---- .../src/main/res/layout/demo_app_widget.xml | 17 ++- .../res/layout/dynamic_xyplot_example.xml | 22 +-- demoapp/src/main/res/layout/main.xml | 54 +++++--- demoapp/src/main/res/layout/pie_chart.xml | 3 +- .../main/res/layout/step_chart_example.xml | 25 ++-- .../main/res/layout/time_series_example.xml | 42 +++--- .../main/res/layout/touch_zoom_example.xml | 49 +++---- demoapp/src/main/res/values-hdpi/dimens.xml | 18 --- demoapp/src/main/res/values-ldpi/dimens.xml | 20 --- demoapp/src/main/res/values/dimens.xml | 18 --- demoapp/src/main/res/values/style.xml | 28 ---- docs/attrs.md | 50 ++++++- docs/custom_renderer.md | 101 ++++++++++++++ docs/grouprenderer.md | 8 +- docs/images/rounded_bar_renderer.png | Bin 0 -> 70585 bytes docs/images/sizing/abs100x-abs100y.png | Bin 0 -> 5852 bytes docs/images/sizing/abs100x-abs150y.png | Bin 0 -> 6725 bytes docs/images/sizing/abs100x-rel1y.png | Bin 0 -> 6049 bytes docs/images/sizing/fil50x-fil50y.png | Bin 0 -> 7882 bytes docs/images/sizing/rel075x-abs100y.png | Bin 0 -> 5907 bytes docs/index.md | 1 + docs/plot_composition.md | 131 +++++++++++++++++- docs/quickstart.md | 2 +- docs/release_notes.md | 12 ++ gradle/wrapper/gradle-wrapper.properties | 4 +- 41 files changed, 527 insertions(+), 275 deletions(-) delete mode 100644 androidplot-core/src/main/java/com/androidplot/ui/widget/LegendItemOrganizer.java delete mode 100644 demoapp/src/main/res/values-ldpi/dimens.xml delete mode 100644 demoapp/src/main/res/values/style.xml create mode 100644 docs/custom_renderer.md create mode 100644 docs/images/rounded_bar_renderer.png create mode 100644 docs/images/sizing/abs100x-abs100y.png create mode 100644 docs/images/sizing/abs100x-abs150y.png create mode 100644 docs/images/sizing/abs100x-rel1y.png create mode 100644 docs/images/sizing/fil50x-fil50y.png create mode 100644 docs/images/sizing/rel075x-abs100y.png diff --git a/.circleci/config.yml b/.circleci/config.yml index 43c50cfc..6a24c3f8 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -16,7 +16,7 @@ jobs: # CircleCI maintains a library of pre-built images # documented at https://circleci.com/docs/2.0/circleci-images/ - - image: circleci/android:api-25-alpha + - image: circleci/android:api-26-alpha working_directory: ~/repo diff --git a/androidplot-core/build.gradle b/androidplot-core/build.gradle index 3e305c7d..a814a4c1 100644 --- a/androidplot-core/build.gradle +++ b/androidplot-core/build.gradle @@ -58,7 +58,6 @@ task generateAttrsMarkdown(type: AttrMarkdown) { android { compileSdkVersion theCompileSdkVersion - buildToolsVersion theBuildToolsVersion defaultConfig { versionCode theVersionCode @@ -74,7 +73,6 @@ android { lintOptions { abortOnError false } - buildToolsVersion theBuildToolsVersion } group = 'com.androidplot' @@ -85,8 +83,8 @@ def gitUrl = 'https://github.com/halfhp/androidplot.git' dependencies { - compile 'com.halfhp.fig:figlib:1.0.3' - compile 'com.android.support:support-annotations:25.3.1' + compile 'com.halfhp.fig:figlib:1.0.7' + compile 'com.android.support:support-annotations:27.0.2' testCompile "org.mockito:mockito-core:1.10.19" testCompile group: 'junit', name: 'junit', version: '4.12' testCompile "org.robolectric:robolectric:3.1" diff --git a/androidplot-core/src/main/java/com/androidplot/Plot.java b/androidplot-core/src/main/java/com/androidplot/Plot.java index 3ee10174..8b436199 100644 --- a/androidplot-core/src/main/java/com/androidplot/Plot.java +++ b/androidplot-core/src/main/java/com/androidplot/Plot.java @@ -520,7 +520,7 @@ private void loadAttrs(AttributeSet attrs, int defStyle) { // apply "configurator" attrs: (overrides any previously applied styleable attrs) // filter out androidplot prefixed attrs: - HashMap attrHash = new HashMap(); + HashMap attrHash = new HashMap<>(); for (int i = 0; i < attrs.getAttributeCount(); i++) { String attrName = attrs.getAttributeName(i); @@ -529,7 +529,11 @@ private void loadAttrs(AttributeSet attrs, int defStyle) { attrHash.put(attrName.substring(XML_ATTR_PREFIX.length() + 1), attrs.getAttributeValue(i)); } } - Fig.configure(getContext(), this, attrHash); + try { + Fig.configure(getContext(), this, attrHash); + } catch (FigException e) { + throw new RuntimeException(e); + } } } diff --git a/androidplot-core/src/main/java/com/androidplot/ui/Formatter.java b/androidplot-core/src/main/java/com/androidplot/ui/Formatter.java index 8f2a354b..d920ab36 100644 --- a/androidplot-core/src/main/java/com/androidplot/ui/Formatter.java +++ b/androidplot-core/src/main/java/com/androidplot/ui/Formatter.java @@ -48,7 +48,11 @@ public Formatter(Context ctx, int xmlCfgId) { } public void configure(Context ctx, int xmlCfgId) { - Fig.configure(ctx, this, xmlCfgId); + try { + Fig.configure(ctx, this, xmlCfgId); + } catch (FigException e) { + throw new RuntimeException(e); + } } /** diff --git a/androidplot-core/src/main/java/com/androidplot/ui/SizeMetric.java b/androidplot-core/src/main/java/com/androidplot/ui/SizeMetric.java index e3819acd..d7f3e58b 100644 --- a/androidplot-core/src/main/java/com/androidplot/ui/SizeMetric.java +++ b/androidplot-core/src/main/java/com/androidplot/ui/SizeMetric.java @@ -43,7 +43,6 @@ protected void validatePair(float value, SizeMode layoutType) { @Override public float getPixelValue(float size) { - //switch(layoutType) switch(getLayoutType()) { case ABSOLUTE: return getValue(); diff --git a/androidplot-core/src/main/java/com/androidplot/ui/widget/LegendItemOrganizer.java b/androidplot-core/src/main/java/com/androidplot/ui/widget/LegendItemOrganizer.java deleted file mode 100644 index 536ee9d8..00000000 --- a/androidplot-core/src/main/java/com/androidplot/ui/widget/LegendItemOrganizer.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.androidplot.ui.widget; - -import java.util.List; - - -public interface LegendItemOrganizer { - - void organize(List items); -} diff --git a/androidplot-core/src/main/java/com/androidplot/xy/BarRenderer.java b/androidplot-core/src/main/java/com/androidplot/xy/BarRenderer.java index c696bbf2..bb8c4c7f 100644 --- a/androidplot-core/src/main/java/com/androidplot/xy/BarRenderer.java +++ b/androidplot-core/src/main/java/com/androidplot/xy/BarRenderer.java @@ -238,7 +238,7 @@ protected RectF createBarRect(float w1, float h1, float w2, float h2, BarFormatt return result; } - protected void drawBar(Canvas canvas, Bar bar, RectF rect) { + protected void drawBar(Canvas canvas, Bar bar, RectF rect) { // null yVals are skipped: if(bar.getY() == null) { diff --git a/androidplot-core/src/main/java/com/androidplot/xy/XYRegionFormatter.java b/androidplot-core/src/main/java/com/androidplot/xy/XYRegionFormatter.java index b0a3186f..0492c6c2 100644 --- a/androidplot-core/src/main/java/com/androidplot/xy/XYRegionFormatter.java +++ b/androidplot-core/src/main/java/com/androidplot/xy/XYRegionFormatter.java @@ -43,7 +43,11 @@ public class XYRegionFormatter { public XYRegionFormatter(Context ctx, int xmlCfgId) { // prevent configuration of classes derived from this one: if (getClass().equals(XYRegionFormatter.class)) { - Fig.configure(ctx, this, xmlCfgId); + try { + Fig.configure(ctx, this, xmlCfgId); + } catch (FigException e) { + throw new RuntimeException(e); + } } } diff --git a/androidplot-core/src/main/res/values/attrs.xml b/androidplot-core/src/main/res/values/attrs.xml index e640706e..c9dc65a0 100644 --- a/androidplot-core/src/main/res/values/attrs.xml +++ b/androidplot-core/src/main/res/values/attrs.xml @@ -16,12 +16,17 @@ --> + @@ -442,6 +447,10 @@ __dimension|float|integer__ * relative_from_left * relative_from_right * relative_from_center + +`HorizontalPositioning` component of the `HorizontalPosition` of the `TextLabelWidget` +that displays the domain title. +See [Positioning Widgets](plot_composition.md#positioning-widgets) documentation. --> + xmlns:ap="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + ap:title="Growth" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:layout_height="wrap_content" /> + android:progress="10" /> + android:progress="1" /> + android:checked="true" + android:text="Series 1" /> + android:checked="true" + android:text="Series 2" /> \ No newline at end of file diff --git a/demoapp/src/main/res/layout/demo_app_widget.xml b/demoapp/src/main/res/layout/demo_app_widget.xml index 85b5fe6b..81977453 100644 --- a/demoapp/src/main/res/layout/demo_app_widget.xml +++ b/demoapp/src/main/res/layout/demo_app_widget.xml @@ -17,14 +17,13 @@ --> + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> - - + \ No newline at end of file diff --git a/demoapp/src/main/res/layout/dynamic_xyplot_example.xml b/demoapp/src/main/res/layout/dynamic_xyplot_example.xml index ddfd0cba..5b0c5644 100644 --- a/demoapp/src/main/res/layout/dynamic_xyplot_example.xml +++ b/demoapp/src/main/res/layout/dynamic_xyplot_example.xml @@ -1,5 +1,4 @@ - - + xmlns:ap="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent"> + ap:legendTextSize="15sp" + ap:rangeTitle="Range" + ap:title="A Dynamic XY Plot" /> diff --git a/demoapp/src/main/res/layout/main.xml b/demoapp/src/main/res/layout/main.xml index 65a43ef9..590087de 100644 --- a/demoapp/src/main/res/layout/main.xml +++ b/demoapp/src/main/res/layout/main.xml @@ -32,99 +32,117 @@