From d316a63fcaa4c72e50eec171074bc81d280fa324 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 23 Jun 2023 07:35:39 +0200 Subject: [PATCH 1/5] Cleanup: ActivityType lookup. Part of #1608. --- .../AggregatedStatisticsTest.java | 2 +- .../opentracks/TrackEditActivity.java | 6 +- .../opentracks/TrackListActivity.java | 2 +- .../opentracks/TrackStoppedActivity.java | 6 +- .../opentracks/data/ContentProviderUtils.java | 6 +- .../opentracks/data/models/ActivityType.java | 34 ++++++++-- .../ChooseActivityTypeDialogFragment.java | 23 +++++-- .../fragments/StatisticsRecordedFragment.java | 4 +- .../io/file/importer/TrackImporter.java | 2 +- .../services/TrackRecordingManager.java | 2 +- .../settings/ActivityTypePreference.java | 8 +-- .../AggregatedStatisticsAdapter.java | 4 +- .../opentracks/util/TrackIconUtils.java | 68 +++---------------- .../opentracks/util/TrackUtils.java | 4 +- 14 files changed, 79 insertions(+), 92 deletions(-) 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 7d65cf6a2..31a012c8f 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java @@ -40,7 +40,7 @@ public class AggregatedStatisticsTest { statistics.setMinAltitude(1200.0); // Resulting min altitude Track track = new Track(); - track.setIcon(TrackIconUtils.getIconValue(context, category)); + track.setIcon(TrackIconUtils.getActivityTypeId(context, category)); track.setActivityType(category); track.setTrackStatistics(statistics); return track; diff --git a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index cb8c1b3a3..5d8c1ee36 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -78,10 +78,10 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit 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) -> setActivityTypeIcon(TrackIconUtils.getIconValue(this, (String) viewBinding.fields.trackEditActivityType.getAdapter().getItem(position)))); + viewBinding.fields.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> setActivityTypeIcon(TrackIconUtils.getActivityTypeId(this, (String) viewBinding.fields.trackEditActivityType.getAdapter().getItem(position)))); viewBinding.fields.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { - setActivityTypeIcon(TrackIconUtils.getIconValue( + setActivityTypeIcon(TrackIconUtils.getActivityTypeId( TrackEditActivity.this, viewBinding.fields.trackEditActivityType.getText().toString())); } }); @@ -138,7 +138,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit private void setActivityTypeIcon(String iconValue) { this.iconValue = iconValue; - viewBinding.fields.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawable(iconValue)); + viewBinding.fields.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawableId(iconValue)); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index cbdd95af9..5927dd711 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -219,7 +219,7 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co Track.Id trackId = new Track.Id(cursor.getLong(idIndex)); boolean isRecording = trackId.equals(recordingStatus.getTrackId()); String icon = cursor.getString(iconIndex); - int iconId = TrackIconUtils.getIconDrawable(icon); + int iconId = TrackIconUtils.getIconDrawableId(icon); String name = cursor.getString(nameIndex); String totalTime = StringUtils.formatElapsedTime(Duration.ofMillis(cursor.getLong(totalTimeIndex))); String totalDistance = DistanceFormatter.Builder() diff --git a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java index 977f03f2e..be8aabd1c 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -54,10 +54,10 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements 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) -> setActivityTypeIcon(TrackIconUtils.getIconValue(this, (String) viewBinding.trackEditActivityType.getAdapter().getItem(position)))); + viewBinding.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> setActivityTypeIcon(TrackIconUtils.getActivityTypeId(this, (String) viewBinding.trackEditActivityType.getAdapter().getItem(position)))); viewBinding.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { - setActivityTypeIcon(TrackIconUtils.getIconValue( + setActivityTypeIcon(TrackIconUtils.getActivityTypeId( TrackStoppedActivity.this, viewBinding.trackEditActivityType.getText().toString())); } }); @@ -126,7 +126,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements } private void setActivityTypeIcon(String iconValue) { - viewBinding.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawable(iconValue)); + viewBinding.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawableId(iconValue)); } @Override diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index ae12513ce..0dce5ca9b 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -100,7 +100,7 @@ public class ContentProviderUtils { int uuidIndex = cursor.getColumnIndexOrThrow(TracksColumns.UUID); int nameIndex = cursor.getColumnIndexOrThrow(TracksColumns.NAME); int descriptionIndex = cursor.getColumnIndexOrThrow(TracksColumns.DESCRIPTION); - int categoryIndex = cursor.getColumnIndexOrThrow(TracksColumns.ACTIVITY_TYPE); + int activityTypeIndex = cursor.getColumnIndexOrThrow(TracksColumns.ACTIVITY_TYPE); int startTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME); int startTimeOffsetIndex = cursor.getColumnIndexOrThrow(TracksColumns.STARTTIME_OFFSET); int stopTimeIndex = cursor.getColumnIndexOrThrow(TracksColumns.STOPTIME); @@ -128,8 +128,8 @@ public class ContentProviderUtils { if (!cursor.isNull(descriptionIndex)) { track.setDescription(cursor.getString(descriptionIndex)); } - if (!cursor.isNull(categoryIndex)) { - track.setActivityType(cursor.getString(categoryIndex)); + if (!cursor.isNull(activityTypeIndex)) { + track.setActivityType(cursor.getString(activityTypeIndex)); } if (!cursor.isNull(startTimeIndex)) { 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 6cd2f0c59..a9fabc20e 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java @@ -1,6 +1,9 @@ package de.dennisguse.opentracks.data.models; import android.content.Context; +import android.content.res.Resources; + +import androidx.annotation.NonNull; import java.util.ArrayList; import java.util.Arrays; @@ -32,15 +35,15 @@ public enum ActivityType { WORKOUT("WORKOUT", R.drawable.ic_activity_workout_24dp, false, R.string.activity_type_workout); final String id; - final int iconId; + final int iconDrawableId; final boolean showSpeedPreferred; final int[] localizedStringIds; //isSpeed? - ActivityType(String id, int iconId, boolean showSpeedPreferred, int... localizedStringIds) { + ActivityType(String id, int iconDrawableId, boolean showSpeedPreferred, int... localizedStringIds) { this.id = id; - this.iconId = iconId; + this.iconDrawableId = iconDrawableId; this.showSpeedPreferred = showSpeedPreferred; this.localizedStringIds = localizedStringIds; } @@ -49,8 +52,8 @@ public enum ActivityType { return id; } - public int getIconId() { - return iconId; + public int getIconDrawableId() { + return iconDrawableId; } public boolean isShowSpeedPreferred() { @@ -76,4 +79,25 @@ public enum ActivityType { return result; } + + @NonNull + public static ActivityType findByActivityTypeId(String activityTypeId) { + return Arrays.stream(ActivityType.values()).filter( + it -> it.getId().equals(activityTypeId) + ).findFirst() + .orElse(ActivityType.UNKNOWN); + } + + public static ActivityType findByLocalizedString(Context context, String localizedActivityType) { + return findByLocalizedString(context.getResources(), localizedActivityType); + } + + public static ActivityType findByLocalizedString(Resources resources, String localizedActivityType) { + return Arrays.stream(ActivityType.values()) + .filter( + it -> Arrays.stream(it.getLocalizedStringIds()) + .anyMatch(id -> resources.getString(id).equals(localizedActivityType)) + ).findFirst() + .orElse(ActivityType.UNKNOWN); + } } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java index e9bae577d..b00677d3c 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java @@ -13,9 +13,12 @@ import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import java.util.stream.Collectors; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.databinding.ChooseActivityTypeBinding; import de.dennisguse.opentracks.util.TrackIconUtils; @@ -34,9 +37,9 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements if (category == null) { return -1; } - String iconValue = TrackIconUtils.getIconValue(context, category); + String iconValue = TrackIconUtils.getActivityTypeId(context, category); - return TrackIconUtils.getAllIconValues().indexOf(iconValue); + return getAllActivityTypeIds().indexOf(iconValue); } private ChooseActivityTypeBinding viewBinding; @@ -61,12 +64,12 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { viewBinding = ChooseActivityTypeBinding.inflate(inflater, container, false); - List imageIds = new ArrayList<>(); - for (String iconValue : TrackIconUtils.getAllIconValues()) { - imageIds.add(TrackIconUtils.getIconDrawable(iconValue)); + List iconDrawableIds = new ArrayList<>(); + for (String iconValue : getAllActivityTypeIds()) { + iconDrawableIds.add(TrackIconUtils.getIconDrawableId(iconValue)); } - final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(imageIds); + final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(iconDrawableIds); int position = getPosition(getContext(), preselectedCategory); if (position != -1) { imageAdapter.setSelected(position); @@ -94,10 +97,16 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements @Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { - chooseActivityTypeCaller.onChooseActivityTypeDone(TrackIconUtils.getAllIconValues().get(position)); + chooseActivityTypeCaller.onChooseActivityTypeDone(getAllActivityTypeIds().get(position)); dismiss(); } + public static List getAllActivityTypeIds() { + return Arrays.stream(ActivityType.values()) + .map(ActivityType::getId) + .collect(Collectors.toList()); + } + /** * Interface for chooseActivityTypeCaller of this dialog fragment. */ diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index a054f45f2..e3da82bea 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -191,8 +191,8 @@ public class StatisticsRecordedFragment extends Fragment { // Set activity type { - String trackIconValue = TrackIconUtils.getIconValue(getContext(), track.getActivityType()); - viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), TrackIconUtils.getIconDrawable(trackIconValue))); + String trackIconValue = TrackIconUtils.getActivityTypeId(getContext(), track.getActivityType()); + viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), TrackIconUtils.getIconDrawableId(trackIconValue))); } // Set time and start datetime 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 cee18aae6..dbd938406 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 @@ -107,7 +107,7 @@ public class TrackImporter { track.setActivityType(activityType); if (icon == null) { - icon = TrackIconUtils.getIconValue(context, activityType); + icon = TrackIconUtils.getActivityTypeId(context, activityType); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index ba85691a6..32c9e3c91 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -74,7 +74,7 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang String category = PreferencesUtils.getDefaultActivity(); track.setActivityType(category); - track.setIcon(TrackIconUtils.getIconValue(context, category)); + track.setIcon(TrackIconUtils.getActivityTypeId(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/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index 5eb1a2225..49b47da8c 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -83,12 +83,12 @@ public class ActivityTypePreference extends DialogPreference { ArrayAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(context)); textView.setAdapter(adapter); textView.setOnItemClickListener((parent, v, position, id) -> { - String iconValue = TrackIconUtils.getIconValue(context, (String) textView.getAdapter().getItem(position)); + String iconValue = TrackIconUtils.getActivityTypeId(context, (String) textView.getAdapter().getItem(position)); updateIcon(iconValue); }); textView.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { - String iconValue = TrackIconUtils.getIconValue(context, textView.getText().toString()); + String iconValue = TrackIconUtils.getActivityTypeId(context, textView.getText().toString()); updateIcon(iconValue); } }); @@ -96,7 +96,7 @@ public class ActivityTypePreference extends DialogPreference { iconView = view.findViewById(R.id.activity_type_preference_spinner); iconView.setOnClickListener((it) -> showIconSelectDialog()); - updateIcon(TrackIconUtils.getIconValue(context, category)); + updateIcon(TrackIconUtils.getActivityTypeId(context, category)); } private void showIconSelectDialog() { @@ -122,7 +122,7 @@ public class ActivityTypePreference extends DialogPreference { } private void updateIcon(String iconValue) { - iconView.setImageResource(TrackIconUtils.getIconDrawable(iconValue)); + iconView.setImageResource(TrackIconUtils.getIconDrawableId(iconValue)); } } } 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 25fe32766..ad77e3e3f 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java @@ -178,8 +178,8 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { } private int getIcon(AggregatedStatistics.AggregatedStatistic aggregatedStatistic) { - String iconValue = TrackIconUtils.getIconValue(context, aggregatedStatistic.getActivityType()); - return TrackIconUtils.getIconDrawable(iconValue); + String iconValue = TrackIconUtils.getActivityTypeId(context, aggregatedStatistic.getActivityType()); + return TrackIconUtils.getIconDrawableId(iconValue); } } } diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java index 6299bd4cf..cfd440bc5 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java @@ -21,11 +21,6 @@ import android.content.res.Resources; import androidx.annotation.NonNull; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - import de.dennisguse.opentracks.data.models.ActivityType; /** @@ -35,65 +30,24 @@ import de.dennisguse.opentracks.data.models.ActivityType; */ public class TrackIconUtils { - public static int getIconDrawable(String activityTypeId) { - Optional found = Arrays.stream(ActivityType.values()).filter( - it -> it.getId().equals(activityTypeId) - ).findFirst(); - - return found.map(ActivityType::getIconId) - .orElseGet(ActivityType.UNKNOWN::getIconId); - + public static int getIconDrawableId(String activityTypeId) { + return ActivityType.findByActivityTypeId(activityTypeId) + .getIconDrawableId(); } public static int getIconActivityType(String activityTypeId) { - Optional found = Arrays.stream(ActivityType.values()).filter( - it -> it.getId().equals(activityTypeId) - ).findFirst(); - - return found.map(ActivityType::getFirstLocalizedStringId) - .orElseGet(ActivityType.UNKNOWN::getFirstLocalizedStringId); - + return ActivityType.findByActivityTypeId(activityTypeId) + .getFirstLocalizedStringId(); } - /** - * Gets all icon values. - */ - public static List getAllIconValues() { - return Arrays.stream(ActivityType.values()) - .map(ActivityType::getId) - .collect(Collectors.toList()); - } - - /** - * Gets the icon value. - * - * @param context the context - * @param activityTypeId the activity type - */ @NonNull - public static String getIconValue(Context context, String activityTypeId) { - Optional selected = Arrays.stream(ActivityType.values()) - .filter( - it -> Arrays.stream(it.getLocalizedStringIds()) - .anyMatch(id -> context.getString(id).equals(activityTypeId)) - ) - .findFirst(); - if (selected.isEmpty()) { - return ActivityType.UNKNOWN.getId(); - } - return selected.get().getId(); + public static String getActivityTypeId(Context context, String localizedActivityType) { + return ActivityType.findByLocalizedString(context, localizedActivityType) + .getId(); } - public static boolean isSpeedIcon(Resources resources, String activityTypeId) { - Optional selected = Arrays.stream(ActivityType.values()) - .filter( - it -> Arrays.stream(it.getLocalizedStringIds()) - .anyMatch(id -> resources.getString(id).equals(activityTypeId)) - ) - .findFirst(); - - return selected.map(ActivityType::isShowSpeedPreferred) - .orElse(false); - + public static boolean isSpeedIcon(Resources resources, String localizedActivityType) { + return ActivityType.findByLocalizedString(resources, localizedActivityType) + .isShowSpeedPreferred(); } } diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java index 8f142e62f..d49fe247e 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java @@ -33,7 +33,7 @@ public class TrackUtils { } public static void updateTrack(Context context, Track track, String name, String activityType, String description, ContentProviderUtils contentProviderUtils) { - updateTrack(context, track, name, activityType, TrackIconUtils.getIconValue(context, activityType), description, contentProviderUtils); + updateTrack(context, track, name, activityType, TrackIconUtils.getActivityTypeId(context, activityType), description, contentProviderUtils); } public static void updateTrack(Context context, Track track, String name, String activityType, String iconValue, String description, ContentProviderUtils contentProviderUtils) { @@ -49,7 +49,7 @@ public class TrackUtils { if (iconValue != null) { track.setIcon(iconValue); } else if (activityType != null) { - track.setIcon(TrackIconUtils.getIconValue(context, activityType)); + track.setIcon(TrackIconUtils.getActivityTypeId(context, activityType)); } if (description != null) { track.setDescription(description); From f824b31891cc2e4ca473117cebb4ddaae9c9cbb1 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 23 Jun 2023 07:36:58 +0200 Subject: [PATCH 2/5] Cleanup: inline TrackIconUtils methods. Part of #1608. --- .../AggregatedStatisticsTest.java | 5 +- .../opentracks/TrackEditActivity.java | 18 ++++--- .../opentracks/TrackListActivity.java | 5 +- .../opentracks/TrackRecordingActivity.java | 5 +- .../opentracks/TrackStoppedActivity.java | 18 ++++--- .../ChooseActivityTypeDialogFragment.java | 7 +-- .../fragments/StatisticsRecordedFragment.java | 11 ++-- .../io/file/importer/TrackImporter.java | 5 +- .../services/TrackRecordingManager.java | 5 +- .../settings/ActivityTypePreference.java | 18 ++++--- .../opentracks/settings/PreferencesUtils.java | 5 +- .../AggregatedStatisticsAdapter.java | 15 ++++-- .../opentracks/util/TrackIconUtils.java | 53 ------------------- .../opentracks/util/TrackUtils.java | 7 ++- 14 files changed, 82 insertions(+), 95 deletions(-) delete mode 100644 src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java 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 31a012c8f..28a0360c2 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java @@ -16,11 +16,11 @@ import java.time.Instant; import java.util.List; import de.dennisguse.opentracks.R; +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; import de.dennisguse.opentracks.stats.TrackStatistics; -import de.dennisguse.opentracks.util.TrackIconUtils; @RunWith(JUnit4.class) public class AggregatedStatisticsTest { @@ -40,7 +40,8 @@ public class AggregatedStatisticsTest { statistics.setMinAltitude(1200.0); // Resulting min altitude Track track = new Track(); - track.setIcon(TrackIconUtils.getActivityTypeId(context, category)); + track.setIcon(ActivityType.findByLocalizedString(context, category) + .getId()); track.setActivityType(category); track.setTrackStatistics(statistics); return track; diff --git a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index 5d8c1ee36..54a4eedd6 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -29,7 +29,6 @@ import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.databinding.TrackEditBinding; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; import de.dennisguse.opentracks.services.TrackRecordingServiceConnection; -import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackUtils; /** @@ -78,11 +77,16 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit 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) -> setActivityTypeIcon(TrackIconUtils.getActivityTypeId(this, (String) viewBinding.fields.trackEditActivityType.getAdapter().getItem(position)))); + viewBinding.fields.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> { + String localizedActivityType = (String) viewBinding.fields.trackEditActivityType.getAdapter().getItem(position); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) + .getId()); + }); viewBinding.fields.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { - setActivityTypeIcon(TrackIconUtils.getActivityTypeId( - TrackEditActivity.this, viewBinding.fields.trackEditActivityType.getText().toString())); + String localizedActivityType = viewBinding.fields.trackEditActivityType.getText().toString(); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) + .getId()); } }); @@ -138,12 +142,14 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit private void setActivityTypeIcon(String iconValue) { this.iconValue = iconValue; - viewBinding.fields.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawableId(iconValue)); + viewBinding.fields.trackEditActivityTypeIcon.setImageResource(ActivityType.findByActivityTypeId(iconValue) + .getIconDrawableId()); } @Override public void onChooseActivityTypeDone(String value) { setActivityTypeIcon(value); - viewBinding.fields.trackEditActivityType.setText(getString(TrackIconUtils.getIconActivityType(value))); + viewBinding.fields.trackEditActivityType.setText(getString(ActivityType.findByActivityTypeId(value) + .getFirstLocalizedStringId())); } } diff --git a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java index 5927dd711..119ea1c99 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackListActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackListActivity.java @@ -50,6 +50,7 @@ import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZoneOffset; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.Track; @@ -72,7 +73,6 @@ import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.PermissionRequester; import de.dennisguse.opentracks.util.StringUtils; -import de.dennisguse.opentracks.util.TrackIconUtils; /** * An activity displaying a list of tracks. @@ -219,7 +219,8 @@ public class TrackListActivity extends AbstractTrackDeleteActivity implements Co Track.Id trackId = new Track.Id(cursor.getLong(idIndex)); boolean isRecording = trackId.equals(recordingStatus.getTrackId()); String icon = cursor.getString(iconIndex); - int iconId = TrackIconUtils.getIconDrawableId(icon); + int iconId = ActivityType.findByActivityTypeId(icon) + .getIconDrawableId(); String name = cursor.getString(nameIndex); String totalTime = StringUtils.formatElapsedTime(Duration.ofMillis(cursor.getLong(totalTimeIndex))); String totalDistance = DistanceFormatter.Builder() diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index f8fb0c00b..2ebcd9bd7 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -30,6 +30,7 @@ import de.dennisguse.opentracks.chart.ChartFragment; import de.dennisguse.opentracks.chart.TrackDataHubInterface; import de.dennisguse.opentracks.data.ContentProviderUtils; import de.dennisguse.opentracks.data.TrackDataHub; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.databinding.TrackRecordingBinding; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; @@ -46,7 +47,6 @@ import de.dennisguse.opentracks.ui.markers.MarkerListActivity; import de.dennisguse.opentracks.ui.util.ActivityUtils; import de.dennisguse.opentracks.util.IntentDashboardUtils; import de.dennisguse.opentracks.util.IntentUtils; -import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackUtils; /** @@ -319,7 +319,8 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc @Override public void onChooseActivityTypeDone(String iconValue) { Track track = contentProviderUtils.getTrack(trackId); - String activityType = getString(TrackIconUtils.getIconActivityType(iconValue)); + String activityType = getString(ActivityType.findByActivityTypeId(iconValue) + .getFirstLocalizedStringId()); TrackUtils.updateTrack(this, track, null, activityType, null, contentProviderUtils); } diff --git a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java index be8aabd1c..e6c163e30 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -20,7 +20,6 @@ import de.dennisguse.opentracks.ui.aggregatedStatistics.ConfirmDeleteDialogFragm import de.dennisguse.opentracks.util.ExportUtils; import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.StringUtils; -import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackUtils; public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements ChooseActivityTypeDialogFragment.ChooseActivityTypeCaller { @@ -54,11 +53,16 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements 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) -> setActivityTypeIcon(TrackIconUtils.getActivityTypeId(this, (String) viewBinding.trackEditActivityType.getAdapter().getItem(position)))); + viewBinding.trackEditActivityType.setOnItemClickListener((parent, view, position, id) -> { + String localizedActivityType = (String) viewBinding.trackEditActivityType.getAdapter().getItem(position); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) + .getId()); + }); viewBinding.trackEditActivityType.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { - setActivityTypeIcon(TrackIconUtils.getActivityTypeId( - TrackStoppedActivity.this, viewBinding.trackEditActivityType.getText().toString())); + String localizedActivityType = viewBinding.trackEditActivityType.getText().toString(); + setActivityTypeIcon(ActivityType.findByLocalizedString(this, localizedActivityType) + .getId()); } }); @@ -126,13 +130,15 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements } private void setActivityTypeIcon(String iconValue) { - viewBinding.trackEditActivityTypeIcon.setImageResource(TrackIconUtils.getIconDrawableId(iconValue)); + viewBinding.trackEditActivityTypeIcon.setImageResource(ActivityType.findByActivityTypeId(iconValue) + .getIconDrawableId()); } @Override public void onChooseActivityTypeDone(String iconValue) { setActivityTypeIcon(iconValue); - viewBinding.trackEditActivityType.setText(getString(TrackIconUtils.getIconActivityType(iconValue))); + viewBinding.trackEditActivityType.setText(getString(ActivityType.findByActivityTypeId(iconValue) + .getFirstLocalizedStringId())); } private void resumeTrackAndFinish() { diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java index b00677d3c..8c96d8007 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java @@ -20,7 +20,6 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.databinding.ChooseActivityTypeBinding; -import de.dennisguse.opentracks.util.TrackIconUtils; /** * A DialogFragment to choose an activity type. @@ -37,7 +36,8 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements if (category == null) { return -1; } - String iconValue = TrackIconUtils.getActivityTypeId(context, category); + String iconValue = ActivityType.findByLocalizedString(context, category) + .getId(); return getAllActivityTypeIds().indexOf(iconValue); } @@ -66,7 +66,8 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements List iconDrawableIds = new ArrayList<>(); for (String iconValue : getAllActivityTypeIds()) { - iconDrawableIds.add(TrackIconUtils.getIconDrawableId(iconValue)); + iconDrawableIds.add(ActivityType.findByActivityTypeId(iconValue) + .getIconDrawableId()); } final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(iconDrawableIds); diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index e3da82bea..ff645a2f1 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java @@ -16,6 +16,7 @@ package de.dennisguse.opentracks.fragments; +import android.content.Context; import android.content.SharedPreferences; import android.os.Bundle; import android.util.Log; @@ -34,6 +35,7 @@ import androidx.recyclerview.widget.RecyclerView; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TrackRecordedActivity; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.SpeedFormatter; import de.dennisguse.opentracks.data.models.Track; @@ -43,7 +45,6 @@ import de.dennisguse.opentracks.settings.UnitSystem; import de.dennisguse.opentracks.stats.SensorStatistics; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.util.StringUtils; -import de.dennisguse.opentracks.util.TrackIconUtils; /** * A fragment to display track statistics to the user for a recorded {@link Track}. @@ -191,8 +192,12 @@ public class StatisticsRecordedFragment extends Fragment { // Set activity type { - String trackIconValue = TrackIconUtils.getActivityTypeId(getContext(), track.getActivityType()); - viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), TrackIconUtils.getIconDrawableId(trackIconValue))); + Context context = getContext(); + String localizedActivityType = track.getActivityType(); + String trackIconValue = ActivityType.findByLocalizedString(context, localizedActivityType) + .getId(); + viewBinding.statsActivityTypeIcon.setImageDrawable(ContextCompat.getDrawable(getContext(), ActivityType.findByActivityTypeId(trackIconValue) + .getIconDrawableId())); } // Set time and start datetime 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 dbd938406..ba2e8d922 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 @@ -20,6 +20,7 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.R; 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.Marker; import de.dennisguse.opentracks.data.models.Speed; @@ -30,7 +31,6 @@ import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; import de.dennisguse.opentracks.ui.markers.MarkerUtils; import de.dennisguse.opentracks.util.FileUtils; import de.dennisguse.opentracks.util.LocationUtils; -import de.dennisguse.opentracks.util.TrackIconUtils; /** * Handles logic to import: @@ -107,7 +107,8 @@ public class TrackImporter { track.setActivityType(activityType); if (icon == null) { - icon = TrackIconUtils.getActivityTypeId(context, activityType); + icon = ActivityType.findByLocalizedString(context, activityType) + .getId(); } } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index 32c9e3c91..52e13e8e9 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -15,6 +15,7 @@ import java.time.ZoneOffset; import de.dennisguse.opentracks.R; 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.Marker; import de.dennisguse.opentracks.data.models.Track; @@ -24,7 +25,6 @@ import de.dennisguse.opentracks.services.handlers.TrackPointCreator; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.stats.TrackStatisticsUpdater; -import de.dennisguse.opentracks.util.TrackIconUtils; import de.dennisguse.opentracks.util.TrackNameUtils; class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChangeListener { @@ -74,7 +74,8 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang String category = PreferencesUtils.getDefaultActivity(); track.setActivityType(category); - track.setIcon(TrackIconUtils.getActivityTypeId(context, category)); + track.setIcon(ActivityType.findByLocalizedString(context, category) + .getId()); track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics()); //TODO Pass TrackPoint track.setName(TrackNameUtils.getTrackName(context, trackId, track.getStartTime())); diff --git a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index 49b47da8c..2aaa3679e 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -30,7 +30,6 @@ import androidx.preference.PreferenceDialogFragmentCompat; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.fragments.ChooseActivityTypeDialogFragment; -import de.dennisguse.opentracks.util.TrackIconUtils; /** * For entering the default activity type. @@ -83,12 +82,16 @@ public class ActivityTypePreference extends DialogPreference { ArrayAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(context)); textView.setAdapter(adapter); textView.setOnItemClickListener((parent, v, position, id) -> { - String iconValue = TrackIconUtils.getActivityTypeId(context, (String) textView.getAdapter().getItem(position)); + String localizedActivityType = (String) textView.getAdapter().getItem(position); + String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType) + .getId(); updateIcon(iconValue); }); textView.setOnFocusChangeListener((v, hasFocus) -> { if (!hasFocus) { - String iconValue = TrackIconUtils.getActivityTypeId(context, textView.getText().toString()); + String localizedActivityType = textView.getText().toString(); + String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType) + .getId(); updateIcon(iconValue); } }); @@ -96,7 +99,8 @@ public class ActivityTypePreference extends DialogPreference { iconView = view.findViewById(R.id.activity_type_preference_spinner); iconView.setOnClickListener((it) -> showIconSelectDialog()); - updateIcon(TrackIconUtils.getActivityTypeId(context, category)); + updateIcon(ActivityType.findByLocalizedString(context, category) + .getId()); } private void showIconSelectDialog() { @@ -117,12 +121,14 @@ public class ActivityTypePreference extends DialogPreference { public void updateUI(String iconValue) { updateIcon(iconValue); - textView.setText(getActivity().getString(TrackIconUtils.getIconActivityType(iconValue))); + textView.setText(getActivity().getString(ActivityType.findByActivityTypeId(iconValue) + .getFirstLocalizedStringId())); textView.clearFocus(); } private void updateIcon(String iconValue) { - iconView.setImageResource(TrackIconUtils.getIconDrawableId(iconValue)); + iconView.setImageResource(ActivityType.findByActivityTypeId(iconValue) + .getIconDrawableId()); } } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 1835b1f42..0174b24d5 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -40,6 +40,7 @@ import java.util.stream.Collectors; import java.util.stream.Stream; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.HeartRate; @@ -51,7 +52,6 @@ import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayout; import de.dennisguse.opentracks.ui.customRecordingLayout.RecordingLayoutIO; import de.dennisguse.opentracks.util.IntentDashboardUtils; -import de.dennisguse.opentracks.util.TrackIconUtils; /** * Utilities to access preferences stored in {@link SharedPreferences}. @@ -237,7 +237,8 @@ public class PreferencesUtils { final String STATS_RATE_DEFAULT = resources.getString(R.string.stats_rate_default); String currentStatsRate = getString(R.string.stats_rate_key, STATS_RATE_DEFAULT); if (currentStatsRate.equals(getString(R.string.stats_rate_speed_or_pace_default, STATS_RATE_DEFAULT))) { - return TrackIconUtils.isSpeedIcon(resources, category); + return ActivityType.findByLocalizedString(resources, category) + .isShowSpeedPreferred(); } return currentStatsRate.equals(resources.getString(R.string.stats_rate_speed)); 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 ad77e3e3f..71f0d3237 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java @@ -1,6 +1,7 @@ package de.dennisguse.opentracks.ui.aggregatedStatistics; import android.content.Context; +import android.content.res.Resources; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; @@ -13,12 +14,12 @@ import java.util.ArrayList; import java.util.List; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.SpeedFormatter; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; import de.dennisguse.opentracks.util.StringUtils; -import de.dennisguse.opentracks.util.TrackIconUtils; public class AggregatedStatisticsAdapter extends BaseAdapter { @@ -62,7 +63,10 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { viewHolder = (ViewHolder) convertView.getTag(); } - if (TrackIconUtils.isSpeedIcon(context.getResources(), aggregatedStatistic.getActivityType())) { + Resources resources = context.getResources(); + String localizedActivityType = aggregatedStatistic.getActivityType(); + if (ActivityType.findByLocalizedString(resources, localizedActivityType) + .isShowSpeedPreferred()) { viewHolder.setSpeed(aggregatedStatistic); } else { viewHolder.setPace(aggregatedStatistic); @@ -178,8 +182,11 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { } private int getIcon(AggregatedStatistics.AggregatedStatistic aggregatedStatistic) { - String iconValue = TrackIconUtils.getActivityTypeId(context, aggregatedStatistic.getActivityType()); - return TrackIconUtils.getIconDrawableId(iconValue); + String localizedActivityType = aggregatedStatistic.getActivityType(); + String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType) + .getId(); + return ActivityType.findByActivityTypeId(iconValue) + .getIconDrawableId(); } } } diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java deleted file mode 100644 index cfd440bc5..000000000 --- a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ - -package de.dennisguse.opentracks.util; - -import android.content.Context; -import android.content.res.Resources; - -import androidx.annotation.NonNull; - -import de.dennisguse.opentracks.data.models.ActivityType; - -/** - * Utilities for track icon. - * - * @author Jimmy Shih - */ -public class TrackIconUtils { - - public static int getIconDrawableId(String activityTypeId) { - return ActivityType.findByActivityTypeId(activityTypeId) - .getIconDrawableId(); - } - - public static int getIconActivityType(String activityTypeId) { - return ActivityType.findByActivityTypeId(activityTypeId) - .getFirstLocalizedStringId(); - } - - @NonNull - public static String getActivityTypeId(Context context, String localizedActivityType) { - return ActivityType.findByLocalizedString(context, localizedActivityType) - .getId(); - } - - public static boolean isSpeedIcon(Resources resources, String localizedActivityType) { - return ActivityType.findByLocalizedString(resources, localizedActivityType) - .isShowSpeedPreferred(); - } -} diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java index d49fe247e..5847773eb 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java @@ -19,6 +19,7 @@ package de.dennisguse.opentracks.util; import android.content.Context; import de.dennisguse.opentracks.data.ContentProviderUtils; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Track; /** @@ -33,7 +34,8 @@ public class TrackUtils { } public static void updateTrack(Context context, Track track, String name, String activityType, String description, ContentProviderUtils contentProviderUtils) { - updateTrack(context, track, name, activityType, TrackIconUtils.getActivityTypeId(context, activityType), description, contentProviderUtils); + updateTrack(context, track, name, activityType, ActivityType.findByLocalizedString(context, activityType) + .getId(), description, contentProviderUtils); } public static void updateTrack(Context context, Track track, String name, String activityType, String iconValue, String description, ContentProviderUtils contentProviderUtils) { @@ -49,7 +51,8 @@ public class TrackUtils { if (iconValue != null) { track.setIcon(iconValue); } else if (activityType != null) { - track.setIcon(TrackIconUtils.getActivityTypeId(context, activityType)); + track.setIcon(ActivityType.findByLocalizedString(context, activityType) + .getId()); } if (description != null) { track.setDescription(description); From 779681088ca0b1b02caf9dbbcce6eff563743ad2 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 23 Jun 2023 07:49:39 +0200 Subject: [PATCH 3/5] Refactor Track.icon is now Track.activityTypeId. Part of #1608. --- .../opentracks/io/file/importer/ExportImportTest.java | 4 ++-- .../io/file/importer/GPXTrackImporterTest.java | 6 +++--- .../io/file/importer/KMLTrackImporterTest.java | 6 +++--- .../aggregatedStatistics/AggregatedStatisticsTest.java | 2 +- .../de/dennisguse/opentracks/TrackEditActivity.java | 2 +- .../de/dennisguse/opentracks/TrackStoppedActivity.java | 2 +- .../opentracks/data/ContentProviderUtils.java | 4 ++-- .../de/dennisguse/opentracks/data/models/Track.java | 10 +++++----- .../opentracks/io/file/exporter/KMLTrackExporter.java | 2 +- .../opentracks/io/file/importer/TrackImporter.java | 2 +- .../opentracks/services/TrackRecordingManager.java | 4 ++-- .../opentracks/settings/ActivityTypePreference.java | 8 ++++---- .../opentracks/settings/PreferencesUtils.java | 4 ++-- .../java/de/dennisguse/opentracks/util/TrackUtils.java | 4 ++-- 14 files changed, 30 insertions(+), 30 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 968f13c93..7fb5371af 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 @@ -180,7 +180,7 @@ public class ExportImportTest { service.endCurrentTrack(); Track track = contentProviderUtils.getTrack(trackId); - track.setIcon(TRACK_ICON); + track.setActivityTypeId(TRACK_ICON); track.setActivityType(TRACK_ACTIVITY_TYPE); track.setDescription(TRACK_DESCRIPTION); contentProviderUtils.updateTrack(track); @@ -219,7 +219,7 @@ public class ExportImportTest { assertEquals(track.getActivityType(), importedTrack.getActivityType()); assertEquals(track.getDescription(), importedTrack.getDescription()); assertEquals(track.getName(), importedTrack.getName()); - assertEquals(track.getIcon(), importedTrack.getIcon()); + assertEquals(track.getActivityTypeId(), importedTrack.getActivityTypeId()); // 2. trackpoints TrackPointAssert a = new TrackPointAssert(); 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 c63bb4c49..88c2d6dbe 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 @@ -82,7 +82,7 @@ public class GPXTrackImporterTest { assertEquals("the category", importedTrack.getActivityType()); assertEquals("the description", importedTrack.getDescription()); assertEquals("2021-01-07 22:51", importedTrack.getName()); - assertEquals("UNKNOWN", importedTrack.getIcon()); + assertEquals("UNKNOWN", importedTrack.getActivityTypeId()); //TODO Check trackstatistics @@ -136,7 +136,7 @@ public class GPXTrackImporterTest { assertEquals("", importedTrack.getActivityType()); assertEquals("", importedTrack.getDescription()); assertEquals("20210907_213924.gpx", importedTrack.getName()); - assertEquals("", importedTrack.getIcon()); + assertEquals("", importedTrack.getActivityTypeId()); // 3. trackstatistics TrackStatistics trackStatistics = importedTrack.getTrackStatistics(); @@ -184,7 +184,7 @@ public class GPXTrackImporterTest { assertEquals("", importedTrack.getActivityType()); assertEquals("", importedTrack.getDescription()); assertEquals("20210907_213924.gpx", importedTrack.getName()); - assertEquals("", importedTrack.getIcon()); + assertEquals("", importedTrack.getActivityTypeId()); // 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 b7acb8f92..ec57d405f 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 @@ -73,7 +73,7 @@ public class KMLTrackImporterTest { assertEquals("", importedTrack.getActivityType()); assertEquals("", importedTrack.getDescription()); assertEquals("", importedTrack.getName()); - assertEquals("", importedTrack.getIcon()); + assertEquals("", importedTrack.getActivityTypeId()); // 2. markers assertEquals(0, contentProviderUtils.getMarkers(importTrackId).size()); @@ -122,7 +122,7 @@ public class KMLTrackImporterTest { assertEquals("", importedTrack.getActivityType()); assertEquals("", importedTrack.getDescription()); assertEquals("", importedTrack.getName()); - assertEquals("", importedTrack.getIcon()); + assertEquals("", importedTrack.getActivityTypeId()); // 2. markers assertEquals(0, contentProviderUtils.getMarkers(importTrackId).size()); @@ -162,7 +162,7 @@ public class KMLTrackImporterTest { assertEquals("unknown", importedTrack.getActivityType()); assertEquals("Test Track", importedTrack.getDescription()); assertEquals("2020-11-28 18:06", importedTrack.getName()); - assertEquals("UNKNOWN", importedTrack.getIcon()); + assertEquals("UNKNOWN", importedTrack.getActivityTypeId()); // 2. markers assertEquals(0, contentProviderUtils.getMarkers(importTrackId).size()); 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 28a0360c2..6c4eeee7d 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java @@ -40,7 +40,7 @@ public class AggregatedStatisticsTest { statistics.setMinAltitude(1200.0); // Resulting min altitude Track track = new Track(); - track.setIcon(ActivityType.findByLocalizedString(context, category) + track.setActivityTypeId(ActivityType.findByLocalizedString(context, category) .getId()); track.setActivityType(category); track.setTrackStatistics(statistics); diff --git a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index 54a4eedd6..80f555571 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -95,7 +95,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit iconValue = bundle.getString(ICON_VALUE_KEY); } if (iconValue == null) { - iconValue = track.getIcon(); + iconValue = track.getActivityTypeId(); } setActivityTypeIcon(iconValue); diff --git a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java index e6c163e30..339c03fcb 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -66,7 +66,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements } }); - String iconValue = track.getIcon(); + String iconValue = track.getActivityTypeId(); setActivityTypeIcon(iconValue); viewBinding.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), viewBinding.trackEditActivityType.getText().toString())); diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index 0dce5ca9b..881876327 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -163,7 +163,7 @@ public class ContentProviderUtils { trackStatistics.setTotalAltitudeLoss(cursor.getFloat(altitudeLossIndex)); } if (!cursor.isNull(iconIndex)) { - track.setIcon(cursor.getString(iconIndex)); + track.setActivityTypeId(cursor.getString(iconIndex)); } return track; } @@ -308,7 +308,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.getIcon()); + values.put(TracksColumns.ICON, track.getActivityTypeId()); return values; } 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 b1bae70a6..48c56364e 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Track.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Track.java @@ -46,7 +46,7 @@ public class Track { private String description = ""; private String activityType = ""; - private String icon = ""; + private String activityTypeId = ""; private final ZoneOffset zoneOffset; @@ -105,12 +105,12 @@ public class Track { this.activityType = activityType; } - public String getIcon() { - return icon; + public String getActivityTypeId() { + return activityTypeId; } - public void setIcon(String icon) { - this.icon = icon; + public void setActivityTypeId(String activityTypeId) { + this.activityTypeId = activityTypeId; } public ZoneOffset getZoneOffset() { 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 dc3938672..7532bcc26 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,7 +307,7 @@ public class KMLTrackExporter implements TrackExporter { printWriter.println("" + StringUtils.formatCData(track.getName()) + ""); printWriter.println("" + StringUtils.formatCData(track.getDescription()) + ""); - printWriter.println("" + StringUtils.formatCData(track.getIcon()) + ""); + printWriter.println("" + StringUtils.formatCData(track.getActivityTypeId()) + ""); printWriter.println("" + track.getUuid() + ""); printWriter.println("#" + TRACK_STYLE + ""); 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 ba2e8d922..5b057dc95 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 @@ -112,7 +112,7 @@ public class TrackImporter { } } - track.setIcon(icon != null ? icon : ""); + track.setActivityTypeId(icon != null ? icon : ""); } void finish() { diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index 52e13e8e9..c725ce46a 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -72,9 +72,9 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang onNewTrackPoint(segmentStartTrackPoint); - String category = PreferencesUtils.getDefaultActivity(); + String category = PreferencesUtils.getDefaultActivityTypeLocalized(); track.setActivityType(category); - track.setIcon(ActivityType.findByLocalizedString(context, category) + track.setActivityTypeId(ActivityType.findByLocalizedString(context, category) .getId()); track.setTrackStatistics(trackStatisticsUpdater.getTrackStatistics()); //TODO Pass TrackPoint diff --git a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index 2aaa3679e..2a97e02fa 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -46,7 +46,7 @@ public class ActivityTypePreference extends DialogPreference { setDialogIcon(null); setPersistent(true); - SummaryProvider summaryProvider = preference -> PreferencesUtils.getDefaultActivity(); + SummaryProvider summaryProvider = preference -> PreferencesUtils.getDefaultActivityTypeLocalized(); setSummaryProvider(summaryProvider); } @@ -77,7 +77,7 @@ public class ActivityTypePreference extends DialogPreference { final Context context = getActivity(); textView = view.findViewById(R.id.activity_type_preference_text_view); - String category = PreferencesUtils.getDefaultActivity(); + String category = PreferencesUtils.getDefaultActivityTypeLocalized(); textView.setText(category); ArrayAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(context)); textView.setAdapter(adapter); @@ -104,7 +104,7 @@ public class ActivityTypePreference extends DialogPreference { } private void showIconSelectDialog() { - String category = PreferencesUtils.getDefaultActivity(); + String category = PreferencesUtils.getDefaultActivityTypeLocalized(); ChooseActivityTypeDialogFragment.showDialog(getActivity().getSupportFragmentManager(), category); } @@ -113,7 +113,7 @@ public class ActivityTypePreference extends DialogPreference { if (positiveResult) { String newDefaultActivity = textView.getText().toString(); if (getPreference().callChangeListener(newDefaultActivity)) { - PreferencesUtils.setDefaultActivity(newDefaultActivity); + PreferencesUtils.setDefaultActivityLocalized(newDefaultActivity); HackUtils.invalidatePreference(getPreference()); } } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 0174b24d5..4ab1146c1 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -90,11 +90,11 @@ public class PreferencesUtils { sharedPreferences.unregisterOnSharedPreferenceChangeListener(changeListener); } - public static String getDefaultActivity() { + public static String getDefaultActivityTypeLocalized() { return getString(R.string.default_activity_key, resources.getString(R.string.default_activity_default)); } - public static void setDefaultActivity(String newDefaultActivity) { + public static void setDefaultActivityLocalized(String newDefaultActivity) { setString(R.string.default_activity_key, newDefaultActivity); } diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java index 5847773eb..ea1230032 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackUtils.java @@ -49,9 +49,9 @@ public class TrackUtils { update = true; } if (iconValue != null) { - track.setIcon(iconValue); + track.setActivityTypeId(iconValue); } else if (activityType != null) { - track.setIcon(ActivityType.findByLocalizedString(context, activityType) + track.setActivityTypeId(ActivityType.findByLocalizedString(context, activityType) .getId()); } if (description != null) { From 425ea0f2168af542a10bee3193ffd9419c85aee2 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Sat, 24 Jun 2023 19:30:00 +0200 Subject: [PATCH 4/5] 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); From 477819d7303cac3268db24c75e673504ce140f83 Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 26 Jun 2023 23:56:41 +0200 Subject: [PATCH 5/5] Cleanup: split ActivityType and ActivityIcon. Part of #1608. --- .../io/file/importer/ExportImportTest.java | 2 +- .../file/importer/GPXTrackImporterTest.java | 4 +- .../AggregatedStatisticsTest.java | 4 +- .../opentracks/TrackEditActivity.java | 4 +- .../opentracks/TrackRecordingActivity.java | 2 +- .../opentracks/TrackStoppedActivity.java | 6 +- .../opentracks/chart/ChartFragment.java | 10 +- .../opentracks/data/models/ActivityIcon.java | 35 ++++ .../opentracks/data/models/ActivityType.java | 154 ++++++++++++------ .../ChooseActivityTypeDialogFragment.java | 68 +++++--- .../fragments/StatisticsRecordedFragment.java | 2 +- .../services/TrackRecordingManager.java | 6 +- .../announcement/VoiceAnnouncement.java | 2 +- .../settings/ActivityTypePreference.java | 10 +- .../opentracks/settings/PreferencesUtils.java | 9 +- .../AggregatedStatistics.java | 20 +-- .../AggregatedStatisticsAdapter.java | 8 +- .../ui/intervals/IntervalsFragment.java | 2 +- 18 files changed, 224 insertions(+), 124 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java 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 d1a4f5fdb..7aa7757da 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 @@ -96,7 +96,7 @@ public class ExportImportTest { private final ContentProviderUtils contentProviderUtils = new ContentProviderUtils(context); - private static final ActivityType TRACK_ACTIVITY_TYPE = ActivityType.MOUNTAIN_BIKE; + private static final ActivityType TRACK_ACTIVITY_TYPE = ActivityType.MOUNTAIN_BIKING; private static final String TRACK_ACTIVITY_TYPE_LOCALIZED = "the activity type"; private static final String TRACK_DESCRIPTION = "the description"; 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 9ed78f4a0..09a35936f 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 @@ -83,7 +83,7 @@ public class GPXTrackImporterTest { assertEquals("the category", importedTrack.getActivityTypeLocalized()); assertEquals("the description", importedTrack.getDescription()); assertEquals("2021-01-07 22:51", importedTrack.getName()); - assertEquals("UNKNOWN", importedTrack.getActivityType()); + assertEquals(ActivityType.UNKNOWN, importedTrack.getActivityType()); //TODO Check trackstatistics @@ -137,7 +137,7 @@ public class GPXTrackImporterTest { assertEquals("", importedTrack.getActivityTypeLocalized()); assertEquals("", importedTrack.getDescription()); assertEquals("20210907_213924.gpx", importedTrack.getName()); - assertEquals("", importedTrack.getActivityType()); + assertEquals(ActivityType.UNKNOWN, importedTrack.getActivityType()); // 3. trackstatistics TrackStatistics trackStatistics = importedTrack.getTrackStatistics(); 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 308a141fc..f6bbdee6c 100644 --- a/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java +++ b/src/androidTest/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsTest.java @@ -243,8 +243,8 @@ public class AggregatedStatisticsTest { // Check order { - assertEquals(biking, aggregatedStatistics.getItem(0).getActivityType()); - assertEquals(driving, aggregatedStatistics.getItem(3).getActivityType()); + assertEquals(biking, aggregatedStatistics.getItem(0).getActivityTypeLocalized()); + assertEquals(driving, aggregatedStatistics.getItem(3).getActivityTypeLocalized()); } } } diff --git a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index 32fce8b3a..1288ac547 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -97,7 +97,7 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit } setActivityTypeIcon(activityType); - viewBinding.fields.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), viewBinding.fields.trackEditActivityType.getText().toString())); + viewBinding.fields.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), this, viewBinding.fields.trackEditActivityType.getText().toString())); viewBinding.fields.trackEditDescription.setText(track.getDescription()); @@ -146,6 +146,6 @@ public class TrackEditActivity extends AbstractActivity implements ChooseActivit @Override public void onChooseActivityTypeDone(ActivityType activityType) { setActivityTypeIcon(activityType); - viewBinding.fields.trackEditActivityType.setText(getString(activityType.getFirstLocalizedStringId())); + viewBinding.fields.trackEditActivityType.setText(getString(activityType.getLocalizedStringId())); } } diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java index 60ab6d182..d6e686008 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java @@ -319,7 +319,7 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc @Override public void onChooseActivityTypeDone(ActivityType activityType) { Track track = contentProviderUtils.getTrack(trackId); - String activityTypeLocalized = getString(activityType.getFirstLocalizedStringId()); + String activityTypeLocalized = getString(activityType.getLocalizedStringId()); TrackUtils.updateTrack(this, track, null, activityTypeLocalized, null, contentProviderUtils); } diff --git a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java index 42956a6bc..14becbb88 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -65,7 +65,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements }); setActivityTypeIcon(track.getActivityType()); - viewBinding.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), viewBinding.trackEditActivityType.getText().toString())); + viewBinding.trackEditActivityTypeIcon.setOnClickListener(v -> ChooseActivityTypeDialogFragment.showDialog(getSupportFragmentManager(), this, viewBinding.trackEditActivityType.getText().toString())); viewBinding.trackEditDescription.setText(track.getDescription()); @@ -74,7 +74,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements { Pair parts = SpeedFormatter.Builder() .setUnit(PreferencesUtils.getUnitSystem()) - .setReportSpeedOrPace(PreferencesUtils.isReportSpeed(track.getActivityTypeLocalized())) + .setReportSpeedOrPace(PreferencesUtils.isReportSpeed(track)) .build(this) .getSpeedParts(track.getTrackStatistics().getAverageMovingSpeed()); viewBinding.speed.setText(parts.first); @@ -132,7 +132,7 @@ public class TrackStoppedActivity extends AbstractTrackDeleteActivity implements @Override public void onChooseActivityTypeDone(ActivityType activityType) { setActivityTypeIcon(activityType); - viewBinding.trackEditActivityType.setText(getString(activityType.getFirstLocalizedStringId())); + viewBinding.trackEditActivityType.setText(getString(activityType.getLocalizedStringId())); } 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 4fce435b7..bea47c7fe 100644 --- a/src/main/java/de/dennisguse/opentracks/chart/ChartFragment.java +++ b/src/main/java/de/dennisguse/opentracks/chart/ChartFragment.java @@ -65,7 +65,7 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener { // Stats gathered from the received data private final List pendingPoints = new ArrayList<>(); - private String category = ""; + private String activityTypeLocalized = ""; // Modes of operation private boolean chartByDistance; @@ -87,7 +87,7 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener { } } if (PreferencesUtils.isKey(R.string.stats_rate_key, key)) { - boolean reportSpeed = PreferencesUtils.isReportSpeed(category); + boolean reportSpeed = PreferencesUtils.isReportSpeed(activityTypeLocalized); if (reportSpeed != viewBinding.chartView.getReportSpeed()) { viewBinding.chartView.setReportSpeed(reportSpeed); viewBinding.chartView.applyReportSpeed(); @@ -160,12 +160,12 @@ public class ChartFragment extends Fragment implements TrackDataHub.Listener { public void onTrackUpdated(Track track) { if (isResumed()) { if (track == null) { - category = ""; + activityTypeLocalized = ""; return; } - category = track.getActivityTypeLocalized(); - boolean reportSpeed = PreferencesUtils.isReportSpeed(category); + activityTypeLocalized = track.getActivityTypeLocalized(); + boolean reportSpeed = PreferencesUtils.isReportSpeed(activityTypeLocalized); if (reportSpeed != viewBinding.chartView.getReportSpeed()) { viewBinding.chartView.setReportSpeed(reportSpeed); viewBinding.chartView.applyReportSpeed(); diff --git a/src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java b/src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java new file mode 100644 index 000000000..23b339b5b --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java @@ -0,0 +1,35 @@ +package de.dennisguse.opentracks.data.models; + +import de.dennisguse.opentracks.R; + +public enum ActivityIcon { + AIRPLANE("AIRPLANE", R.drawable.ic_activity_flight_24dp), + BIKE("BIKE", R.drawable.ic_activity_bike_24dp), + MOUNTAIN_BIKE("MOUNTAIN_BIKE", R.drawable.ic_activity_mtb_24dp), + MOTOR_BIKE("MOTOR_BIKE", R.drawable.ic_activity_motorbike_24dp), + KAYAK("KAYAK", R.drawable.ic_activity_kayaking_24dp), + BOAT("BOAT", R.drawable.ic_activity_boat_24dp), + SAILING("SAILING", R.drawable.ic_activity_sailing_24dp), + DRIVE("DRIVE", R.drawable.ic_activity_drive_24dp), + RUN("RUN", R.drawable.ic_activity_run_24dp), + SKI("SKI", R.drawable.ic_activity_skiing_24dp), + SNOW_BOARDING("SNOW_BOARDING", R.drawable.ic_activity_snowboarding_24dp), + UNKNOWN("UNKNOWN", R.drawable.ic_logo_24dp), + WALK("WALK", R.drawable.ic_activity_walk_24dp), + ESCOOTER("ESCOOTER", R.drawable.ic_activity_escooter_24dp), + INLINE_SKATING("INLINES_SKATING", R.drawable.ic_activity_inline_skating_24dp), + SKATE_BOARDING("SKATE_BOARDING", R.drawable.ic_activity_skateboarding_24dp), + CLIMBING("CLIMBING", R.drawable.ic_activity_climbing_24dp), + SWIMMING("SWIMMING", R.drawable.ic_activity_swimming_24dp), + SWIMMING_OPEN("SWIMMING_OPEN", R.drawable.ic_activity_swimming_open_24dp), + WORKOUT("WORKOUT", R.drawable.ic_activity_workout_24dp); + + @Deprecated //TODO should be removed. + final String iconId; + final int iconDrawableId; + + ActivityIcon(String iconId, int iconDrawableId) { + this.iconId = iconId; + this.iconDrawableId = iconDrawableId; + } +} 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 cde74d557..9e607c5c3 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java @@ -5,7 +5,6 @@ import android.content.res.Resources; import androidx.annotation.NonNull; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @@ -13,77 +12,126 @@ import java.util.stream.Collectors; import de.dennisguse.opentracks.R; public enum ActivityType { - AIRPLANE("AIRPLANE", R.drawable.ic_activity_flight_24dp, true, R.string.activity_type_airplane, R.string.activity_type_commercial_airplane, R.string.activity_type_rc_airplane), - BIKE("BIKE", R.drawable.ic_activity_bike_24dp, true, R.string.activity_type_biking, R.string.activity_type_cycling, R.string.activity_type_dirt_bike, R.string.activity_type_road_biking, R.string.activity_type_track_cycling), - MOUNTAIN_BIKE("MOUNTAIN_BIKE", R.drawable.ic_activity_mtb_24dp, true, R.string.activity_type_mountain_biking), - MOTOR_BIKE("MOTOR_BIKE", R.drawable.ic_activity_motorbike_24dp, true, R.string.activity_type_motor_bike), - KAYAK("KAYAK", R.drawable.ic_activity_kayaking_24dp, true, R.string.activity_type_kayaking), - BOAT("BOAT", R.drawable.ic_activity_boat_24dp, true, R.string.activity_type_boat, R.string.activity_type_ferry, R.string.activity_type_motor_boating, R.string.activity_type_rc_boat), - SAILING("SAILING", R.drawable.ic_activity_sailing_24dp, true, R.string.activity_type_sailing), - DRIVE("DRIVE", R.drawable.ic_activity_drive_24dp, true, R.string.activity_type_atv, R.string.activity_type_driving, R.string.activity_type_driving_bus, R.string.activity_type_driving_car), - RUN("RUN", R.drawable.ic_activity_run_24dp, false, R.string.activity_type_running, R.string.activity_type_street_running, R.string.activity_type_track_running, R.string.activity_type_trail_running), - SKI("SKI", R.drawable.ic_activity_skiing_24dp, true, R.string.activity_type_cross_country_skiing, R.string.activity_type_skiing), - SNOW_BOARDING("SNOW_BOARDING", R.drawable.ic_activity_snowboarding_24dp, true, R.string.activity_type_snow_boarding), - UNKNOWN("UNKNOWN", R.drawable.ic_logo_24dp, true, R.string.activity_type_unknown), - WALK("WALK", R.drawable.ic_activity_walk_24dp, false, R.string.activity_type_hiking, R.string.activity_type_off_trail_hiking, R.string.activity_type_speed_walking, R.string.activity_type_trail_hiking, R.string.activity_type_walking), - ESCOOTER("ESCOOTER", R.drawable.ic_activity_escooter_24dp, true, R.string.activity_type_escooter), - INLINE_SKATING("INLINES_SKATING", R.drawable.ic_activity_inline_skating_24dp, true, R.string.activity_type_inline_skating), - SKATE_BOARDING("SKATE_BOARDING", R.drawable.ic_activity_skateboarding_24dp, true, R.string.activity_type_skate_boarding), - CLIMBING("CLIMBING", R.drawable.ic_activity_climbing_24dp, false, R.string.activity_type_climbing), - SWIMMING("SWIMMING", R.drawable.ic_activity_swimming_24dp, false, R.string.activity_type_swimming), - 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 iconId; - final int iconDrawableId; + AIRPLANE("airplane", R.string.activity_type_airplane, ActivityIcon.AIRPLANE, true), + ATV("ATV", R.string.activity_type_atv, ActivityIcon.DRIVE, true), + BIKING("biking", R.string.activity_type_biking, ActivityIcon.BIKE, true), + BLIMP("blimp", R.string.activity_type_blimp, ActivityIcon.UNKNOWN, true), + BOAT("boat", R.string.activity_type_boat, ActivityIcon.BOAT, true), + CLIMBING("climbing", R.string.activity_type_climbing, ActivityIcon.CLIMBING, false), + COMMERCIAL_AIRPLANE("commercial airplane", R.string.activity_type_commercial_airplane, ActivityIcon.AIRPLANE, true), + CROSS_COUNTRY_SKIING("cross-country skiing", R.string.activity_type_cross_country_skiing, ActivityIcon.SKI, true), + CYCLING("cycling", R.string.activity_type_cycling, ActivityIcon.BIKE, true), + DIRT_BIKE("dirt bike", R.string.activity_type_dirt_bike, ActivityIcon.MOTOR_BIKE, true), + DONKEY_BACK_RIDING("donkey back riding", R.string.activity_type_donkey_back_riding, ActivityIcon.UNKNOWN, true), + DRIVING("driving", R.string.activity_type_driving, ActivityIcon.DRIVE, true), + DRIVING_BUS("driving bus", R.string.activity_type_driving_bus, ActivityIcon.DRIVE, true), + DRIVING_CAR("driving car", R.string.activity_type_driving_car, ActivityIcon.DRIVE, true), + ESCOOTER("escooter", R.string.activity_type_escooter, ActivityIcon.ESCOOTER, true), + FERRY("ferry", R.string.activity_type_ferry, ActivityIcon.BOAT, true), + FRISBEE("frisbee", R.string.activity_type_frisbee, ActivityIcon.UNKNOWN, true), + GLIDING("gliding", R.string.activity_type_gliding, ActivityIcon.UNKNOWN, true), + HANG_GLIDING("hang gliding", R.string.activity_type_hang_gliding, ActivityIcon.UNKNOWN, true), + HELICOPTER("helicopter", R.string.activity_type_helicopter, ActivityIcon.UNKNOWN, true), + HIKING("hiking", R.string.activity_type_hiking, ActivityIcon.WALK, false), + HORSE_BACK_RIDING("horse back riding", R.string.activity_type_horse_back_riding, ActivityIcon.UNKNOWN, true), + HOT_AIR_BALLOON("hot air balloon", R.string.activity_type_hot_air_balloon, ActivityIcon.UNKNOWN, true), + ICE_SAILING("ice sailing", R.string.activity_type_ice_sailing, ActivityIcon.UNKNOWN, true), + INLINE_SKATING("inline skating", R.string.activity_type_inline_skating, ActivityIcon.INLINE_SKATING, true), + KAYAKING("kayaking", R.string.activity_type_kayaking, ActivityIcon.KAYAK, true), + KITE_SURFING("kite surfing", R.string.activity_type_kite_surfing, ActivityIcon.UNKNOWN, true), + LAND_SAILING("land sailing", R.string.activity_type_land_sailing, ActivityIcon.UNKNOWN, true), + MIXED_TYPE("mixed type", R.string.activity_type_mixed_type, ActivityIcon.UNKNOWN, true), + MOTOR_BIKE("motor bike", R.string.activity_type_motor_bike, ActivityIcon.MOTOR_BIKE, true), + MOTOR_BOATING("motor boating", R.string.activity_type_motor_boating, ActivityIcon.BOAT, true), + MOUNTAIN_BIKING("mountain biking", R.string.activity_type_mountain_biking, ActivityIcon.MOUNTAIN_BIKE, true), + OFF_TRAIL_HIKING("off trail hiking", R.string.activity_type_hiking, ActivityIcon.WALK, false), + OTHER("other", R.string.activity_type_other, ActivityIcon.UNKNOWN, true), + PADDLING("paddling", R.string.activity_type_paddling, ActivityIcon.UNKNOWN, true), + PARA_GLIDING("para gliding", R.string.activity_type_para_gliding, ActivityIcon.UNKNOWN, true), + RC_AIRPLANE("RC airplane", R.string.activity_type_rc_airplane, ActivityIcon.AIRPLANE, true), + RC_BOAT("RC boat", R.string.activity_type_rc_boat, ActivityIcon.BOAT, true), + RC_HELICOPTER("RC helicopter", R.string.activity_type_rc_helicopter, ActivityIcon.UNKNOWN, true), + RIDING("riding", R.string.activity_type_horse_back_riding, ActivityIcon.UNKNOWN, true), + ROAD_BIKING("road biking", R.string.activity_type_road_biking, ActivityIcon.BIKE, true), + ROLLER_SKIING("roller skiing", R.string.activity_type_roller_skiing, ActivityIcon.UNKNOWN, true), + ROWING("rowing", R.string.activity_type_rowing, ActivityIcon.UNKNOWN, true), + RUNNING("running", R.string.activity_type_running, ActivityIcon.RUN, false), + SAILING("sailing", R.string.activity_type_sailing, ActivityIcon.SAILING, true), + SEAPLANE("seaplane", R.string.activity_type_seaplane, ActivityIcon.AIRPLANE, true), + SKATE_BOARDING("skate boarding", R.string.activity_type_skate_boarding, ActivityIcon.SKATE_BOARDING, true), + SKATING("skating", R.string.activity_type_skating, ActivityIcon.UNKNOWN, true), + SKIING("skiing", R.string.activity_type_skiing, ActivityIcon.SKI, true), + SKY_JUMPING("sky jumping", R.string.activity_type_sky_jumping, ActivityIcon.UNKNOWN, true), + SLED("sled", R.string.activity_type_sled, ActivityIcon.UNKNOWN, true), + SNOW_BOARDING("snow boarding", R.string.activity_type_snow_boarding, ActivityIcon.SNOW_BOARDING, true), + SNOW_SHOEING("snow shoeing", R.string.activity_type_snow_shoeing, ActivityIcon.UNKNOWN, true), + SPEED_WALKING("speed walking", R.string.activity_type_speed_walking, ActivityIcon.WALK, false), + STREET_RUNNING("street running", R.string.activity_type_street_running, ActivityIcon.RUN, false), + SURFING("surfing", R.string.activity_type_surfing, ActivityIcon.UNKNOWN, true), + TRACK_CYCLING("track cycling", R.string.activity_type_track_cycling, ActivityIcon.BIKE, true), + TRACK_RUNNING("track running", R.string.activity_type_trail_running, ActivityIcon.RUN, false), + TRAIL_HIKING("trail hiking", R.string.activity_type_trail_hiking, ActivityIcon.WALK, false), + TRAIL_RUNNING("trail running", R.string.activity_type_trail_running, ActivityIcon.RUN, false), + TRAIN("train", R.string.activity_type_train, ActivityIcon.UNKNOWN, true), + ULTIMATE_FRISBEE("ultimate frisbee", R.string.activity_type_ultimate_frisbee, ActivityIcon.UNKNOWN, true), + WAKEBOARDING("wakeboarding", R.string.activity_type_wakeboarding, ActivityIcon.UNKNOWN, true), + WALKING("walking", R.string.activity_type_walking, ActivityIcon.WALK, false), + WATER_SKIING("water skiing", R.string.activity_type_water_skiing, ActivityIcon.UNKNOWN, true), + WIND_SURFING("wind surfing", R.string.activity_type_wind_surfing, ActivityIcon.UNKNOWN, true), + SWIMMING("swimming", R.string.activity_type_swimming, ActivityIcon.SWIMMING, false), + SWIMMING_OPEN("swimming in open water", R.string.activity_type_swimming_open, ActivityIcon.SWIMMING_OPEN, false), + WORKOUT("workout", R.string.activity_type_workout, ActivityIcon.WORKOUT, false), + UNKNOWN("unknown", R.string.activity_type_unknown, ActivityIcon.UNKNOWN, true); + + final String id; + + final ActivityIcon icon; final boolean showSpeedPreferred; - final int[] localizedStringIds; + final int localizedStringId; - //isSpeed? - - ActivityType(String iconId, int iconDrawableId, boolean showSpeedPreferred, int... localizedStringIds) { - this.iconId = iconId; - this.iconDrawableId = iconDrawableId; + ActivityType(String id, int localizedStringId, ActivityIcon icon, boolean showSpeedPreferred) { + this.id = id; + this.localizedStringId = localizedStringId; + this.icon = icon; this.showSpeedPreferred = showSpeedPreferred; - this.localizedStringIds = localizedStringIds; } + public String getId() { + return id; + } + + @Deprecated public String getIconId() { - return iconId; + return icon.iconId; } public int getIconDrawableId() { - return iconDrawableId; + return icon.iconDrawableId; + } + + public int getLocalizedStringId() { + return localizedStringId; } public boolean isShowSpeedPreferred() { return showSpeedPreferred; } - public int[] getLocalizedStringIds() { - return localizedStringIds; - } - - public int getFirstLocalizedStringId() { - return localizedStringIds[0]; - } - public static List getLocalizedStrings(Context context) { - List result = new ArrayList<>(); - for (ActivityType activityType : values()) { - List strings = Arrays.stream(activityType.localizedStringIds) - .mapToObj(context::getString) - .collect(Collectors.toList()); - result.addAll(strings); - } - - return result; + return Arrays.stream(values()) + .map(ActivityType::getLocalizedStringId) + .map(context::getString) + .collect(Collectors.toList()); } @NonNull public static ActivityType findBy(String iconId) { + if (ActivityIcon.UNKNOWN.iconId.equals(iconId)) { + return ActivityType.UNKNOWN; + } return Arrays.stream(ActivityType.values()).filter( - it -> it.getIconId().equals(iconId) + it -> it.icon.iconId.equals(iconId) ).findFirst() .orElse(ActivityType.UNKNOWN); } @@ -94,10 +142,8 @@ public enum ActivityType { public static ActivityType findByLocalizedString(Resources resources, String localizedActivityType) { return Arrays.stream(ActivityType.values()) - .filter( - it -> Arrays.stream(it.getLocalizedStringIds()) - .anyMatch(id -> resources.getString(id).equals(localizedActivityType)) - ).findFirst() + .filter(it -> resources.getString(it.getLocalizedStringId()).equals(localizedActivityType)) + .findFirst() .orElse(ActivityType.UNKNOWN); } } diff --git a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java index 6048113b7..1aacf353f 100644 --- a/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java +++ b/src/main/java/de/dennisguse/opentracks/fragments/ChooseActivityTypeDialogFragment.java @@ -13,43 +13,65 @@ import androidx.fragment.app.DialogFragment; import androidx.fragment.app.FragmentManager; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.stream.Collectors; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.databinding.ChooseActivityTypeBinding; -/** - * A DialogFragment to choose an activity type. - */ public class ChooseActivityTypeDialogFragment extends DialogFragment implements AdapterView.OnItemClickListener { private static final String CHOOSE_ACTIVITY_TYPE_DIALOG_TAG = "chooseActivityType"; - public static void showDialog(FragmentManager fragmentManager, String preselectedCategory) { - new ChooseActivityTypeDialogFragment(preselectedCategory).show(fragmentManager, ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + @Deprecated + public static void showDialog(FragmentManager fragmentManager, Context context, String activityTypeLocalized) { + ActivityType activityType = ActivityType.findByLocalizedString(context, activityTypeLocalized); + showDialog(fragmentManager, activityType); } - private static int getPosition(Context context, String category) { - if (category == null) { + public static void showDialog(FragmentManager fragmentManager, ActivityType activityType) { + new ChooseActivityTypeDialogFragment(activityType).show(fragmentManager, ChooseActivityTypeDialogFragment.CHOOSE_ACTIVITY_TYPE_DIALOG_TAG); + } + + private static final List activityTypes = List.of( + ActivityType.UNKNOWN, + ActivityType.AIRPLANE, + ActivityType.BIKING, + ActivityType.MOUNTAIN_BIKING, + ActivityType.MOTOR_BIKE, + ActivityType.KAYAKING, + ActivityType.BOAT, + ActivityType.SAILING, + ActivityType.DRIVING, + ActivityType.RUNNING, + ActivityType.SNOW_BOARDING, + ActivityType.SKIING, + ActivityType.WALKING, + ActivityType.ESCOOTER, + ActivityType.INLINE_SKATING, + ActivityType.SKATE_BOARDING, + ActivityType.CLIMBING, + ActivityType.SWIMMING, + ActivityType.SWIMMING_OPEN, + ActivityType.WORKOUT + ); + + private static int getPosition(Context context, ActivityType activityType) { + if (activityType == null) { return -1; } - String iconValue = ActivityType.findByLocalizedString(context, category) - .getIconId(); - return getAllActivityTypeIds().indexOf(iconValue); + return activityTypes.indexOf(activityType); } private ChooseActivityTypeBinding viewBinding; - private final String preselectedCategory; + private final ActivityType preselectedActivityType; private ChooseActivityTypeCaller chooseActivityTypeCaller; - private ChooseActivityTypeDialogFragment(String preselectedCategory) { - this.preselectedCategory = preselectedCategory; + private ChooseActivityTypeDialogFragment(ActivityType activityType) { + this.preselectedActivityType = activityType; } @NonNull @@ -65,13 +87,12 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements viewBinding = ChooseActivityTypeBinding.inflate(inflater, container, false); List iconDrawableIds = new ArrayList<>(); - for (String iconValue : getAllActivityTypeIds()) { - iconDrawableIds.add(ActivityType.findBy(iconValue) - .getIconDrawableId()); + for (ActivityType activityType : activityTypes) { + iconDrawableIds.add(activityType.getIconDrawableId()); } final ChooseActivityTypeImageAdapter imageAdapter = new ChooseActivityTypeImageAdapter(iconDrawableIds); - int position = getPosition(getContext(), preselectedCategory); + int position = getPosition(getContext(), preselectedActivityType); if (position != -1) { imageAdapter.setSelected(position); } @@ -98,17 +119,10 @@ public class ChooseActivityTypeDialogFragment extends DialogFragment implements @Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { - chooseActivityTypeCaller.onChooseActivityTypeDone(ActivityType.findBy(getAllActivityTypeIds().get(position))); + chooseActivityTypeCaller.onChooseActivityTypeDone(activityTypes.get(position)); dismiss(); } - // TODO Return List - public static List getAllActivityTypeIds() { - return Arrays.stream(ActivityType.values()) - .map(ActivityType::getIconId) - .collect(Collectors.toList()); - } - /** * Interface for chooseActivityTypeCaller of this dialog fragment. */ diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordedFragment.java index f6d1c14f8..98029379f 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.getActivityTypeLocalized()); + preferenceReportSpeed = PreferencesUtils.isReportSpeed(track); } if (key != null && updateUInecessary && isResumed()) { diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java index 550d65fac..d660c7c21 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingManager.java @@ -72,9 +72,9 @@ class TrackRecordingManager implements SharedPreferences.OnSharedPreferenceChang onNewTrackPoint(segmentStartTrackPoint); - String category = PreferencesUtils.getDefaultActivityTypeLocalized(); - track.setActivityTypeLocalized(category); - track.setActivityType(ActivityType.findByLocalizedString(context, category)); + String activityTypeLocalized = PreferencesUtils.getDefaultActivityTypeLocalized(); + track.setActivityTypeLocalized(activityTypeLocalized); + track.setActivityType(ActivityType.findByLocalizedString(context, activityTypeLocalized)); 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 3bd3c1a95..bc8594d61 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.getActivityTypeLocalized()), lastInterval, sensorStatistics); + Spannable announcement = VoiceAnnouncementUtils.getAnnouncement(context, track.getTrackStatistics(), PreferencesUtils.getUnitSystem(), PreferencesUtils.isReportSpeed(track), 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 b80fca918..088874e92 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -77,8 +77,8 @@ public class ActivityTypePreference extends DialogPreference { final Context context = getActivity(); textView = view.findViewById(R.id.activity_type_preference_text_view); - String category = PreferencesUtils.getDefaultActivityTypeLocalized(); - textView.setText(category); + String activityTypeLocalized = PreferencesUtils.getDefaultActivityTypeLocalized(); + textView.setText(activityTypeLocalized); ArrayAdapter adapter = new ArrayAdapter<>(context, android.R.layout.simple_dropdown_item_1line, ActivityType.getLocalizedStrings(context)); textView.setAdapter(adapter); textView.setOnItemClickListener((parent, v, position, id) -> { @@ -97,12 +97,12 @@ public class ActivityTypePreference extends DialogPreference { iconView = view.findViewById(R.id.activity_type_preference_spinner); iconView.setOnClickListener((it) -> showIconSelectDialog()); - updateIcon(ActivityType.findByLocalizedString(context, category)); + updateIcon(ActivityType.findByLocalizedString(context, activityTypeLocalized)); } private void showIconSelectDialog() { String category = PreferencesUtils.getDefaultActivityTypeLocalized(); - ChooseActivityTypeDialogFragment.showDialog(getActivity().getSupportFragmentManager(), category); + ChooseActivityTypeDialogFragment.showDialog(getActivity().getSupportFragmentManager(), getContext(), category); } @Override @@ -118,7 +118,7 @@ public class ActivityTypePreference extends DialogPreference { public void updateUI(ActivityType activityType) { updateIcon(activityType); - textView.setText(getActivity().getString(activityType.getFirstLocalizedStringId())); + textView.setText(getActivity().getString(activityType.getLocalizedStringId())); textView.clearFocus(); } diff --git a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java index 4ab1146c1..be7cea61e 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java +++ b/src/main/java/de/dennisguse/opentracks/settings/PreferencesUtils.java @@ -46,6 +46,7 @@ import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.HeartRate; import de.dennisguse.opentracks.data.models.HeartRateZones; import de.dennisguse.opentracks.data.models.Speed; +import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.io.file.TrackFileFormat; import de.dennisguse.opentracks.io.file.TrackFilenameGenerator; import de.dennisguse.opentracks.ui.customRecordingLayout.CsvLayoutUtils; @@ -233,17 +234,21 @@ public class PreferencesUtils { } } - public static boolean isReportSpeed(String category) { + public static boolean isReportSpeed(String activityTypeLocalized) { final String STATS_RATE_DEFAULT = resources.getString(R.string.stats_rate_default); String currentStatsRate = getString(R.string.stats_rate_key, STATS_RATE_DEFAULT); if (currentStatsRate.equals(getString(R.string.stats_rate_speed_or_pace_default, STATS_RATE_DEFAULT))) { - return ActivityType.findByLocalizedString(resources, category) + return ActivityType.findByLocalizedString(resources, activityTypeLocalized) .isShowSpeedPreferred(); } return currentStatsRate.equals(resources.getString(R.string.stats_rate_speed)); } + public static boolean isReportSpeed(Track track) { + return isReportSpeed(track.getActivityTypeLocalized()); + } + private static String getBluetoothSensorAddressNone() { return resources.getString(R.string.sensor_type_value_none); } 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 2f7b553ce..8de17659d 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatistics.java +++ b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatistics.java @@ -25,7 +25,7 @@ public class AggregatedStatistics { dataList.addAll(dataMap.values()); dataList.sort((o1, o2) -> { if (o1.getCountTracks() == o2.getCountTracks()) { - return o1.getActivityType().compareTo(o2.getActivityType()); + return o1.getActivityTypeLocalized().compareTo(o2.getActivityTypeLocalized()); } return (o1.getCountTracks() < o2.getCountTracks() ? 1 : -1); }); @@ -33,11 +33,11 @@ public class AggregatedStatistics { @VisibleForTesting public void aggregate(@NonNull Track track) { - String activityType = track.getActivityTypeLocalized(); - if (dataMap.containsKey(activityType)) { - dataMap.get(activityType).add(track.getTrackStatistics()); + String activityTypeLocalized = track.getActivityTypeLocalized(); + if (dataMap.containsKey(activityTypeLocalized)) { + dataMap.get(activityTypeLocalized).add(track.getTrackStatistics()); } else { - dataMap.put(activityType, new AggregatedStatistic(activityType, track.getTrackStatistics())); + dataMap.put(activityTypeLocalized, new AggregatedStatistic(activityTypeLocalized, track.getTrackStatistics())); } } @@ -54,17 +54,17 @@ public class AggregatedStatistics { } public static class AggregatedStatistic { - private final String activityType; + private final String activityTypeLocalized; private final TrackStatistics trackStatistics; private int countTracks = 1; - public AggregatedStatistic(String activityType, TrackStatistics trackStatistics) { - this.activityType = activityType; + public AggregatedStatistic(String activityTypeLocalized, TrackStatistics trackStatistics) { + this.activityTypeLocalized = activityTypeLocalized; this.trackStatistics = trackStatistics; } - public String getActivityType() { - return activityType; + public String getActivityTypeLocalized() { + return activityTypeLocalized; } public TrackStatistics getTrackStatistics() { 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 4b74798ee..63ee7b3eb 100644 --- a/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java +++ b/src/main/java/de/dennisguse/opentracks/ui/aggregatedStatistics/AggregatedStatisticsAdapter.java @@ -64,7 +64,7 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { } Resources resources = context.getResources(); - String localizedActivityType = aggregatedStatistic.getActivityType(); + String localizedActivityType = aggregatedStatistic.getActivityTypeLocalized(); if (ActivityType.findByLocalizedString(resources, localizedActivityType) .isShowSpeedPreferred()) { viewHolder.setSpeed(aggregatedStatistic); @@ -84,7 +84,7 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { public List getCategories() { List categories = new ArrayList<>(); for (int i = 0; i < aggregatedStatistics.getCount(); i++) { - categories.add(aggregatedStatistics.getItem(i).getActivityType()); + categories.add(aggregatedStatistics.getItem(i).getActivityTypeLocalized()); } return categories; } @@ -163,7 +163,7 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { //TODO Check preference handling. private void setCommonValues(AggregatedStatistics.AggregatedStatistic aggregatedStatistic) { - String activityType = aggregatedStatistic.getActivityType(); + String activityType = aggregatedStatistic.getActivityTypeLocalized(); reportSpeed = PreferencesUtils.isReportSpeed(activityType); unitSystem = PreferencesUtils.getUnitSystem(); @@ -182,7 +182,7 @@ public class AggregatedStatisticsAdapter extends BaseAdapter { } private int getIcon(AggregatedStatistics.AggregatedStatistic aggregatedStatistic) { - String localizedActivityType = aggregatedStatistic.getActivityType(); + String localizedActivityType = aggregatedStatistic.getActivityTypeLocalized(); String iconValue = ActivityType.findByLocalizedString(context, localizedActivityType) .getIconId(); return ActivityType.findBy(iconValue) 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 40d102998..96f6aea58 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.getActivityTypeLocalized()); + isReportSpeed = PreferencesUtils.isReportSpeed(track); } viewModel = new ViewModelProvider(getActivity()).get(IntervalStatisticsModel.class);