From ac1875eea031636902edbf2e1f87d5d19726e893 Mon Sep 17 00:00:00 2001 From: Andreas Shimokawa Date: Sun, 26 Feb 2017 21:41:27 +0100 Subject: [PATCH 1/3] Charts: In "Sleep a week" chart display light and deep sleep as stacked bars --- .../charts/AbstractWeekChartFragment.java | 35 ++++++++++--------- .../charts/WeekSleepChartFragment.java | 17 +++++---- .../charts/WeekStepsChartFragment.java | 8 ++--- 3 files changed, 33 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java index a46bd1af6..b33d14cdb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/AbstractWeekChartFragment.java @@ -86,13 +86,13 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { for (int counter = 0; counter < 7; counter++) { ActivityAmounts amounts = getActivityAmountsForDay(db, day, device); - entries.add(new BarEntry(counter, getTotalForActivityAmounts(amounts))); + entries.add(new BarEntry(counter, getTotalsForActivityAmounts(amounts))); labels.add(day.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, mLocale)); day.add(Calendar.DATE, 1); } BarDataSet set = new BarDataSet(entries, ""); - set.setColor(getMainColor()); + set.setColors(getColors()); set.setValueFormatter(getFormatter()); BarData barData = new BarData(set); @@ -106,29 +106,32 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { } private DayData refreshDayPie(DBHandler db, Calendar day, GBDevice device) { - ActivityAmounts amounts = getActivityAmountsForDay(db, day, device); - int totalValue = getTotalForActivityAmounts(amounts); PieData data = new PieData(); List entries = new ArrayList<>(); - List colors = new ArrayList<>(); + PieDataSet set = new PieDataSet(entries, ""); - entries.add(new PieEntry(totalValue, "")); //we don't want labels on the pie chart - colors.add(getMainColor()); - - if (totalValue < mTargetValue) { - entries.add(new PieEntry((mTargetValue - totalValue))); //we don't want labels on the pie chart - colors.add(Color.GRAY); + ActivityAmounts amounts = getActivityAmountsForDay(db, day, device); + float totalValues[] = getTotalsForActivityAmounts(amounts); + float totalValue = 0; + for (float value : totalValues) { + totalValue += value; + entries.add(new PieEntry(value)); } - PieDataSet set = new PieDataSet(entries, ""); set.setValueFormatter(getFormatter()); - set.setColors(colors); + set.setColors(getColors()); + + if (totalValue < mTargetValue) { + entries.add(new PieEntry((mTargetValue - totalValue))); + set.addColor(Color.GRAY); + } + data.setDataSet(set); //this hides the values (numeric) added to the set. These would be shown aside the strings set with addXValue above data.setDrawValues(false); - return new DayData(data, formatPieValue(totalValue)); + return new DayData(data, formatPieValue((int) totalValue)); } protected abstract String formatPieValue(int value); @@ -286,9 +289,9 @@ public abstract class AbstractWeekChartFragment extends AbstractChartFragment { abstract int getGoal(); - abstract int getTotalForActivityAmounts(ActivityAmounts activityAmounts); + abstract float[] getTotalsForActivityAmounts(ActivityAmounts activityAmounts); abstract IValueFormatter getFormatter(); - abstract Integer getMainColor(); + abstract int[] getColors(); } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java index 21625c5fa..30e1c4b55 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekSleepChartFragment.java @@ -24,14 +24,17 @@ public class WeekSleepChartFragment extends AbstractWeekChartFragment { } @Override - int getTotalForActivityAmounts(ActivityAmounts activityAmounts) { - long totalSeconds = 0; + float[] getTotalsForActivityAmounts(ActivityAmounts activityAmounts) { + long totalSecondsDeepSleep = 0; + long totalSecondsLightSleep = 0; for (ActivityAmount amount : activityAmounts.getAmounts()) { - if ((amount.getActivityKind() & ActivityKind.TYPE_SLEEP) != 0) { - totalSeconds += amount.getTotalSeconds(); + if (amount.getActivityKind() == ActivityKind.TYPE_DEEP_SLEEP) { + totalSecondsDeepSleep += amount.getTotalSeconds(); + } else if (amount.getActivityKind() == ActivityKind.TYPE_LIGHT_SLEEP) { + totalSecondsLightSleep += amount.getTotalSeconds(); } } - return (int) (totalSeconds / 60); + return new float[]{(int) (totalSecondsDeepSleep / 60), (int) (totalSecondsLightSleep / 60)}; } @Override @@ -50,7 +53,7 @@ public class WeekSleepChartFragment extends AbstractWeekChartFragment { } @Override - Integer getMainColor() { - return akLightSleep.color; + int[] getColors() { + return new int[]{akDeepSleep.color, akLightSleep.color}; } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java index f0cfb5d6d..ee843f7bb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/WeekStepsChartFragment.java @@ -24,13 +24,13 @@ public class WeekStepsChartFragment extends AbstractWeekChartFragment { } @Override - int getTotalForActivityAmounts(ActivityAmounts activityAmounts) { + float[] getTotalsForActivityAmounts(ActivityAmounts activityAmounts) { int totalSteps = 0; for (ActivityAmount amount : activityAmounts.getAmounts()) { totalSteps += amount.getTotalSteps(); amount.getTotalSteps(); } - return totalSteps; + return new float[]{totalSteps}; } @Override @@ -44,7 +44,7 @@ public class WeekStepsChartFragment extends AbstractWeekChartFragment { } @Override - Integer getMainColor() { - return akActivity.color; + int[] getColors() { + return new int[]{akActivity.color}; } } From 19b0e5e8018f014f159068ca4e4bd186aa77fd75 Mon Sep 17 00:00:00 2001 From: cpfeiffer Date: Sun, 26 Feb 2017 22:46:49 +0100 Subject: [PATCH 2/3] Centralize icons for devices --- .../adapter/DeviceCandidateAdapter.java | 13 +----- .../gadgetbridge/adapter/GBDeviceAdapter.java | 41 ++----------------- .../devices/DeviceCoordinator.java | 10 +++-- .../gadgetbridge/model/DeviceType.java | 40 +++++++++++++----- .../service/serial/GBDeviceIoThread.java | 1 + 5 files changed, 43 insertions(+), 62 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/DeviceCandidateAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/DeviceCandidateAdapter.java index a80e3faca..e74e47d22 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/DeviceCandidateAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/DeviceCandidateAdapter.java @@ -45,18 +45,7 @@ public class DeviceCandidateAdapter extends ArrayAdapter { String name = formatDeviceCandidate(device); deviceNameLabel.setText(name); deviceAddressLabel.setText(device.getMacAddress()); - - switch (device.getDeviceType()) { - case PEBBLE: - deviceImageView.setImageResource(R.drawable.ic_device_pebble); - break; - case MIBAND: - case MIBAND2: - deviceImageView.setImageResource(R.drawable.ic_device_miband); - break; - default: - deviceImageView.setImageResource(R.drawable.ic_launcher); - } + deviceImageView.setImageResource(device.getDeviceType().getIcon()); return view; } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java index 18fabf095..b24ee2596 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapter.java @@ -111,43 +111,10 @@ public class GBDeviceAdapter extends ArrayAdapter { batteryStatusLabel.setText(""); } - switch (device.getType()) { - case PEBBLE: - if (device.isConnected()) { - deviceImageView.setImageResource(R.drawable.ic_device_pebble); - } else { - deviceImageView.setImageResource(R.drawable.ic_device_pebble_disabled); - } - break; - case MIBAND: - case MIBAND2: - if (device.isConnected()) { - deviceImageView.setImageResource(R.drawable.ic_device_miband); - } else { - deviceImageView.setImageResource(R.drawable.ic_device_miband_disabled); - } - break; - case VIBRATISSIMO: - if (device.isConnected()) { - deviceImageView.setImageResource(R.drawable.ic_device_lovetoy); - } else { - deviceImageView.setImageResource(R.drawable.ic_device_lovetoy_disabled); - } - break; - case HPLUS: - case MAKIBESF68: - if( device.isConnected()) { - deviceImageView.setImageResource(R.drawable.ic_device_hplus); - } else { - deviceImageView.setImageResource(R.drawable.ic_device_hplus_disabled); - } - break; - default: - if (device.isConnected()) { - deviceImageView.setImageResource(R.drawable.ic_launcher); - } else { - deviceImageView.setImageResource(R.drawable.ic_device_default_disabled); - } + if (device.isConnected()) { + deviceImageView.setImageResource(device.getType().getIcon()); + } else { + deviceImageView.setImageResource(device.getType().getDisabledIcon()); } return view; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java index 346446da0..4db1cd7e7 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/DeviceCoordinator.java @@ -6,7 +6,9 @@ import android.bluetooth.le.ScanFilter; import android.content.Context; import android.net.Uri; import android.os.Build; +import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import java.util.Collection; @@ -83,18 +85,20 @@ public interface DeviceCoordinator { /** * Returns the Activity class to be started in order to perform a pairing of a - * given device. + * given device after its discovery. * - * @return + * @return the activity class for pairing/initial authentication, or null if none */ + @Nullable Class getPairingActivity(); /** * Returns the Activity class that will be used as the primary activity * for the given device. * - * @return + * @return the primary activity class, or null if none */ + @Nullable Class getPrimaryActivity(); /** diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java index 5777b5d9a..690a743bb 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/DeviceType.java @@ -1,5 +1,9 @@ package nodomain.freeyourgadget.gadgetbridge.model; +import android.support.annotation.DrawableRes; + +import nodomain.freeyourgadget.gadgetbridge.R; + /** * For every supported device, a device type constant must exist. * @@ -7,20 +11,26 @@ package nodomain.freeyourgadget.gadgetbridge.model; * and may not be changed. */ public enum DeviceType { - UNKNOWN(-1), - PEBBLE(1), - MIBAND(10), - MIBAND2(11), - VIBRATISSIMO(20), - LIVEVIEW(30), - HPLUS(40), - MAKIBESF68(41), - TEST(1000); + UNKNOWN(-1, R.drawable.ic_launcher, R.drawable.ic_device_default_disabled), + PEBBLE(1, R.drawable.ic_device_pebble, R.drawable.ic_device_pebble_disabled), + MIBAND(10, R.drawable.ic_device_miband, R.drawable.ic_device_miband_disabled), + MIBAND2(11, R.drawable.ic_device_miband, R.drawable.ic_device_miband_disabled), + VIBRATISSIMO(20, R.drawable.ic_device_lovetoy, R.drawable.ic_device_lovetoy_disabled), + LIVEVIEW(30, R.drawable.ic_launcher, R.drawable.ic_device_default_disabled), + HPLUS(40, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled), + MAKIBESF68(41, R.drawable.ic_device_hplus, R.drawable.ic_device_hplus_disabled), + TEST(1000, R.drawable.ic_launcher, R.drawable.ic_device_default_disabled); private final int key; + @DrawableRes + private final int defaultIcon; + @DrawableRes + private final int disabledIcon; - DeviceType(int key) { + DeviceType(int key, int defaultIcon, int disabledIcon) { this.key = key; + this.defaultIcon = defaultIcon; + this.disabledIcon = disabledIcon; } public int getKey() { @@ -39,4 +49,14 @@ public enum DeviceType { } return DeviceType.UNKNOWN; } + + @DrawableRes + public int getIcon() { + return defaultIcon; + } + + @DrawableRes + public int getDisabledIcon() { + return disabledIcon; + } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/GBDeviceIoThread.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/GBDeviceIoThread.java index a61d6a587..4e911978c 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/GBDeviceIoThread.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/serial/GBDeviceIoThread.java @@ -25,6 +25,7 @@ public abstract class GBDeviceIoThread extends Thread { return false; } + @Override public void run() { } From ca73d0c2d4dd35f80777e7355bff1e207f6d6ecb Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Mon, 27 Feb 2017 21:45:10 +0100 Subject: [PATCH 3/3] Add mapping to weather icons --- .../gadgetbridge/model/Weather.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java index 979a6dc69..b6d5ce94d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/model/Weather.java @@ -261,6 +261,35 @@ public class Weather { } } + public static String mapToOpenWeatherMapIcon(int openWeatherMapCondition) { + //see https://openweathermap.org/weather-conditions + String condition = "02d"; //generic "variable" icon + + if (openWeatherMapCondition >= 200 && openWeatherMapCondition < 300) { + condition = "11d"; + } else if (openWeatherMapCondition >= 300 && openWeatherMapCondition < 500) { + condition = "09d"; + } else if (openWeatherMapCondition >= 500 && openWeatherMapCondition < 510) { + condition = "10d"; + } else if (openWeatherMapCondition >= 511 && openWeatherMapCondition < 600) { + condition = "09d"; + } else if (openWeatherMapCondition >= 600 && openWeatherMapCondition < 700) { + condition = "13d"; + } else if (openWeatherMapCondition >= 700 && openWeatherMapCondition < 800) { + condition = "50d"; + } else if (openWeatherMapCondition == 800) { + condition = "01d"; //TODO: night? + } else if (openWeatherMapCondition == 801) { + condition = "02d"; //TODO: night? + } else if (openWeatherMapCondition == 802) { + condition = "03d"; //TODO: night? + } else if (openWeatherMapCondition == 803 || openWeatherMapCondition == 804) { + condition = "04d"; //TODO: night? + } + + return condition; + } + public static int mapToOpenWeatherMapCondition(int yahooCondition) { switch (yahooCondition) { //yahoo weather conditions: