diff --git a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java index 5e24f1027f..bc68758509 100644 --- a/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java +++ b/src/main/java/de/dennisguse/opentracks/data/ContentProviderUtils.java @@ -101,6 +101,7 @@ public static Track createTrack(Cursor cursor) { 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); @@ -113,7 +114,6 @@ public static Track createTrack(Cursor cursor) { int maxAltitudeIndex = cursor.getColumnIndexOrThrow(TracksColumns.MAX_ALTITUDE); int altitudeGainIndex = cursor.getColumnIndexOrThrow(TracksColumns.ALTITUDE_GAIN); int altitudeLossIndex = cursor.getColumnIndexOrThrow(TracksColumns.ALTITUDE_LOSS); - int iconIndex = cursor.getColumnIndexOrThrow(TracksColumns.ICON); Track track = new Track(ZoneOffset.ofTotalSeconds(cursor.getInt(startTimeOffsetIndex))); TrackStatistics trackStatistics = track.getTrackStatistics(); @@ -129,6 +129,9 @@ public static Track createTrack(Cursor cursor) { if (!cursor.isNull(descriptionIndex)) { track.setDescription(cursor.getString(descriptionIndex)); } + if (!cursor.isNull(activityTypeIndex)) { + track.setActivityType(ActivityType.findBy(cursor.getString(activityTypeIndex))); + } if (!cursor.isNull(activityTypeLocalizedIndex)) { track.setActivityTypeLocalized(cursor.getString(activityTypeLocalizedIndex)); } @@ -163,9 +166,7 @@ public static Track createTrack(Cursor cursor) { if (!cursor.isNull(altitudeLossIndex)) { trackStatistics.setTotalAltitudeLoss(cursor.getFloat(altitudeLossIndex)); } - if (!cursor.isNull(iconIndex)) { - track.setActivityType(ActivityType.findBy(cursor.getString(iconIndex))); - } + return track; } @@ -230,13 +231,18 @@ public List getTracks(ContentProviderSelectionInterface selection) { public Cursor searchTracks(String searchQuery) { // Needed, because MARKER_COUNT is a virtual column and has to be explicitly requested. - final String[] PROJECTION = new String[]{TracksColumns._ID, TracksColumns.UUID, TracksColumns.NAME, - TracksColumns.DESCRIPTION, TracksColumns.ACTIVITY_TYPE_LOCALIZED, TracksColumns.STARTTIME, - TracksColumns.STARTTIME_OFFSET, TracksColumns.STOPTIME, TracksColumns.MARKER_COUNT, - TracksColumns.TOTALDISTANCE, TracksColumns.TOTALTIME, TracksColumns.MOVINGTIME, - TracksColumns.AVGSPEED, TracksColumns.AVGMOVINGSPEED, TracksColumns.MAXSPEED, - TracksColumns.MIN_ALTITUDE, TracksColumns.MAX_ALTITUDE, TracksColumns.ALTITUDE_GAIN, - TracksColumns.ALTITUDE_LOSS, TracksColumns.ICON + // Used only be TrackListAdapter + final String[] PROJECTION = new String[]{ + TracksColumns._ID, + TracksColumns.NAME, + TracksColumns.DESCRIPTION, //TODO Needed? + TracksColumns.ACTIVITY_TYPE, + TracksColumns.ACTIVITY_TYPE_LOCALIZED, + TracksColumns.STARTTIME, + TracksColumns.STARTTIME_OFFSET, + TracksColumns.TOTALDISTANCE, + TracksColumns.TOTALTIME, + TracksColumns.MARKER_COUNT, }; String selection = null; @@ -316,6 +322,7 @@ private ContentValues createContentValues(Track track) { 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() != null ? track.getActivityType().getId() : null); values.put(TracksColumns.ACTIVITY_TYPE_LOCALIZED, track.getActivityTypeLocalized()); values.put(TracksColumns.STARTTIME_OFFSET, track.getZoneOffset().getTotalSeconds()); if (trackStatistics.getStartTime() != null) { @@ -334,7 +341,6 @@ private ContentValues createContentValues(Track track) { 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.getActivityType() != null ? track.getActivityType().getIconId() : ""); return values; } diff --git a/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java b/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java index 5674b16662..a31d2fa643 100644 --- a/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java +++ b/src/main/java/de/dennisguse/opentracks/data/CustomSQLiteOpenHelper.java @@ -12,9 +12,11 @@ import java.time.Instant; import java.time.ZoneOffset; import java.time.zone.ZoneRules; +import java.util.Map; import java.util.UUID; import de.dennisguse.opentracks.Startup; +import de.dennisguse.opentracks.data.models.ActivityType; import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.tables.MarkerColumns; import de.dennisguse.opentracks.data.tables.TrackPointsColumns; @@ -28,7 +30,9 @@ public class CustomSQLiteOpenHelper extends SQLiteOpenHelper { private static final String TAG = CustomSQLiteOpenHelper.class.getSimpleName(); - private static final int DATABASE_VERSION = 36; + private static final int DATABASE_VERSION = 37; + + private final Context context; public CustomSQLiteOpenHelper(Context context) { this(context, ((Startup) context.getApplicationContext()).getDatabaseName()); @@ -37,11 +41,13 @@ public CustomSQLiteOpenHelper(Context context) { @VisibleForTesting public CustomSQLiteOpenHelper(Context context, String databaseName) { super(context, databaseName, null, DATABASE_VERSION); + this.context = context; } @VisibleForTesting public CustomSQLiteOpenHelper(Context context, String databaseName, int databaseVersion) { super(context, databaseName, null, databaseVersion); + this.context = context; } @Override @@ -75,6 +81,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { case 34 -> upgradeFrom33to34(db); case 35 -> upgradeFrom34to35(db); case 36 -> upgradeFrom35to36(db); + case 37 -> upgradeFrom36to37(db); default -> throw new RuntimeException("Not implemented: upgrade to " + toVersion); } } @@ -98,6 +105,7 @@ public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { case 33 -> downgradeFrom34to33(db); case 34 -> downgradeFrom35to34(db); case 35 -> downgradeFrom36to35(db); + case 36 -> downgradeFrom37to36(db); default -> throw new RuntimeException("Not implemented: downgrade to " + toVersion); } } @@ -170,7 +178,7 @@ private void upgradeFrom25to26(SQLiteDatabase db) { db.beginTransaction(); db.execSQL("ALTER TABLE tracks ADD COLUMN uuid BLOB"); - try (Cursor cursor = db.query("tracks", new String[]{"_id" }, null, null, null, null, null)) { + try (Cursor cursor = db.query("tracks", new String[]{"_id"}, null, null, null, null, null)) { if (cursor.moveToFirst()) { int trackIdIndex = cursor.getColumnIndexOrThrow("_id"); do { @@ -445,7 +453,7 @@ private void upgradeFrom32to33(SQLiteDatabase db) { ZoneRules zoneRules = ZoneOffset.systemDefault().getRules(); - try (Cursor cursor = db.query("tracks", new String[]{"_id", "starttime" }, null, null, null, null, null)) { + try (Cursor cursor = db.query("tracks", new String[]{"_id", "starttime"}, null, null, null, null, null)) { if (cursor.moveToFirst()) { int trackIdIndex = cursor.getColumnIndexOrThrow("_id"); int startTimeIndex = cursor.getColumnIndexOrThrow("starttime"); @@ -564,4 +572,77 @@ private void downgradeFrom36to35(SQLiteDatabase db) { db.setTransactionSuccessful(); db.endTransaction(); } + + private void upgradeFrom36to37(SQLiteDatabase db) { + Map activityIcon2ActivityTypeId = Map.ofEntries( + Map.entry("AIRPLANE", "airplane"), + Map.entry("BIKE", "biking"), + Map.entry("MOUNTAIN_BIKE", "mountain biking"), + Map.entry("MOTOR_BIKE", "motor bike"), + Map.entry("KAYAK", "kayaking"), + Map.entry("BOAT", "boat"), + Map.entry("SAILING", "sailing"), + Map.entry("DRIVE", "driving"), + Map.entry("RUN", "running"), + Map.entry("SKI", "skiing"), + Map.entry("SNOW_BOARDING", "snowboarding"), + Map.entry("WALK", "walking"), + Map.entry("ESCOOTER", "escooter"), + Map.entry("KICKSCOOTER", "kickscooter"), + Map.entry("INLINES_SKATING", "inline skating"), + Map.entry("SKATE_BOARDING", "skateboarding"), + Map.entry("CLIMBING", "climbing"), + Map.entry("SWIMMING", "swimming"), + Map.entry("SWIMMING_OPEN", "swimming in open water"), + Map.entry("WORKOUT", "workout"), + Map.entry("UNKNOWN", "unknown") + ); + + db.beginTransaction(); + + db.execSQL("ALTER TABLE tracks ADD COLUMN activity_type TEXT"); + + try (Cursor cursor = db.query("tracks", new String[]{"_id", "icon", "category"}, null, null, null, null, null)) { + if (cursor.moveToFirst()) { + int trackIdIndex = cursor.getColumnIndexOrThrow("_id"); + int iconIndex = cursor.getColumnIndexOrThrow("icon"); + int activityTypeLocalizedIndex = cursor.getColumnIndexOrThrow("category"); + do { + Track.Id trackId = new Track.Id(cursor.getLong(trackIdIndex)); + String iconId = cursor.getString(iconIndex); + String activityTypeLocalized = cursor.getString(activityTypeLocalizedIndex); + + ActivityType activityType = ActivityType.findByLocalizedString(context, activityTypeLocalized); + if (activityType.equals(ActivityType.UNKNOWN)) { + String activityTypeId = activityIcon2ActivityTypeId.get(iconId); + activityType = ActivityType.findBy(activityTypeId); + } + + ContentValues cv = new ContentValues(); + cv.put("activity_type", activityType.getId()); + db.update("tracks", cv, "_id = ?", new String[]{String.valueOf(trackId.id())}); + } while (cursor.moveToNext()); + } + } + + db.setTransactionSuccessful(); + db.endTransaction(); + } + + private void downgradeFrom37to36(SQLiteDatabase db) { + db.beginTransaction(); + + db.execSQL("DROP INDEX tracks_uuid_index"); + + db.execSQL("ALTER TABLE tracks RENAME TO tracks_old"); + db.execSQL("CREATE TABLE tracks (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, description TEXT, category TEXT, starttime INTEGER, stoptime INTEGER, numpoints INTEGER, totaldistance FLOAT, totaltime INTEGER, movingtime INTEGER, avgspeed FLOAT, avgmovingspeed FLOAT, maxspeed FLOAT, minelevation FLOAT, maxelevation FLOAT, elevationgain FLOAT, icon TEXT, uuid BLOB, elevationloss FLOAT, starttime_offset INTEGER)"); + db.execSQL("INSERT INTO tracks SELECT _id, name, description, category, starttime, stoptime, numpoints, totaldistance, totaltime, movingtime, avgspeed, avgmovingspeed, maxspeed, minelevation, maxelevation, elevationgain, icon, uuid, elevationloss, starttime_offset FROM tracks_old"); + db.execSQL("DROP TABLE tracks_old"); + + db.execSQL("CREATE UNIQUE INDEX tracks_uuid_index ON tracks(uuid)"); + + db.setTransactionSuccessful(); + db.endTransaction(); + } + } diff --git a/src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java b/src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java index 02011ec1d7..5f659a3711 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/ActivityIcon.java @@ -2,35 +2,8 @@ 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), - KICKSCOOTER("KICKSCOOTER", R.drawable.ic_activity_scooter_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); +public class ActivityIcon { - @Deprecated //TODO should be removed. - final String iconId; - final int iconDrawableId; + static final int ICON_UNKNOWN = R.drawable.ic_logo_24dp; - 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 2c8bf6e357..5a5468c559 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java @@ -12,88 +12,88 @@ public enum ActivityType { - 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), - KICKSCOOTER("kickscooter", R.string.activity_type_kickscooter, ActivityIcon.KICKSCOOTER, 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); + AIRPLANE("airplane", R.string.activity_type_airplane, R.drawable.ic_activity_flight_24dp, true), + ATV("ATV", R.string.activity_type_atv, R.drawable.ic_activity_drive_24dp, true), + BIKING("biking", R.string.activity_type_biking, R.drawable.ic_activity_bike_24dp, true), + BLIMP("blimp", R.string.activity_type_blimp, ActivityIcon.ICON_UNKNOWN, true), + BOAT("boat", R.string.activity_type_boat, R.drawable.ic_activity_boat_24dp, true), + CLIMBING("climbing", R.string.activity_type_climbing, R.drawable.ic_activity_climbing_24dp, false), + COMMERCIAL_AIRPLANE("commercial airplane", R.string.activity_type_commercial_airplane, R.drawable.ic_activity_flight_24dp, true), + CROSS_COUNTRY_SKIING("cross-country skiing", R.string.activity_type_cross_country_skiing, R.drawable.ic_activity_skiing_24dp, true), + CYCLING("cycling", R.string.activity_type_cycling, R.drawable.ic_activity_bike_24dp, true), + DIRT_BIKE("dirt bike", R.string.activity_type_dirt_bike, R.drawable.ic_activity_mtb_24dp, true), + DONKEY_BACK_RIDING("donkey back riding", R.string.activity_type_donkey_back_riding, ActivityIcon.ICON_UNKNOWN, true), + DRIVING("driving", R.string.activity_type_driving, R.drawable.ic_activity_drive_24dp, true), + DRIVING_BUS("driving bus", R.string.activity_type_driving_bus, R.drawable.ic_activity_drive_24dp, true), + DRIVING_CAR("driving car", R.string.activity_type_driving_car, R.drawable.ic_activity_drive_24dp, true), + ESCOOTER("escooter", R.string.activity_type_escooter, R.drawable.ic_activity_escooter_24dp, true), + FERRY("ferry", R.string.activity_type_ferry, R.drawable.ic_activity_boat_24dp, true), + FRISBEE("frisbee", R.string.activity_type_frisbee, ActivityIcon.ICON_UNKNOWN, true), + GLIDING("gliding", R.string.activity_type_gliding, ActivityIcon.ICON_UNKNOWN, true), + HANG_GLIDING("hang gliding", R.string.activity_type_hang_gliding, ActivityIcon.ICON_UNKNOWN, true), + HELICOPTER("helicopter", R.string.activity_type_helicopter, ActivityIcon.ICON_UNKNOWN, true), + HIKING("hiking", R.string.activity_type_hiking, R.drawable.ic_activity_walk_24dp, false), + HORSE_BACK_RIDING("horse back riding", R.string.activity_type_horse_back_riding, ActivityIcon.ICON_UNKNOWN, true), + HOT_AIR_BALLOON("hot air balloon", R.string.activity_type_hot_air_balloon, ActivityIcon.ICON_UNKNOWN, true), + ICE_SAILING("ice sailing", R.string.activity_type_ice_sailing, ActivityIcon.ICON_UNKNOWN, true), + INLINE_SKATING("inline skating", R.string.activity_type_inline_skating, R.drawable.ic_activity_inline_skating_24dp, true), + KAYAKING("kayaking", R.string.activity_type_kayaking, R.drawable.ic_activity_mtb_24dp, true), + KITE_SURFING("kite surfing", R.string.activity_type_kite_surfing, ActivityIcon.ICON_UNKNOWN, true), + LAND_SAILING("land sailing", R.string.activity_type_land_sailing, ActivityIcon.ICON_UNKNOWN, true), + MIXED_TYPE("mixed type", R.string.activity_type_mixed_type, ActivityIcon.ICON_UNKNOWN, true), + MOTOR_BIKE("motor bike", R.string.activity_type_motor_bike, R.drawable.ic_activity_mtb_24dp, true), + MOTOR_BOATING("motor boating", R.string.activity_type_motor_boating, R.drawable.ic_activity_boat_24dp, true), + MOUNTAIN_BIKING("mountain biking", R.string.activity_type_mountain_biking, R.drawable.ic_activity_mtb_24dp, true), + OFF_TRAIL_HIKING("off trail hiking", R.string.activity_type_hiking, R.drawable.ic_activity_walk_24dp, false), + OTHER("other", R.string.activity_type_other, ActivityIcon.ICON_UNKNOWN, true), + PADDLING("paddling", R.string.activity_type_paddling, ActivityIcon.ICON_UNKNOWN, true), + PARA_GLIDING("para gliding", R.string.activity_type_para_gliding, ActivityIcon.ICON_UNKNOWN, true), + RC_AIRPLANE("RC airplane", R.string.activity_type_rc_airplane, R.drawable.ic_activity_flight_24dp, true), + RC_BOAT("RC boat", R.string.activity_type_rc_boat, R.drawable.ic_activity_boat_24dp, true), + RC_HELICOPTER("RC helicopter", R.string.activity_type_rc_helicopter, ActivityIcon.ICON_UNKNOWN, true), + RIDING("riding", R.string.activity_type_horse_back_riding, ActivityIcon.ICON_UNKNOWN, true), + ROAD_BIKING("road biking", R.string.activity_type_road_biking, R.drawable.ic_activity_bike_24dp, true), + ROLLER_SKIING("roller skiing", R.string.activity_type_roller_skiing, ActivityIcon.ICON_UNKNOWN, true), + ROWING("rowing", R.string.activity_type_rowing, ActivityIcon.ICON_UNKNOWN, true), + RUNNING("running", R.string.activity_type_running, R.drawable.ic_activity_run_24dp, false), + SAILING("sailing", R.string.activity_type_sailing, R.drawable.ic_activity_sailing_24dp, true), + KICKSCOOTER("kickscooter", R.string.activity_type_kickscooter, R.drawable.ic_activity_scooter_24dp, true), + SEAPLANE("seaplane", R.string.activity_type_seaplane, R.drawable.ic_activity_flight_24dp, true), + SKATE_BOARDING("skateboarding", R.string.activity_type_skate_boarding, R.drawable.ic_activity_skateboarding_24dp, true), + SKATING("skating", R.string.activity_type_skating, ActivityIcon.ICON_UNKNOWN, true), + SKIING("skiing", R.string.activity_type_skiing, R.drawable.ic_activity_skiing_24dp, true), + SKY_JUMPING("sky jumping", R.string.activity_type_sky_jumping, ActivityIcon.ICON_UNKNOWN, true), + SLED("sled", R.string.activity_type_sled, ActivityIcon.ICON_UNKNOWN, true), + SNOW_BOARDING("snowboarding", R.string.activity_type_snow_boarding, R.drawable.ic_activity_snowboarding_24dp, true), + SNOW_SHOEING("snow shoeing", R.string.activity_type_snow_shoeing, ActivityIcon.ICON_UNKNOWN, true), + SPEED_WALKING("speed walking", R.string.activity_type_speed_walking, R.drawable.ic_activity_walk_24dp, false), + STREET_RUNNING("street running", R.string.activity_type_street_running, R.drawable.ic_activity_run_24dp, false), + SURFING("surfing", R.string.activity_type_surfing, ActivityIcon.ICON_UNKNOWN, true), + TRACK_CYCLING("track cycling", R.string.activity_type_track_cycling, R.drawable.ic_activity_bike_24dp, true), + TRACK_RUNNING("track running", R.string.activity_type_trail_running, R.drawable.ic_activity_run_24dp, false), + TRAIL_HIKING("trail hiking", R.string.activity_type_trail_hiking, R.drawable.ic_activity_walk_24dp, false), + TRAIL_RUNNING("trail running", R.string.activity_type_trail_running, R.drawable.ic_activity_run_24dp, false), + TRAIN("train", R.string.activity_type_train, ActivityIcon.ICON_UNKNOWN, true), + ULTIMATE_FRISBEE("ultimate frisbee", R.string.activity_type_ultimate_frisbee, ActivityIcon.ICON_UNKNOWN, true), + WAKEBOARDING("wakeboarding", R.string.activity_type_wakeboarding, ActivityIcon.ICON_UNKNOWN, true), + WALKING("walking", R.string.activity_type_walking, R.drawable.ic_activity_walk_24dp, false), + WATER_SKIING("water skiing", R.string.activity_type_water_skiing, ActivityIcon.ICON_UNKNOWN, true), + WIND_SURFING("wind surfing", R.string.activity_type_wind_surfing, ActivityIcon.ICON_UNKNOWN, true), + SWIMMING("swimming", R.string.activity_type_swimming, R.drawable.ic_activity_swimming_24dp, false), + SWIMMING_OPEN("swimming in open water", R.string.activity_type_swimming_open, R.drawable.ic_activity_swimming_open_24dp, false), + WORKOUT("workout", R.string.activity_type_workout, R.drawable.ic_activity_workout_24dp, false), + UNKNOWN("unknown", R.string.activity_type_unknown, ActivityIcon.ICON_UNKNOWN, true); final String id; - final ActivityIcon icon; + final int iconDrawableId; final boolean showSpeedPreferred; final int localizedStringId; - ActivityType(String id, int localizedStringId, ActivityIcon icon, boolean showSpeedPreferred) { + ActivityType(String id, int localizedStringId, int iconDrawableId, boolean showSpeedPreferred) { this.id = id; this.localizedStringId = localizedStringId; - this.icon = icon; + this.iconDrawableId = iconDrawableId; this.showSpeedPreferred = showSpeedPreferred; } @@ -101,13 +101,8 @@ public String getId() { return id; } - @Deprecated - public String getIconId() { - return icon.iconId; - } - public int getIconDrawableId() { - return icon.iconDrawableId; + return iconDrawableId; } public int getLocalizedStringId() { @@ -126,12 +121,9 @@ public static List getLocalizedStrings(Context context) { } @NonNull - public static ActivityType findBy(String iconId) { - if (ActivityIcon.UNKNOWN.iconId.equals(iconId)) { - return ActivityType.UNKNOWN; - } + public static ActivityType findBy(String activityTypeId) { return Arrays.stream(ActivityType.values()).filter( - it -> it.icon.iconId.equals(iconId) + it -> it.id.equals(activityTypeId) ).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 c072d86c9a..7dcaa44c9e 100644 --- a/src/main/java/de/dennisguse/opentracks/data/models/Track.java +++ b/src/main/java/de/dennisguse/opentracks/data/models/Track.java @@ -101,8 +101,8 @@ public String getActivityTypeLocalized() { return activityTypeLocalized; } - public void setActivityTypeLocalized(String activityType) { - this.activityTypeLocalized = activityType; + public void setActivityTypeLocalized(String activityTypeLocalized) { + this.activityTypeLocalized = activityTypeLocalized; } public ActivityType getActivityType() { 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 10f0730ff3..41c6d2656f 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,11 @@ 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 + /** see {@link de.dennisguse.opentracks.data.models.ActivityType}.id */ + String ACTIVITY_TYPE = "activity_type"; String ACTIVITY_TYPE_LOCALIZED = "category"; // track activity type + @Deprecated + String ICON = "icon"; // track activity type icon String STARTTIME = "starttime"; // track start time String STARTTIME_OFFSET = "starttime_offset"; // in plus/minus in seconds String STOPTIME = "stoptime"; // track stop time @@ -57,7 +61,6 @@ 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 //TODO DEPRECATED String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " @@ -79,7 +82,8 @@ public interface TracksColumns extends BaseColumns { + ICON + " TEXT, " + UUID + " BLOB, " + ALTITUDE_LOSS + " FLOAT, " - + STARTTIME_OFFSET + " INTEGER)"; + + STARTTIME_OFFSET + " INTEGER, " + + ACTIVITY_TYPE + " TEXT)"; String CREATE_TABLE_INDEX = "CREATE UNIQUE INDEX " + TABLE_NAME + "_" + UUID + "_index ON " + TABLE_NAME + "(" + UUID + ")";