From d968e5d0c1e0c268eb12f4fb6cc323df51997e1f Mon Sep 17 00:00:00 2001 From: Dennis Guse Date: Wed, 22 Oct 2025 23:25:55 +0200 Subject: [PATCH] Notification opens recording UI. Features was removed as it broke occasionally and re-implemented after refactoring. Fixes #1156. --- .../services/TrackRecordingService.java | 3 +++ ...ckRecordingServiceNotificationManager.java | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 7ee7c7efa..47d94035c 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -195,6 +195,8 @@ public class TrackRecordingService extends Service implements TrackPointCreator. startSensors(); voiceAnnouncementManager.start(trackRecordingManager.getTrackStatistics()); + + notificationManager.onRecordingStarted(this, recordingStatus.trackId()); } public void tryStartSensors() { @@ -265,6 +267,7 @@ public class TrackRecordingService extends Service implements TrackPointCreator. } boolean stored = trackRecordingManager.onNewTrackPoint(trackPoint); + //TODO Should be done during updateRecordingDataWhileRecording() notificationManager.updateTrackPoint(this, trackRecordingManager.getTrackStatistics(), trackPoint, thresholdHorizontalAccuracy); return stored; } diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java index c397cb28c..05221e793 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java @@ -9,15 +9,18 @@ import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; +import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; import androidx.core.app.NotificationCompat; import androidx.core.app.TaskStackBuilder; import de.dennisguse.opentracks.R; import de.dennisguse.opentracks.TrackListActivity; +import de.dennisguse.opentracks.TrackRecordingActivity; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.DistanceFormatter; import de.dennisguse.opentracks.data.models.SpeedFormatter; +import de.dennisguse.opentracks.data.models.Track; import de.dennisguse.opentracks.data.models.TrackPoint; import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.UnitSystem; @@ -69,11 +72,10 @@ class TrackRecordingServiceNotificationManager implements SharedPreferences.OnSh Notification onSensorsStarted(Context context) { Intent intent = IntentUtils.newIntent(context, TrackListActivity.class); - int pendingIntentFlags = PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT; PendingIntent pendingIntent = TaskStackBuilder.create(context) .addParentStack(TrackListActivity.class) .addNextIntent(intent) - .getPendingIntent(0, pendingIntentFlags); + .getPendingIntent(0, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); updateGPSStatus(context.getString(R.string.gps_starting)); @@ -88,6 +90,19 @@ class TrackRecordingServiceNotificationManager implements SharedPreferences.OnSh updateNotification(); } + public void onRecordingStarted(Context context, @NonNull Track.Id trackId) { + Intent intent = IntentUtils.newIntent(context, TrackRecordingActivity.class) + .putExtra(TrackRecordingActivity.EXTRA_TRACK_ID, trackId); + + PendingIntent pendingIntent = TaskStackBuilder.create(context) + .addParentStack(TrackListActivity.class) + .addNextIntent(intent) + .getPendingIntent(0, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT); + + notificationBuilder.setContentIntent(pendingIntent); + updateNotification(); + } + void updateTrackPoint(Context context, TrackStatistics trackStatistics, TrackPoint trackPoint, Distance thresholdHorizontalAccuracy) { String formattedAccuracy = context.getString(R.string.value_none);