diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java index 1e44b4003..200fec985 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingService.java @@ -16,7 +16,6 @@ package de.dennisguse.opentracks.services; -import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.content.SharedPreferences; @@ -29,7 +28,6 @@ import android.util.Pair; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; -import androidx.core.app.TaskStackBuilder; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -38,8 +36,6 @@ import java.time.ZoneOffset; import java.util.Objects; import de.dennisguse.opentracks.R; -import de.dennisguse.opentracks.TrackListActivity; -import de.dennisguse.opentracks.TrackRecordingActivity; import de.dennisguse.opentracks.data.CustomContentProvider; import de.dennisguse.opentracks.data.models.Distance; import de.dennisguse.opentracks.data.models.Marker; @@ -55,7 +51,6 @@ import de.dennisguse.opentracks.settings.PreferencesUtils; import de.dennisguse.opentracks.settings.SettingsActivity; import de.dennisguse.opentracks.stats.TrackStatistics; import de.dennisguse.opentracks.util.ExportUtils; -import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.SystemUtils; /** @@ -387,36 +382,10 @@ public class TrackRecordingService extends Service implements TrackPointCreator. private void showNotification(boolean isGpsStarted) { if (isRecording()) { - Intent intent = IntentUtils.newIntent(this, TrackRecordingActivity.class); - - int pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { - pendingIntentFlags |= PendingIntent.FLAG_IMMUTABLE; - } - - PendingIntent pendingIntent = TaskStackBuilder.create(this) - .addNextIntentWithParentStack(intent) - .getPendingIntent(0, pendingIntentFlags); - - notificationManager.updatePendingIntent(pendingIntent); - notificationManager.updateContent(getString(R.string.gps_starting)); - startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.getNotification()); + startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setRecording(this)); } if (!isRecording() && isGpsStarted) { - Intent intent = IntentUtils.newIntent(this, TrackListActivity.class); - - int pendingIntentFlags = 0; - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { - pendingIntentFlags = PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT; - } - PendingIntent pendingIntent = TaskStackBuilder.create(this) - .addParentStack(TrackListActivity.class) - .addNextIntent(intent) - .getPendingIntent(0, pendingIntentFlags); - - notificationManager.updatePendingIntent(pendingIntent); - notificationManager.updateContent(getString(R.string.gps_starting)); - startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.getNotification()); + startForeground(TrackRecordingServiceNotificationManager.NOTIFICATION_ID, notificationManager.setGPSonlyStarted(this)); } if (!isRecording() && !isGpsStarted) { stopForeground(true); diff --git a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java index 4a496e087..31c366d3f 100644 --- a/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java +++ b/src/main/java/de/dennisguse/opentracks/services/TrackRecordingServiceNotificationManager.java @@ -5,15 +5,20 @@ import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; +import android.content.Intent; import android.os.Build; 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.TrackPoint; import de.dennisguse.opentracks.stats.TrackStatistics; +import de.dennisguse.opentracks.util.IntentUtils; import de.dennisguse.opentracks.util.StringUtils; /** @@ -84,19 +89,50 @@ class TrackRecordingServiceNotificationManager { notificationBuilder.setOnlyAlertOnce(true); } - void updatePendingIntent(PendingIntent pendingIntent) { + Notification setRecording(Context context) { + Intent intent = IntentUtils.newIntent(context, TrackRecordingActivity.class); + + int pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + pendingIntentFlags |= PendingIntent.FLAG_IMMUTABLE; + } + + PendingIntent pendingIntent = TaskStackBuilder.create(context) + .addNextIntentWithParentStack(intent) + .getPendingIntent(0, pendingIntentFlags); + + updateContent(context.getString(R.string.gps_starting)); + notificationBuilder.setContentIntent(pendingIntent); updateNotification(); + + return getNotification(); + } + + Notification setGPSonlyStarted(Context context) { + Intent intent = IntentUtils.newIntent(context, TrackListActivity.class); + + int pendingIntentFlags = 0; + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { + pendingIntentFlags = PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT; + } + PendingIntent pendingIntent = TaskStackBuilder.create(context) + .addParentStack(TrackListActivity.class) + .addNextIntent(intent) + .getPendingIntent(0, pendingIntentFlags); + + updateContent(context.getString(R.string.gps_starting)); + + notificationBuilder.setContentIntent(pendingIntent); + updateNotification(); + + return getNotification(); } void cancelNotification() { notificationManager.cancel(NOTIFICATION_ID); } - Notification getNotification() { - return notificationBuilder.build(); - } - void setMetricUnits(boolean metricUnits) { this.metricUnits = metricUnits; } @@ -104,4 +140,8 @@ class TrackRecordingServiceNotificationManager { private void updateNotification() { notificationManager.notify(NOTIFICATION_ID, getNotification()); } + + private Notification getNotification() { + return notificationBuilder.build(); + } }