Notification manager shows GPS accuracy, distance and speed. Fixes #584 and #483.

This commit is contained in:
Román Martínez
2021-03-13 17:05:14 +01:00
parent 3c1f1a9ba5
commit 6d926ca7a8
3 changed files with 19 additions and 4 deletions
@@ -103,6 +103,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
if (PreferencesUtils.isKey(context, R.string.stats_units_key, key)) {
boolean metricUnits = PreferencesUtils.isMetricUnits(sharedPreferences, context);
voiceExecutor.setMetricUnits(metricUnits);
notificationManager.setMetricUnits(metricUnits);
}
if (PreferencesUtils.isKey(context, R.string.voice_frequency_key, key)) {
voiceExecutor.setTaskFrequency(PreferencesUtils.getVoiceFrequency(sharedPreferences, context));
@@ -557,7 +558,7 @@ public class TrackRecordingService extends Service implements HandlerServer.Hand
fillWithSensorDataSet(trackPoint);
notificationManager.updateTrackPoint(this, trackPoint, recordingGpsAccuracy);
notificationManager.updateTrackPoint(this, track.getTrackStatistics(), trackPoint, recordingGpsAccuracy);
//TODO Figure out how to avoid loading the lastValidTrackPoint from the database
TrackPoint lastValidTrackPoint = getLastValidTrackPointInCurrentSegment(track.getId());
@@ -5,6 +5,7 @@ import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import androidx.annotation.VisibleForTesting;
@@ -12,6 +13,8 @@ import androidx.core.app.NotificationCompat;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.content.data.TrackPoint;
import de.dennisguse.opentracks.fragments.StatisticsRecordedFragment;
import de.dennisguse.opentracks.stats.TrackStatistics;
import de.dennisguse.opentracks.util.PreferencesUtils;
import de.dennisguse.opentracks.util.StringUtils;
@@ -30,6 +33,8 @@ class TrackRecordingServiceNotificationManager {
private boolean previousLocationWasAccurate = true;
private Boolean metricUnits = null;
TrackRecordingServiceNotificationManager(Context context) {
notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@@ -59,11 +64,11 @@ class TrackRecordingServiceNotificationManager {
}
void updateContent(String content) {
notificationBuilder.setContentText(content);
notificationBuilder.setSubText(content);
updateNotification();
}
void updateTrackPoint(Context context, TrackPoint trackPoint, int recordingGpsAccuracy) {
void updateTrackPoint(Context context, TrackStatistics trackStatistics, TrackPoint trackPoint, int recordingGpsAccuracy) {
String formattedAccuracy = context.getString(R.string.value_none);
if (trackPoint.hasAccuracy()) {
formattedAccuracy = StringUtils.formatDistance(context, trackPoint.getAccuracy(), PreferencesUtils.isMetricUnits(PreferencesUtils.getSharedPreferences(context), context));
@@ -74,7 +79,9 @@ class TrackRecordingServiceNotificationManager {
previousLocationWasAccurate = currentLocationWasAccurate;
}
notificationBuilder.setContentText(context.getString(R.string.track_recording_notification_accuracy, formattedAccuracy));
notificationBuilder.setContentTitle(context.getString(R.string.track_distance_notification, StringUtils.formatDistance(context, trackStatistics.getTotalDistance(), metricUnits)));
notificationBuilder.setContentText(context.getString(R.string.track_speed_notification, StringUtils.formatSpeed(context, trackPoint.getSpeed(), metricUnits, true)));
notificationBuilder.setSubText(context.getString(R.string.track_recording_notification_accuracy, formattedAccuracy));
updateNotification();
notificationBuilder.setOnlyAlertOnce(true);
@@ -93,6 +100,10 @@ class TrackRecordingServiceNotificationManager {
return notificationBuilder.build();
}
void setMetricUnits(boolean metricUnits) {
this.metricUnits = metricUnits;
}
private void updateNotification() {
notificationManager.notify(NOTIFICATION_ID, getNotification());
}
+3
View File
@@ -465,6 +465,9 @@ limitations under the License.
<string name="track_name_format">Track %1$d</string>
<string name="track_record_notification">Recording your track&#8230;</string>
<string name="track_recording_notification_accuracy">Location accuracy: %1$s</string>
<string name="track_distance_notification">Distance: %1$s</string>
<string name="track_speed_notification">Speed: %1$s</string>
<string name="track_pace_notification">Pace: %1$s</string>
<string name="track_markers">%1$s Markers</string>
<!-- Track Delete -->
<string name="track_delete_one_confirm_message">The track and its markers will be permanently deleted from the device.</string>