Fix OpenTracks icon mapping

This commit is contained in:
José Rebelo
2025-11-20 19:53:11 +00:00
parent 8138ae55c9
commit 976987e6aa
2 changed files with 147 additions and 22 deletions
@@ -0,0 +1,137 @@
package nodomain.freeyourgadget.gadgetbridge.externalevents.opentracks;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
/**
* As per <a href="https://codeberg.org/OpenTracksApp/OpenTracks/src/branch/main/src/main/java/de/dennisguse/opentracks/data/models/ActivityType.java">ActivityType.java</a>
*/
public enum OpenTracksActivityType {
AIRPLANE("airplane"),
ATV("ATV"),
BIKING("biking"),
BLIMP("blimp"),
BOAT("boat"),
CLIMBING("climbing"),
COMMERCIAL_AIRPLANE("commercial airplane"),
CROSS_COUNTRY_SKIING("cross-country skiing"),
CYCLING("cycling"),
DIRT_BIKE("dirt bike"),
DONKEY_BACK_RIDING("donkey back riding"),
DRIVING("driving"),
DRIVING_BUS("driving bus"),
DRIVING_CAR("driving car"),
ESCOOTER("escooter"),
FERRY("ferry"),
FRISBEE("frisbee"),
GLIDING("gliding"),
HANG_GLIDING("hang gliding"),
HELICOPTER("helicopter"),
HIKING("hiking"),
HORSE_BACK_RIDING("horse back riding"),
HOT_AIR_BALLOON("hot air balloon"),
ICE_SAILING("ice sailing"),
INLINE_SKATING("inline skating"),
KAYAKING("kayaking"),
KITE_SURFING("kite surfing"),
LAND_SAILING("land sailing"),
MIXED_TYPE("mixed type"),
MOTOR_BIKE("motor bike"),
MOTOR_BOATING("motor boating"),
MOUNTAIN_BIKING("mountain biking"),
OFF_TRAIL_HIKING("off trail hiking"),
OTHER("other"),
PADDLING("paddling"),
PARA_GLIDING("para gliding"),
RC_AIRPLANE("RC airplane"),
RC_BOAT("RC boat"),
RC_HELICOPTER("RC helicopter"),
RIDING("riding"),
ROAD_BIKING("road biking"),
ROLLER_SKIING("roller skiing"),
ROWING("rowing"),
RUNNING("running"),
SAILING("sailing"),
KICKSCOOTER("kickscooter"),
SEAPLANE("seaplane"),
SKATE_BOARDING("skateboarding"),
SKATING("skating"),
SKIING("skiing"),
SKY_JUMPING("sky jumping"),
SLED("sled"),
SNOW_BOARDING("snowboarding"),
SNOW_SHOEING("snow shoeing"),
SPEED_WALKING("speed walking"),
STREET_RUNNING("street running"),
SURFING("surfing"),
TRACK_CYCLING("track cycling"),
TRACK_RUNNING("track running"),
TRAIL_HIKING("trail hiking"),
TRAIL_RUNNING("trail running"),
TRAIN("train"),
ULTIMATE_FRISBEE("ultimate frisbee"),
WAKEBOARDING("wakeboarding"),
WALKING("walking"),
WATER_SKIING("water skiing"),
WIND_SURFING("wind surfing"),
SWIMMING("swimming"),
SWIMMING_OPEN("swimming in open water"),
WORKOUT("workout"),
UNKNOWN("unknown"),
;
private final String id;
OpenTracksActivityType(String id) {
this.id = id;
}
public String getId() {
return id;
}
public static OpenTracksActivityType fromActivityKind(final ActivityKind activityKind) {
return switch (activityKind) {
case ATV -> ATV;
case CYCLING, INDOOR_CYCLING, OUTDOOR_CYCLING, HANDCYCLING -> BIKING;
case BOATING, DRAGON_BOAT, POWERBOATING -> BOAT;
case CLIMBING -> CLIMBING;
case CROSS_COUNTRY_SKIING -> CROSS_COUNTRY_SKIING;
case DRIVING -> DRIVING;
case FRISBEE -> FRISBEE;
case HANG_GLIDING -> HANG_GLIDING;
case HIKING -> HIKING;
case HORSE_RIDING -> HORSE_BACK_RIDING;
case ICE_SKATING -> ICE_SAILING;
case INLINE_SKATING -> INLINE_SKATING;
case KAYAKING -> KAYAKING;
case KITESURFING -> KITE_SURFING;
case MOTORCYCLING -> MOTOR_BIKE;
case MOUNTAIN_BIKE -> MOUNTAIN_BIKING;
case PADDLING -> PADDLING;
case PARAGLIDING -> PARA_GLIDING;
case ROAD_BIKE -> ROAD_BIKING;
case ROWING -> ROWING;
case RUNNING -> RUNNING;
case SAILING -> SAILING;
case SKATEBOARDING -> SKATE_BOARDING;
case SKATING -> SKATING;
case SKIING -> SKIING;
case SKY_DIVING -> SKY_JUMPING;
case SLEDDING -> SLED;
case SNOWBOARDING -> SNOW_BOARDING;
case SNOWSHOE -> SNOW_SHOEING;
case SURFING -> SURFING;
case TRACK_RUN -> TRACK_RUNNING;
case TRAIL_RUN -> TRAIL_RUNNING;
case TRAINING -> TRAIN;
case ULTIMATE_DISC -> ULTIMATE_FRISBEE;
case WAKEBOARDING -> WAKEBOARDING;
case WALKING -> WALKING;
case WATER_SKIING -> WATER_SKIING;
case WINDSURFING -> WIND_SURFING;
case SWIMMING -> SWIMMING;
case SWIMMING_OPENWATER -> SWIMMING_OPEN;
default -> UNKNOWN;
};
}
}
@@ -54,7 +54,7 @@ public class OpenTracksController extends Activity {
* their documentation here: https://github.com/OpenTracksApp/OpenTracks#api
* `startRecording()` sends an explicit Intent to OpenTracks signalling it
* to start recording. It passes along the package name and class name of
* our `OpenTracksController` which OpenTracks will use to send the
* our `OpenTracksController` which OpenTracks will use to send the
* statistics URIs to. After starting the recording service, OpenTracks
* uses a new explicit Intent to start our `OpenTracksController` and passes
* along the URIs and the read permissions for those URIs (using
@@ -86,8 +86,8 @@ public class OpenTracksController extends Activity {
}
Uri tracksUri = uris.get(0);
Uri trackpointsUri = uris.get(1);
LOG.info("Registering OpenTracksContentObserver with tracks URI: " + tracksUri);
LOG.info("Registering OpenTracksContentObserver with trackpoints URI: " + trackpointsUri);
LOG.info("Registering OpenTracksContentObserver with tracks URI: {}", tracksUri);
LOG.info("Registering OpenTracksContentObserver with trackpoints URI: {}", trackpointsUri);
gbApp.setOpenTracksObserver(new OpenTracksContentObserver(this, tracksUri, trackpointsUri, protocolVersion));
try {
getContentResolver().registerContentObserver(tracksUri, false, gbApp.getOpenTracksObserver());
@@ -99,7 +99,7 @@ public class OpenTracksController extends Activity {
moveTaskToBack(true);
}
public static void sendIntent(Context context, String className, String category, String icon) {
public static void sendIntent(Context context, String className, String category, OpenTracksActivityType openTracksActivityType) {
Prefs prefs = GBApplication.getPrefs();
String packageName = prefs.getString("opentracks_packagename", "de.dennisguse.opentracks");
Intent intent = new Intent();
@@ -110,8 +110,8 @@ public class OpenTracksController extends Activity {
if (category != null) {
intent.putExtra("TRACK_CATEGORY", category);
}
if (icon != null) {
intent.putExtra("TRACK_ICON", icon);
if (openTracksActivityType != null) {
intent.putExtra("TRACK_ICON", openTracksActivityType.getId());
}
try {
context.startActivity(intent);
@@ -126,24 +126,12 @@ public class OpenTracksController extends Activity {
public static void startRecording(Context context, ActivityKind activityKind) {
final String category = activityKind.getLabel(context);
final String icon;
switch (activityKind) {
case CYCLING:
icon = "BIKE";
break;
case HIKING:
case WALKING:
icon = "WALK";
break;
case RUNNING:
icon = "RUN";
break;
default:
LOG.warn("Unmapped activity kind icon for {}", activityKind);
icon = null;
final OpenTracksActivityType openTracksActivityType = OpenTracksActivityType.fromActivityKind(activityKind);
if (openTracksActivityType == OpenTracksActivityType.UNKNOWN) {
LOG.warn("Unmapped activity kind icon for {}", activityKind);
}
sendIntent(context, "de.dennisguse.opentracks.publicapi.StartRecording", category, icon);
sendIntent(context, "de.dennisguse.opentracks.publicapi.StartRecording", category, openTracksActivityType);
}
public static void stopRecording(Context context) {