From c241a3586149e6930c28992622b379fed21b85cb Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Fri, 27 Jan 2023 19:50:06 +0100 Subject: [PATCH] Refactor: introduced ActivityType. --- .../opentracks/data/models/ActivityType.java | 54 +++++ .../opentracks/util/TrackIconUtils.java | 218 +++++------------- 2 files changed, 114 insertions(+), 158 deletions(-) create mode 100644 src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java diff --git a/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java b/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java new file mode 100644 index 000000000..01875e507 --- /dev/null +++ b/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java @@ -0,0 +1,54 @@ +package de.dennisguse.opentracks.data.models; + +import de.dennisguse.opentracks.R; + +public enum ActivityType { + AIRPLANE("AIRPLANE", R.drawable.ic_activity_flight_24dp, 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, 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, R.string.activity_type_mountain_biking), + MOTOR_BIKE("MOTOR_BIKE", R.drawable.ic_activity_motorbike_24dp, R.string.activity_type_motor_bike), + KAYAK("KAYAK", R.drawable.ic_activity_kayaking_24dp, R.string.activity_type_kayaking), + BOAT("BOAT", R.drawable.ic_activity_boat_24dp, 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, R.string.activity_type_sailing), + DRIVE("DRIVE", R.drawable.ic_activity_drive_24dp, 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, 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, R.string.activity_type_cross_country_skiing, R.string.activity_type_skiing), + SNOW_BOARDING("SNOW_BOARDING", R.drawable.ic_activity_snowboarding_24dp, R.string.activity_type_snow_boarding), + UNKNOWN("UNKNOWN", R.drawable.ic_logo_24dp, R.string.activity_type_unknown), + WALK("WALK", R.drawable.ic_activity_walk_24dp, 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, R.string.activity_type_escooter), + INLINE_SKATING("INLINES_SKATING", R.drawable.ic_activity_inline_skating_24dp, R.string.activity_type_inline_skating), + SKATE_BOARDING("SKATE_BOARDING", R.drawable.ic_activity_skateboarding_24dp, R.string.activity_type_skate_boarding), + CLIMBING("CLIMBING", R.drawable.ic_activity_climbing_24dp, R.string.activity_type_climbing), + SWIMMING("SWIMMING", R.drawable.ic_activity_swimming_24dp, R.string.activity_type_swimming), + SWIMMING_OPEN("SWIMMING_OPEN", R.drawable.ic_activity_swimming_open_24dp, R.string.activity_type_swimming_open), + WORKOUT("WORKOUT", R.drawable.ic_activity_workout_24dp, R.string.activity_type_workout); + + final String id; + final int[] localizedStringIds; + final int iconId; + + //isSpeed? + + ActivityType(java.lang.String id, int iconId, int... localizedStringIds) { + this.id = id; + this.localizedStringIds = localizedStringIds; + this.iconId = iconId; + } + + public String getId() { + return id; + } + + public int getIconId() { + return iconId; + } + + public int[] getLocalizedStringIds() { + return localizedStringIds; + } + + public int getFirstLocalizedStringId() { + return localizedStringIds[0]; + } +} diff --git a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java index 413dcf00e..b38843061 100644 --- a/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java +++ b/src/main/java/de/dennisguse/opentracks/util/TrackIconUtils.java @@ -18,15 +18,16 @@ package de.dennisguse.opentracks.util; import android.content.Context; import android.content.res.Resources; -import android.util.Pair; import androidx.annotation.NonNull; -import java.util.ArrayList; -import java.util.LinkedHashMap; +import java.util.Arrays; import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; import de.dennisguse.opentracks.R; +import de.dennisguse.opentracks.data.models.ActivityType; /** * Utilities for track icon. @@ -35,49 +36,6 @@ import de.dennisguse.opentracks.R; */ public class TrackIconUtils { - private static final String AIRPLANE = "AIRPLANE"; - private static final String BIKE = "BIKE"; - private static final String MOUNTAIN_BIKE = "MOUNTAIN_BIKE"; - private static final String MOTOR_BIKE = "MOTOR_BIKE"; - private static final String KAYAK = "KAYAK"; - private static final String BOAT = "BOAT"; - private static final String SAILING = "SAILING"; - private static final String DRIVE = "DRIVE"; - private static final String RUN = "RUN"; - private static final String SKI = "SKI"; - private static final String SNOW_BOARDING = "SNOW_BOARDING"; - private static final String UNKNOWN = "UNKNOWN"; - private static final String WALK = "WALK"; - private static final String ESCOOTER = "ESCOOTER"; - private static final String INLINE_SKATING = "INLINES_SKATING"; - private static final String SKATE_BOARDING = "SKATE_BOARDING"; - private static final String CLIMBING = "CLIMBING"; - private static final String SWIMMING = "SWIMMING"; - private static final String SWIMMING_OPEN = "SWIMMING_OPEN"; - private static final String WORKOUT = "WORKOUT"; - - private static final int ACTIVITY_UNKNOWN_LOGO = R.drawable.ic_logo_24dp; - - private static final int[] AIRPLANE_LIST = new int[]{R.string.activity_type_airplane, R.string.activity_type_commercial_airplane, R.string.activity_type_rc_airplane}; - private static final int[] BIKE_LIST = new int[]{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}; - private static final int[] BOAT_LIST = new int[]{R.string.activity_type_boat, R.string.activity_type_ferry, R.string.activity_type_motor_boating, R.string.activity_type_rc_boat}; - private static final int[] CLIMBING_LIST = new int[]{R.string.activity_type_climbing}; - private static final int[] DRIVE_LIST = new int[]{R.string.activity_type_atv, R.string.activity_type_driving, R.string.activity_type_driving_bus, R.string.activity_type_driving_car}; - private static final int[] MOTOR_BIKE_LIST = new int[]{R.string.activity_type_motor_bike}; - private static final int[] MOUNTAIN_BIKE_LIST = new int[]{R.string.activity_type_mountain_biking}; - private static final int[] ESCOOTER_LIST = new int[]{R.string.activity_type_escooter}; - private static final int[] INLINE_SKATING_LIST = new int[]{R.string.activity_type_inline_skating}; - private static final int[] RUN_LIST = new int[]{R.string.activity_type_running, R.string.activity_type_street_running, R.string.activity_type_track_running, R.string.activity_type_trail_running}; - private static final int[] SAILING_LIST = new int[]{R.string.activity_type_sailing}; - private static final int[] SKI_LIST = new int[]{R.string.activity_type_cross_country_skiing, R.string.activity_type_skiing}; - private static final int[] SNOW_BOARDING_LIST = new int[]{R.string.activity_type_snow_boarding}; - private static final int[] SKATE_BOARDING_LIST = new int[]{R.string.activity_type_skate_boarding}; - private static final int[] KAYAKING_LIST = new int[]{R.string.activity_type_kayaking}; - private static final int[] WALK_LIST = new int[]{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}; - private static final int[] SWIM_LIST = new int[]{R.string.activity_type_swimming}; - private static final int[] SWIM_OPEN_LIST = new int[]{R.string.activity_type_swimming_open}; - private static final int[] WORKOUT_LIST = new int[]{R.string.activity_type_workout}; - // List of icons whose sports associated use speed (in km/h or mi/h). private static final int[] SPEED_ICON = { // Unknown. @@ -92,142 +50,86 @@ public class TrackIconUtils { R.string.activity_type_atv, R.string.activity_type_driving, R.string.activity_type_driving_bus, R.string.activity_type_driving_car, R.string.activity_type_escooter, R.string.activity_type_skate_boarding, // All wintersport categories R.string.activity_type_skiing, R.string.activity_type_snow_boarding - }; - //TODO Use Map.of() - private static final LinkedHashMap> MAP = new LinkedHashMap<>(); - - static { - //Reflects order in ChooseActivityTypeDialogFragmentActivity - MAP.put(UNKNOWN, new Pair<>(R.string.activity_type_unknown, ACTIVITY_UNKNOWN_LOGO)); - MAP.put(RUN, new Pair<>(R.string.activity_type_running, R.drawable.ic_activity_run_24dp)); - MAP.put(WALK, new Pair<>(R.string.activity_type_walking, R.drawable.ic_activity_walk_24dp)); - MAP.put(CLIMBING, new Pair<>(R.string.activity_type_climbing, R.drawable.ic_activity_climbing_24dp)); - MAP.put(SKATE_BOARDING, new Pair<>(R.string.activity_type_skate_boarding, R.drawable.ic_activity_skateboarding_24dp)); - MAP.put(INLINE_SKATING, new Pair<>(R.string.activity_type_inline_skating, R.drawable.ic_activity_inline_skating_24dp)); - MAP.put(SNOW_BOARDING, new Pair<>(R.string.activity_type_snow_boarding, R.drawable.ic_activity_snowboarding_24dp)); - MAP.put(SKI, new Pair<>(R.string.activity_type_skiing, R.drawable.ic_activity_skiing_24dp)); - MAP.put(ESCOOTER, new Pair<>(R.string.activity_type_escooter, R.drawable.ic_activity_escooter_24dp)); - MAP.put(BIKE, new Pair<>(R.string.activity_type_biking, R.drawable.ic_activity_bike_24dp)); - MAP.put(MOUNTAIN_BIKE, new Pair<>(R.string.activity_type_mountain_biking, R.drawable.ic_activity_mtb_24dp)); - MAP.put(MOTOR_BIKE, new Pair<>(R.string.activity_type_motor_bike, R.drawable.ic_activity_motorbike_24dp)); - MAP.put(DRIVE, new Pair<>(R.string.activity_type_driving, R.drawable.ic_activity_drive_24dp)); - MAP.put(AIRPLANE, new Pair<>(R.string.activity_type_airplane, R.drawable.ic_activity_flight_24dp)); - MAP.put(KAYAK, new Pair<>(R.string.activity_type_kayaking, R.drawable.ic_activity_kayaking_24dp)); - MAP.put(BOAT, new Pair<>(R.string.activity_type_boat, R.drawable.ic_activity_boat_24dp)); - MAP.put(SAILING, new Pair<>(R.string.activity_type_sailing, R.drawable.ic_activity_sailing_24dp)); - MAP.put(SWIMMING, new Pair<>(R.string.activity_type_swimming, R.drawable.ic_activity_swimming_24dp)); - MAP.put(SWIMMING_OPEN, new Pair<>(R.string.activity_type_swimming_open, R.drawable.ic_activity_swimming_open_24dp)); - MAP.put(WORKOUT, new Pair<>(R.string.activity_type_workout, R.drawable.ic_activity_workout_24dp)); - } + private static final List MAP = List.of( + //Reflects order in ChooseActivityTypeDialogFragmentActivity + ActivityType.UNKNOWN, + ActivityType.RUN, + ActivityType.WALK, + ActivityType.CLIMBING, + ActivityType.SKATE_BOARDING, + ActivityType.INLINE_SKATING, + ActivityType.SNOW_BOARDING, + ActivityType.SKI, + ActivityType.ESCOOTER, + ActivityType.BIKE, + ActivityType.MOUNTAIN_BIKE, + ActivityType.MOTOR_BIKE, + ActivityType.DRIVE, + ActivityType.AIRPLANE, + ActivityType.KAYAK, + ActivityType.BOAT, + ActivityType.SAILING, + ActivityType.SWIMMING, + ActivityType.SWIMMING_OPEN, + ActivityType.WORKOUT + ); private TrackIconUtils() { } - /** - * Gets the icon drawable. - * - * @param iconValue the icon value - */ - public static int getIconDrawable(String iconValue) { - if (iconValue == null || iconValue.equals("")) { - return ACTIVITY_UNKNOWN_LOGO; + public static int getIconDrawable(String activityTypeId) { + Optional found = Arrays.stream(ActivityType.values()).filter( + it -> it.getId().equals(activityTypeId) + ).findFirst(); + + if (found.isEmpty()) { + return ActivityType.UNKNOWN.getIconId(); } - Pair pair = MAP.get(iconValue); - return pair == null ? ACTIVITY_UNKNOWN_LOGO : pair.second; + + return found.get().getIconId(); } - /** - * Gets the icon activity type. - * - * @param iconValue the icon value - */ - public static int getIconActivityType(String iconValue) { - if (iconValue == null || iconValue.equals("")) { - return R.string.activity_type_unknown; + public static int getIconActivityType(String activityTypeId) { + Optional found = Arrays.stream(ActivityType.values()).filter( + it -> it.getId().equals(activityTypeId) + ).findFirst(); + + if (found.isEmpty()) { + return ActivityType.UNKNOWN.getFirstLocalizedStringId(); } - Pair pair = MAP.get(iconValue); - return pair == null ? R.string.activity_type_unknown : pair.first; + + return found.get().getFirstLocalizedStringId(); } /** * Gets all icon values. */ public static List getAllIconValues() { - return new ArrayList<>(MAP.keySet()); + return Arrays.stream(ActivityType.values()) + .map(ActivityType::getId) + .collect(Collectors.toList()); } /** * Gets the icon value. * - * @param context the context - * @param activityType the activity type + * @param context the context + * @param activityTypeId the activity type */ @NonNull - public static String getIconValue(Context context, String activityType) { - Resources resources = context.getResources(); - if (activityType == null || activityType.equals("")) { - return UNKNOWN; + 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(); } - if (inList(resources, activityType, AIRPLANE_LIST)) { - return AIRPLANE; - } - if (inList(resources, activityType, BIKE_LIST)) { - return BIKE; - } - if (inList(resources, activityType, MOUNTAIN_BIKE_LIST)) { - return MOUNTAIN_BIKE; - } - if (inList(resources, activityType, CLIMBING_LIST)) { - return CLIMBING; - } - if (inList(resources, activityType, MOTOR_BIKE_LIST)) { - return MOTOR_BIKE; - } - if (inList(resources, activityType, KAYAKING_LIST)) { - return KAYAK; - } - if (inList(resources, activityType, BOAT_LIST)) { - return BOAT; - } - if (inList(resources, activityType, SAILING_LIST)) { - return SAILING; - } - if (inList(resources, activityType, DRIVE_LIST)) { - return DRIVE; - } - if (inList(resources, activityType, INLINE_SKATING_LIST)) { - return INLINE_SKATING; - } - if (inList(resources, activityType, ESCOOTER_LIST)) { - return ESCOOTER; - } - if (inList(resources, activityType, RUN_LIST)) { - return RUN; - } - if (inList(resources, activityType, SKI_LIST)) { - return SKI; - } - if (inList(resources, activityType, SNOW_BOARDING_LIST)) { - return SNOW_BOARDING; - } - if (inList(resources, activityType, SKATE_BOARDING_LIST)) { - return SKATE_BOARDING; - } - if (inList(resources, activityType, WALK_LIST)) { - return WALK; - } - if (inList(resources, activityType, SWIM_LIST)) { - return SWIMMING; - } - if (inList(resources, activityType, SWIM_OPEN_LIST)) { - return SWIMMING_OPEN; - } - if (inList(resources, activityType, WORKOUT_LIST)) { - return WORKOUT; - } - return UNKNOWN; + return selected.get().getId(); } /**