diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java index 7cea483502..05f0ef8984 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/TemperatureChartFragment.java @@ -44,6 +44,7 @@ import java.util.List; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; +import nodomain.freeyourgadget.gadgetbridge.activities.SettingsActivity; import nodomain.freeyourgadget.gadgetbridge.database.DBHandler; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.devices.TimeSampleProvider; @@ -60,6 +61,7 @@ public class TemperatureChartFragment extends AbstractChartFragment entries = new ArrayList(); + List entries = new ArrayList<>(); long firstTs = 0; for (TemperatureSample sample : samples) { int timestamp_in_seconds = (int) (sample.getTimestamp() / 1000L); - entries.add(new Entry(tsTranslation.shorten(timestamp_in_seconds), sample.getTemperature())); + entries.add(new Entry( + tsTranslation.shorten(timestamp_in_seconds), + (float) (isMetric ? sample.getTemperature() : celsiusToFahrenheit(sample.getTemperature())) + )); if (firstTs == 0) { firstTs = sample.getTimestamp(); } @@ -242,4 +246,7 @@ public class TemperatureChartFragment extends AbstractChartFragment 0 ? accumulator.getMin() : -1; final double maximum = accumulator.getCount() > 0 ? accumulator.getMax() : -1; - tempAverage.setText(average > 0 ? String.format(Locale.ROOT, "%.1f", average) : "-"); - tempMinimum.setText(minimum > 0 ? String.format(Locale.ROOT, "%.1f", minimum) : "-"); - tempMaximum.setText(maximum > 0 ? String.format(Locale.ROOT, "%.1f", maximum) : "-"); + final String unit = getString(isMetric ? R.string.unit_celsius : R.string.unit_fahrenheit); + tempAverage.setText(average > 0 ? String.format(Locale.ROOT, "%.1f %s", average, unit) : "-"); + tempMinimum.setText(minimum > 0 ? String.format(Locale.ROOT, "%.1f %s", minimum, unit) : "-"); + tempMaximum.setText(maximum > 0 ? String.format(Locale.ROOT, "%.1f %s", maximum, unit) : "-"); + final int axisGap = (isMetric ? 3 : 6); if (minimum > 0) { - long axisMin = Math.max(Math.round(minimum) - 3, 0); + long axisMin = Math.max(Math.round(minimum) - axisGap, 0); tempLineChart.getAxisLeft().setAxisMinimum(axisMin); tempLineChart.getAxisRight().setAxisMinimum(axisMin); } if (maximum > 0) { - tempLineChart.getAxisLeft().setAxisMaximum(Math.round(maximum) + 3); - tempLineChart.getAxisRight().setAxisMaximum(Math.round(maximum) + 3); + tempLineChart.getAxisLeft().setAxisMaximum(Math.round(maximum) + axisGap); + tempLineChart.getAxisRight().setAxisMaximum(Math.round(maximum) + axisGap); } tempLineChart.getXAxis().setValueFormatter(new SampleXLabelFormatter(tsTranslation, "HH:mm")); @@ -237,6 +242,10 @@ public class TemperatureDailyFragment extends AbstractChartFragment samples; diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestDeviceCoordinator.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestDeviceCoordinator.java index f75e13453d..f3f51e7f73 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestDeviceCoordinator.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestDeviceCoordinator.java @@ -134,7 +134,7 @@ public class TestDeviceCoordinator extends AbstractDeviceCoordinator { @Override public TimeSampleProvider getTemperatureSampleProvider(final GBDevice device, final DaoSession session) { - return supportsTemperatureMeasurement(device) ? new TestTemperatureSampleProvider() : super.getTemperatureSampleProvider(device, session); + return supportsTemperatureMeasurement(device) ? new TestTemperatureSampleProvider(device) : super.getTemperatureSampleProvider(device, session); } @Override @@ -318,6 +318,11 @@ public class TestDeviceCoordinator extends AbstractDeviceCoordinator { return supports(getTestDevice(), TestFeature.TEMPERATURE_MEASUREMENT); } + @Override + public boolean supportsContinuousTemperature(@NonNull final GBDevice device) { + return supports(getTestDevice(), TestFeature.CONTINUOUS_TEMPERATURE); + } + @Override public boolean supportsActivityTracks(@NonNull final GBDevice device) { return supports(device, TestFeature.ACTIVITY_TRACKS); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestFeature.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestFeature.java index 5ee6d41b17..2e8db2fc90 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestFeature.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/TestFeature.java @@ -68,6 +68,7 @@ public enum TestFeature { BODY_ENERGY, HRV_MEASUREMENT, TEMPERATURE_MEASUREMENT, + CONTINUOUS_TEMPERATURE, UNICODE_EMOJIS, WATCHFACE_MANAGEMENT, WEATHER, diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/samples/TestTemperatureSampleProvider.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/samples/TestTemperatureSampleProvider.java index a0dcf3a540..768549f3ab 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/samples/TestTemperatureSampleProvider.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/devices/test/samples/TestTemperatureSampleProvider.java @@ -23,22 +23,33 @@ import java.util.ArrayList; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.devices.test.TestDeviceRand; +import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.TemperatureSample; public class TestTemperatureSampleProvider extends AbstractTestSampleProvider { + private final GBDevice device; + + public TestTemperatureSampleProvider(final GBDevice device) { + this.device = device; + } + @NonNull @Override public List getAllSamples(final long timestampFrom, final long timestampTo) { final List samples = new ArrayList<>(); - int temp = TestDeviceRand.randInt(timestampFrom, 33, 40); + float temp = TestDeviceRand.randInt(timestampFrom, 33, 40); - for (long ts = timestampFrom; ts < timestampTo; ts += 120 * 60 * 1000L) { + final boolean continuous = device.getDeviceCoordinator().supportsContinuousTemperature(device); + + final long temperatureTimeStep = continuous ? 15 * 60 * 1000L : 120 * 60 * 1000L; + final float temperatureValueStep = continuous ? 0.2f : 1f; + + for (long ts = timestampFrom; ts < timestampTo; ts += temperatureTimeStep) { if (TestDeviceRand.randBool(ts, 0.3f)) { samples.add(new TestTemperatureSample(ts, temp)); } - temp += TestDeviceRand.randInt(ts, 33 - temp, 40 - temp); - break; + temp += (TestDeviceRand.randInt(ts, 33 - Math.round(temp), 40 - Math.round(temp)) * temperatureValueStep); } return samples;