From d2bd615b1eccab20efa19b61ca72fa229055f02f Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Mon, 26 Jun 2023 23:56:41 +0200 Subject: [PATCH] Cleanup: split ActivityType and ActivityIcon. Part of #1608. --- .../io/file/importer/ExportImportTest.java | 2 +- .../file/importer/GPXTrackImporterTest.java | 4 +- .../opentracks/TrackEditActivity.java | 2 +- .../opentracks/TrackRecordingActivity.java | 2 +- .../opentracks/TrackStoppedActivity.java | 2 +- .../opentracks/data/models/ActivityIcon.java | 35 ++++ .../opentracks/data/models/ActivityType.java | 156 ++++++++++++------ .../settings/ActivityTypePreference.java | 2 +- 8 files changed, 143 insertions(+), 62 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 static void preSetUp() { 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 void gpx_with_pause_resume() throws IOException { 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 void gpx_without_speed() throws IOException { 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/main/java/de/dennisguse/opentracks/TrackEditActivity.java b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java index 32fce8b3a..da97f7acb 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackEditActivity.java @@ -146,6 +146,6 @@ private void setActivityTypeIcon(ActivityType activityType) { @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 TrackDataHub getTrackDataHub() { @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..1a80b9643 100644 --- a/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java +++ b/src/main/java/de/dennisguse/opentracks/TrackStoppedActivity.java @@ -132,7 +132,7 @@ private void setActivityTypeIcon(ActivityType activityType) { @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/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..16c94f35c 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 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 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; - final boolean showSpeedPreferred; - final int[] localizedStringIds; - //isSpeed? + 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.drawable.ic_activity_climbing_24dp, 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.SNOW_BOARDING, 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.UNKNOWN, 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 localizedStringId; - 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 getIconId() { - return iconId; + public String getId() { + return id; } - public int getIconDrawableId() { - return iconDrawableId; + @Deprecated + public String getIconId() { + return icon.iconId; } - public boolean isShowSpeedPreferred() { - return showSpeedPreferred; + public int getIconDrawableId() { + return icon.iconDrawableId; } - public int[] getLocalizedStringIds() { - return localizedStringIds; + public int getLocalizedStringId() { + return localizedStringId; } - public int getFirstLocalizedStringId() { - return localizedStringIds[0]; + public boolean isShowSpeedPreferred() { + return showSpeedPreferred; } 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 static ActivityType findByLocalizedString(Context context, String localiz 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/settings/ActivityTypePreference.java b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java index b80fca918..241f05120 100644 --- a/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java +++ b/src/main/java/de/dennisguse/opentracks/settings/ActivityTypePreference.java @@ -118,7 +118,7 @@ public void onDialogClosed(boolean positiveResult) { public void updateUI(ActivityType activityType) { updateIcon(activityType); - textView.setText(getActivity().getString(activityType.getFirstLocalizedStringId())); + textView.setText(getActivity().getString(activityType.getLocalizedStringId())); textView.clearFocus(); }