diff --git a/build.gradle b/build.gradle index 84255d160..e86dda202 100644 --- a/build.gradle +++ b/build.gradle @@ -113,11 +113,11 @@ android { } } - applicationVariants.all { variant -> + applicationVariants.configureEach { variant -> variant.resValue "string", "applicationId", variant.applicationId if (variant.buildType.name == 'nightly') { - variant.outputs.all { + variant.outputs.configureEach { setVersionCodeOverride(getVersionCode()) setVersionNameOverride(getVersionName()) outputFileName = "${applicationId}_${variant.versionCode}.apk" diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java index 2ceda4ea5..fed3db9b2 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordedActivity.java @@ -274,18 +274,14 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement @NonNull @Override public Fragment createFragment(int position) { - switch (position) { - case 0: - return StatisticsRecordedFragment.newInstance(trackId); - case 1: - return IntervalsFragment.newInstance(trackId, true); - case 2: - return ChartFragment.newInstance(false); - case 3: - return ChartFragment.newInstance(true); - default: - throw new RuntimeException("There isn't Fragment associated with the position: " + position); - } + return switch (position) { + case 0 -> StatisticsRecordedFragment.newInstance(trackId); + case 1 -> IntervalsFragment.newInstance(trackId, true); + case 2 -> ChartFragment.newInstance(false); + case 3 -> ChartFragment.newInstance(true); + default -> + throw new RuntimeException("There isn't Fragment associated with the position: " + position); + }; } @Override @@ -294,18 +290,14 @@ public class TrackRecordedActivity extends AbstractTrackDeleteActivity implement } public CharSequence getPageTitle(int position) { - switch (position) { - case 0: - return getString(R.string.track_detail_stats_tab); - case 1: - return getString(R.string.track_detail_intervals_tab); - case 2: - return getString(R.string.settings_chart_by_time); - case 3: - return getString(R.string.settings_chart_by_distance); - default: - throw new RuntimeException("There isn't Fragment associated with the position: " + position); - } + return switch (position) { + case 0 -> getString(R.string.track_detail_stats_tab); + case 1 -> getString(R.string.track_detail_intervals_tab); + case 2 -> getString(R.string.settings_chart_by_time); + case 3 -> getString(R.string.settings_chart_by_distance); + default -> + throw new RuntimeException("There isn't Fragment associated with the position: " + position); + }; } } diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 3adb7a307..b9f08f024 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -333,18 +333,14 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc @NonNull @Override public Fragment createFragment(int position) { - switch (position) { - case 0: - return StatisticsRecordingFragment.newInstance(); - case 1: - return IntervalsFragment.newInstance(trackId, false); - case 2: - return ChartFragment.newInstance(false); - case 3: - return ChartFragment.newInstance(true); - default: - throw new RuntimeException("There isn't Fragment associated with the position: " + position); - } + return switch (position) { + case 0 -> StatisticsRecordingFragment.newInstance(); + case 1 -> IntervalsFragment.newInstance(trackId, false); + case 2 -> ChartFragment.newInstance(false); + case 3 -> ChartFragment.newInstance(true); + default -> + throw new RuntimeException("There isn't Fragment associated with the position: " + position); + }; } @Override @@ -353,18 +349,14 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc } public CharSequence getPageTitle(int position) { - switch (position) { - case 0: - return getString(R.string.track_detail_stats_tab); - case 1: - return getString(R.string.track_detail_intervals_tab); - case 2: - return getString(R.string.settings_chart_by_time); - case 3: - return getString(R.string.settings_chart_by_distance); - default: - throw new RuntimeException("There isn't Fragment associated with the position: " + position); - } + return switch (position) { + case 0 -> getString(R.string.track_detail_stats_tab); + case 1 -> getString(R.string.track_detail_intervals_tab); + case 2 -> getString(R.string.settings_chart_by_time); + case 3 -> getString(R.string.settings_chart_by_distance); + default -> + throw new RuntimeException("There isn't Fragment associated with the position: " + position); + }; } } diff --git a/src/main/java/de/dennisguse/opentracks/chart/ChartValueSeries.java b/src/main/java/de/dennisguse/opentracks/chart/ChartValueSeries.java index 35f87596f..6a7dd48d5 100644 --- a/src/main/java/de/dennisguse/opentracks/chart/ChartValueSeries.java +++ b/src/main/java/de/dennisguse/opentracks/chart/ChartValueSeries.java @@ -210,16 +210,11 @@ abstract class ChartValueSeries { } int getTitleId(UnitSystem unitSystem) { - switch (unitSystem) { - case METRIC: - return metricTitleId; - case IMPERIAL: - return imperialTitleId; - case NAUTICAL_IMPERIAL: - return nauticalTitleId; - default: - throw new RuntimeException("Not implemented"); - } + return switch (unitSystem) { + case METRIC -> metricTitleId; + case IMPERIAL -> imperialTitleId; + case NAUTICAL_IMPERIAL -> nauticalTitleId; + }; } Paint getTitlePaint() { diff --git a/src/main/java/de/dennisguse/opentracks/chart/ChartView.java b/src/main/java/de/dennisguse/opentracks/chart/ChartView.java index 2c1a4b3a9..2d08711e6 100644 --- a/src/main/java/de/dennisguse/opentracks/chart/ChartView.java +++ b/src/main/java/de/dennisguse/opentracks/chart/ChartView.java @@ -733,16 +733,11 @@ public class ChartView extends View { private String getXAxisLabel() { Context context = getContext(); if (chartByDistance) { - switch (unitSystem) { - case METRIC: - return context.getString(R.string.unit_kilometer); - case IMPERIAL: - return context.getString(R.string.unit_mile); - case NAUTICAL_IMPERIAL: - return context.getString(R.string.unit_nautical_mile); - default: - throw new RuntimeException("Not implemented"); - } + return switch (unitSystem) { + case METRIC -> context.getString(R.string.unit_kilometer); + case IMPERIAL -> context.getString(R.string.unit_mile); + case NAUTICAL_IMPERIAL -> context.getString(R.string.unit_nautical_mile); + }; } else { return context.getString(R.string.description_time); } diff --git a/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java b/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java index ffeb3bd83..25df9426a 100644 --- a/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/data/CustomContentProvider.java @@ -133,20 +133,12 @@ public class CustomContentProvider extends ContentProvider { @Override public int delete(@NonNull Uri url, String where, String[] selectionArgs) { - String table; - switch (getUrlType(url)) { - case TRACKPOINTS: - table = TrackPointsColumns.TABLE_NAME; - break; - case TRACKS: - table = TracksColumns.TABLE_NAME; - break; - case MARKERS: - table = MarkerColumns.TABLE_NAME; - break; - default: - throw new IllegalArgumentException("Unknown URL " + url); - } + String table = switch (getUrlType(url)) { + case TRACKPOINTS -> TrackPointsColumns.TABLE_NAME; + case TRACKS -> TracksColumns.TABLE_NAME; + case MARKERS -> MarkerColumns.TABLE_NAME; + default -> throw new IllegalArgumentException("Unknown URL " + url); + }; Log.w(TAG, "Deleting from table " + table); int totalChangesBefore = getTotalChanges(); @@ -186,24 +178,15 @@ public class CustomContentProvider extends ContentProvider { @Override public String getType(@NonNull Uri url) { - switch (getUrlType(url)) { - case TRACKPOINTS: - return TrackPointsColumns.CONTENT_TYPE; - case TRACKPOINTS_BY_ID: - case TRACKPOINTS_BY_TRACKID: - return TrackPointsColumns.CONTENT_ITEMTYPE; - case TRACKS: - return TracksColumns.CONTENT_TYPE; - case TRACKS_BY_ID: - return TracksColumns.CONTENT_ITEMTYPE; - case MARKERS: - return MarkerColumns.CONTENT_TYPE; - case MARKERS_BY_ID: - case MARKERS_BY_TRACKID: - return MarkerColumns.CONTENT_ITEMTYPE; - default: - throw new IllegalArgumentException("Unknown URL " + url); - } + return switch (getUrlType(url)) { + case TRACKPOINTS -> TrackPointsColumns.CONTENT_TYPE; + case TRACKPOINTS_BY_ID, TRACKPOINTS_BY_TRACKID -> TrackPointsColumns.CONTENT_ITEMTYPE; + case TRACKS -> TracksColumns.CONTENT_TYPE; + case TRACKS_BY_ID -> TracksColumns.CONTENT_ITEMTYPE; + case MARKERS -> MarkerColumns.CONTENT_TYPE; + case MARKERS_BY_ID, MARKERS_BY_TRACKID -> MarkerColumns.CONTENT_ITEMTYPE; + default -> throw new IllegalArgumentException("Unknown URL " + url); + }; } @Override @@ -251,47 +234,47 @@ public class CustomContentProvider extends ContentProvider { SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); String sortOrder = null; switch (getUrlType(url)) { - case TRACKPOINTS: + case TRACKPOINTS -> { queryBuilder.setTables(TrackPointsColumns.TABLE_NAME); sortOrder = sort != null ? sort : TrackPointsColumns.DEFAULT_SORT_ORDER; - break; - case TRACKPOINTS_BY_ID: + } + case TRACKPOINTS_BY_ID -> { queryBuilder.setTables(TrackPointsColumns.TABLE_NAME); queryBuilder.appendWhere(TrackPointsColumns._ID + "=" + ContentUris.parseId(url)); - break; - case TRACKPOINTS_BY_TRACKID: + } + case TRACKPOINTS_BY_TRACKID -> { queryBuilder.setTables(TrackPointsColumns.TABLE_NAME); queryBuilder.appendWhere(TrackPointsColumns.TRACKID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")"); - break; - case TRACKS: + } + case TRACKS -> { if (projection != null && Arrays.asList(projection).contains(TracksColumns.MARKER_COUNT)) { queryBuilder.setTables(TracksColumns.TABLE_NAME + " LEFT OUTER JOIN (SELECT " + MarkerColumns.TRACKID + " AS markerTrackId, COUNT(*) AS " + TracksColumns.MARKER_COUNT + " FROM " + MarkerColumns.TABLE_NAME + " GROUP BY " + MarkerColumns.TRACKID + ") ON (" + TracksColumns.TABLE_NAME + "." + TracksColumns._ID + "= markerTrackId)"); } else { queryBuilder.setTables(TracksColumns.TABLE_NAME); } sortOrder = sort != null ? sort : TracksColumns.DEFAULT_SORT_ORDER; - break; - case TRACKS_BY_ID: + } + case TRACKS_BY_ID -> { queryBuilder.setTables(TracksColumns.TABLE_NAME); queryBuilder.appendWhere(TracksColumns._ID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")"); - break; - case TRACKS_SENSOR_STATS: + } + case TRACKS_SENSOR_STATS -> { long trackId = ContentUris.parseId(url); return db.rawQuery(SENSOR_STATS_QUERY, new String[]{String.valueOf(trackId), String.valueOf(trackId)}); - case MARKERS: + } + case MARKERS -> { queryBuilder.setTables(MarkerColumns.TABLE_NAME); sortOrder = sort != null ? sort : MarkerColumns.DEFAULT_SORT_ORDER; - break; - case MARKERS_BY_ID: + } + case MARKERS_BY_ID -> { queryBuilder.setTables(MarkerColumns.TABLE_NAME); queryBuilder.appendWhere(MarkerColumns._ID + "=" + ContentUris.parseId(url)); - break; - case MARKERS_BY_TRACKID: + } + case MARKERS_BY_TRACKID -> { queryBuilder.setTables(MarkerColumns.TABLE_NAME); queryBuilder.appendWhere(MarkerColumns.TRACKID + " IN (" + TextUtils.join(SQL_LIST_DELIMITER, ContentProviderUtils.parseTrackIdsFromUri(url)) + ")"); - break; - default: - throw new IllegalArgumentException("Unknown url " + url); + } + default -> throw new IllegalArgumentException("Unknown url " + url); } Cursor cursor = queryBuilder.query(db, projection, selection, selectionArgs, null, null, sortOrder); cursor.setNotificationUri(getContext().getContentResolver(), url); @@ -304,41 +287,40 @@ public class CustomContentProvider extends ContentProvider { String table; String whereClause; switch (getUrlType(url)) { - case TRACKPOINTS: + case TRACKPOINTS -> { table = TrackPointsColumns.TABLE_NAME; whereClause = where; - break; - case TRACKPOINTS_BY_ID: + } + case TRACKPOINTS_BY_ID -> { table = TrackPointsColumns.TABLE_NAME; whereClause = TrackPointsColumns._ID + "=" + ContentUris.parseId(url); if (!TextUtils.isEmpty(where)) { whereClause += " AND (" + where + ")"; } - break; - case TRACKS: + } + case TRACKS -> { table = TracksColumns.TABLE_NAME; whereClause = where; - break; - case TRACKS_BY_ID: + } + case TRACKS_BY_ID -> { table = TracksColumns.TABLE_NAME; whereClause = TracksColumns._ID + "=" + ContentUris.parseId(url); if (!TextUtils.isEmpty(where)) { whereClause += " AND (" + where + ")"; } - break; - case MARKERS: + } + case MARKERS -> { table = MarkerColumns.TABLE_NAME; whereClause = where; - break; - case MARKERS_BY_ID: + } + case MARKERS_BY_ID -> { table = MarkerColumns.TABLE_NAME; whereClause = MarkerColumns._ID + "=" + ContentUris.parseId(url); if (!TextUtils.isEmpty(where)) { whereClause += " AND (" + where + ")"; } - break; - default: - throw new IllegalArgumentException("Unknown url " + url); + } + default -> throw new IllegalArgumentException("Unknown url " + url); } int count; try { @@ -371,16 +353,12 @@ public class CustomContentProvider extends ContentProvider { * @param contentValues the content values */ private Uri insertContentValues(Uri url, UrlType urlType, ContentValues contentValues) { - switch (urlType) { - case TRACKPOINTS: - return insertTrackPoint(url, contentValues); - case TRACKS: - return insertTrack(url, contentValues); - case MARKERS: - return insertMarker(url, contentValues); - default: - throw new IllegalArgumentException("Unknown url " + url); - } + return switch (urlType) { + case TRACKPOINTS -> insertTrackPoint(url, contentValues); + case TRACKS -> insertTrack(url, contentValues); + case MARKERS -> insertMarker(url, contentValues); + default -> throw new IllegalArgumentException("Unknown url " + url); + }; } private Uri insertTrackPoint(Uri url, ContentValues values) { diff --git a/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java b/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java index 7548c7151..f530b9854 100644 --- a/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java +++ b/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java @@ -61,42 +61,18 @@ public class CustomSQLiteOpenHelper extends SQLiteOpenHelper { for (int toVersion = oldVersion + 1; toVersion <= newVersion; toVersion++) { Log.i(TAG, "Upgrade from " + oldVersion + " to " + toVersion); switch (toVersion) { - case 24: - upgradeFrom23to24(db); - break; - case 25: - upgradeFrom24to25(db); - break; - case 26: - upgradeFrom25to26(db); - break; - case 27: - upgradeFrom26to27(db); - break; - case 28: - upgradeFrom27to28(db); - break; - case 29: - upgradeFrom28to29(db); - break; - case 30: - upgradeFrom29to30(db); - break; - case 31: - upgradeFrom30to31(db); - break; - case 32: - upgradeFrom31to32(db); - break; - case 33: - upgradeFrom32to33(db); - break; - case 34: - upgradeFrom33to34(db); - break; - - default: - throw new RuntimeException("Not implemented: upgrade to " + toVersion); + case 24 -> upgradeFrom23to24(db); + case 25 -> upgradeFrom24to25(db); + case 26 -> upgradeFrom25to26(db); + case 27 -> upgradeFrom26to27(db); + case 28 -> upgradeFrom27to28(db); + case 29 -> upgradeFrom28to29(db); + case 30 -> upgradeFrom29to30(db); + case 31 -> upgradeFrom30to31(db); + case 32 -> upgradeFrom31to32(db); + case 33 -> upgradeFrom32to33(db); + case 34 -> upgradeFrom33to34(db); + default -> throw new RuntimeException("Not implemented: upgrade to " + toVersion); } } } @@ -106,41 +82,18 @@ public class CustomSQLiteOpenHelper extends SQLiteOpenHelper { for (int toVersion = oldVersion - 1; toVersion >= newVersion; toVersion--) { Log.i(TAG, "Downgrade from " + oldVersion + " to " + toVersion); switch (toVersion) { - case 23: - downgradeFrom24to23(db); - break; - case 24: - downgradeFrom25to24(db); - break; - case 25: - downgradeFrom26to25(db); - break; - case 26: - downgradeFrom27to26(db); - break; - case 27: - downgradeFrom28to27(db); - break; - case 28: - downgradeFrom29to28(db); - break; - case 29: - downgradeFrom30to29(db); - break; - case 30: - downgradeFrom31to30(db); - break; - case 31: - downgradeFrom32to31(db); - break; - case 32: - downgradeFrom33to32(db); - break; - case 33: - downgradeFrom34to33(db); - break; - default: - throw new RuntimeException("Not implemented: downgrade to " + toVersion); + case 23 -> downgradeFrom24to23(db); + case 24 -> downgradeFrom25to24(db); + case 25 -> downgradeFrom26to25(db); + case 26 -> downgradeFrom27to26(db); + case 27 -> downgradeFrom28to27(db); + case 28 -> downgradeFrom29to28(db); + case 29 -> downgradeFrom30to29(db); + case 30 -> downgradeFrom31to30(db); + case 31 -> downgradeFrom32to31(db); + case 32 -> downgradeFrom33to32(db); + case 33 -> downgradeFrom34to33(db); + default -> throw new RuntimeException("Not implemented: downgrade to " + toVersion); } } } diff --git a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java index 0df7658cb..2e67c145b 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java +++ b/src/main/java/de/dennisguse/opentracks/data/ShareContentProvider.java @@ -129,24 +129,18 @@ public class ShareContentProvider extends CustomContentProvider { } private static TrackFileFormat getTrackFileFormat(@NonNull Uri uri) { - switch (uriMatcher.match(uri)) { - case URI_GPX: - return TrackFileFormat.GPX; - - case URI_KML_WITH_TRACKDETAIL_SENSORDATA: - return TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA; - - case URI_KMZ_WITH_TRACKDETAIL_AND_SENSORDATA: - return TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA; - case URI_KMZ_WITH_TRACKDETAIL_SENSORDATA_AND_PICTURES: - return TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES; - - case URI_CSV: - return TrackFileFormat.CSV; - - default: - throw new RuntimeException("Could not derive TrackFileFormat from Uri " + uri); - } + return switch (uriMatcher.match(uri)) { + case URI_GPX -> TrackFileFormat.GPX; + case URI_KML_WITH_TRACKDETAIL_SENSORDATA -> + TrackFileFormat.KML_WITH_TRACKDETAIL_AND_SENSORDATA; + case URI_KMZ_WITH_TRACKDETAIL_AND_SENSORDATA -> + TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA; + case URI_KMZ_WITH_TRACKDETAIL_SENSORDATA_AND_PICTURES -> + TrackFileFormat.KMZ_WITH_TRACKDETAIL_AND_SENSORDATA_AND_PICTURES; + case URI_CSV -> TrackFileFormat.CSV; + default -> + throw new RuntimeException("Could not derive TrackFileFormat from Uri " + uri); + }; } @Nullable @@ -170,14 +164,14 @@ public class ShareContentProvider extends CustomContentProvider { int i = 0; for (String col : projection) { switch (col) { - case OpenableColumns.DISPLAY_NAME: + case OpenableColumns.DISPLAY_NAME -> { cols[i] = OpenableColumns.DISPLAY_NAME; values[i++] = uri.getLastPathSegment(); - break; - case OpenableColumns.SIZE: + } + case OpenableColumns.SIZE -> { cols[i] = OpenableColumns.SIZE; values[i++] = -1; //Report unknown size; if applications need to know, one need to generate the file here also (count bytes that are written to OutputStream. - break; + } } } 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 26cad028f..89f7692bb 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Distance.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Distance.java @@ -58,16 +58,11 @@ public class Distance { } public static Distance one(UnitSystem unitSystem) { - switch (unitSystem) { - case METRIC: - return Distance.ofKilometer(1); - case IMPERIAL: - return Distance.ofMile(1); - case NAUTICAL_IMPERIAL: - return Distance.ofNauticalMile(1); - default: - throw new RuntimeException("Not implemented"); - } + return switch (unitSystem) { + case METRIC -> Distance.ofKilometer(1); + case IMPERIAL -> Distance.ofMile(1); + case NAUTICAL_IMPERIAL -> Distance.ofNauticalMile(1); + }; } private final double distance_m; @@ -133,28 +128,18 @@ public class Distance { } public double toKM_Miles(UnitSystem unitSystem) { - switch (unitSystem) { - case METRIC: - return toKM(); - case IMPERIAL: - return toMI(); - case NAUTICAL_IMPERIAL: - return toNauticalMiles(); - default: - throw new RuntimeException("Not implemented"); - } + return switch (unitSystem) { + case METRIC -> toKM(); + case IMPERIAL -> toMI(); + case NAUTICAL_IMPERIAL -> toNauticalMiles(); + }; } public double toM_FT(UnitSystem unitSystem) { - switch (unitSystem) { - case METRIC: - return toM(); - case NAUTICAL_IMPERIAL: - case IMPERIAL: - return toFT(); - default: - throw new RuntimeException("Not implemented"); - } + return switch (unitSystem) { + case METRIC -> toM(); + case NAUTICAL_IMPERIAL, IMPERIAL -> toFT(); + }; } @Override diff --git a/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java b/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java index 52dd301a8..8c853f048 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/DistanceFormatter.java @@ -46,38 +46,36 @@ public class DistanceFormatter { public Pair getDistanceParts(Distance distance) { if (distance.isInvalid()) { String valueUnknown = resources.getString(R.string.value_unknown); - switch (unitSystem) { - case METRIC: - return new Pair<>(valueUnknown, resources.getString(R.string.unit_meter)); - case IMPERIAL: - case NAUTICAL_IMPERIAL: - return new Pair<>(valueUnknown, resources.getString(R.string.unit_feet)); - default: - throw new RuntimeException("Not implemented"); - } + return switch (unitSystem) { + case METRIC -> new Pair<>(valueUnknown, resources.getString(R.string.unit_meter)); + case IMPERIAL, NAUTICAL_IMPERIAL -> + new Pair<>(valueUnknown, resources.getString(R.string.unit_feet)); + }; } switch (unitSystem) { - case METRIC: + case METRIC -> { if (distance.greaterThan(Distance.ofKilometer(threshold))) { return new Pair<>(StringUtils.formatDecimal(distance.toKM(), decimalCount), resources.getString(R.string.unit_kilometer)); } else { return new Pair<>(StringUtils.formatDecimal(distance.toM(), decimalCount), resources.getString(R.string.unit_meter)); } - case IMPERIAL: + } + case IMPERIAL -> { if (distance.greaterThan(Distance.ofMile(threshold))) { return new Pair<>(StringUtils.formatDecimal(distance.toMI(), decimalCount), resources.getString(R.string.unit_mile)); } else { return new Pair<>(StringUtils.formatDecimal(distance.toFT(), decimalCount), resources.getString(R.string.unit_feet)); } - case NAUTICAL_IMPERIAL: + } + case NAUTICAL_IMPERIAL -> { if (distance.greaterThan(Distance.ofNauticalMile(threshold))) { return new Pair<>(StringUtils.formatDecimal(distance.toNauticalMiles(), decimalCount), resources.getString(R.string.unit_nautical_mile)); } else { return new Pair<>(StringUtils.formatDecimal(distance.toFT(), decimalCount), resources.getString(R.string.unit_feet)); } - default: - throw new RuntimeException("Not implemented"); + } + default -> throw new RuntimeException("Not implemented"); } } 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 7d2ee73ff..524651df5 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Speed.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Speed.java @@ -115,16 +115,11 @@ public class Speed { } public double to(UnitSystem unitSystem) { - switch (unitSystem) { - case METRIC: - return toKMH(); - case IMPERIAL: - return toMPH(); - case NAUTICAL_IMPERIAL: - return toKnots(); - default: - throw new RuntimeException("Not implemented"); - } + return switch (unitSystem) { + case METRIC -> toKMH(); + case IMPERIAL -> toMPH(); + case NAUTICAL_IMPERIAL -> toKnots(); + }; } @Override diff --git a/src/main/java/de/dennisguse/opentracks/data/models/SpeedFormatter.java b/src/main/java/de/dennisguse/opentracks/data/models/SpeedFormatter.java index 61b473960..d58fc384e 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/SpeedFormatter.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/SpeedFormatter.java @@ -39,20 +39,14 @@ public class SpeedFormatter { * @return the formatted speed (or null) and it's unit as {@link Pair} */ public Pair getSpeedParts(Speed speed) { - int unitId; - switch (unitSystem) { - case METRIC: - unitId = reportSpeedOrPace ? R.string.unit_kilometer_per_hour : R.string.unit_minute_per_kilometer; - break; - case IMPERIAL: - unitId = reportSpeedOrPace ? R.string.unit_mile_per_hour : R.string.unit_minute_per_mile; - break; - case NAUTICAL_IMPERIAL: - unitId = reportSpeedOrPace ? R.string.unit_knots : R.string.unit_minute_per_nautical_mile; - break; - default: - throw new RuntimeException("Not implemented"); - } + int unitId = switch (unitSystem) { + case METRIC -> + reportSpeedOrPace ? R.string.unit_kilometer_per_hour : R.string.unit_minute_per_kilometer; + case IMPERIAL -> + reportSpeedOrPace ? R.string.unit_mile_per_hour : R.string.unit_minute_per_mile; + case NAUTICAL_IMPERIAL -> + reportSpeedOrPace ? R.string.unit_knots : R.string.unit_minute_per_nautical_mile; + }; String unitString = resources.getString(unitId); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java index 5e526fb57..448e54a0f 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/CSVTrackExporter.java @@ -93,23 +93,9 @@ public class CSVTrackExporter implements TrackExporter { @Override public boolean writeTrack(Track[] tracks, @NonNull OutputStream outputStream) { - List columns = Collections.unmodifiableList(Arrays.asList( - new Column("time", null), - new Column("trackpoint_type", t -> quote(t.getType().name())), - new Column("latitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLatitude()) : ""), - new Column("longitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLongitude()) : ""), - new Column("altitude", t -> t.hasAltitude() ? COORDINATE_FORMAT.format(t.getAltitude().toM()) : ""), - new Column("accuracy_horizontal", t -> t.hasHorizontalAccuracy() ? DISTANCE_FORMAT.format(t.getHorizontalAccuracy().toM()) : ""), - new Column("accuracy_vertical", t -> t.hasVerticalAccuracy() ? DISTANCE_FORMAT.format(t.getVerticalAccuracy().toM()) : ""), + List columns = Collections.unmodifiableList(Arrays.asList(new Column("time", null), new Column("trackpoint_type", t -> quote(t.getType().name())), new Column("latitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLatitude()) : ""), new Column("longitude", t -> t.hasLocation() ? COORDINATE_FORMAT.format(t.getLongitude()) : ""), new Column("altitude", t -> t.hasAltitude() ? COORDINATE_FORMAT.format(t.getAltitude().toM()) : ""), new Column("accuracy_horizontal", t -> t.hasHorizontalAccuracy() ? DISTANCE_FORMAT.format(t.getHorizontalAccuracy().toM()) : ""), new Column("accuracy_vertical", t -> t.hasVerticalAccuracy() ? DISTANCE_FORMAT.format(t.getVerticalAccuracy().toM()) : ""), - new Column("speed", t -> t.hasSpeed() ? SPEED_FORMAT.format(t.getSpeed().toKMH()) : ""), - new Column("altitude_gain", t -> t.hasAltitudeGain() ? DISTANCE_FORMAT.format(t.getAltitudeGain()) : ""), - new Column("altitude_loss", t -> t.hasAltitudeLoss() ? DISTANCE_FORMAT.format(t.getAltitudeLoss()) : ""), - new Column("sensor_distance", t -> t.hasSensorDistance() ? DISTANCE_FORMAT.format(t.getSensorDistance().toM()) : ""), - new Column("heartrate", t -> t.hasHeartRate() ? HEARTRATE_FORMAT.format(t.getHeartRate().getBPM()) : ""), - new Column("cadence", t -> t.hasCadence() ? CADENCE_FORMAT.format(t.getCadence().getRPM()) : ""), - new Column("power", t -> t.hasPower() ? ALTITUDE_FORMAT.format(t.getPower().getW()) : "") - )); + new Column("speed", t -> t.hasSpeed() ? SPEED_FORMAT.format(t.getSpeed().toKMH()) : ""), new Column("altitude_gain", t -> t.hasAltitudeGain() ? DISTANCE_FORMAT.format(t.getAltitudeGain()) : ""), new Column("altitude_loss", t -> t.hasAltitudeLoss() ? DISTANCE_FORMAT.format(t.getAltitudeLoss()) : ""), new Column("sensor_distance", t -> t.hasSensorDistance() ? DISTANCE_FORMAT.format(t.getSensorDistance().toM()) : ""), new Column("heartrate", t -> t.hasHeartRate() ? HEARTRATE_FORMAT.format(t.getHeartRate().getBPM()) : ""), new Column("cadence", t -> t.hasCadence() ? CADENCE_FORMAT.format(t.getCadence().getRPM()) : ""), new Column("power", t -> t.hasPower() ? ALTITUDE_FORMAT.format(t.getPower().getW()) : ""))); try { prepare(outputStream); @@ -144,15 +130,10 @@ public class CSVTrackExporter implements TrackExporter { TrackPoint trackPoint = trackPointIterator.next(); switch (trackPoint.getType()) { - case SEGMENT_START_MANUAL: - case SEGMENT_END_MANUAL: - case SEGMENT_START_AUTOMATIC: - case SENSORPOINT: - case TRACKPOINT: - writeTrackPoint(columns, trackPoint); - break; - default: - throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType()); + case SEGMENT_START_MANUAL, SEGMENT_END_MANUAL, SEGMENT_START_AUTOMATIC, SENSORPOINT, TRACKPOINT -> + writeTrackPoint(columns, trackPoint); + default -> + throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType()); } } } @@ -171,18 +152,14 @@ public class CSVTrackExporter implements TrackExporter { public void writeHeader(List columns) { if (printWriter != null) { - String columnNames = columns.stream().map(c -> c.columnName) - .reduce((s, s2) -> s + "," + s2) - .orElseThrow(() -> new RuntimeException("No columns defined")); + String columnNames = columns.stream().map(c -> c.columnName).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); printWriter.println("#" + columnNames); } } public void writeTrackPoint(List columns, TrackPoint trackPoint) { if (printWriter != null) { - String columnNames = columns.stream().map(c -> c.extractor.apply(trackPoint)) - .reduce((s, s2) -> s + "," + s2) - .orElseThrow(() -> new RuntimeException("No columns defined")); + String columnNames = columns.stream().map(c -> c.extractor.apply(trackPoint)).reduce((s, s2) -> s + "," + s2).orElseThrow(() -> new RuntimeException("No columns defined")); printWriter.println(columnNames); } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportServiceResultReceiver.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportServiceResultReceiver.java index 892583b14..f369de924 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportServiceResultReceiver.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/ExportServiceResultReceiver.java @@ -30,14 +30,9 @@ public class ExportServiceResultReceiver extends ResultReceiver { protected void onReceiveResult(int resultCode, Bundle resultData) { Track.Id trackId = resultData.getParcelable(ExportServiceResultReceiver.RESULT_EXTRA_TRACK_ID); switch (resultCode) { - case RESULT_CODE_SUCCESS: - receiver.onExportSuccess(trackId); - break; - case RESULT_CODE_ERROR: - receiver.onExportError(trackId); - break; - default: - throw new RuntimeException("Unknown resultCode."); + case RESULT_CODE_SUCCESS -> receiver.onExportSuccess(trackId); + case RESULT_CODE_ERROR -> receiver.onExportError(trackId); + default -> throw new RuntimeException("Unknown resultCode."); } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java index 8c90cac2f..187c7d7b5 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/GPXTrackExporter.java @@ -145,37 +145,32 @@ public class GPXTrackExporter implements TrackExporter { } switch (trackPoint.getType()) { - case SEGMENT_START_MANUAL: - Log.i(TAG, "Exporting " + TrackPoint.Type.SEGMENT_START_MANUAL.name() + " is not supported."); - break; - case SEGMENT_END_MANUAL: + case SEGMENT_START_MANUAL -> + Log.i(TAG, "Exporting " + TrackPoint.Type.SEGMENT_START_MANUAL.name() + " is not supported."); + case SEGMENT_END_MANUAL -> { if (wroteSegment) writeCloseSegment(); wroteSegment = false; Log.i(TAG, "Exporting " + TrackPoint.Type.SEGMENT_END_MANUAL.name() + " is not supported."); - break; - case SEGMENT_START_AUTOMATIC: + } + case SEGMENT_START_AUTOMATIC -> { if (wroteSegment) writeCloseSegment(); writeOpenSegment(); wroteSegment = true; - trackDistance = trackDistance.plus(writeTrackPoint(track.getZoneOffset(), trackPoint, sensorPoints, trackDistance)); sensorPoints.clear(); - break; - case SENSORPOINT: - sensorPoints.add(trackPoint); - break; - case TRACKPOINT: + } + case SENSORPOINT -> sensorPoints.add(trackPoint); + case TRACKPOINT -> { if (!wroteSegment) { // Might happen for older data (pre v3.15.0) writeOpenSegment(); wroteSegment = true; } - trackDistance = trackDistance.plus(writeTrackPoint(track.getZoneOffset(), trackPoint, sensorPoints, trackDistance)); sensorPoints.clear(); - break; - default: - throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType()); + } + default -> + throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType()); } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java index f7e1e1184..a67a60734 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/exporter/KMLTrackExporter.java @@ -169,30 +169,28 @@ public class KMLTrackExporter implements TrackExporter { } switch (trackPoint.getType()) { - case SEGMENT_START_MANUAL: - case SEGMENT_START_AUTOMATIC: + case SEGMENT_START_MANUAL, SEGMENT_START_AUTOMATIC -> { if (wroteSegment) writeCloseSegment(); writeOpenSegment(); writeTrackPoint(track.getZoneOffset(), trackPoint); wroteSegment = true; - break; - case SEGMENT_END_MANUAL: + } + case SEGMENT_END_MANUAL -> { if (!wroteSegment) writeOpenSegment(); writeTrackPoint(track.getZoneOffset(), trackPoint); writeCloseSegment(); wroteSegment = false; - break; - case SENSORPOINT: - case TRACKPOINT: + } + case SENSORPOINT, TRACKPOINT -> { if (!wroteSegment) { // Might happen for older data (pre v3.15.0) writeOpenSegment(); wroteSegment = true; } writeTrackPoint(track.getZoneOffset(), trackPoint); - break; - default: - throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType()); + } + default -> + throw new RuntimeException("Exporting this TrackPoint type is not implemented: " + trackPoint.getType()); } } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java index 22dc42199..1d978e662 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/GpxTrackImporter.java @@ -156,103 +156,94 @@ public class GpxTrackImporter extends DefaultHandler implements XMLImporter.Trac @Override public void endElement(String uri, String localName, String tag) { switch (tag) { - case TAG_GPX: - onFileEnd(); - break; - case TAG_MARKER: - onMarkerEnd(); - break; - case TAG_TRACK: + case TAG_GPX -> onFileEnd(); + case TAG_MARKER -> onMarkerEnd(); + case TAG_TRACK -> { trackImporter.setTrack(context, name, uuid, description, category, null, zoneOffset); zoneOffset = null; - break; - case TAG_TRACK_SEGMENT: - onTrackSegmentEnd(); - break; - case TAG_TRACK_POINT: - currentSegment.add(createTrackPoint()); - break; - case TAG_NAME: + } + case TAG_TRACK_SEGMENT -> onTrackSegmentEnd(); + case TAG_TRACK_POINT -> currentSegment.add(createTrackPoint()); + case TAG_NAME -> { if (content != null) { name = content.trim(); } - break; - case TAG_DESCRIPTION: + } + case TAG_DESCRIPTION -> { if (content != null) { description = content.trim(); } - break; - case TAG_TYPE: + } + case TAG_TYPE -> { if (content != null) { category = content.trim(); } - break; - case TAG_TIME: + } + case TAG_TIME -> { if (content != null) { time = content.trim(); } - break; - case TAG_ALTITUDE: + } + case TAG_ALTITUDE -> { if (content != null) { altitude = content.trim(); } - break; - case TAG_COMMENT: + } + case TAG_COMMENT -> { if (content != null) { markerType = content.trim(); } - break; - case TAG_EXTENSION_SPEED: - case TAG_EXTENSION_SPEED_COMPAT: + } + case TAG_EXTENSION_SPEED, TAG_EXTENSION_SPEED_COMPAT -> { if (content != null) { speed = content.trim(); } - break; - case TAG_EXTENSION_HEARTRATE: + } + case TAG_EXTENSION_HEARTRATE -> { if (content != null) { heartrate = content.trim(); } - break; - case TAG_EXTENSION_CADENCE: + } + case TAG_EXTENSION_CADENCE -> { if (content != null) { cadence = content.trim(); } - break; - case TAG_EXTENSION_POWER: + } + case TAG_EXTENSION_POWER -> { if (content != null) { power = content.trim(); } - break; - case TAG_ID: + } + case TAG_ID -> { if (content != null) { uuid = content.trim(); } - break; - case TAG_EXTENSION_GAIN: + } + case TAG_EXTENSION_GAIN -> { if (content != null) { gain = content.trim(); } - break; - case TAG_EXTENSION_LOSS: + } + case TAG_EXTENSION_LOSS -> { if (content != null) { loss = content.trim(); } - break; - case TAG_EXTENSION_DISTANCE: + } + case TAG_EXTENSION_DISTANCE -> { if (content != null) { sensorDistance = content.trim(); } - break; - case TAG_EXTENSION_ACCURACY_HORIZONTAL: + } + case TAG_EXTENSION_ACCURACY_HORIZONTAL -> { if (content != null) { accuracyHorizontal = content.trim(); } - break; - case TAG_EXTENSION_ACCURACY_VERTICAL: + } + case TAG_EXTENSION_ACCURACY_VERTICAL -> { if (content != null) { accuracyVertical = content.trim(); } - break; + } } content = ""; diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java index 2d445a33e..41281b083 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/ImportViewModel.java @@ -79,19 +79,17 @@ public class ImportViewModel extends AndroidViewModel implements ImportServiceRe String message = resultData.getString(ImportServiceResultReceiver.RESULT_EXTRA_MESSAGE); switch (resultCode) { - case ImportServiceResultReceiver.RESULT_CODE_ERROR: + case ImportServiceResultReceiver.RESULT_CODE_ERROR -> { summary.errorCount++; summary.fileErrors.add(getApplication().getString(R.string.import_error_info, fileName, message)); - break; - case ImportServiceResultReceiver.RESULT_CODE_IMPORTED: + } + case ImportServiceResultReceiver.RESULT_CODE_IMPORTED -> { summary.importedTrackIds.addAll(trackIds); summary.successCount++; - break; - case ImportServiceResultReceiver.RESULT_CODE_ALREADY_EXISTS: - summary.existsCount++; - break; - default: - throw new RuntimeException(TAG + ": import service result code invalid: " + resultCode); + } + case ImportServiceResultReceiver.RESULT_CODE_ALREADY_EXISTS -> summary.existsCount++; + default -> + throw new RuntimeException(TAG + ": import service result code invalid: " + resultCode); } importData.postValue(summary); diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlTrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlTrackImporter.java index 19b6be926..9e2b0389a 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlTrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/KmlTrackImporter.java @@ -136,27 +136,18 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac @Override public void startElement(String uri, String localName, String tag, Attributes attributes) throws SAXException { switch (tag) { - case TAG_PLACEMARK: - case TAG_PHOTO_OVERLAY: + case TAG_PLACEMARK, TAG_PHOTO_OVERLAY -> // Note that a track is contained in a Placemark, calling onMarkerStart will clear various track variables like name, category, and description. - onMarkerStart(); - break; - case TAG_MULTI_TRACK: - case TAG_KML22_MULTI_TRACK: - trackImporter.newTrack(); - break; - case TAG_TRACK: - case TAG_KML22_TRACK: + onMarkerStart(); + case TAG_MULTI_TRACK, TAG_KML22_MULTI_TRACK -> trackImporter.newTrack(); + case TAG_TRACK, TAG_KML22_TRACK -> { if (trackImporter == null) { throw new SAXException("Missing " + TAG_MULTI_TRACK); } onTrackSegmentStart(); - break; - case TAG_DATA_CATEGORY: - case TAG_SIMPLE_ARRAY_DATA: - case TAG_KML22_SIMPLE_ARRAY_DATA: - dataType = attributes.getValue(ATTRIBUTE_NAME); - break; + } + case TAG_DATA_CATEGORY, TAG_SIMPLE_ARRAY_DATA, TAG_KML22_SIMPLE_ARRAY_DATA -> + dataType = attributes.getValue(ATTRIBUTE_NAME); } } @@ -168,32 +159,18 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac @Override public void endElement(String uri, String localName, String tag) throws SAXException { switch (tag) { - case TAG_KML: - onFileEnd(); - break; - case TAG_PLACEMARK: - case TAG_PHOTO_OVERLAY: + case TAG_KML -> onFileEnd(); + case TAG_PLACEMARK, TAG_PHOTO_OVERLAY -> // Note that a track is contained in a Placemark, calling onMarkerEnd is save since markerType is not set for a track. - onMarkerEnd(); - break; - case TAG_COORDINATES: - onMarkerLocationEnd(); - break; - case TAG_MULTI_TRACK: - case TAG_KML22_MULTI_TRACK: + onMarkerEnd(); + case TAG_COORDINATES -> onMarkerLocationEnd(); + case TAG_MULTI_TRACK, TAG_KML22_MULTI_TRACK -> { trackImporter.setTrack(context, name, uuid, description, category, icon, zoneOffset); zoneOffset = null; - break; - case TAG_TRACK: - case TAG_KML22_TRACK: - onTrackSegmentEnd(); - break; - case TAG_COORD: - case TAG_KML22_COORD: - onCoordEnded(); - break; - case TAG_VALUE: - case TAG_KML22_VALUE: + } + case TAG_TRACK, TAG_KML22_TRACK -> onTrackSegmentEnd(); + case TAG_COORD, TAG_KML22_COORD -> onCoordEnded(); + case TAG_VALUE, TAG_KML22_VALUE -> { if (KMLTrackExporter.EXTENDED_DATA_TYPE_CATEGORY.equals(dataType)) { if (content != null) { category = content.trim(); @@ -201,28 +178,28 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac } else { onExtendedDataValueEnd(); } - break; - case TAG_NAME: + } + case TAG_NAME -> { if (content != null) { name = content.trim(); } - break; - case TAG_UUID: + } + case TAG_UUID -> { if (content != null) { uuid = content.trim(); } - break; - case TAG_DESCRIPTION: + } + case TAG_DESCRIPTION -> { if (content != null) { description = content.trim(); } - break; - case TAG_ICON: + } + case TAG_ICON -> { if (content != null) { icon = content.trim(); } - break; - case TAG_WHEN: + } + case TAG_WHEN -> { if (content != null) { try { OffsetDateTime time = StringUtils.parseTime(content.trim()); @@ -234,18 +211,17 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac throw new ParsingException(createErrorMessage(String.format(Locale.US, "Unable to parse time: %s", content.trim())), e); } } - - break; - case TAG_STYLE_URL: + } + case TAG_STYLE_URL -> { if (content != null) { markerType = content.trim(); } - break; - case TAG_HREF: + } + case TAG_HREF -> { if (content != null) { photoUrl = content.trim(); } - break; + } } // Reset element content @@ -436,35 +412,19 @@ public class KmlTrackImporter extends DefaultHandler implements XMLImporter.Trac } } switch (dataType) { - case KMLTrackExporter.EXTENDED_DATA_TYPE_SPEED: - sensorSpeedList.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_DISTANCE: - sensorDistanceList.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_POWER: - sensorPowerList.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_HEART_RATE: - sensorHeartRateList.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_CADENCE: - sensorCadenceList.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_GAIN: - altitudeGainList.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_LOSS: - altitudeLossList.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_HORIZONTAL: - accuracyHorizontal.add(value); - break; - case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_VERTICAL: - accuracyVertical.add(value); - break; - default: - Log.w(TAG, "Data from extended data " + dataType + " is not (yet) supported."); + case KMLTrackExporter.EXTENDED_DATA_TYPE_SPEED -> sensorSpeedList.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_DISTANCE -> sensorDistanceList.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_POWER -> sensorPowerList.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_HEART_RATE -> sensorHeartRateList.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_CADENCE -> sensorCadenceList.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_GAIN -> altitudeGainList.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_ALTITUDE_LOSS -> altitudeLossList.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_HORIZONTAL -> + accuracyHorizontal.add(value); + case KMLTrackExporter.EXTENDED_DATA_TYPE_ACCURACY_VERTICAL -> + accuracyVertical.add(value); + default -> + Log.w(TAG, "Data from extended data " + dataType + " is not (yet) supported."); } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java index 366469931..7e0c19f8e 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/AbstractBluetoothConnectionManager.java @@ -53,26 +53,22 @@ public abstract class AbstractBluetoothConnectionManager { @Override public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) { switch (newState) { - case BluetoothProfile.STATE_CONNECTING: - Log.i(TAG, "Connecting to sensor: " + gatt.getDevice()); - break; - case BluetoothProfile.STATE_CONNECTED: + case BluetoothProfile.STATE_CONNECTING -> + Log.i(TAG, "Connecting to sensor: " + gatt.getDevice()); + case BluetoothProfile.STATE_CONNECTED -> { Log.i(TAG, "Connected to sensor: " + gatt.getDevice() + "; discovering services."); - gatt.discoverServices(); - break; - case BluetoothProfile.STATE_DISCONNECTING: - Log.i(TAG, "Disconnecting from sensor: " + gatt.getDevice()); - break; - - case BluetoothProfile.STATE_DISCONNECTED: + } + case BluetoothProfile.STATE_DISCONNECTING -> + Log.i(TAG, "Disconnecting from sensor: " + gatt.getDevice()); + case BluetoothProfile.STATE_DISCONNECTED -> { //This is also triggered, if no connection was established (ca. 30s) Log.i(TAG, "Disconnected from sensor: " + gatt.getDevice() + "; trying to reconnect"); if (gatt.connect()) { Log.e(TAG, "Could not trigger reconnect for sensor: " + gatt.getDevice()); } clearData(); - break; + } } } diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingCadence.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingCadence.java index efb95d070..0fbdb193e 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingCadence.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingCadence.java @@ -76,9 +76,8 @@ public class SensorDataCyclingCadence extends SensorData { @Override public boolean equals(@Nullable Object obj) { - if (!(obj instanceof SensorDataCyclingCadence)) return false; + if (!(obj instanceof SensorDataCyclingCadence comp)) return false; - SensorDataCyclingCadence comp = (SensorDataCyclingCadence) obj; if (hasData() && comp.hasData() == hasData()) { return getCrankRevolutionsCount() == comp.getCrankRevolutionsCount() && getCrankRevolutionsTime() == comp.getCrankRevolutionsTime(); } else { diff --git a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingDistanceSpeed.java b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingDistanceSpeed.java index 6a5528e24..0e76713ac 100644 --- a/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingDistanceSpeed.java +++ b/src/main/java/de/dennisguse/opentracks/sensors/sensorData/SensorDataCyclingDistanceSpeed.java @@ -93,9 +93,8 @@ public class SensorDataCyclingDistanceSpeed extends SensorData { perUnitStringId = R.string.voice_per_kilometer; distanceId = R.plurals.voiceDistanceKilometers; speedId = R.plurals.voiceSpeedKilometersPerHour; unitDistanceTTS = "kilometer"; unitSpeedTTS = "kilometer per hour"; - break; - case IMPERIAL: + } + case IMPERIAL -> { perUnitStringId = R.string.voice_per_mile; distanceId = R.plurals.voiceDistanceMiles; speedId = R.plurals.voiceSpeedMilesPerHour; unitDistanceTTS = "mile"; unitSpeedTTS = "mile per hour"; - break; - case NAUTICAL_IMPERIAL: + } + case NAUTICAL_IMPERIAL -> { perUnitStringId = R.string.voice_per_nautical_mile; distanceId = R.plurals.voiceDistanceNauticalMiles; speedId = R.plurals.voiceSpeedMKnots; unitDistanceTTS = "nautical mile"; unitSpeedTTS = "knots"; - break; - default: - throw new RuntimeException("Not implemented"); + } + default -> throw new RuntimeException("Not implemented"); } double distanceInUnit = totalDistance.toKM_Miles(unitSystem); diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index 92b37fa69..156e45bf4 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -68,18 +68,10 @@ public class DefaultsSettingsFragment extends PreferenceFragmentCompat implement ListPreference statsRatePreferences = findPreference(getString(R.string.stats_rate_key)); - int entriesId; - switch (unitSystem) { - case METRIC: - entriesId = R.array.stats_rate_metric_options; - break; - case IMPERIAL: - case NAUTICAL_IMPERIAL: - entriesId = R.array.stats_rate_imperial_options; - break; - default: - throw new RuntimeException("Not implemented"); - } + int entriesId = switch (unitSystem) { + case METRIC -> R.array.stats_rate_metric_options; + case IMPERIAL, NAUTICAL_IMPERIAL -> R.array.stats_rate_imperial_options; + }; String[] entries = getResources().getStringArray(entriesId); statsRatePreferences.setEntries(entries); diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesOpenHelper.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesOpenHelper.java index 08afe297c..217ef708e 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesOpenHelper.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesOpenHelper.java @@ -32,14 +32,9 @@ class PreferencesOpenHelper { PreferencesUtils.setInt(R.string.prefs_last_version_key, version); for (int i = 1; i <= version; i++) { switch (i) { - case 1: - upgradeFrom0to1(); - break; - case 2: - upgradeFrom1to2(); - break; - default: - throw new RuntimeException("Not implemented: upgrade to " + version); + case 1 -> upgradeFrom0to1(); + case 2 -> upgradeFrom1to2(); + default -> throw new RuntimeException("Not implemented: upgrade to " + version); } } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index c05fab2e7..58d4eb680 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -448,23 +448,21 @@ public class PreferencesUtils { String displayValue = formatter.formatDistance(distance); switch (unitSystem) { - case METRIC: + case METRIC -> { if (value == recordingDistanceIntervalDefault) { entries[i] = resources.getString(R.string.value_integer_meter_recommended, value); } else { entries[i] = displayValue; } - break; - case IMPERIAL: - case NAUTICAL_IMPERIAL: + } + case IMPERIAL, NAUTICAL_IMPERIAL -> { if (value == recordingDistanceIntervalDefault) { entries[i] = resources.getString(R.string.value_integer_feet_recommended, (int) distance.toFT()); } else { entries[i] = displayValue; } - break; - default: - throw new RuntimeException("Not implemented"); + } + default -> throw new RuntimeException("Not implemented"); } } @@ -494,23 +492,21 @@ public class PreferencesUtils { String displayValue = formatter.formatDistance(distance); switch (unitSystem) { - case METRIC: + case METRIC -> { if (value == maxRecordingDistanceDefault) { entries[i] = resources.getString(R.string.value_integer_meter_recommended, value); } else { entries[i] = displayValue; } - break; - case IMPERIAL: - case NAUTICAL_IMPERIAL: + } + case IMPERIAL, NAUTICAL_IMPERIAL -> { if (value == maxRecordingDistanceDefault) { entries[i] = resources.getString(R.string.value_integer_feet_recommended, (int) distance.toFT()); } else { entries[i] = displayValue; } - break; - default: - throw new RuntimeException("Not implemented"); + } + default -> throw new RuntimeException("Not implemented"); } } @@ -569,7 +565,7 @@ public class PreferencesUtils { String displayValue = formatter.formatDistance(distance); switch (unitSystem) { - case METRIC: + case METRIC -> { if (value == recordingGPSAccuracyDefault) { entries[i] = resources.getString(R.string.value_integer_meter_recommended, value); } else if (value == recordingGPSAccuracyExcellent) { @@ -579,9 +575,8 @@ public class PreferencesUtils { } else { entries[i] = displayValue; } - break; - case IMPERIAL: - case NAUTICAL_IMPERIAL: + } + case IMPERIAL, NAUTICAL_IMPERIAL -> { if (value == recordingGPSAccuracyDefault) { entries[i] = resources.getString(R.string.value_integer_feet_recommended, (int) distance.toFT()); } else if (value == recordingGPSAccuracyExcellent) { @@ -589,9 +584,8 @@ public class PreferencesUtils { } else { entries[i] = displayValue; } - break; - default: - throw new RuntimeException("Not implemented"); + } + default -> throw new RuntimeException("Not implemented"); } } @@ -617,32 +611,30 @@ public class PreferencesUtils { float value = Float.parseFloat(entryValues[i]); switch (unitSystem) { - case METRIC: + case METRIC -> { if (value == idleSpeedDefault) { entries[i] = resources.getString(R.string.value_float_kilometer_hour_recommended, value); } else { entries[i] = resources.getString(R.string.value_float_kilometer_hour, value); } - break; - case IMPERIAL: + } + case IMPERIAL -> { double valueMPH = Speed.ofKMH(value).toMPH(); - if (value == idleSpeedDefault) { entries[i] = resources.getString(R.string.value_float_mile_hour_recommended, valueMPH); } else { entries[i] = resources.getString(R.string.value_float_mile_hour, valueMPH); } - break; - case NAUTICAL_IMPERIAL: + } + case NAUTICAL_IMPERIAL -> { double valueKnots = Speed.ofKMH(value).toKnots(); if (value == idleSpeedDefault) { entries[i] = resources.getString(R.string.value_float_knots_recommended, valueKnots); } else { entries[i] = resources.getString(R.string.value_float_knots, valueKnots); } - break; - default: - throw new RuntimeException("Not implemented"); + } + default -> throw new RuntimeException("Not implemented"); } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeAdapter.java b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeAdapter.java index d9088f10d..c60a3f4a9 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/settings/bluetooth/BluetoothLeAdapter.java @@ -96,8 +96,7 @@ public class BluetoothLeAdapter extends BaseAdapter { @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof Device)) return false; - Device device = (Device) o; + if (!(o instanceof Device device)) return false; return address.equals(device.address); } 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 5d190d027..136079071 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/ui/markers/MarkerListActivity.java @@ -31,6 +31,8 @@ import androidx.loader.app.LoaderManager; import androidx.loader.content.CursorLoader; import androidx.loader.content.Loader; +import java.util.Objects; + import de.dennisguse.opentracks.AbstractActivity; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.ContentProviderUtils; @@ -309,11 +311,7 @@ public class MarkerListActivity extends AbstractActivity implements DeleteMarker public void setSearch(String searchQuery) { this.searchQuery = searchQuery; restart(); - if (searchQuery != null) { - viewBinding.bottomAppBarLayout.bottomAppBarTitle.setText(searchQuery); - } else { - viewBinding.bottomAppBarLayout.bottomAppBarTitle.setText(getString(R.string.menu_markers)); - } + viewBinding.bottomAppBarLayout.bottomAppBarTitle.setText(Objects.requireNonNullElseGet(searchQuery, () -> getString(R.string.menu_markers))); } public void restart() { diff --git a/src/main/java/de/dennisguse/opentracks/util/FileUtils.java b/src/main/java/de/dennisguse/opentracks/util/FileUtils.java index 217c2ed9f..708c72092 100644 --- a/src/main/java/de/dennisguse/opentracks/util/FileUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/FileUtils.java @@ -29,6 +29,7 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.channels.FileChannel; import java.util.ArrayList; +import java.util.List; import de.dennisguse.opentracks.BuildConfig; import de.dennisguse.opentracks.data.models.Track; @@ -162,34 +163,8 @@ public class FileUtils { * @param character the character */ private static boolean isSpecialFat32(char character) { - switch (character) { - case '$': - case '%': - case '\'': - case '-': - case '_': - case '@': - case '~': - case '`': - case '!': - case '(': - case ')': - case '{': - case '}': - case '^': - case '#': - case '&': - case '+': - case ',': - case ';': - case '=': - case '[': - case ']': - case ' ': - return true; - default: - return false; - } + return List.of('$', '%', '\'', '-', '_', '@', '~', '`', '!', '(', ')', '{', '}', '^', '#', '&', '+', ',', ';', '=', '[', ']', ' ') + .contains(character); } /** diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java index 38c9eb65d..6299bd4cf 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java @@ -40,11 +40,9 @@ public class TrackIconUtils { it -> it.getId().equals(activityTypeId) ).findFirst(); - if (found.isEmpty()) { - return ActivityType.UNKNOWN.getIconId(); - } + return found.map(ActivityType::getIconId) + .orElseGet(ActivityType.UNKNOWN::getIconId); - return found.get().getIconId(); } public static int getIconActivityType(String activityTypeId) { @@ -52,11 +50,9 @@ public class TrackIconUtils { it -> it.getId().equals(activityTypeId) ).findFirst(); - if (found.isEmpty()) { - return ActivityType.UNKNOWN.getFirstLocalizedStringId(); - } + return found.map(ActivityType::getFirstLocalizedStringId) + .orElseGet(ActivityType.UNKNOWN::getFirstLocalizedStringId); - return found.get().getFirstLocalizedStringId(); } /** @@ -96,10 +92,8 @@ public class TrackIconUtils { ) .findFirst(); - if (selected.isEmpty()) { - return false; - } + return selected.map(ActivityType::isShowSpeedPreferred) + .orElse(false); - return selected.get().isShowSpeedPreferred(); } }