From 81b090893bce6f00b7f5fb9b5f11edaf5c985993 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 5 Apr 2023 22:23:56 +0200 Subject: [PATCH 1/3] Target Android 14/API34. Fixes #1496. --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index ea0d3a214..a11e93c5d 100644 --- a/build.gradle +++ b/build.gradle @@ -51,7 +51,7 @@ android { targetCompatibility JavaVersion.VERSION_17 } - compileSdk 33 + compileSdk 34 buildFeatures { viewBinding true @@ -70,7 +70,7 @@ android { buildConfigField "String", "VERSION_NAME_FULL", "\"${getVersionName()}\"" minSdk 21 - targetSdk 33 + targetSdk 34 testInstrumentationRunner "de.dennisguse.opentracks.TestRunner" testInstrumentationRunnerArguments clearPackageData: 'true' From d7022a07a2fe9c77135d89bcf68b7095ba0cdb94 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 7 Jun 2023 23:02:56 +0200 Subject: [PATCH 2/3] Cleanup: use Java17' Records. Fixes #1526. --- .../opentracks/content/data/TestDataUtil.java | 11 +--- .../data/CustomContentProviderUtilsTest.java | 4 +- .../sensors/BluetoothUtilsTest.java | 26 ++++----- .../sensors/PressureSensorUtilsTest.java | 2 +- .../stats/TrackStatisticsUpdaterTest.java | 2 +- .../opentracks/data/ContentProviderUtils.java | 10 ++-- .../data/models/AtmosphericPressure.java | 28 +--------- .../opentracks/data/models/BatteryLevel.java | 12 +--- .../opentracks/data/models/Cadence.java | 29 +--------- .../opentracks/data/models/Distance.java | 32 +---------- .../opentracks/data/models/HeartRate.java | 29 +--------- .../opentracks/data/models/Marker.java | 29 +--------- .../opentracks/data/models/Power.java | 29 +--------- .../opentracks/data/models/Speed.java | 29 +--------- .../io/file/exporter/KmzTrackExporter.java | 2 +- .../opentracks/publicapi/StopRecording.java | 4 +- .../AbstractBluetoothConnectionManager.java | 8 +-- .../sensors/AltitudeSumManager.java | 2 +- ...etoothConnectionManagerCyclingCadence.java | 2 +- ...luetoothConnectionManagerCyclingPower.java | 2 +- .../opentracks/sensors/BluetoothUtils.java | 6 +- .../sensors/PressureSensorUtils.java | 21 +------ .../sensors/ServiceMeasurementUUID.java | 40 +------------- .../sensorData/SensorDataCyclingPower.java | 37 +++++-------- .../sensors/sensorData/SensorDataRunning.java | 41 +------------- .../sensors/sensorData/SensorDataSet.java | 4 +- .../opentracks/services/RecordingData.java | 55 ++----------------- .../opentracks/services/RecordingStatus.java | 29 +--------- .../BluetoothLeSensorPreference.java | 2 +- .../opentracks/share/ShareUtils.java | 4 +- .../ui/markers/MarkerListActivity.java | 2 +- .../opentracks/util/EGM2008Utils.java | 41 ++------------ .../GenericStatisticsViewHolder.java | 8 +-- .../SensorStatisticsViewHolder.java | 6 +- 34 files changed, 88 insertions(+), 500 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java index b252bbf79..3fdc19ad4 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java +++ b/src/androidTest/java/de/dennisguse/opentracks/content/data/TestDataUtil.java @@ -96,16 +96,7 @@ public class TestDataUtil { return new TrackData(track, trackPoints, markers); } - public static class TrackData { - public final Track track; - public final List trackPoints; - public final List markers; - - public TrackData(Track track, List trackPoints, List markers) { - this.track = track; - this.trackPoints = trackPoints; - this.markers = markers; - } + public record TrackData(Track track, List trackPoints, List markers) { } diff --git a/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java index d9f04c587..d62442f5d 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/data/CustomContentProviderUtilsTest.java @@ -424,7 +424,7 @@ public class CustomContentProviderUtilsTest { Marker.Id markerId = new Marker.Id(System.currentTimeMillis()); marker.setId(markerId); ContentValues contentValues = contentProviderUtils.createContentValues(marker); - assertEquals(markerId.getId(), contentValues.get(MarkerColumns._ID)); + assertEquals(markerId.id(), contentValues.get(MarkerColumns._ID)); assertEquals((int) (TestDataUtil.INITIAL_LONGITUDE * 1000000), contentValues.get(MarkerColumns.LONGITUDE)); assertEquals(TEST_DESC, contentValues.get(MarkerColumns.DESCRIPTION)); } @@ -458,7 +458,7 @@ public class CustomContentProviderUtilsTest { when(cursorMock.getLong(columnIndex++)).thenReturn(trackId); Marker marker = contentProviderUtils.createMarker(cursorMock); - assertEquals(id, marker.getId().getId()); + assertEquals(id, marker.getId().id()); assertEquals(name, marker.getName()); assertEquals(trackId, marker.getTrackId().getId()); } diff --git a/src/androidTest/java/de/dennisguse/opentracks/sensors/BluetoothUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/sensors/BluetoothUtilsTest.java index dd595458f..92dc59f21 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/sensors/BluetoothUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/sensors/BluetoothUtilsTest.java @@ -21,7 +21,7 @@ public class BluetoothUtilsTest { @Test public void parseHeartRate_uint8() { // given - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.HEARTRATE.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.HEARTRATE.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{0x02, 0x3C}); // when @@ -34,7 +34,7 @@ public class BluetoothUtilsTest { @Test public void parseHeartRate_uint16() { // given - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.HEARTRATE.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.HEARTRATE.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{0x01, 0x01, 0x01}); // when @@ -47,7 +47,7 @@ public class BluetoothUtilsTest { @Test public void parseEnvironmentalSensing_Pa() { // given - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.BAROMETRIC_PRESSURE.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.BAROMETRIC_PRESSURE.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{(byte) 0xB2, (byte) 0x48, (byte) 0x0F, (byte) 0x00}); // when @@ -59,7 +59,7 @@ public class BluetoothUtilsTest { @Test public void parseCyclingSpeedCadence_crankOnly() { - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_SPEED_CADENCE.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_SPEED_CADENCE.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{0x02, (byte) 0xC8, 0x00, 0x00, 0x00, 0x06, (byte) 0x99}); // when @@ -72,7 +72,7 @@ public class BluetoothUtilsTest { @Test public void parseCyclingSpeedCadence_wheelOnly() { - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_SPEED_CADENCE.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_SPEED_CADENCE.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{0x01, (byte) 0xFF, (byte) 0xFF, 0, 1, 0x45, (byte) 0x99}); // when @@ -85,7 +85,7 @@ public class BluetoothUtilsTest { @Test public void parseCyclingSpeedCadence_crankWheel() { - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_SPEED_CADENCE.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_SPEED_CADENCE.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{0x03, (byte) 0xC8, 0x00, 0x00, 0x01, 0x06, (byte) 0x99, (byte) 0xE1, 0x00, 0x45, (byte) 0x99}); // when @@ -98,34 +98,34 @@ public class BluetoothUtilsTest { @Test public void parseCyclingPower_power() { - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_POWER.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_POWER.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{0, 0, 40, 0}); // when SensorDataCyclingPower.Data powerCadence = BluetoothUtils.parseCyclingPower("", "", characteristic); // then - assertEquals(40, powerCadence.getPower().getValue().getW(), 0.01); + assertEquals(40, powerCadence.power().getValue().getW(), 0.01); } @Test public void parseCyclingPower_power_with_cadence() { - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_POWER.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.CYCLING_POWER.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{0x2C, 0x00, 0x00, 0x00, (byte) 0x9F, 0x00, 0x0C, 0x00, (byte) 0xE5, 0x42}); // when SensorDataCyclingPower.Data powerCadence = BluetoothUtils.parseCyclingPower("", "", characteristic); // then - assertEquals(0, powerCadence.getPower().getValue().getW(), 0.01); + assertEquals(0, powerCadence.power().getValue().getW(), 0.01); - assertEquals(12, powerCadence.getCadence().getCrankRevolutionsCount()); - assertEquals(17125, powerCadence.getCadence().getCrankRevolutionsTime()); + assertEquals(12, powerCadence.cadence().getCrankRevolutionsCount()); + assertEquals(17125, powerCadence.cadence().getCrankRevolutionsTime()); } @Test public void parseRunningSpeedAndCadence_with_distance() { - BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.RUNNING_SPEED_CADENCE.getServiceUUID(), 0, 0); + BluetoothGattCharacteristic characteristic = new BluetoothGattCharacteristic(BluetoothUtils.RUNNING_SPEED_CADENCE.serviceUUID(), 0, 0); characteristic.setValue(new byte[]{2, 0, 5, 80, (byte) 0xFF, (byte) 0xFF, 0, 1}); // when diff --git a/src/androidTest/java/de/dennisguse/opentracks/sensors/PressureSensorUtilsTest.java b/src/androidTest/java/de/dennisguse/opentracks/sensors/PressureSensorUtilsTest.java index d1ef901ec..84c176f30 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/sensors/PressureSensorUtilsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/sensors/PressureSensorUtilsTest.java @@ -39,7 +39,7 @@ public class PressureSensorUtilsTest { if (altitudeChange != null) { altitudeGain_m += altitudeChange.getAltitudeGain_m(); altitudeLoss += altitudeChange.getAltitudeLoss_m(); - lastUsedPressureValue = altitudeChange.getCurrentSensorValue(); + lastUsedPressureValue = altitudeChange.currentSensorValue(); } } diff --git a/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java b/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java index ac12925cb..0264356e9 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/stats/TrackStatisticsUpdaterTest.java @@ -78,7 +78,7 @@ public class TrackStatisticsUpdaterTest { // when TrackStatisticsUpdater subject = new TrackStatisticsUpdater(); - data.trackPoints.forEach(subject::addTrackPoint); + data.trackPoints().forEach(subject::addTrackPoint); // then TrackStatistics statistics = subject.getTrackStatistics(); diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index f8825f56d..be696ee9b 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -403,7 +403,7 @@ public class ContentProviderUtils { public void deleteMarker(Context context, Marker.Id markerId) { final Marker marker = getMarker(markerId); deleteMarkerPhoto(context, marker); - contentResolver.delete(MarkerColumns.CONTENT_URI, MarkerColumns._ID + "=?", new String[]{Long.toString(markerId.getId())}); + contentResolver.delete(MarkerColumns.CONTENT_URI, MarkerColumns._ID + "=?", new String[]{Long.toString(markerId.id())}); } /** @@ -422,7 +422,7 @@ public class ContentProviderUtils { } public Marker getMarker(@NonNull Marker.Id markerId) { - try (Cursor cursor = getMarkerCursor(null, MarkerColumns._ID + "=?", new String[]{Long.toString(markerId.getId())}, MarkerColumns._ID, 1)) { + try (Cursor cursor = getMarkerCursor(null, MarkerColumns._ID + "=?", new String[]{Long.toString(markerId.id())}, MarkerColumns._ID, 1)) { if (cursor != null && cursor.moveToFirst()) { return createMarker(cursor); } @@ -442,7 +442,7 @@ public class ContentProviderUtils { String[] selectionArgs; if (minMarkerId != null) { selection = MarkerColumns.TRACKID + "=? AND " + MarkerColumns._ID + ">=?"; - selectionArgs = new String[]{Long.toString(trackId.getId()), Long.toString(minMarkerId.getId())}; + selectionArgs = new String[]{Long.toString(trackId.getId()), Long.toString(minMarkerId.id())}; } else { selection = MarkerColumns.TRACKID + "=?"; selectionArgs = new String[]{Long.toString(trackId.getId())}; @@ -495,7 +495,7 @@ public class ContentProviderUtils { if (!updateMarker.hasPhoto()) { deleteMarkerPhoto(context, savedMarker); } - int rows = contentResolver.update(MarkerColumns.CONTENT_URI, createContentValues(updateMarker), MarkerColumns._ID + "=?", new String[]{Long.toString(updateMarker.getId().getId())}); + int rows = contentResolver.update(MarkerColumns.CONTENT_URI, createContentValues(updateMarker), MarkerColumns._ID + "=?", new String[]{Long.toString(updateMarker.getId().id())}); return rows == 1; } @@ -503,7 +503,7 @@ public class ContentProviderUtils { ContentValues values = new ContentValues(); if (marker.getId() != null) { - values.put(MarkerColumns._ID, marker.getId().getId()); + values.put(MarkerColumns._ID, marker.getId().id()); } values.put(MarkerColumns.NAME, marker.getName()); values.put(MarkerColumns.DESCRIPTION, marker.getDescription()); diff --git a/src/main/java/de/dennisguse/opentracks/data/models/AtmosphericPressure.java b/src/main/java/de/dennisguse/opentracks/data/models/AtmosphericPressure.java index c32d5d6fb..c35018945 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/AtmosphericPressure.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/AtmosphericPressure.java @@ -2,7 +2,7 @@ package de.dennisguse.opentracks.data.models; import java.util.Objects; -public class AtmosphericPressure { +public record AtmosphericPressure(float value) { public static AtmosphericPressure ofPA(float value_Pa) { return new AtmosphericPressure(value_Pa * 100); @@ -12,12 +12,6 @@ public class AtmosphericPressure { return new AtmosphericPressure(value_hPa); } - private final float value; - - private AtmosphericPressure(float value) { - this.value = value; - } - public float getPA() { return value * 100; } @@ -25,24 +19,4 @@ public class AtmosphericPressure { public float getHPA() { return value; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - AtmosphericPressure that = (AtmosphericPressure) o; - return Float.compare(that.value, value) == 0; - } - - @Override - public int hashCode() { - return Objects.hash(value); - } - - @Override - public String toString() { - return "AtmosphericPressure{" + - "value=" + value + - '}'; - } } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/BatteryLevel.java b/src/main/java/de/dennisguse/opentracks/data/models/BatteryLevel.java index c833447a8..a5dee2b3c 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/BatteryLevel.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/BatteryLevel.java @@ -1,18 +1,8 @@ package de.dennisguse.opentracks.data.models; -public class BatteryLevel { +public record BatteryLevel(int percentage) { public static BatteryLevel of(int percentage) { return new BatteryLevel(percentage); } - - private final int percentage; - - private BatteryLevel(int percentage) { - this.percentage = percentage; - } - - public int getPercentage() { - return percentage; - } } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Cadence.java b/src/main/java/de/dennisguse/opentracks/data/models/Cadence.java index c1bb33745..c649ae6b2 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Cadence.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Cadence.java @@ -5,7 +5,7 @@ import androidx.annotation.NonNull; import java.time.Duration; import java.util.Objects; -public class Cadence { +public record Cadence(float value_rpm) { public static Cadence of(float value, Duration duration) { if (duration.isZero()) { @@ -23,34 +23,7 @@ public class Cadence { return of(0.0f); } - private final float value_rpm; - - private Cadence(float value) { - this.value_rpm = value; - } - public float getRPM() { return value_rpm; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Cadence cadence = (Cadence) o; - return Float.compare(cadence.value_rpm, value_rpm) == 0; - } - - @Override - public int hashCode() { - return Objects.hash(value_rpm); - } - - @NonNull - @Override - public String toString() { - return "Cadence{" + - "value=" + value_rpm + " rpm" + - '}'; - } } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Distance.java b/src/main/java/de/dennisguse/opentracks/data/models/Distance.java index 89f7692bb..0bb197eef 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Distance.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Distance.java @@ -7,12 +7,11 @@ import java.util.Objects; import de.dennisguse.opentracks.settings.UnitSystem; -public class Distance { +public record Distance(double distance_m) { public static Distance of(double distance_m) { return new Distance(distance_m); } - public static Distance of(Double distance_m) { if (distance_m == null) { return Distance.of(Double.NaN); @@ -20,11 +19,9 @@ public class Distance { return Distance.of((double) distance_m); } } - public static Distance of(String distance_m) { return of(Float.parseFloat(distance_m)); } - @Nullable public static Distance ofOrNull(Double distance_m) { if (distance_m == null) { @@ -65,12 +62,6 @@ public class Distance { }; } - private final double distance_m; - - private Distance(double distance_m) { - this.distance_m = distance_m; - } - public Distance plus(@NonNull Distance distance) { return new Distance(distance_m + distance.distance_m); } @@ -142,27 +133,6 @@ public class Distance { }; } - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Distance distance = (Distance) o; - return Double.compare(distance.distance_m, distance_m) == 0; - } - - @Override - public int hashCode() { - return Objects.hash(distance_m); - } - - @NonNull - @Override - public String toString() { - return "Distance{" + - "distance_m=" + distance_m + - '}'; - } - // multiplication factors for conversion private static final double KM_TO_M = 1000.0; private static final double M_TO_KM = 1 / KM_TO_M; diff --git a/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java b/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java index 085b00481..58a9d87d8 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/HeartRate.java @@ -4,40 +4,13 @@ import androidx.annotation.NonNull; import java.util.Objects; -public class HeartRate { +public record HeartRate(float value) { public static HeartRate of(float value) { return new HeartRate(value); } - private final float value; - - private HeartRate(float value) { - this.value = value; - } - public float getBPM() { return value; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - HeartRate heartRate = (HeartRate) o; - return Float.compare(heartRate.value, value) == 0; - } - - @Override - public int hashCode() { - return Objects.hash(value); - } - - @NonNull - @Override - public String toString() { - return "HeartRate{" + - "value=" + value + " bpm" + - '}'; - } } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Marker.java b/src/main/java/de/dennisguse/opentracks/data/models/Marker.java index 972a92fac..0a72027c0 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Marker.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Marker.java @@ -26,7 +26,6 @@ import androidx.annotation.Nullable; import java.time.Duration; import java.time.Instant; -import java.util.Objects; import de.dennisguse.opentracks.stats.TrackStatistics; @@ -267,31 +266,7 @@ public final class Marker { return photoUrl != null && !"".equals(photoUrl); } - public static class Id implements Parcelable { - - private final long id; - - public Id(long id) { - this.id = id; - } - - //TOOD Limit visibility to TrackRecordingService / ContentProvider - public long getId() { - return id; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Id id1 = (Id) o; - return id == id1.id; - } - - @Override - public int hashCode() { - return Objects.hash(id); - } + public record Id(long id) implements Parcelable { @NonNull @Override @@ -309,7 +284,7 @@ public final class Marker { parcel.writeLong(id); } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator<>() { + public static final Creator CREATOR = new Creator<>() { public Id createFromParcel(Parcel in) { return new Id(in.readLong()); } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Power.java b/src/main/java/de/dennisguse/opentracks/data/models/Power.java index 52c2cebab..f1b5f1842 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Power.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Power.java @@ -4,40 +4,13 @@ import androidx.annotation.NonNull; import java.util.Objects; -public class Power { +public record Power(float value) { public static Power of(float value) { return new Power(value); } - private final float value; - - private Power(float value) { - this.value = value; - } - public float getW() { return value; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Power power = (Power) o; - return Float.compare(power.value, value) == 0; - } - - @Override - public int hashCode() { - return Objects.hash(value); - } - - @NonNull - @Override - public String toString() { - return "Power{" + - "value=" + value + " W" + - '}'; - } } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Speed.java b/src/main/java/de/dennisguse/opentracks/data/models/Speed.java index 524651df5..46a0d6289 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Speed.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Speed.java @@ -8,7 +8,7 @@ import java.util.Objects; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; -public class Speed { +public record Speed(double speed_mps) { public static Speed of(Distance distance, Duration duration) { if (duration.isZero()) { @@ -47,12 +47,6 @@ public class Speed { return Speed.of(Math.abs(speed1.speed_mps - speed2.speed_mps)); } - private final double speed_mps; - - private Speed(double speed_mps) { - this.speed_mps = speed_mps; - } - public Speed mul(double factor) { return new Speed(factor * speed_mps); } @@ -121,25 +115,4 @@ public class Speed { case NAUTICAL_IMPERIAL -> toKnots(); }; } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Speed speed = (Speed) o; - return Double.compare(speed.speed_mps, speed_mps) == 0; - } - - @Override - public int hashCode() { - return Objects.hash(speed_mps); - } - - @NonNull - @Override - public String toString() { - return "Speed{" + - "speed_mps=" + speed_mps + - '}'; - } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java index 67cc5c52b..a13efaa3b 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KmzTrackExporter.java @@ -141,6 +141,6 @@ public class KmzTrackExporter implements TrackExporter { public static String buildKmzImageFilePath(Marker marker) { String ext = FileUtils.getExtension(marker.getPhotoUrl()); ext = ext == null ? "" : "." + ext; - return KMZ_IMAGES_DIR + File.separatorChar + FileUtils.sanitizeFileName(marker.getId().getId() + ext); + return KMZ_IMAGES_DIR + File.separatorChar + FileUtils.sanitizeFileName(marker.getId().id() + ext); } } \ No newline at end of file diff --git a/src/main/java/de/dennisguse/opentracks/publicapi/StopRecording.java b/src/main/java/de/dennisguse/opentracks/publicapi/StopRecording.java index 0267b962c..7e0910fe4 100644 --- a/src/main/java/de/dennisguse/opentracks/publicapi/StopRecording.java +++ b/src/main/java/de/dennisguse/opentracks/publicapi/StopRecording.java @@ -10,8 +10,8 @@ public class StopRecording extends AbstractAPIActivity { protected void execute(TrackRecordingService service) { RecordingData recordingData = service.getRecordingDataObservable().getValue(); Track.Id trackId = null; - if (recordingData != null && recordingData.getTrack() != null) { - trackId = recordingData.getTrack().getId(); + if (recordingData != null && recordingData.track() != null) { + trackId = recordingData.track().getId(); } service.endCurrentTrack(); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java index 218fbd786..7a7185b68 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java @@ -77,7 +77,7 @@ public abstract class AbstractBluetoothConnectionManager { BluetoothGattService gattService = null; ServiceMeasurementUUID serviceMeasurement = null; for (ServiceMeasurementUUID s : serviceMeasurementUUIDs) { - gattService = gatt.getService(s.getServiceUUID()); + gattService = gatt.getService(s.serviceUUID()); if (gattService != null) { serviceMeasurement = s; break; @@ -89,9 +89,9 @@ public abstract class AbstractBluetoothConnectionManager { return; } - BluetoothGattCharacteristic characteristic = gattService.getCharacteristic(serviceMeasurement.getMeasurementUUID()); + BluetoothGattCharacteristic characteristic = gattService.getCharacteristic(serviceMeasurement.measurementUUID()); if (characteristic == null) { - Log.e(TAG, "Could not get BluetoothCharacteristic for address=" + gatt.getDevice().getAddress() + " serviceUUID=" + serviceMeasurement.getServiceUUID() + " characteristicUUID=" + serviceMeasurement.getMeasurementUUID()); + Log.e(TAG, "Could not get BluetoothCharacteristic for address=" + gatt.getDevice().getAddress() + " serviceUUID=" + serviceMeasurement.serviceUUID() + " characteristicUUID=" + serviceMeasurement.measurementUUID()); return; } gatt.setCharacteristicNotification(characteristic, true); @@ -113,7 +113,7 @@ public abstract class AbstractBluetoothConnectionManager { UUID serviceUUID = characteristic.getService().getUuid(); Log.d(TAG, "Received data from " + gatt.getDevice().getAddress() + " with service " + serviceUUID + " and characteristics " + characteristic.getUuid()); Optional serviceMeasurementUUID = serviceMeasurementUUIDs.stream() - .filter(s -> s.getServiceUUID().equals(characteristic.getService().getUuid())).findFirst(); + .filter(s -> s.serviceUUID().equals(characteristic.getService().getUuid())).findFirst(); if (serviceMeasurementUUID.isEmpty()) { Log.e(TAG, "Unknown service UUID; not supported?"); return; diff --git a/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java b/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java index c85ff9066..63587e033 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/AltitudeSumManager.java @@ -98,7 +98,7 @@ public class AltitudeSumManager implements SensorConnector { altitudeLoss_m += altitudeChange.getAltitudeLoss_m(); - lastAcceptedSensorValue = altitudeChange.getCurrentSensorValue(); + lastAcceptedSensorValue = altitudeChange.currentSensorValue(); } lastSeenSensorValue = currentSensorValue; diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingCadence.java index 98dd68ba7..58980afa7 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingCadence.java @@ -28,7 +28,7 @@ public class BluetoothConnectionManagerCyclingCadence extends AbstractBluetoothC if (serviceMeasurementUUID.equals(BluetoothUtils.CYCLING_POWER)) { SensorDataCyclingPower.Data data = BluetoothUtils.parseCyclingPower(address, sensorName, characteristic); if (data!= null) { - return data.getCadence(); + return data.cadence(); } } else if (serviceMeasurementUUID.equals(BluetoothUtils.CYCLING_SPEED_CADENCE)) { SensorDataCyclingCadenceAndDistanceSpeed cadenceAndSpeed = BluetoothUtils.parseCyclingCrankAndWheel(address, sensorName, characteristic); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingPower.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingPower.java index 7803ed416..b5b5f8649 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingPower.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothConnectionManagerCyclingPower.java @@ -22,6 +22,6 @@ public class BluetoothConnectionManagerCyclingPower extends AbstractBluetoothCon protected SensorDataCyclingPower parsePayload(@NonNull ServiceMeasurementUUID serviceMeasurementUUID, String sensorName, String address, BluetoothGattCharacteristic characteristic) { SensorDataCyclingPower.Data cyclingPower = BluetoothUtils.parseCyclingPower(address, sensorName, characteristic); - return cyclingPower != null ? cyclingPower.getPower() : null; + return cyclingPower != null ? cyclingPower.power() : null; } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothUtils.java b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothUtils.java index 028dff1e1..16d394710 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/BluetoothUtils.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/BluetoothUtils.java @@ -61,13 +61,13 @@ public class BluetoothUtils { ); // Used for device discovery in preferences - public static final List HEART_RATE_SUPPORTING_DEVICES = Collections.unmodifiableList(Arrays.asList( + public static final List HEART_RATE_SUPPORTING_DEVICES = List.of( HEARTRATE, //Devices that support HEART_RATE_SERVICE_UUID, but do not announce HEART_RATE_SERVICE_UUID in there BLE announcement messages (during device discovery). new ServiceMeasurementUUID( UUID.fromString("0000fee0-0000-1000-8000-00805f9b34fb"), //Miband3 - HEARTRATE.getMeasurementUUID() - )) + HEARTRATE.measurementUUID() + ) ); private static final UUID ENVIRONMENTAL_SENSING_SERVICE = new UUID(0x181A00001000L, 0x800000805f9b34fbL); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/PressureSensorUtils.java b/src/main/java/de/dennisguse/opentracks/sensors/PressureSensorUtils.java index d86e88ca7..d6165f9a7 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/PressureSensorUtils.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/PressureSensorUtils.java @@ -18,24 +18,7 @@ public class PressureSensorUtils { private PressureSensorUtils() { } - public static class AltitudeChange { - - private final AtmosphericPressure currentSensorValue; - - private final float altitudeChange_m; - - public AltitudeChange(AtmosphericPressure currentSensorValue, float altitudeChange_m) { - this.currentSensorValue = currentSensorValue; - this.altitudeChange_m = altitudeChange_m; - } - - public AtmosphericPressure getCurrentSensorValue() { - return currentSensorValue; - } - - public float getAltitudeChange_m() { - return altitudeChange_m; - } + public record AltitudeChange(AtmosphericPressure currentSensorValue, float altitudeChange_m) { public float getAltitudeGain_m() { return altitudeChange_m > 0 ? altitudeChange_m : 0; @@ -67,7 +50,7 @@ public class PressureSensorUtils { // Limit altitudeC change by ALTITUDE_CHANGE_DIFF and computes pressure value accordingly. AltitudeChange altitudeChange = new AltitudeChange(currentSensorValue, altitudeChange_m); - if (altitudeChange.getAltitudeChange_m() > 0) { + if (altitudeChange.altitudeChange_m() > 0) { return new AltitudeChange(getBarometricPressure(lastSensorValue_m + ALTITUDE_CHANGE_DIFF_M), ALTITUDE_CHANGE_DIFF_M); } else { return new AltitudeChange(getBarometricPressure(lastSensorValue_m - ALTITUDE_CHANGE_DIFF_M), -1 * ALTITUDE_CHANGE_DIFF_M); diff --git a/src/main/java/de/dennisguse/opentracks/sensors/ServiceMeasurementUUID.java b/src/main/java/de/dennisguse/opentracks/sensors/ServiceMeasurementUUID.java index cc137014b..60c1bca94 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/ServiceMeasurementUUID.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/ServiceMeasurementUUID.java @@ -5,43 +5,5 @@ import androidx.annotation.NonNull; import java.util.Objects; import java.util.UUID; -public class ServiceMeasurementUUID { - - private final UUID serviceUUID; - private final UUID measurementUUID; - - public ServiceMeasurementUUID(UUID serviceUUID, UUID measurementUUID) { - this.serviceUUID = serviceUUID; - this.measurementUUID = measurementUUID; - } - - public UUID getServiceUUID() { - return serviceUUID; - } - - public UUID getMeasurementUUID() { - return measurementUUID; - } - - @NonNull - @Override - public String toString() { - return "ServiceMeasurementUUID{" + - "serviceUUID=" + serviceUUID + - ", measurementUUID=" + measurementUUID + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ServiceMeasurementUUID that = (ServiceMeasurementUUID) o; - return Objects.equals(serviceUUID, that.serviceUUID) && Objects.equals(measurementUUID, that.measurementUUID); - } - - @Override - public int hashCode() { - return Objects.hash(serviceUUID, measurementUUID); - } +public record ServiceMeasurementUUID(UUID serviceUUID, UUID measurementUUID) { } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingPower.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingPower.java index 7f0a512f0..6cf450da0 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingPower.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingPower.java @@ -28,30 +28,19 @@ public class SensorDataCyclingPower extends SensorData { return super.toString() + " data=" + value; } - public static class Data { - private final SensorDataCyclingPower power; - private final SensorDataCyclingCadence cadence; + public record Data(SensorDataCyclingPower power, SensorDataCyclingCadence cadence) { + public Data(SensorDataCyclingPower power, @Nullable SensorDataCyclingCadence cadence) { + this.power = power; + this.cadence = cadence; + } - public Data(SensorDataCyclingPower power, @Nullable SensorDataCyclingCadence cadence) { - this.power = power; - this.cadence = cadence; + @NonNull + @Override + public String toString() { + return "Data{" + + "power=" + power + + ", cadence=" + cadence + + '}'; + } } - - public SensorDataCyclingPower getPower() { - return power; - } - - public SensorDataCyclingCadence getCadence() { - return cadence; - } - - @NonNull - @Override - public String toString() { - return "Data{" + - "power=" + power + - ", cadence=" + cadence + - '}'; - } - } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataRunning.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataRunning.java index 5e3c1000d..58ef3abd4 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataRunning.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataRunning.java @@ -68,8 +68,8 @@ public final class SensorDataRunning extends SensorData Distance overallDistance = null; if (previous != null && previous.hasTotalDistance()) { overallDistance = this.totalDistance.minus(previous.totalDistance); - if (previous.hasValue() && previous.getValue().getDistance() != null) { - overallDistance = overallDistance.plus(previous.getValue().getDistance()); + if (previous.hasValue() && previous.getValue().distance() != null) { + overallDistance = overallDistance.plus(previous.getValue().distance()); } } @@ -84,41 +84,6 @@ public final class SensorDataRunning extends SensorData } } - public static class Data { - private final Speed speed; - private final Cadence cadence; - - @Nullable - private final Distance distance; - - public Data(Speed speed, Cadence cadence, @Nullable Distance distance) { - this.speed = speed; - this.cadence = cadence; - this.distance = distance; - } - - public Speed getSpeed() { - return speed; - } - - public Cadence getCadence() { - return cadence; - } - - @Nullable - public Distance getDistance() { - return distance; - } - - @NonNull - @Override - public String toString() { - return "Data{" + - "speed=" + speed + - ", cadence=" + cadence + - ", distance=" + distance + - '}'; - } - } + public record Data(Speed speed, Cadence cadence, @Nullable Distance distance) {} } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java index 3ae7b3141..f730a5760 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataSet.java @@ -62,7 +62,7 @@ public final class SensorDataSet { return new Pair<>(cyclingDistanceSpeed.getValue().getSpeed(), cyclingDistanceSpeed.getSensorNameOrAddress()); } - if (runningDistanceSpeedCadence != null && runningDistanceSpeedCadence.hasValue() && runningDistanceSpeedCadence.getValue().getSpeed() != null) { + if (runningDistanceSpeedCadence != null && runningDistanceSpeedCadence.hasValue() && runningDistanceSpeedCadence.getValue().speed() != null) { return new Pair<>(runningDistanceSpeedCadence.getSpeed(), runningDistanceSpeedCadence.getSensorNameOrAddress()); } @@ -123,7 +123,7 @@ public final class SensorDataSet { } if (runningDistanceSpeedCadence != null && runningDistanceSpeedCadence.hasValue()) { - trackPoint.setSensorDistance(runningDistanceSpeedCadence.getValue().getDistance()); + trackPoint.setSensorDistance(runningDistanceSpeedCadence.getValue().distance()); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java index 60a69bc45..4f63baae6 100644 --- a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java +++ b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java @@ -9,26 +9,10 @@ import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.sensors.sensorData.SensorDataSet; import de.dennisguse.opentracks.stats.TrackStatistics; -public class RecordingData { - - private final Track track; - - private final TrackPoint latestTrackPoint; - - private final SensorDataSet sensorDataSet; - - /** - * {@link Track} and {@link TrackPoint} must be immutable (i.e., their content does not change). - */ - public RecordingData(Track track, TrackPoint lastTrackPoint, SensorDataSet sensorDataSet) { - this.track = track; - this.latestTrackPoint = lastTrackPoint; - this.sensorDataSet = sensorDataSet; - } - - public Track getTrack() { - return track; - } +/** + * {@link Track} and {@link TrackPoint} must be immutable (i.e., their content does not change). + */ +public record RecordingData(Track track, TrackPoint latestTrackPoint, SensorDataSet sensorDataSet) { public String getTrackCategory() { if (track == null) { @@ -45,35 +29,4 @@ public class RecordingData { return track.getTrackStatistics(); } - - public TrackPoint getLatestTrackPoint() { - return latestTrackPoint; - } - - public SensorDataSet getSensorDataSet() { - return sensorDataSet; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - RecordingData that = (RecordingData) o; - return Objects.equals(track, that.track) && Objects.equals(latestTrackPoint, that.latestTrackPoint) && Objects.equals(sensorDataSet, that.sensorDataSet); - } - - @Override - public int hashCode() { - return Objects.hash(track, latestTrackPoint, sensorDataSet); - } - - @NonNull - @Override - public String toString() { - return "RecordingData{" + - "track=" + track + - ", latestTrackPoint=" + latestTrackPoint + - ", sensorDataSet=" + sensorDataSet + - '}'; - } } diff --git a/src/main/java/de/dennisguse/opentracks/services/RecordingStatus.java b/src/main/java/de/dennisguse/opentracks/services/RecordingStatus.java index 3f95d0a35..060f8eea1 100644 --- a/src/main/java/de/dennisguse/opentracks/services/RecordingStatus.java +++ b/src/main/java/de/dennisguse/opentracks/services/RecordingStatus.java @@ -7,13 +7,7 @@ import java.util.Objects; import de.dennisguse.opentracks.data.models.Track; -public class RecordingStatus { - private final Track.Id trackId; - - @VisibleForTesting - RecordingStatus(Track.Id trackId) { - this.trackId = trackId; - } +public record RecordingStatus(Track.Id trackId) { public Track.Id getTrackId() { return trackId; @@ -34,25 +28,4 @@ public class RecordingStatus { public RecordingStatus stop() { return TrackRecordingService.STATUS_DEFAULT; } - - @NonNull - @Override - public String toString() { - return "RecordingStatus{" + - "trackId=" + trackId + - '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - RecordingStatus that = (RecordingStatus) o; - return Objects.equals(trackId, that.trackId); - } - - @Override - public int hashCode() { - return Objects.hash(trackId); - } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java index b894cd760..fc0ed34ef 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeSensorPreference.java @@ -134,7 +134,7 @@ public abstract class BluetoothLeSensorPreference extends DialogPreference { final Bundle b = new Bundle(1); b.putString(ARG_KEY, preferenceKey); b.putParcelableArrayList(ARG_BLE_SERVICE_UUIDS, new ArrayList<>(sensorUUIDs.stream() - .map(ServiceMeasurementUUID::getServiceUUID) + .map(ServiceMeasurementUUID::serviceUUID) .map(ParcelUuid::new) .collect(Collectors.toList()))); fragment.setArguments(b); diff --git a/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java b/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java index ebb7abf23..ec57d64d4 100644 --- a/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java +++ b/src/main/java/de/dennisguse/opentracks/share/ShareUtils.java @@ -90,11 +90,11 @@ public class ShareUtils { for (Marker.Id markerId : markerIds) { Marker marker = contentProviderUtils.getMarker(markerId); if (marker == null) { - Log.e(TAG, "MarkerId " + markerId.getId() + " could not be resolved."); + Log.e(TAG, "MarkerId " + markerId.id() + " could not be resolved."); continue; } if (marker.getPhotoURI() == null) { - Log.e(TAG, "MarkerId " + markerId.getId() + " has no picture."); + Log.e(TAG, "MarkerId " + markerId.id() + " has no picture."); continue; } diff --git a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java index 136079071..f0394154a 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java @@ -229,7 +229,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker if (itemId == R.id.list_context_menu_edit) { if (markerIds.length == 1) { - resourceCursorAdapter.markerInvalid(markerIds[0].getId()); + resourceCursorAdapter.markerInvalid(markerIds[0].id()); Intent intent = IntentUtils.newIntent(this, MarkerEditActivity.class) .putExtra(MarkerEditActivity.EXTRA_MARKER_ID, markerIds[0]); startActivity(intent); diff --git a/src/main/java/de/dennisguse/opentracks/util/EGM2008Utils.java b/src/main/java/de/dennisguse/opentracks/util/EGM2008Utils.java index e5c24e76d..4c72e70cd 100644 --- a/src/main/java/de/dennisguse/opentracks/util/EGM2008Utils.java +++ b/src/main/java/de/dennisguse/opentracks/util/EGM2008Utils.java @@ -8,7 +8,6 @@ import androidx.annotation.VisibleForTesting; import java.io.DataInputStream; import java.io.IOException; -import java.util.Objects; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.Altitude; @@ -144,42 +143,14 @@ public class EGM2008Utils { } @VisibleForTesting - static class Indices { - final int latitudeIndex; - final int longitudeIndex; - - Indices(int latitudeIndex, int longitudeIndex) { - this.latitudeIndex = latitudeIndex; - this.longitudeIndex = longitudeIndex; - } + record Indices(int latitudeIndex, int longitudeIndex) { Indices offset(int latitudeOffset, int longitudeOffset) { - return new Indices(latitudeIndex + latitudeOffset, longitudeIndex + longitudeOffset); - } + return new Indices(latitudeIndex + latitudeOffset, longitudeIndex + longitudeOffset); + } - int getAbsoluteIndex() { - return latitudeIndex * LATITUDE_CORRECTION + longitudeIndex; + int getAbsoluteIndex() { + return latitudeIndex * LATITUDE_CORRECTION + longitudeIndex; + } } - - @Override - public boolean equals(Object o) { - if (o == null || getClass() != o.getClass()) return false; - Indices indices = (Indices) o; - return latitudeIndex == indices.latitudeIndex && - longitudeIndex == indices.longitudeIndex; - } - - @Override - public int hashCode() { - return Objects.hash(latitudeIndex, longitudeIndex); - } - - @Override - public String toString() { - return "Indices{" + - "latitudeIndex=" + latitudeIndex + - ", longitudeIndex=" + longitudeIndex + - '}'; - } - } } diff --git a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java index 4a83ca51e..fa2300ef7 100644 --- a/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java +++ b/src/main/java/de/dennisguse/opentracks/viewmodels/GenericStatisticsViewHolder.java @@ -82,8 +82,8 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit; - SensorDataSet sensorDataSet = data.getSensorDataSet(); - final TrackPoint latestTrackPoint = data.getLatestTrackPoint(); + SensorDataSet sensorDataSet = data.sensorDataSet(); + final TrackPoint latestTrackPoint = data.latestTrackPoint(); if (sensorDataSet != null && sensorDataSet.getSpeed() != null) { valueAndUnit = localSpeedFormatter.getSpeedParts(sensorDataSet.getSpeed().first); getBinding().statsDescriptionMain.setText(sensorDataSet.getSpeed().second); @@ -220,7 +220,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit = StringUtils.getAltitudeParts(getContext(), altitude, unitSystem); @@ -262,7 +262,7 @@ public abstract class GenericStatisticsViewHolder extends StatisticViewHolder valueAndUnit; @@ -64,7 +64,7 @@ public abstract class SensorStatisticsViewHolder extends StatisticViewHolder valueAndUnit; @@ -87,7 +87,7 @@ public abstract class SensorStatisticsViewHolder extends StatisticViewHolder valueAndUnit; From 65c4b85bc4e42f562611121ddf753f1a80a5e41e Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Thu, 8 Jun 2023 07:15:33 +0200 Subject: [PATCH 3/3] EspressoTests: only grant POST_NOTIFICATION if running on Android 13. --- .../opentracks/EspressoDeleteTrackTest.java | 6 +----- .../EspressoEditTrackRecordingTest.java | 6 +----- .../dennisguse/opentracks/EspressoUITest.java | 7 +------ .../de/dennisguse/opentracks/TestUtil.java | 18 ++++++++++++++++++ 4 files changed, 21 insertions(+), 16 deletions(-) create mode 100644 src/androidTest/java/de/dennisguse/opentracks/TestUtil.java diff --git a/src/androidTest/java/de/dennisguse/opentracks/EspressoDeleteTrackTest.java b/src/androidTest/java/de/dennisguse/opentracks/EspressoDeleteTrackTest.java index 3d3226970..6f0ab71d2 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/EspressoDeleteTrackTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/EspressoDeleteTrackTest.java @@ -32,11 +32,7 @@ public class EspressoDeleteTrackTest { public ActivityScenarioRule mActivityTestRule = new ActivityScenarioRule<>(TrackListActivity.class); @Rule - public GrantPermissionRule mGrantPermissionRuleLocation = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION); - @Rule - public GrantPermissionRule mGrantPermissionRuleBluetooth = GrantPermissionRule.grant(Manifest.permission.BLUETOOTH_CONNECT); - @Rule - public GrantPermissionRule mGrantPermissionRuleNotifications = GrantPermissionRule.grant(Manifest.permission.POST_NOTIFICATIONS); + public GrantPermissionRule mGrantPermissionRule = TestUtil.createGrantPermissionRule(); @Test public void espressoDeleteTrackTest() { diff --git a/src/androidTest/java/de/dennisguse/opentracks/EspressoEditTrackRecordingTest.java b/src/androidTest/java/de/dennisguse/opentracks/EspressoEditTrackRecordingTest.java index fe82dec21..ef18249b5 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/EspressoEditTrackRecordingTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/EspressoEditTrackRecordingTest.java @@ -40,11 +40,7 @@ public class EspressoEditTrackRecordingTest { public ActivityScenarioRule mActivityTestRule = new ActivityScenarioRule<>(TrackListActivity.class); @Rule - public GrantPermissionRule mGrantPermissionRuleLocation = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION); - @Rule - public GrantPermissionRule mGrantPermissionRuleBluetooth = GrantPermissionRule.grant(android.Manifest.permission.BLUETOOTH_CONNECT); - @Rule - public GrantPermissionRule mGrantPermissionRuleNotifications = GrantPermissionRule.grant(Manifest.permission.POST_NOTIFICATIONS); + public GrantPermissionRule mGrantPermissionRule = TestUtil.createGrantPermissionRule(); @LargeTest @Test diff --git a/src/androidTest/java/de/dennisguse/opentracks/EspressoUITest.java b/src/androidTest/java/de/dennisguse/opentracks/EspressoUITest.java index a5dd4439d..8a684b23e 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/EspressoUITest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/EspressoUITest.java @@ -33,12 +33,7 @@ public class EspressoUITest { public ActivityScenarioRule mActivityTestRule = new ActivityScenarioRule<>(TrackListActivity.class); @Rule - public GrantPermissionRule mGrantPermissionRuleLocation = GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION); - @Rule - public GrantPermissionRule mGrantPermissionRuleBluetooth = GrantPermissionRule.grant(android.Manifest.permission.BLUETOOTH_CONNECT); - @Rule - public GrantPermissionRule mGrantPermissionRuleNotifications = GrantPermissionRule.grant(Manifest.permission.POST_NOTIFICATIONS); - + public GrantPermissionRule mGrantPermissionRule = TestUtil.createGrantPermissionRule(); @LargeTest @Test public void record_stop_resume_stop_finish() { diff --git a/src/androidTest/java/de/dennisguse/opentracks/TestUtil.java b/src/androidTest/java/de/dennisguse/opentracks/TestUtil.java new file mode 100644 index 000000000..d2bf9bdfc --- /dev/null +++ b/src/androidTest/java/de/dennisguse/opentracks/TestUtil.java @@ -0,0 +1,18 @@ +package de.dennisguse.opentracks; + +import android.Manifest; +import android.os.Build; + +import androidx.test.rule.GrantPermissionRule; + +import de.dennisguse.opentracks.test.BuildConfig; + +public class TestUtil { + + public static GrantPermissionRule createGrantPermissionRule() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + return GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.BLUETOOTH_CONNECT, Manifest.permission.POST_NOTIFICATIONS); + } + return GrantPermissionRule.grant(android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.BLUETOOTH_CONNECT); + } +}