From 00693dd81a15e2dd2c262b207d64fdbf730229e9 Mon Sep 17 00:00:00 2001 From: Ray Li Date: Sun, 19 Aug 2018 18:50:39 -0500 Subject: [PATCH 1/2] Update AndroidX *Update to AndroidX. *Update Gradle to v3.2.0-beta05. *TargetSDK v28. --- SlimChart/build.gradle | 9 ++++----- .../main/java/com/mancj/slimchart/SlimChart.java | 8 ++++---- app/build.gradle | 13 ++++++------- .../main/java/com/mancj/example/MainActivity.java | 4 ++-- app/src/main/res/layout/activity_main.xml | 6 +++--- build.gradle | 2 +- gradle.properties | 2 ++ gradle/wrapper/gradle-wrapper.properties | 4 ++-- 8 files changed, 24 insertions(+), 24 deletions(-) diff --git a/SlimChart/build.gradle b/SlimChart/build.gradle index 88e4d82..f117eda 100644 --- a/SlimChart/build.gradle +++ b/SlimChart/build.gradle @@ -1,12 +1,11 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 28 defaultConfig { minSdkVersion 14 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 1 versionName "0.1.0" } @@ -19,6 +18,6 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:appcompat-v7:27.1.0' + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.0-rc01' } diff --git a/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java b/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java index b5dee00..dd9744f 100644 --- a/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java +++ b/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java @@ -9,10 +9,10 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Typeface; -import android.support.annotation.ColorInt; -import android.support.annotation.ColorRes; -import android.support.annotation.StringRes; -import android.support.v4.content.ContextCompat; +import androidx.annotation.ColorInt; +import androidx.annotation.ColorRes; +import androidx.annotation.StringRes; +import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.util.Log; import android.view.View; diff --git a/app/build.gradle b/app/build.gradle index 82fca38..d82eaea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,11 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 - buildToolsVersion "27.0.3" + compileSdkVersion 28 defaultConfig { applicationId "com.mancj.example" minSdkVersion 14 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 1 versionName "1.0" vectorDrawables.useSupportLibrary = true @@ -20,9 +19,9 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) - compile project(path: ':slimchart') + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation project(path: ':slimchart') - compile 'com.android.support:appcompat-v7:27.1.0' - compile 'com.android.support:design:27.1.0' + implementation 'androidx.appcompat:appcompat:1.0.0-rc01' + implementation 'com.google.android.material:material:1.0.0-rc01' } diff --git a/app/src/main/java/com/mancj/example/MainActivity.java b/app/src/main/java/com/mancj/example/MainActivity.java index 05cbe9b..f0022a0 100644 --- a/app/src/main/java/com/mancj/example/MainActivity.java +++ b/app/src/main/java/com/mancj/example/MainActivity.java @@ -2,8 +2,8 @@ import android.graphics.Color; import android.os.Bundle; -import android.support.design.widget.FloatingActionButton; -import android.support.v7.app.AppCompatActivity; +import com.google.android.material.floatingactionbutton.FloatingActionButton; +import androidx.appcompat.app.AppCompatActivity; import android.view.View; import com.mancj.slimchart.SlimChart; diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 6bb3db3..e006171 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,5 +1,5 @@ - - - + diff --git a/build.gradle b/build.gradle index 7e01a0a..8f4d28f 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.2.0-beta05' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle.properties b/gradle.properties index aac7c9b..9e6fce1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,6 +9,8 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index aaac9ce..317e161 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Mar 08 09:56:46 CST 2018 +#Sun Aug 19 18:40:49 CDT 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-all.zip From a647c79c30e6827f23d703d2f184ee313442c109 Mon Sep 17 00:00:00 2001 From: Ray Li Date: Sun, 19 Aug 2018 18:51:51 -0500 Subject: [PATCH 2/2] Code Cleanup *Run Android Code Cleanup. --- SlimChart/src/main/AndroidManifest.xml | 7 +- .../java/com/mancj/slimchart/SlimChart.java | 110 ++++++++++------- .../main/java/com/mancj/slimchart/Stat.java | 21 +++- .../java/com/mancj/example/MainActivity.java | 25 ++-- app/src/main/res/drawable/circle.xml | 4 +- app/src/main/res/layout/activity_main.xml | 12 +- app/src/main/res/layout/content_main.xml | 116 +++++++++--------- 7 files changed, 163 insertions(+), 132 deletions(-) diff --git a/SlimChart/src/main/AndroidManifest.xml b/SlimChart/src/main/AndroidManifest.xml index 39429a6..80994c3 100644 --- a/SlimChart/src/main/AndroidManifest.xml +++ b/SlimChart/src/main/AndroidManifest.xml @@ -1,6 +1,9 @@ - + - diff --git a/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java b/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java index dd9744f..256eae5 100644 --- a/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java +++ b/SlimChart/src/main/java/com/mancj/slimchart/SlimChart.java @@ -9,10 +9,6 @@ import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Typeface; -import androidx.annotation.ColorInt; -import androidx.annotation.ColorRes; -import androidx.annotation.StringRes; -import androidx.core.content.ContextCompat; import android.util.AttributeSet; import android.util.Log; import android.view.View; @@ -21,8 +17,11 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; -import java.util.LinkedHashMap; -import java.util.Map; + +import androidx.annotation.ColorInt; +import androidx.annotation.ColorRes; +import androidx.annotation.StringRes; +import androidx.core.content.ContextCompat; public class SlimChart extends View { private static final float DEFAULT_SIZE = 100; @@ -55,7 +54,7 @@ public SlimChart(Context context, AttributeSet attrs, int defStyleAttr) { init(attrs); } - private void init(AttributeSet attrs){ + private void init(AttributeSet attrs) { TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.SlimChart); try { this.density = getContext().getResources().getDisplayMetrics().density; @@ -69,7 +68,7 @@ private void init(AttributeSet attrs){ this.color = typedArray.getColor(R.styleable.SlimChart_defaultColor, defColor); chartRect = new RectF(); - }finally { + } finally { typedArray.recycle(); } } @@ -84,7 +83,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = 0; int height = 0; - switch (widthSpec){ + switch (widthSpec) { case MeasureSpec.AT_MOST: width = defaultSize; break; @@ -93,7 +92,7 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { break; } - switch (heightSpec){ + switch (heightSpec) { case MeasureSpec.AT_MOST: height = defaultSize; break; @@ -105,13 +104,13 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int chartSize = Math.min(width, height); int centerX = width / 2 - chartSize / 2; int centerY = height / 2 - chartSize / 2; - int strokeHalf = strokeWidth/2; + int strokeHalf = strokeWidth / 2; chartRect.set(centerX + strokeHalf, centerY + strokeHalf, centerX + chartSize - strokeHalf, centerY + chartSize - strokeHalf); setMeasuredDimension(width, height); } - public void playStartAnimation(){ + public void playStartAnimation() { float from = 0; float to = 1; ValueAnimator animator = ValueAnimator.ofFloat(from, to); @@ -132,14 +131,14 @@ public void onAnimationUpdate(ValueAnimator animation) { animator.start(); } - public void setStartAnimationDuration(int duration){ + public void setStartAnimationDuration(int duration) { this.animDuration = duration; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); - if (stats != null){ + if (stats != null) { if (colors == null) colors = createColors(); if (colors.size() != stats.size()) { @@ -150,17 +149,17 @@ protected void onDraw(Canvas canvas) { for (int i = 0; i < stats.size(); i++) { drawChart(canvas, colors.get(i), calculatePercents(stats.get(i))); } - }else { + } else { drawChart(canvas, color, calculatePercents(FULL_CIRCLE_ANGLE)); } drawText(canvas); } - private float calculatePercents(float degree){ + private float calculatePercents(float degree) { return degree * FULL_CIRCLE_ANGLE / maxStat; } - private ArrayList createColors(){ + private ArrayList createColors() { ArrayList colors = new ArrayList<>(); int chartsCount = stats.size(); float add = .9f / chartsCount; @@ -174,38 +173,41 @@ private ArrayList createColors(){ return colors; } - private void drawText(Canvas canvas){ - if (this.text == null){ + private void drawText(Canvas canvas) { + if (this.text == null) { return; } Paint paint = new Paint(); paint.setColor(textColor); paint.setAntiAlias(true); - paint.setTextSize(chartRect.height()/3); + paint.setTextSize(chartRect.height() / 3); paint.setTypeface(Typeface.DEFAULT_BOLD); Rect textBounds = new Rect(); paint.getTextBounds(text, 0, text.length(), textBounds); paint.measureText(text); - canvas.drawText(text, getWidth()/2-textBounds.right/2, getHeight()/2 + textBounds.height()/2, paint); + canvas.drawText(text, getWidth() / 2 - textBounds.right / 2, getHeight() / 2 + textBounds.height() / 2, paint); } - private void drawChart(Canvas canvas, int color, float degree){ + private void drawChart(Canvas canvas, int color, float degree) { Paint paint = new Paint(); paint.setStyle(Paint.Style.STROKE); paint.setColor(color); paint.setStrokeWidth(strokeWidth); paint.setAntiAlias(true); - if (roundEdges){ + if (roundEdges) { paint.setStrokeCap(Paint.Cap.ROUND); } canvas.drawArc(chartRect, 90, degree, false, paint); } + public ArrayList getStats() { + return stats; + } + public void setStats(ArrayList stats) { Collections.sort(stats, Collections.reverseOrder()); this.stats = stats; - if (stacked) - { + if (stacked) { Float statCounter = 0f; for (int i = this.stats.size() - 1; i >= 0; i--) { Float statHolder = this.stats.get(i); @@ -216,9 +218,6 @@ public void setStats(ArrayList stats) { maxStat = stats.get(0); //First stat is the largest, save for arc calculations. invalidate(); } - public ArrayList getStats() { - return stats; - } public void setStatList(ArrayList statList) { Collections.sort(statList, new Comparator() { @@ -237,13 +236,11 @@ else if (t1 < t2) }); stats = new ArrayList<>(); colors = new ArrayList<>(); - for (Stat stat : statList) - { + for (Stat stat : statList) { this.stats.add(stat.getValue()); this.colors.add(stat.getColor()); } - if (stacked) - { + if (stacked) { Log.d("Stacked", "True"); Float statCounter = 0f; for (int i = this.stats.size() - 1; i >= 0; i--) { @@ -260,16 +257,21 @@ else if (t1 < t2) public void setColor(ArrayList colors) { this.colors = colors; } + + public void setColorRes(@ColorRes int colorResId) { + setColor(ContextCompat.getColor(getContext(), colorResId)); + } + + public int getColor() { + return color; + } + public void setColor(@ColorInt int color) { this.colors = null; this.color = color; invalidate(); } - public void setColorRes(@ColorRes int colorResId) { setColor(ContextCompat.getColor(getContext(), colorResId)); } - public int getColor() { - return color; - } public ArrayList getColors() { return colors; } @@ -278,38 +280,52 @@ public void setText(String text) { this.text = text; invalidate(); } - public void setText(@StringRes int textIdRes){ - setText(getContext().getString(textIdRes)); - } + public String getText() { return text; } - public void setTextColor(@ColorInt int textColorInt) { - this.textColor = textColorInt; - invalidate(); + public void setText(@StringRes int textIdRes) { + setText(getContext().getString(textIdRes)); } - public void setTextColorRes(@ColorRes int textColorResId){ setTextColor(ContextCompat.getColor(getContext(), textColorResId)); } + + public void setTextColorRes(@ColorRes int textColorResId) { + setTextColor(ContextCompat.getColor(getContext(), textColorResId)); + } + public int getTextColor() { return textColor; } - public void setStrokeWidth(int strokeWidth) { - this.strokeWidth = (int) (strokeWidth * density); + public void setTextColor(@ColorInt int textColorInt) { + this.textColor = textColorInt; invalidate(); } + public int getStrokeWidth() { return strokeWidth; } + public void setStrokeWidth(int strokeWidth) { + this.strokeWidth = (int) (strokeWidth * density); + invalidate(); + } + public void setRoundEdges(boolean roundEdges) { this.roundEdges = roundEdges; invalidate(); } + public boolean isRoundEdgesEnabled() { return roundEdges; } - public void setStacked(boolean stacked) { this.stacked = stacked; invalidate(); } - public boolean isStacked() { return stacked; } + public boolean isStacked() { + return stacked; + } + + public void setStacked(boolean stacked) { + this.stacked = stacked; + invalidate(); + } } diff --git a/SlimChart/src/main/java/com/mancj/slimchart/Stat.java b/SlimChart/src/main/java/com/mancj/slimchart/Stat.java index eccb992..0e9b77c 100644 --- a/SlimChart/src/main/java/com/mancj/slimchart/Stat.java +++ b/SlimChart/src/main/java/com/mancj/slimchart/Stat.java @@ -5,16 +5,27 @@ public class Stat { Float s_value; Integer s_color; - public Stat() {} + public Stat() { + } public Stat(Float value, Integer color) { s_value = value; s_color = color; } - public Float getValue() { return s_value; } - public Integer getColor() { return s_color; } + public Float getValue() { + return s_value; + } + + public void setValue(Float value) { + s_value = value; + } - public void setValue(Float value) { s_value = value; } - public void setColor(Integer color) { s_color = color; } + public Integer getColor() { + return s_color; + } + + public void setColor(Integer color) { + s_color = color; + } } diff --git a/app/src/main/java/com/mancj/example/MainActivity.java b/app/src/main/java/com/mancj/example/MainActivity.java index f0022a0..0d53d60 100644 --- a/app/src/main/java/com/mancj/example/MainActivity.java +++ b/app/src/main/java/com/mancj/example/MainActivity.java @@ -2,15 +2,16 @@ import android.graphics.Color; import android.os.Bundle; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import androidx.appcompat.app.AppCompatActivity; import android.view.View; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.mancj.slimchart.SlimChart; import com.mancj.slimchart.Stat; import java.util.ArrayList; +import androidx.appcompat.app.AppCompatActivity; + public class MainActivity extends AppCompatActivity { SlimChart slimChart; @@ -31,13 +32,13 @@ protected void onCreate(Bundle savedInstanceState) { // slimChart.setColors(colors); /* Second way to set colors: - * - * slimChart.setColors( - * Color.rgb(46, 41,78), - * Color.rgb(127, 22, 101), - * Color.rgb(217, 3, 104), - * Color.rgb(247, 76, 110)); - * */ + * + * slimChart.setColors( + * Color.rgb(46, 41,78), + * Color.rgb(127, 22, 101), + * Color.rgb(217, 3, 104), + * Color.rgb(247, 76, 110)); + * */ //Create array for your stats ArrayList stats = new ArrayList<>(); @@ -56,9 +57,9 @@ protected void onCreate(Bundle savedInstanceState) { slimChart.setStatList(statList); /* Second way to set stats: - * - * slimChart.setStats(100, 85, 40, 25); - * */ + * + * slimChart.setStats(100, 85, 40, 25); + * */ //Play animation slimChart.setStartAnimationDuration(2000); diff --git a/app/src/main/res/drawable/circle.xml b/app/src/main/res/drawable/circle.xml index abeb8e5..6f2fe43 100644 --- a/app/src/main/res/drawable/circle.xml +++ b/app/src/main/res/drawable/circle.xml @@ -2,7 +2,7 @@ + android:width="8dp" + android:height="8dp"/> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index e006171..d3f38b2 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,11 +1,11 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:fitsSystemWindows="true" + tools:context="com.mancj.example.MainActivity"> diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index bcbb9e3..d3f75cd 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -7,138 +7,138 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="#14172A" - android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" - android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="24dp" + android:paddingRight="@dimen/activity_horizontal_margin" + android:paddingBottom="@dimen/activity_vertical_margin" tools:context="com.mancj.example.MainActivity" tools:showIn="@layout/activity_main"> + android:layout_alignParentTop="true" + android:text="Hello World!" + app:roundedEdges="true" + app:strokeWidth="8dp" + app:text="234" + app:textColor="@color/colorAccent"/> + android:layout_toRightOf="@+id/slimChart" + android:text="Material Design Slim Chart for Android" + android:textAppearance="@style/TextAppearance.AppCompat.Title.Inverse"/> + android:orientation="horizontal"> + android:tint="#FFF4375F" + app:srcCompat="@drawable/circle"/> + android:text="Watch:" + android:textColor="@android:color/white"/> + android:text="18" + android:textColor="@android:color/white" + android:textStyle="normal|bold"/> + android:tint="#FFD1005B" + app:srcCompat="@drawable/circle"/> + android:text="Forks:" + android:textColor="@android:color/white"/> + android:text="91" + android:textColor="@android:color/white" + android:textStyle="normal|bold"/> + android:layout_toRightOf="@+id/slimChart" + android:tint="#FF72095A" + app:srcCompat="@drawable/circle"/> + android:text="Stars" + android:textColor="@android:color/white"/> + android:textStyle="normal|bold"/> + android:layout_alignParentLeft="true" + android:layout_marginTop="16dp" + android:fontFamily="sans-serif-light®" + android:gravity="center_horizontal" + android:text="@string/big_text" + android:textColor="@android:color/white"/>