diff --git a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java
index 9231b972d..dda1691c8 100644
--- a/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java
+++ b/src/main/java/de/dennisguse/opentracks/TrackRecordingActivity.java
@@ -3,7 +3,6 @@ package de.dennisguse.opentracks;
import android.Manifest;
import android.app.AlertDialog;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.os.Build;
import android.os.Bundle;
@@ -21,6 +20,7 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.viewpager2.adapter.FragmentStateAdapter;
+import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayoutMediator;
import java.util.List;
@@ -36,6 +36,7 @@ import de.dennisguse.opentracks.fragments.StatisticsRecordingFragment;
import de.dennisguse.opentracks.services.RecordingStatus;
import de.dennisguse.opentracks.services.TrackRecordingService;
import de.dennisguse.opentracks.services.TrackRecordingServiceConnection;
+import de.dennisguse.opentracks.services.handlers.GpsStatusValue;
import de.dennisguse.opentracks.settings.PreferencesUtils;
import de.dennisguse.opentracks.settings.SettingsActivity;
import de.dennisguse.opentracks.ui.intervals.IntervalsFragment;
@@ -63,6 +64,8 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
private static final String CURRENT_TAB_TAG_KEY = "current_tab_tag_key";
+ private Snackbar snackbar;
+
// The following are setFrequency in onCreate
private ContentProviderUtils contentProviderUtils;
private TrackRecordingServiceConnection trackRecordingServiceConnection;
@@ -76,45 +79,41 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
private RecordingStatus recordingStatus = TrackRecordingService.STATUS_DEFAULT;
- private final TrackRecordingServiceConnection.Callback bindChangedCallback = new TrackRecordingServiceConnection.Callback() {
- @Override
- public void onConnected(TrackRecordingService service) {
+ private final TrackRecordingServiceConnection.Callback bindChangedCallback = service -> {
+ service.getRecordingStatusObservable()
+ .observe(TrackRecordingActivity.this, this::onRecordingStatusChanged);
- service.getRecordingStatusObservable()
- .observe(TrackRecordingActivity.this, status -> onRecordingStatusChanged(status));
+ service.getGpsStatusObservable()
+ .observe(TrackRecordingActivity.this, this::onGpsStatusChanged);
- if (!service.isRecording()) {
- if (trackId == null) {
- // trackId isn't initialized -> leads a new recording.
- trackId = service.startNewTrack();
- } else {
- // trackId is initialized -> resumes the track.
- service.resumeTrack(trackId);
- }
-
- // A recording track is on.
- trackDataHub.loadTrack(trackId);
- trackDataHub.setRecordingStatus(recordingStatus);
+ if (!service.isRecording()) {
+ if (trackId == null) {
+ // trackId isn't initialized -> leads a new recording.
+ trackId = service.startNewTrack();
+ } else {
+ // trackId is initialized -> resumes the track.
+ service.resumeTrack(trackId);
}
+
+ // A recording track is on.
+ trackDataHub.loadTrack(trackId);
+ trackDataHub.setRecordingStatus(recordingStatus);
}
};
- private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = new OnSharedPreferenceChangeListener() {
- @Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- if (PreferencesUtils.isKey(R.string.stats_show_on_lockscreen_while_recording_key, key)) {
- setLockscreenPolicy();
- }
- if (PreferencesUtils.isKey(R.string.stats_keep_screen_on_while_recording_key, key)) {
- setScreenOnPolicy();
- }
- if (PreferencesUtils.isKey(R.string.stats_fullscreen_while_recording_key, key)) {
- setFullscreenPolicy();
- }
- if (key == null) return;
-
- runOnUiThread(TrackRecordingActivity.this::invalidateOptionsMenu); //TODO Should not be necessary
+ private final OnSharedPreferenceChangeListener sharedPreferenceChangeListener = (sharedPreferences, key) -> {
+ if (PreferencesUtils.isKey(R.string.stats_show_on_lockscreen_while_recording_key, key)) {
+ setLockscreenPolicy();
}
+ if (PreferencesUtils.isKey(R.string.stats_keep_screen_on_while_recording_key, key)) {
+ setScreenOnPolicy();
+ }
+ if (PreferencesUtils.isKey(R.string.stats_fullscreen_while_recording_key, key)) {
+ setFullscreenPolicy();
+ }
+ if (key == null) return;
+
+ runOnUiThread(TrackRecordingActivity.this::invalidateOptionsMenu); //TODO Should not be necessary
};
private MenuItem insertMarkerMenuItem;
@@ -425,4 +424,20 @@ public class TrackRecordingActivity extends AbstractActivity implements ChooseAc
String[] permissions = new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION};
locationPermissionRequest.launch(permissions);
}
-}
+
+ private void onGpsStatusChanged(GpsStatusValue gpsStatusValue) {
+ if (gpsStatusValue.isGpsStarted() && snackbar != null && snackbar.isShown()) {
+ snackbar.dismiss();
+ return;
+ }
+ if (gpsStatusValue != GpsStatusValue.GPS_DISABLED) {
+ return;
+ }
+ snackbar = Snackbar
+ .make(viewBinding.trackRecordingCoordinatorLayout,
+ getString(R.string.gps_recording_status, getString(gpsStatusValue.message), getString(R.string.gps_recording_without_signal)),
+ Snackbar.LENGTH_INDEFINITE)
+ .setAction(getString(R.string.generic_dismiss), v -> {});
+ snackbar.show();
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java
index 55c1514cc..e3c0846f8 100644
--- a/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java
+++ b/src/main/java/de/dennisguse/opentracks/fragments/StatisticsRecordingFragment.java
@@ -20,7 +20,6 @@ import java.util.List;
import de.dennisguse.opentracks.R;
import de.dennisguse.opentracks.adapters.StatisticsAdapter;
import de.dennisguse.opentracks.data.models.Track;
-import de.dennisguse.opentracks.data.models.TrackPoint;
import de.dennisguse.opentracks.databinding.StatisticsRecordingBinding;
import de.dennisguse.opentracks.services.RecordingData;
import de.dennisguse.opentracks.services.TrackRecordingService;
@@ -45,8 +44,9 @@ public class StatisticsRecordingFragment extends Fragment {
}
private TrackRecordingServiceConnection trackRecordingServiceConnection;
+
private RecordingData recordingData = TrackRecordingService.NOT_RECORDING;
- private TrackPoint latestTrackPoint;
+
private Layout layout;
private StatisticsRecordingBinding viewBinding;
@@ -76,8 +76,10 @@ public class StatisticsRecordingFragment extends Fragment {
}
};
- private final TrackRecordingServiceConnection.Callback bindChangedCallback = service -> service.getRecordingDataObservable()
- .observe(StatisticsRecordingFragment.this, this::onRecordingDataChanged);
+ private final TrackRecordingServiceConnection.Callback bindChangedCallback = service -> {
+ service.getRecordingDataObservable()
+ .observe(StatisticsRecordingFragment.this, this::onRecordingDataChanged);
+ };
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -168,11 +170,6 @@ public class StatisticsRecordingFragment extends Fragment {
sharedPreferenceChangeListener.onSharedPreferenceChanged(null, getString(R.string.stats_rate_key));
}
- latestTrackPoint = recordingData.getLatestTrackPoint();
- if (latestTrackPoint != null && latestTrackPoint.hasLocation() && !latestTrackPoint.isRecent()) {
- latestTrackPoint = null;
- }
-
updateUI();
}
}
diff --git a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java
index 995cc988e..c554d4288 100644
--- a/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java
+++ b/src/main/java/de/dennisguse/opentracks/services/handlers/GpsStatus.java
@@ -56,7 +56,7 @@ class GpsStatus {
public void stop() {
stopped = true;
- sendStatus(gpsStatus, GpsStatusValue.GPS_NONE);
+ sendStatus(gpsStatus, GpsStatusValue.GPS_DISABLED);
}
}
diff --git a/src/main/res/layout-land/track_recording.xml b/src/main/res/layout-land/track_recording.xml
index aa46e0a6e..0cbac4ea0 100644
--- a/src/main/res/layout-land/track_recording.xml
+++ b/src/main/res/layout-land/track_recording.xml
@@ -1,5 +1,7 @@
-
@@ -17,22 +19,29 @@
android:layout_width="wrap_content"
android:layout_height="match_parent" />
-
-
-
+ android:layout_height="match_parent"
+ android:orientation="vertical">
-
+
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/res/layout/statistics_recording.xml b/src/main/res/layout/statistics_recording.xml
index 5f41433db..85c2299cf 100644
--- a/src/main/res/layout/statistics_recording.xml
+++ b/src/main/res/layout/statistics_recording.xml
@@ -4,7 +4,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/StatsScrollView"
android:layout_width="match_parent"
- android:layout_height="wrap_content">
+ android:layout_height="match_parent">
-
+
\ No newline at end of file
diff --git a/src/main/res/layout/track_recording.xml b/src/main/res/layout/track_recording.xml
index d43d458ee..972ac2f78 100644
--- a/src/main/res/layout/track_recording.xml
+++ b/src/main/res/layout/track_recording.xml
@@ -1,5 +1,7 @@
-
@@ -11,15 +13,23 @@
android:layout_width="match_parent"
android:layout_height="wrap_content" />
-
+ android:layout_weight="1">
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/res/values/colors.xml b/src/main/res/values/colors.xml
index abc8e9fee..76afd8739 100644
--- a/src/main/res/values/colors.xml
+++ b/src/main/res/values/colors.xml
@@ -42,4 +42,5 @@ limitations under the License.
#3F0000
#272727
+
\ No newline at end of file
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index c7be296bc..5fb9c923b 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -244,12 +244,15 @@ limitations under the License.
To
Today
Yesterday
+ Dismiss
Starting GPS
Waiting for a better GPS signal
Waiting for GPS signal
GPS disabled
GPS fixed and ready
+ %1$s: %2$s
+ OpenTracks is recording without GPS data.
Arrow
Marker
diff --git a/src/main/res/values/styles.xml b/src/main/res/values/styles.xml
index 76414cff5..332d617db 100644
--- a/src/main/res/values/styles.xml
+++ b/src/main/res/values/styles.xml
@@ -333,4 +333,29 @@ limitations under the License.
- true
- true
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/res/values/themes_custom.xml b/src/main/res/values/themes_custom.xml
index 91640fb5e..be7535e47 100644
--- a/src/main/res/values/themes_custom.xml
+++ b/src/main/res/values/themes_custom.xml
@@ -23,6 +23,12 @@ limitations under the License.
- @drawable/activated_background
- true
+
+
+ - @style/MaterialSnackbarTheme
+ - @style/MaterialSnackbarTextButtonTheme
+ - @style/MaterialSnackbarTextViewTheme
+