From 425ea0f2168af542a10bee3193ffd9419c85aee2 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 24 Jun 2023 19:30:00 +0200 Subject: [PATCH] Cleanup: use ActivityType instead of passing it's id around as String. Part of #1608. --- .../io/file/importer/ExportImportTest.java | 15 ++++---- .../file/importer/GPXTrackImporterTest.java | 13 +++---- .../file/importer/KMLTrackImporterTest.java | 13 +++---- .../share/DescriptionGeneratorTest.java | 4 +-- .../AggregatedStatisticsTest.java | 7 ++-- .../EspressoAggregatedFilterTest.java | 2 +- .../opentracks/TrackEditActivity.java | 36 +++++++++---------- .../opentracks/TrackListActivity.java | 8 ++--- .../opentracks/TrackRecordingActivity.java | 7 ++-- .../opentracks/TrackStoppedActivity.java | 26 ++++++-------- .../opentracks/chart/ChartFragment.java | 2 +- .../opentracks/data/ContentProviderUtils.java | 13 +++---- .../opentracks/data/TrackSelection.java | 2 +- .../opentracks/data/models/ActivityType.java | 14 ++++---- .../opentracks/data/models/Track.java | 26 +++++++------- .../opentracks/data/tables/TracksColumns.java | 6 ++-- .../ChooseActivityTypeDialogFragment.java | 11 +++--- .../fragments/StatisticsRecordedFragment.java | 10 +++--- .../io/file/TrackFilenameGenerator.java | 2 +- .../io/file/exporter/GPXTrackExporter.java | 2 +- .../io/file/exporter/KMLTrackExporter.java | 10 +++--- .../io/file/importer/TrackImporter.java | 19 +++++----- .../opentracks/publicapi/StartRecording.java | 9 ++--- .../opentracks/services/RecordingData.java | 2 +- .../services/TrackRecordingManager.java | 5 ++- .../announcement/VoiceAnnouncement.java | 2 +- .../settings/ActivityTypePreference.java | 25 ++++++------- .../settings/DefaultsSettingsFragment.java | 5 +-- .../opentracks/settings/SettingsActivity.java | 5 +-- .../share/DescriptionGenerator.java | 2 +- .../AggregatedStatistics.java | 2 +- .../AggregatedStatisticsAdapter.java | 4 +-- .../ui/intervals/IntervalsFragment.java | 2 +- .../opentracks/util/TrackUtils.java | 22 ++++++------ 34 files changed, 162 insertions(+), 171 deletions(-) diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java index 7fb5371af..d1a4f5fdb 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/ExportImportTest.java @@ -46,6 +46,7 @@ import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TimezoneRule; import de.dennisguse.opentracks.content.data.TestDataUtil; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Cadence; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.HeartRate; @@ -95,8 +96,8 @@ public class ExportImportTest { private final ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context); - private static final String TRACK_ICON = "the track icon"; - private static final String TRACK_ACTIVITY_TYPE = "the activity type"; + private static final ActivityType TRACK_ACTIVITY_TYPE = ActivityType.MOUNTAIN_BIKE; + private static final String TRACK_ACTIVITY_TYPE_LOCALIZED = "the activity type"; private static final String TRACK_DESCRIPTION = "the description"; private File tmpFile; @@ -180,8 +181,8 @@ public class ExportImportTest { service.endCurrentTrack(); Track track = contentProviderUtils.getTrack(trackId); - track.setActivityTypeId(TRACK_ICON); track.setActivityType(TRACK_ACTIVITY_TYPE); + track.setActivityTypeLocalized(TRACK_ACTIVITY_TYPE_LOCALIZED); track.setDescription(TRACK_DESCRIPTION); contentProviderUtils.updateTrack(track); @@ -192,7 +193,7 @@ public class ExportImportTest { assertEquals(2, markers.size()); } - //TODO Does not test images + //TODO Does not test marker images @LargeTest @Test public void kmz_with_trackdetail_and_sensordata() throws TimeoutException, IOException { @@ -216,10 +217,10 @@ public class ExportImportTest { // 1. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals(track.getActivityType(), importedTrack.getActivityType()); + assertEquals(track.getActivityTypeLocalized(), importedTrack.getActivityTypeLocalized()); assertEquals(track.getDescription(), importedTrack.getDescription()); assertEquals(track.getName(), importedTrack.getName()); - assertEquals(track.getActivityTypeId(), importedTrack.getActivityTypeId()); + assertEquals(track.getActivityType(), importedTrack.getActivityType()); // 2. trackpoints TrackPointAssert a = new TrackPointAssert(); @@ -323,7 +324,7 @@ public class ExportImportTest { // 1. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals(track.getActivityType(), importedTrack.getActivityType()); + assertEquals(track.getActivityTypeLocalized(), importedTrack.getActivityTypeLocalized()); assertEquals(track.getDescription(), importedTrack.getDescription()); assertEquals(track.getName(), importedTrack.getName()); diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java index 88c2d6dbe..9ed78f4a0 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/GPXTrackImporterTest.java @@ -28,6 +28,7 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.content.data.TestDataUtil; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.Track; @@ -79,10 +80,10 @@ public class GPXTrackImporterTest { // 2. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals("the category", importedTrack.getActivityType()); + assertEquals("the category", importedTrack.getActivityTypeLocalized()); assertEquals("the description", importedTrack.getDescription()); assertEquals("2021-01-07 22:51", importedTrack.getName()); - assertEquals("UNKNOWN", importedTrack.getActivityTypeId()); + assertEquals("UNKNOWN", importedTrack.getActivityType()); //TODO Check trackstatistics @@ -133,10 +134,10 @@ public class GPXTrackImporterTest { // 2. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals("", importedTrack.getActivityType()); + assertEquals("", importedTrack.getActivityTypeLocalized()); assertEquals("", importedTrack.getDescription()); assertEquals("20210907_213924.gpx", importedTrack.getName()); - assertEquals("", importedTrack.getActivityTypeId()); + assertEquals("", importedTrack.getActivityType()); // 3. trackstatistics TrackStatistics trackStatistics = importedTrack.getTrackStatistics(); @@ -181,10 +182,10 @@ public class GPXTrackImporterTest { // 2. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals("", importedTrack.getActivityType()); + assertEquals("", importedTrack.getActivityTypeLocalized()); assertEquals("", importedTrack.getDescription()); assertEquals("20210907_213924.gpx", importedTrack.getName()); - assertEquals("", importedTrack.getActivityTypeId()); + assertEquals(ActivityType.UNKNOWN, importedTrack.getActivityType()); // 3. trackstatistics TrackStatistics trackStatistics = importedTrack.getTrackStatistics(); diff --git a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java index ec57d405f..64a3d16b0 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/io/file/importer/KMLTrackImporterTest.java @@ -22,6 +22,7 @@ import java.util.List; import de.dennisguse.opentracks.content.data.TestDataUtil; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Speed; import de.dennisguse.opentracks.data.models.Track; @@ -70,10 +71,10 @@ public class KMLTrackImporterTest { // 1. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals("", importedTrack.getActivityType()); + assertEquals("", importedTrack.getActivityTypeLocalized()); assertEquals("", importedTrack.getDescription()); assertEquals("", importedTrack.getName()); - assertEquals("", importedTrack.getActivityTypeId()); + assertEquals(ActivityType.UNKNOWN, importedTrack.getActivityType()); // 2. markers assertEquals(0, contentProviderUtils.getMarkers(importTrackId).size()); @@ -119,10 +120,10 @@ public class KMLTrackImporterTest { // 1. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals("", importedTrack.getActivityType()); + assertEquals("", importedTrack.getActivityTypeLocalized()); assertEquals("", importedTrack.getDescription()); assertEquals("", importedTrack.getName()); - assertEquals("", importedTrack.getActivityTypeId()); + assertEquals(ActivityType.UNKNOWN, importedTrack.getActivityType()); // 2. markers assertEquals(0, contentProviderUtils.getMarkers(importTrackId).size()); @@ -159,10 +160,10 @@ public class KMLTrackImporterTest { // 1. track Track importedTrack = contentProviderUtils.getTrack(importTrackId); assertNotNull(importedTrack); - assertEquals("unknown", importedTrack.getActivityType()); + assertEquals("unknown", importedTrack.getActivityTypeLocalized()); assertEquals("Test Track", importedTrack.getDescription()); assertEquals("2020-11-28 18:06", importedTrack.getName()); - assertEquals("UNKNOWN", importedTrack.getActivityTypeId()); + assertEquals(ActivityType.UNKNOWN, importedTrack.getActivityType()); // 2. markers assertEquals(0, contentProviderUtils.getMarkers(importTrackId).size()); diff --git a/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java b/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java index 142d49221..1a6d8ca69 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/share/DescriptionGeneratorTest.java @@ -80,7 +80,7 @@ public class DescriptionGeneratorTest { stats.setTotalAltitudeLoss(6000f); stats.setStartTime(START_TIME); track.setTrackStatistics(stats); - track.setActivityType("hiking"); + track.setActivityTypeLocalized("hiking"); String expected = //"Created by" "OpenTracks (Debug)

