From 8caa529fbb25bb06a60beff6ec93657484db3be0 Mon Sep 17 00:00:00 2001 From: vanous Date: Sat, 20 Nov 2021 15:56:12 +0100 Subject: [PATCH] Add Activity info into Device Card: add charts, split widths evenly --- .../adapter/GBDeviceAdapterv2.java | 91 ++++++- app/src/main/res/layout/device_itemv2.xml | 239 +++++++++++------- app/src/main/res/values/strings.xml | 2 + 3 files changed, 235 insertions(+), 97 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java index 92df607a0..021c2d528 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java @@ -22,6 +22,7 @@ import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.text.InputType; import android.transition.TransitionManager; @@ -44,6 +45,12 @@ import androidx.cardview.widget.CardView; import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.recyclerview.widget.RecyclerView; +import com.github.mikephil.charting.animation.Easing; +import com.github.mikephil.charting.charts.PieChart; +import com.github.mikephil.charting.data.PieData; +import com.github.mikephil.charting.data.PieDataSet; +import com.github.mikephil.charting.data.PieEntry; +import com.github.mikephil.charting.utils.MPPointF; import com.google.android.material.snackbar.Snackbar; import com.jaredrummler.android.colorpicker.ColorPickerDialog; import com.jaredrummler.android.colorpicker.ColorPickerDialogListener; @@ -52,6 +59,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.text.DecimalFormat; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; @@ -677,6 +685,7 @@ public class GBDeviceAdapterv2 extends RecyclerView.Adapter entries = new ArrayList<>(); + entries.add(new PieEntry((float) value, context.getResources().getDrawable(R.drawable.ic_star_gold))); + + if (value < target) { + entries.add(new PieEntry((float) (target - value))); + } + + pieChart.setCenterText(String.format("%d%%\n%s", (int) (value * 100 / target), label)); + float colorValue = Math.max(0, Math.min(1, value / target)); + int chartColor = interpolateColor(Color.parseColor(CHART_COLOR_START), Color.parseColor(CHART_COLOR_END), colorValue); + + PieDataSet dataSet = new PieDataSet(entries, ""); + dataSet.setDrawIcons(false); + dataSet.setIconsOffset(new MPPointF(0, -66)); + + if (colorValue == 1) { + dataSet.setDrawIcons(true); + } + dataSet.setSliceSpace(0f); + dataSet.setSelectionShift(5f); + dataSet.setColors(chartColor, Color.LTGRAY); + + PieData data = new PieData(dataSet); + data.setValueTextSize(0f); + data.setValueTextColor(Color.WHITE); + + pieChart.setData(data); + pieChart.invalidate(); + } + private float interpolate(float a, float b, float proportion) { + return (a + ((b - a) * proportion)); + } + + private int interpolateColor(int a, int b, float proportion) { + float[] hsva = new float[3]; + float[] hsvb = new float[3]; + Color.colorToHSV(a, hsva); + Color.colorToHSV(b, hsvb); + for (int i = 0; i < 3; i++) { + hsvb[i] = interpolate(hsva[i], hsvb[i], proportion); + } + return Color.HSVToColor(hsvb); + } + } diff --git a/app/src/main/res/layout/device_itemv2.xml b/app/src/main/res/layout/device_itemv2.xml index 71d56fac2..88b829c56 100644 --- a/app/src/main/res/layout/device_itemv2.xml +++ b/app/src/main/res/layout/device_itemv2.xml @@ -463,135 +463,182 @@ - + + android:layout_marginBottom="10dp" + android:orientation="vertical"> - - + android:gravity="center_horizontal" + android:orientation="horizontal" + android:paddingLeft="3dp" + android:paddingRight="3dp" + android:paddingBottom="15dp"> + android:layout_gravity="bottom|center" + android:layout_marginBottom="0dp" + android:layout_weight="1" + android:orientation="horizontal"> - + + + android:orientation="vertical" + android:paddingStart="10dp" + android:paddingEnd="10dp"> + + + + + - - - - - - - + android:layout_gravity="bottom|center" + android:layout_marginBottom="0dp" + android:layout_weight="1" + android:orientation="horizontal"> - + + + android:orientation="vertical" + android:paddingStart="10dp" + android:paddingEnd="10dp"> - + + + + + + + + + + + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingStart="10dp" + android:paddingEnd="10dp"> + + + + + - + - + - - - - + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c75086b28..bd200ea39 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -561,6 +561,8 @@ Steps history Current steps/min Total steps + Total distance + Sleep time Steps per minute history Start your activity Current / Max heart rate: %1$d / %2$d