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);