" + "Name: -
" @@ -118,7 +118,7 @@ public class DescriptionGeneratorTest { stats.setTotalAltitudeLoss(6000f); stats.setStartTime(START_TIME); track.setTrackStatistics(stats); - track.setActivityType("hiking"); + track.setActivityTypeLocalized("hiking"); String expected = //"Created by" "OpenTracks (Debug)

" + "Name: -
" diff --git a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java index 6c4eeee7d..308a141fc 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java @@ -27,7 +27,7 @@ public class AggregatedStatisticsTest { private final Context context = ApplicationProvider.getApplicationContext(); - private static Track createTrack(Context context, Distance totalDistance, Duration totalTime, String category) { + private static Track createTrack(Context context, Distance totalDistance, Duration totalTime, String activityTypeLocalized) { TrackStatistics statistics = new TrackStatistics(); statistics.setStartTime(Instant.ofEpochMilli(1000L)); // Resulting start time statistics.setStopTime(statistics.getStartTime().plus(totalTime)); @@ -40,9 +40,8 @@ public class AggregatedStatisticsTest { statistics.setMinAltitude(1200.0); // Resulting min altitude Track track = new Track(); - track.setActivityTypeId(ActivityType.findByLocalizedString(context, category) - .getId()); - track.setActivityType(category); + track.setActivityType(ActivityType.findByLocalizedString(context, activityTypeLocalized)); + track.setActivityTypeLocalized(activityTypeLocalized); track.setTrackStatistics(statistics); return track; } diff --git a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/EspressoAggregatedFilterTest.java b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/EspressoAggregatedFilterTest.java index 33b73f270..68b7b2930 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/EspressoAggregatedFilterTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/EspressoAggregatedFilterTest.java @@ -51,7 +51,7 @@ public class EspressoAggregatedFilterTest { @Before public void setUp() { Pair> pair = TestDataUtil.createTrack(new Track.Id(System.currentTimeMillis()), 20); - pair.first.setActivityType(CATEGORY); + pair.first.setActivityTypeLocalized(CATEGORY); TestDataUtil.insertTrackWithLocations(new ContentProviderUtils(ApplicationProvider.getApplicationContext()), pair.first, pair.second); } diff --git a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index 80f555571..32fce8b3a 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -47,7 +47,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit private TrackRecordingServiceConnection trackRecordingServiceConnection; private ContentProviderUtils contentProviderUtils; private Track track; - private String iconValue; + private ActivityType activityType; private TrackEditBinding viewBinding; @@ -73,32 +73,30 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit viewBinding.fields.trackEditName.setText(track.getName()); - viewBinding.fields.trackEditActivityType.setText(track.getActivityType()); + viewBinding.fields.trackEditActivityType.setText(track.getActivityTypeLocalized()); ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(this)); viewBinding.fields.trackEditActivityType.setAdapter(adapter); viewBinding.fields.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> { String localizedActivityType = (String) viewBinding.fields.trackEditActivityType.getAdapter().getItem(position); - setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) - .getId()); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)); }); viewBinding.fields.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { String localizedActivityType = viewBinding.fields.trackEditActivityType.getText().toString(); - setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) - .getId()); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)); } }); - iconValue = null; + activityType = null; if (bundle != null) { - iconValue = bundle.getString(ICON_VALUE_KEY); + activityType = (ActivityType) bundle.getSerializable(ICON_VALUE_KEY); } - if (iconValue == null) { - iconValue = track.getActivityTypeId(); + if (activityType == null) { + activityType = track.getActivityType(); } - setActivityTypeIcon(iconValue); + setActivityTypeIcon(activityType); viewBinding.fields.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), viewBinding.fields.trackEditActivityType.getText().toString())); viewBinding.fields.trackEditDescription.setText(track.getDescription()); @@ -131,7 +129,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit @Override public void onSaveInstanceState(@NonNull Bundle outState) { super.onSaveInstanceState(outState); - outState.putString(ICON_VALUE_KEY, iconValue); + outState.putSerializable(ICON_VALUE_KEY, activityType); } @Override @@ -140,16 +138,14 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit return viewBinding.getRoot(); } - private void setActivityTypeIcon(String iconValue) { - this.iconValue = iconValue; - viewBinding.fields.trackEditActivityTypeIcon.setImageResource(ActivityType.findByActivityTypeId(iconValue) - .getIconDrawableId()); + private void setActivityTypeIcon(ActivityType activityType) { + this.activityType = activityType; + viewBinding.fields.trackEditActivityTypeIcon.setImageResource(activityType.getIconDrawableId()); } @Override - public void onChooseActivityTypeDone(String value) { - setActivityTypeIcon(value); - viewBinding.fields.trackEditActivityType.setText(getString(ActivityType.findByActivityTypeId(value) - .getFirstLocalizedStringId())); + public void onChooseActivityTypeDone(ActivityType activityType) { + setActivityTypeIcon(activityType); + viewBinding.fields.trackEditActivityType.setText(getString(activityType.getFirstLocalizedStringId())); } } diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 119ea1c99..02ec08e92 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -212,14 +212,14 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co int totalDistanceIndex = cursor.getColumnIndexOrThrow(TracksColumns.TOTALDISTANCE); int startTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME); int startTimeOffsetIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME_OFFSET); - int activityTypeIndex = cursor.getColumnIndexOrThrow(TracksColumns.ACTIVITY_TYPE); + int activityTypeIndex = cursor.getColumnIndexOrThrow(TracksColumns.ACTIVITY_TYPE_LOCALIZED); int descriptionIndex = cursor.getColumnIndexOrThrow(TracksColumns.DESCRIPTION); int markerCountIndex = cursor.getColumnIndexOrThrow(TracksColumns.MARKER_COUNT); Track.Id trackId = new Track.Id(cursor.getLong(idIndex)); boolean isRecording = trackId.equals(recordingStatus.getTrackId()); String icon = cursor.getString(iconIndex); - int iconId = ActivityType.findByActivityTypeId(icon) + int iconId = ActivityType.findBy(icon) .getIconDrawableId(); String name = cursor.getString(nameIndex); String totalTime = StringUtils.formatElapsedTime(Duration.ofMillis(cursor.getLong(totalTimeIndex))); @@ -517,7 +517,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co @Override public Loader onCreateLoader(int arg0, Bundle arg1) { final String[] PROJECTION = new String[]{TracksColumns._ID, TracksColumns.NAME, - TracksColumns.DESCRIPTION, TracksColumns.ACTIVITY_TYPE, TracksColumns.STARTTIME, TracksColumns.STARTTIME_OFFSET, + TracksColumns.DESCRIPTION, TracksColumns.ACTIVITY_TYPE_LOCALIZED, TracksColumns.STARTTIME, TracksColumns.STARTTIME_OFFSET, TracksColumns.TOTALDISTANCE, TracksColumns.TOTALTIME, TracksColumns.ICON, TracksColumns.MARKER_COUNT}; final String sortOrder = TracksColumns.STARTTIME + " DESC"; @@ -527,7 +527,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co } else { final String SEARCH_QUERY = TracksColumns.NAME + " LIKE ? OR " + TracksColumns.DESCRIPTION + " LIKE ? OR " + - TracksColumns.ACTIVITY_TYPE + " LIKE ?"; + TracksColumns.ACTIVITY_TYPE_LOCALIZED + " LIKE ?"; final String[] selectionArgs = new String[]{"%" + searchQuery + "%", "%" + searchQuery + "%", "%" + searchQuery + "%"}; return new CursorLoader(TrackListActivity.this, TracksColumns.CONTENT_URI, PROJECTION, SEARCH_QUERY, selectionArgs, sortOrder); } diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 2ebcd9bd7..60ab6d182 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -317,11 +317,10 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc } @Override - public void onChooseActivityTypeDone(String iconValue) { + public void onChooseActivityTypeDone(ActivityType activityType) { Track track = contentProviderUtils.getTrack(trackId); - String activityType = getString(ActivityType.findByActivityTypeId(iconValue) - .getFirstLocalizedStringId()); - TrackUtils.updateTrack(this, track, null, activityType, null, contentProviderUtils); + String activityTypeLocalized = getString(activityType.getFirstLocalizedStringId()); + TrackUtils.updateTrack(this, track, null, activityTypeLocalized, null, contentProviderUtils); } private class CustomFragmentPagerAdapter extends FragmentStateAdapter { diff --git a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java index 339c03fcb..42956a6bc 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -49,26 +49,22 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements viewBinding.trackEditName.setText(track.getName()); - viewBinding.trackEditActivityType.setText(track.getActivityType()); + viewBinding.trackEditActivityType.setText(track.getActivityTypeLocalized()); ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(this)); viewBinding.trackEditActivityType.setAdapter(adapter); viewBinding.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> { String localizedActivityType = (String) viewBinding.trackEditActivityType.getAdapter().getItem(position); - setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) - .getId()); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)); }); viewBinding.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { String localizedActivityType = viewBinding.trackEditActivityType.getText().toString(); - setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) - .getId()); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType)); } }); - String iconValue = track.getActivityTypeId(); - - setActivityTypeIcon(iconValue); + setActivityTypeIcon(track.getActivityType()); viewBinding.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), viewBinding.trackEditActivityType.getText().toString())); viewBinding.trackEditDescription.setText(track.getDescription()); @@ -78,7 +74,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements { Pair parts = SpeedFormatter.Builder() .setUnit(PreferencesUtils.getUnitSystem()) - .setReportSpeedOrPace(PreferencesUtils.isReportSpeed(track.getActivityType())) + .setReportSpeedOrPace(PreferencesUtils.isReportSpeed(track.getActivityTypeLocalized())) .build(this) .getSpeedParts(track.getTrackStatistics().getAverageMovingSpeed()); viewBinding.speed.setText(parts.first); @@ -129,16 +125,14 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements return viewBinding.getRoot(); } - private void setActivityTypeIcon(String iconValue) { - viewBinding.trackEditActivityTypeIcon.setImageResource(ActivityType.findByActivityTypeId(iconValue) - .getIconDrawableId()); + private void setActivityTypeIcon(ActivityType activityType) { + viewBinding.trackEditActivityTypeIcon.setImageResource(activityType.getIconDrawableId()); } @Override - public void onChooseActivityTypeDone(String iconValue) { - setActivityTypeIcon(iconValue); - viewBinding.trackEditActivityType.setText(getString(ActivityType.findByActivityTypeId(iconValue) - .getFirstLocalizedStringId())); + public void onChooseActivityTypeDone(ActivityType activityType) { + setActivityTypeIcon(activityType); + viewBinding.trackEditActivityType.setText(getString(activityType.getFirstLocalizedStringId())); } private void resumeTrackAndFinish() { diff --git a/src/main/java/de/dennisguse/opentracks/chart/ChartFragment.java b/src/main/java/de/dennisguse/opentracks/chart/ChartFragment.java index 727cd3681..4fce435b7 100644 --- a/src/main/java/de/dennisguse/opentracks/chart/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/chart/ChartFragment.java @@ -164,7 +164,7 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener { return; } - category = track.getActivityType(); + category = track.getActivityTypeLocalized(); boolean reportSpeed = PreferencesUtils.isReportSpeed(category); if (reportSpeed != viewBinding.chartView.getReportSpeed()) { viewBinding.chartView.setReportSpeed(reportSpeed); diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index 881876327..cd59fc763 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -40,6 +40,7 @@ import java.util.List; import java.util.UUID; import de.dennisguse.opentracks.BuildConfig; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Altitude; import de.dennisguse.opentracks.data.models.Cadence; import de.dennisguse.opentracks.data.models.Distance; @@ -100,7 +101,7 @@ public class ContentProviderUtils { int uuidIndex = cursor.getColumnIndexOrThrow(TracksColumns.UUID); int nameIndex = cursor.getColumnIndexOrThrow(TracksColumns.NAME); int descriptionIndex = cursor.getColumnIndexOrThrow(TracksColumns.DESCRIPTION); - int activityTypeIndex = cursor.getColumnIndexOrThrow(TracksColumns.ACTIVITY_TYPE); + int activityTypeLocalizedIndex = cursor.getColumnIndexOrThrow(TracksColumns.ACTIVITY_TYPE_LOCALIZED); int startTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME); int startTimeOffsetIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME_OFFSET); int stopTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.STOPTIME); @@ -128,8 +129,8 @@ public class ContentProviderUtils { if (!cursor.isNull(descriptionIndex)) { track.setDescription(cursor.getString(descriptionIndex)); } - if (!cursor.isNull(activityTypeIndex)) { - track.setActivityType(cursor.getString(activityTypeIndex)); + if (!cursor.isNull(activityTypeLocalizedIndex)) { + track.setActivityTypeLocalized(cursor.getString(activityTypeLocalizedIndex)); } if (!cursor.isNull(startTimeIndex)) { @@ -163,7 +164,7 @@ public class ContentProviderUtils { trackStatistics.setTotalAltitudeLoss(cursor.getFloat(altitudeLossIndex)); } if (!cursor.isNull(iconIndex)) { - track.setActivityTypeId(cursor.getString(iconIndex)); + track.setActivityType(ActivityType.findBy(cursor.getString(iconIndex))); } return track; } @@ -290,7 +291,7 @@ public class ContentProviderUtils { values.put(TracksColumns.UUID, UUIDUtils.toBytes(track.getUuid())); values.put(TracksColumns.NAME, track.getName()); values.put(TracksColumns.DESCRIPTION, track.getDescription()); - values.put(TracksColumns.ACTIVITY_TYPE, track.getActivityType()); + values.put(TracksColumns.ACTIVITY_TYPE_LOCALIZED, track.getActivityTypeLocalized()); values.put(TracksColumns.STARTTIME_OFFSET, track.getZoneOffset().getTotalSeconds()); if (trackStatistics.getStartTime() != null) { values.put(TracksColumns.STARTTIME, trackStatistics.getStartTime().toEpochMilli()); @@ -308,7 +309,7 @@ public class ContentProviderUtils { values.put(TracksColumns.MAX_ALTITUDE, trackStatistics.getMaxAltitude()); values.put(TracksColumns.ALTITUDE_GAIN, trackStatistics.getTotalAltitudeGain()); values.put(TracksColumns.ALTITUDE_LOSS, trackStatistics.getTotalAltitudeLoss()); - values.put(TracksColumns.ICON, track.getActivityTypeId()); + values.put(TracksColumns.ICON, track.getActivityType() != null ? track.getActivityType().getIconId() : ""); return values; } diff --git a/src/main/java/de/dennisguse/opentracks/data/TrackSelection.java b/src/main/java/de/dennisguse/opentracks/data/TrackSelection.java index 712cb6282..9afc0d1f3 100644 --- a/src/main/java/de/dennisguse/opentracks/data/TrackSelection.java +++ b/src/main/java/de/dennisguse/opentracks/data/TrackSelection.java @@ -53,7 +53,7 @@ public class TrackSelection implements ContentProviderUtils.ContentProviderSelec } if (!categories.isEmpty()) { selection += selection.isEmpty() ? "" : " AND "; - selection += String.format(TracksColumns.ACTIVITY_TYPE + " IN (%s)", TextUtils.join(",", Collections.nCopies(categories.size(), "?"))); + selection += String.format(TracksColumns.ACTIVITY_TYPE_LOCALIZED + " IN (%s)", TextUtils.join(",", Collections.nCopies(categories.size(), "?"))); } if (from != null && to != null) { selection += selection.isEmpty() ? "" : " AND "; diff --git a/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java b/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java index a9fabc20e..cde74d557 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java @@ -34,22 +34,22 @@ public enum ActivityType { SWIMMING_OPEN("SWIMMING_OPEN", R.drawable.ic_activity_swimming_open_24dp, false, R.string.activity_type_swimming_open), WORKOUT("WORKOUT", R.drawable.ic_activity_workout_24dp, false, R.string.activity_type_workout); - final String id; + final String iconId; final int iconDrawableId; final boolean showSpeedPreferred; final int[] localizedStringIds; //isSpeed? - ActivityType(String id, int iconDrawableId, boolean showSpeedPreferred, int... localizedStringIds) { - this.id = id; + ActivityType(String iconId, int iconDrawableId, boolean showSpeedPreferred, int... localizedStringIds) { + this.iconId = iconId; this.iconDrawableId = iconDrawableId; this.showSpeedPreferred = showSpeedPreferred; this.localizedStringIds = localizedStringIds; } - public String getId() { - return id; + public String getIconId() { + return iconId; } public int getIconDrawableId() { @@ -81,9 +81,9 @@ public enum ActivityType { } @NonNull - public static ActivityType findByActivityTypeId(String activityTypeId) { + public static ActivityType findBy(String iconId) { return Arrays.stream(ActivityType.values()).filter( - it -> it.getId().equals(activityTypeId) + it -> it.getIconId().equals(iconId) ).findFirst() .orElse(ActivityType.UNKNOWN); } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/Track.java b/src/main/java/de/dennisguse/opentracks/data/models/Track.java index 48c56364e..054ea8cf0 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Track.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Track.java @@ -44,9 +44,9 @@ public class Track { private String name = ""; private String description = ""; - private String activityType = ""; + private String activityTypeLocalized = ""; - private String activityTypeId = ""; + private ActivityType activityType; private final ZoneOffset zoneOffset; @@ -54,7 +54,7 @@ public class Track { @VisibleForTesting public Track() { - this.zoneOffset = ZoneOffset.UTC; + this(ZoneOffset.UTC); } public Track(@NonNull ZoneOffset zoneOffset) { @@ -97,22 +97,22 @@ public class Track { this.description = description; } - public String getActivityType() { + public String getActivityTypeLocalized() { + return activityTypeLocalized; + } + + public void setActivityTypeLocalized(String activityType) { + this.activityTypeLocalized = activityType; + } + + public ActivityType getActivityType() { return activityType; } - public void setActivityType(String activityType) { + public void setActivityType(ActivityType activityType) { this.activityType = activityType; } - public String getActivityTypeId() { - return activityTypeId; - } - - public void setActivityTypeId(String activityTypeId) { - this.activityTypeId = activityTypeId; - } - public ZoneOffset getZoneOffset() { return zoneOffset; } diff --git a/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java b/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java index ac5347957..10f0730ff 100644 --- a/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java +++ b/src/main/java/de/dennisguse/opentracks/data/tables/TracksColumns.java @@ -39,7 +39,7 @@ public interface TracksColumns extends BaseColumns { String UUID = "uuid"; // identifier to make tracks globally unique (prevent re-import) String NAME = "name"; // track name String DESCRIPTION = "description"; // track description - String ACTIVITY_TYPE = "category"; // track activity type + String ACTIVITY_TYPE_LOCALIZED = "category"; // track activity type String STARTTIME = "starttime"; // track start time String STARTTIME_OFFSET = "starttime_offset"; // in plus/minus in seconds String STOPTIME = "stoptime"; // track stop time @@ -57,13 +57,13 @@ public interface TracksColumns extends BaseColumns { String MAX_ALTITUDE = "maxelevation"; // maximum altitude //TODO RENAME column String ALTITUDE_GAIN = "elevationgain"; // altitude gain //TODO RENAME column String ALTITUDE_LOSS = "elevationloss"; // altitude loss //TODO RENAME column - String ICON = "icon"; // track activity type icon + String ICON = "icon"; // track activity type icon //TODO DEPRECATED String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME + " TEXT, " + DESCRIPTION + " TEXT, " - + ACTIVITY_TYPE + " TEXT, " + + ACTIVITY_TYPE_LOCALIZED + " TEXT, " + STARTTIME + " INTEGER, " + STOPTIME + " INTEGER, " + NUMPOINTS + " INTEGER, " diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java index 8c96d8007..6048113b7 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java @@ -37,7 +37,7 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements return -1; } String iconValue = ActivityType.findByLocalizedString(context, category) - .getId(); + .getIconId(); return getAllActivityTypeIds().indexOf(iconValue); } @@ -66,7 +66,7 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements List iconDrawableIds = new ArrayList<>(); for (String iconValue : getAllActivityTypeIds()) { - iconDrawableIds.add(ActivityType.findByActivityTypeId(iconValue) + iconDrawableIds.add(ActivityType.findBy(iconValue) .getIconDrawableId()); } @@ -98,13 +98,14 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements @Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { - chooseActivityTypeCaller.onChooseActivityTypeDone(getAllActivityTypeIds().get(position)); + chooseActivityTypeCaller.onChooseActivityTypeDone(ActivityType.findBy(getAllActivityTypeIds().get(position))); dismiss(); } + // TODO Return List public static List getAllActivityTypeIds() { return Arrays.stream(ActivityType.values()) - .map(ActivityType::getId) + .map(ActivityType::getIconId) .collect(Collectors.toList()); } @@ -113,6 +114,6 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements */ public interface ChooseActivityTypeCaller { - void onChooseActivityTypeDone(String iconValue); + void onChooseActivityTypeDone(ActivityType activityType); } } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index ff645a2f1..f6d1c14f8 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -90,7 +90,7 @@ public class StatisticsRecordedFragment extends Fragment { if (PreferencesUtils.isKey(R.string.stats_rate_key, key) && track != null) { updateUInecessary = true; - preferenceReportSpeed = PreferencesUtils.isReportSpeed(track.getActivityType()); + preferenceReportSpeed = PreferencesUtils.isReportSpeed(track.getActivityTypeLocalized()); } if (key != null && updateUInecessary && isResumed()) { @@ -156,7 +156,7 @@ public class StatisticsRecordedFragment extends Fragment { sensorStatistics = contentProviderUtils.getSensorStats(trackId); - boolean prefsChanged = this.track == null || (!this.track.getActivityType().equals(track.getActivityType())); + boolean prefsChanged = this.track == null || (!this.track.getActivityTypeLocalized().equals(track.getActivityTypeLocalized())); this.track = track; if (prefsChanged) { sharedPreferenceChangeListener.onSharedPreferenceChanged(null, getString(R.string.stats_rate_key)); @@ -193,10 +193,10 @@ public class StatisticsRecordedFragment extends Fragment { // Set activity type { Context context = getContext(); - String localizedActivityType = track.getActivityType(); + String localizedActivityType = track.getActivityTypeLocalized(); String trackIconValue = ActivityType.findByLocalizedString(context, localizedActivityType) - .getId(); - viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), ActivityType.findByActivityTypeId(trackIconValue) + .getIconId(); + viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), ActivityType.findBy(trackIconValue) .getIconDrawableId())); } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/TrackFilenameGenerator.java b/src/main/java/de/dennisguse/opentracks/io/file/TrackFilenameGenerator.java index 1257d47ad..0e940db06 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/TrackFilenameGenerator.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/TrackFilenameGenerator.java @@ -44,7 +44,7 @@ public class TrackFilenameGenerator { values.put(UUID_KEY, track.getUuid().toString().substring(0, 8)); values.put(TRACKNAME_KEY, track.getName()); - values.put(ACTIVITY_TYPE_KEY, track.getActivityType()); + values.put(ACTIVITY_TYPE_KEY, track.getActivityTypeLocalized()); values.put(STARTTIME_TIME_KEY, track.getStartTime().toLocalTime().toString()); values.put(STARTTIME_DATE_KEY, track.getStartTime().toLocalDate().toString()); 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 f1d466e5a..c4485417d 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 @@ -268,7 +268,7 @@ public class GPXTrackExporter implements TrackExporter { printWriter.println(""); printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); printWriter.println("" + StringUtils.formatCData(track.getDescription()) + ""); - printWriter.println("" + StringUtils.formatCData(track.getActivityType()) + ""); + printWriter.println("" + StringUtils.formatCData(track.getActivityTypeLocalized()) + ""); printWriter.println(""); printWriter.println("c0c0c0"); 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 7532bcc26..c38f21e31 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 @@ -307,11 +307,11 @@ public class KMLTrackExporter implements TrackExporter { printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); printWriter.println("" + StringUtils.formatCData(track.getDescription()) + ""); - printWriter.println("" + StringUtils.formatCData(track.getActivityTypeId()) + ""); + printWriter.println("" + StringUtils.formatCData(track.getActivityType().getIconId()) + ""); printWriter.println("" + track.getUuid() + ""); printWriter.println("#" + TRACK_STYLE + ""); - writeActivityType(track.getActivityType()); + writeActivityType(track.getActivityTypeLocalized()); printWriter.println(""); printWriter.println("absolute"); printWriter.println("1"); @@ -514,12 +514,12 @@ public class KMLTrackExporter implements TrackExporter { return result; } - private void writeActivityType(String actiivtyType) { - if (actiivtyType == null || actiivtyType.equals("")) { + private void writeActivityType(String activityTypeLocalized) { + if (activityTypeLocalized == null || activityTypeLocalized.equals("")) { return; } printWriter.println(""); - printWriter.println("" + StringUtils.formatCData(actiivtyType) + ""); + printWriter.println("" + StringUtils.formatCData(activityTypeLocalized) + ""); printWriter.println(""); } diff --git a/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java b/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java index 5b057dc95..765fdd247 100644 --- a/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java +++ b/src/main/java/de/dennisguse/opentracks/io/file/importer/TrackImporter.java @@ -90,7 +90,7 @@ public class TrackImporter { this.markers.addAll(markers); } - void setTrack(Context context, String name, String uuid, String description, String activityType, String icon, @Nullable ZoneOffset zoneOffset) { + void setTrack(Context context, String name, String uuid, String description, String activityTypeLocalized, String activityTypeId, @Nullable ZoneOffset zoneOffset) { track = new Track(zoneOffset != null ? zoneOffset : ZoneOffset.UTC); track.setName(name != null ? name : ""); @@ -103,16 +103,17 @@ public class TrackImporter { track.setDescription(description != null ? description : ""); - if (activityType != null) { - track.setActivityType(activityType); - - if (icon == null) { - icon = ActivityType.findByLocalizedString(context, activityType) - .getId(); - } + if (activityTypeLocalized != null) { + track.setActivityTypeLocalized(activityTypeLocalized); } - track.setActivityTypeId(icon != null ? icon : ""); + ActivityType activityType; + if (activityTypeId == null) { + activityType = ActivityType.findByLocalizedString(context, activityTypeId); + } else { + activityType = ActivityType.findBy(activityTypeId); + } + track.setActivityType(activityType); } void finish() { diff --git a/src/main/java/de/dennisguse/opentracks/publicapi/StartRecording.java b/src/main/java/de/dennisguse/opentracks/publicapi/StartRecording.java index 90d68b391..a40d83ae5 100644 --- a/src/main/java/de/dennisguse/opentracks/publicapi/StartRecording.java +++ b/src/main/java/de/dennisguse/opentracks/publicapi/StartRecording.java @@ -5,6 +5,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.services.TrackRecordingService; import de.dennisguse.opentracks.settings.PreferencesUtils; @@ -14,8 +15,8 @@ import de.dennisguse.opentracks.util.TrackUtils; public class StartRecording extends AbstractAPIActivity { public static final String EXTRA_TRACK_NAME = "TRACK_NAME"; - public static final String EXTRA_TRACK_CATEGORY = "TRACK_CATEGORY"; - public static final String EXTRA_TRACK_ICON = "TRACK_ICON"; + public static final String EXTRA_TRACK_ACTIVITY_TYPE_LOCALIZED = "TRACK_CATEGORY"; //TODO Update constant + public static final String EXTRA_TRACK_ACTIVITY_TYPE_ID = "TRACK_ICON"; //TODO Update constant public static final String EXTRA_TRACK_DESCRIPTION = "TRACK_DESCRIPTION"; public static final String EXTRA_STATS_TARGET_PACKAGE = "STATS_TARGET_PACKAGE"; @@ -43,8 +44,8 @@ public class StartRecording extends AbstractAPIActivity { TrackUtils.updateTrack(this, track, bundle.getString(EXTRA_TRACK_NAME, null), - bundle.getString(EXTRA_TRACK_CATEGORY, null), - bundle.getString(EXTRA_TRACK_ICON, null), + bundle.getString(EXTRA_TRACK_ACTIVITY_TYPE_LOCALIZED, null), + ActivityType.findBy(bundle.getString(EXTRA_TRACK_ACTIVITY_TYPE_ID, null)), bundle.getString(EXTRA_TRACK_DESCRIPTION, null), contentProviderUtils); } diff --git a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java index 6ebab6866..8d95e9de0 100644 --- a/src/main/java/de/dennisguse/opentracks/services/RecordingData.java +++ b/src/main/java/de/dennisguse/opentracks/services/RecordingData.java @@ -16,7 +16,7 @@ public record RecordingData(Track track, TrackPoint latestTrackPoint, SensorData if (track == null) { return ""; } - return track.getActivityType(); + return track.getActivityTypeLocalized(); } @NonNull diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index c725ce46a..550d65fac 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -73,9 +73,8 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang onNewTrackPoint(segmentStartTrackPoint); String category = PreferencesUtils.getDefaultActivityTypeLocalized(); - track.setActivityType(category); - track.setActivityTypeId(ActivityType.findByLocalizedString(context, category) - .getId()); + track.setActivityTypeLocalized(category); + track.setActivityType(ActivityType.findByLocalizedString(context, category)); track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics()); //TODO Pass TrackPoint track.setName(TrackNameUtils.getTrackName(context, trackId, track.getStartTime())); diff --git a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncement.java b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncement.java index 75f4fa98f..3bd3c1a95 100644 --- a/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncement.java +++ b/src/main/java/de/dennisguse/opentracks/services/announcement/VoiceAnnouncement.java @@ -182,7 +182,7 @@ public class VoiceAnnouncement { sensorStatistics = contentProviderUtils.getSensorStats(track.getId()); } - Spannable announcement = VoiceAnnouncementUtils.getAnnouncement(context, track.getTrackStatistics(), PreferencesUtils.getUnitSystem(), PreferencesUtils.isReportSpeed(track.getActivityType()), lastInterval, sensorStatistics); + Spannable announcement = VoiceAnnouncementUtils.getAnnouncement(context, track.getTrackStatistics(), PreferencesUtils.getUnitSystem(), PreferencesUtils.isReportSpeed(track.getActivityTypeLocalized()), lastInterval, sensorStatistics); if (announcement.length() > 0) { // We don't care about the utterance id. It is supplied here to force onUtteranceCompleted to be called. diff --git a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index 2a97e02fa..b80fca918 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -83,24 +83,21 @@ public class ActivityTypePreference extends DialogPreference { textView.setAdapter(adapter); textView.setOnItemClickListener((parent, v, position, id) -> { String localizedActivityType = (String) textView.getAdapter().getItem(position); - String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType) - .getId(); - updateIcon(iconValue); + ActivityType activityType = ActivityType.findByLocalizedString(context, localizedActivityType); + updateIcon(activityType); }); textView.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { String localizedActivityType = textView.getText().toString(); - String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType) - .getId(); - updateIcon(iconValue); + ActivityType activityType = ActivityType.findByLocalizedString(context, localizedActivityType); + updateIcon(activityType); } }); iconView = view.findViewById(R.id.activity_type_preference_spinner); iconView.setOnClickListener((it) -> showIconSelectDialog()); - updateIcon(ActivityType.findByLocalizedString(context, category) - .getId()); + updateIcon(ActivityType.findByLocalizedString(context, category)); } private void showIconSelectDialog() { @@ -119,16 +116,14 @@ public class ActivityTypePreference extends DialogPreference { } } - public void updateUI(String iconValue) { - updateIcon(iconValue); - textView.setText(getActivity().getString(ActivityType.findByActivityTypeId(iconValue) - .getFirstLocalizedStringId())); + public void updateUI(ActivityType activityType) { + updateIcon(activityType); + textView.setText(getActivity().getString(activityType.getFirstLocalizedStringId())); textView.clearFocus(); } - private void updateIcon(String iconValue) { - iconView.setImageResource(ActivityType.findByActivityTypeId(iconValue) - .getIconDrawableId()); + private void updateIcon(ActivityType activityType) { + iconView.setImageResource(activityType.getIconDrawableId()); } } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java index 59a6ab64e..7565cb43c 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/settings/DefaultsSettingsFragment.java @@ -9,6 +9,7 @@ import androidx.preference.Preference; import androidx.preference.PreferenceFragmentCompat; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; public class DefaultsSettingsFragment extends PreferenceFragmentCompat implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { @@ -81,9 +82,9 @@ public class DefaultsSettingsFragment extends PreferenceFragmentCompat implement } @Override - public void onChooseActivityTypeDone(String iconValue) { + public void onChooseActivityTypeDone(ActivityType activityType) { if (activityPreferenceDialog != null) { - activityPreferenceDialog.updateUI(iconValue); + activityPreferenceDialog.updateUI(activityType); } } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java index be8446f02..f1f9cfc70 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java +++ b/src/main/java/de/dennisguse/opentracks/settings/SettingsActivity.java @@ -10,6 +10,7 @@ import androidx.preference.PreferenceFragmentCompat; import de.dennisguse.opentracks.AbstractActivity; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.databinding.SettingsBinding; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; @@ -104,9 +105,9 @@ public class SettingsActivity extends AbstractActivity implements ChooseActivity } @Override - public void onChooseActivityTypeDone(String iconValue) { + public void onChooseActivityTypeDone(ActivityType activityType) { try { - ((ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller) this.fragment).onChooseActivityTypeDone(iconValue); + ((ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller) this.fragment).onChooseActivityTypeDone(activityType); } catch (ClassCastException e) { throw new ClassCastException(this.fragment.getClass().getSimpleName() + " must implement " + ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller.class.getSimpleName()); } diff --git a/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java b/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java index 45d086a7d..2058a0fe5 100644 --- a/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java +++ b/src/main/java/de/dennisguse/opentracks/share/DescriptionGenerator.java @@ -72,7 +72,7 @@ public class DescriptionGenerator { builder.append(paragraphSeparator); writeString(track.getName(), builder, R.string.generic_name_line, lineBreak); - writeString(track.getActivityType(), builder, R.string.description_activity_type, lineBreak); + writeString(track.getActivityTypeLocalized(), builder, R.string.description_activity_type, lineBreak); writeString(track.getDescription(), builder, R.string.generic_description_line, lineBreak); builder.append(generateTrackStatisticsDescription(track.getTrackStatistics(), html)); diff --git a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatistics.java b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatistics.java index 897dc382e..2f7b553ce 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatistics.java +++ b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatistics.java @@ -33,7 +33,7 @@ public class AggregatedStatistics { @VisibleForTesting public void aggregate(@NonNull Track track) { - String activityType = track.getActivityType(); + String activityType = track.getActivityTypeLocalized(); if (dataMap.containsKey(activityType)) { dataMap.get(activityType).add(track.getTrackStatistics()); } else { diff --git a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java index 71f0d3237..4b74798ee 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java @@ -184,8 +184,8 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { private int getIcon(AggregatedStatistics.AggregatedStatistic aggregatedStatistic) { String localizedActivityType = aggregatedStatistic.getActivityType(); String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType) - .getId(); - return ActivityType.findByActivityTypeId(iconValue) + .getIconId(); + return ActivityType.findBy(iconValue) .getIconDrawableId(); } } diff --git a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalsFragment.java b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalsFragment.java index d44b038c4..40d102998 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalsFragment.java +++ b/src/main/java/de/dennisguse/opentracks/ui/intervals/IntervalsFragment.java @@ -151,7 +151,7 @@ public class IntervalsFragment extends Fragment { ContentProviderUtils contentProviderUtils = new ContentProviderUtils(getContext()); Track track = contentProviderUtils.getTrack(trackId); if (track != null) { - isReportSpeed = PreferencesUtils.isReportSpeed(track.getActivityType()); + isReportSpeed = PreferencesUtils.isReportSpeed(track.getActivityTypeLocalized()); } viewModel = new ViewModelProvider(getActivity()).get(IntervalStatisticsModel.class); diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java index ea1230032..e68f3260c 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java @@ -27,32 +27,32 @@ import de.dennisguse.opentracks.data.models.Track; * * @author Jimmy Shih */ +//TOOD Refactor ActivityType handling in here! @Deprecated //TODO Refactor: all this should happen somewhere else (ContentProviderUtils?) public class TrackUtils { private TrackUtils() { } - public static void updateTrack(Context context, Track track, String name, String activityType, String description, ContentProviderUtils contentProviderUtils) { - updateTrack(context, track, name, activityType, ActivityType.findByLocalizedString(context, activityType) - .getId(), description, contentProviderUtils); + public static void updateTrack(Context context, Track track, String name, String activityTypeLocalized, String description, ContentProviderUtils contentProviderUtils) { + updateTrack(context, track, name, activityTypeLocalized, ActivityType.findByLocalizedString(context, activityTypeLocalized), description, contentProviderUtils); } - public static void updateTrack(Context context, Track track, String name, String activityType, String iconValue, String description, ContentProviderUtils contentProviderUtils) { + public static void updateTrack(Context context, Track track, String name, String activityTypeLocalized, ActivityType activityType, String description, ContentProviderUtils contentProviderUtils) { boolean update = false; if (name != null) { track.setName(name); update = true; } - if (activityType != null) { - track.setActivityType(activityType); + if (activityTypeLocalized != null) { + track.setActivityTypeLocalized(activityTypeLocalized); update = true; } - if (iconValue != null) { - track.setActivityTypeId(iconValue); - } else if (activityType != null) { - track.setActivityTypeId(ActivityType.findByLocalizedString(context, activityType) - .getId()); + if (activityType != null) { + track.setActivityType(activityType); + } else if (activityTypeLocalized != null) { + track.setActivityType(ActivityType.findByLocalizedString(context, activityTypeLocalized) + ); } if (description != null) { track.setDescription(description);