diff --git a/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java b/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java
index 2516d7dd..69b10a60 100644
--- a/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java
+++ b/src/main/java/org/mtransit/android/commons/provider/GTFSRealTimeProvider.java
@@ -313,6 +313,20 @@ private static String getROUTE_ID_CLEANUP_REGEX(@NonNull Context context) {
return routeIdCleanupRegex;
}
+ @Nullable
+ private static String tripIdCleanupRegex = null;
+
+ /**
+ * Override if multiple {@link GTFSRealTimeProvider} implementations in same app.
+ */
+ @NonNull
+ private static String getTRIP_ID_CLEANUP_REGEX(@NonNull Context context) {
+ if (tripIdCleanupRegex == null) {
+ tripIdCleanupRegex = context.getResources().getString(R.string.gtfs_rts_trip_id_cleanup_regex);
+ }
+ return tripIdCleanupRegex;
+ }
+
@Nullable
private static String stopIdCleanupRegex = null;
@@ -1041,6 +1055,20 @@ private Pattern getRouteIdCleanupPattern(@NonNull Context context) {
return this.routeIdCleanupPattern;
}
+ @Nullable
+ private Pattern tripIdCleanupPattern = null;
+
+ private boolean tripIdCleanupPatternSet = false;
+
+ @Nullable
+ private Pattern getTripIdCleanupPattern(@NonNull Context context) {
+ if (this.tripIdCleanupPattern == null && !tripIdCleanupPatternSet) {
+ this.tripIdCleanupPattern = GTFSCommons.makeIdCleanupPattern(getTRIP_ID_CLEANUP_REGEX(context));
+ this.tripIdCleanupPatternSet = true;
+ }
+ return this.tripIdCleanupPattern;
+ }
+
@Nullable
private Pattern stopIdCleanupPattern = null;
@@ -1074,7 +1102,11 @@ private String parseTargetUUID(@NonNull Context context, String agencyTag, @NonN
} else if (gEntitySelector.hasAgencyId()) {
return getAgencyTargetUUID(agencyTag);
} else if (gEntitySelector.hasTrip()) {
- MTLog.w(this, "parseTargetUUID() > unsupported TRIP entity selector: %s (IGNORED)", GtfsRealtimeExt.toStringExt(gEntitySelector.getTrip()));
+ final String tripIdHash = GtfsRealtimeExt.getTripIdHash(gEntitySelector, getTripIdCleanupPattern(context));
+ MTLog.w(this, "parseTargetUUID() > unsupported TRIP entity selector: %s (%s) (IGNORED)",
+ GtfsRealtimeExt.toStringExt(gEntitySelector.getTrip()),
+ tripIdHash
+ );
return null;
}
MTLog.w(this, "parseTargetUUID() > unexpected entity selector: %s (IGNORED)", GtfsRealtimeExt.toStringExt(gEntitySelector));
diff --git a/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt b/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt
index 16a710d2..4383ce77 100644
--- a/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt
+++ b/src/main/java/org/mtransit/android/commons/provider/gtfs/GtfsRealtimeExt.kt
@@ -60,6 +60,14 @@ object GtfsRealtimeExt {
return this.routeId.originalIdToHash(idCleanupRegex)
}
+ @JvmStatic
+ fun GtfsRealtime.EntitySelector.getTripIdHash(idCleanupRegex: Pattern?): String {
+ if (!FeatureFlags.F_USE_GTFS_ID_HASH_INT) {
+ return this.trip.tripId
+ }
+ return this.trip.tripId.originalIdToHash(idCleanupRegex)
+ }
+
@JvmStatic
fun GtfsRealtime.EntitySelector.getStopIdHash(idCleanupRegex: Pattern?): String {
if (!FeatureFlags.F_USE_GTFS_ID_HASH_INT) {
diff --git a/src/main/res/values/gtfs_rts_values.xml b/src/main/res/values/gtfs_rts_values.xml
index 3890b40c..c0b0c1a4 100644
--- a/src/main/res/values/gtfs_rts_values.xml
+++ b/src/main/res/values/gtfs_rts_values.xml
@@ -17,6 +17,7 @@
+
-1
-1