diff --git a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java
index 142c9771c..555c944a2 100644
--- a/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java
+++ b/src/main/java/de/dennisguse/opentracks/TrackDetailActivity.java
@@ -127,16 +127,24 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
if (PreferencesUtils.isKey(TrackDetailActivity.this, R.string.recording_track_id_key, key)) {
recordingTrackId = PreferencesUtils.getRecordingTrackId(TrackDetailActivity.this);
+ setLockscreenPolicy();
+ setScreenOnPolicy();
}
if (PreferencesUtils.isKey(TrackDetailActivity.this, R.string.recording_track_paused_key, key)) {
recordingTrackPaused = PreferencesUtils.isRecordingTrackPaused(TrackDetailActivity.this);
+ setLockscreenPolicy();
+ setScreenOnPolicy();
}
if (PreferencesUtils.isKey(TrackDetailActivity.this, R.string.stats_show_on_lockscreen_while_recording_key, key)) {
setLockscreenPolicy();
}
+ if (PreferencesUtils.isKey(TrackDetailActivity.this, R.string.stats_keep_screen_on_while_recording_key, key)) {
+ setScreenOnPolicy();
+ }
+
if (key == null) return;
runOnUiThread(new Runnable() {
@@ -227,11 +235,13 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
@Override
public void onAttachedToWindow() {
setLockscreenPolicy();
+ setScreenOnPolicy();
super.onAttachedToWindow();
}
private void setLockscreenPolicy() {
- boolean showOnLockScreen = PreferencesUtils.shouldShowStatsOnLockscreen(TrackDetailActivity.this);
+ boolean showOnLockScreen = PreferencesUtils.shouldShowStatsOnLockscreen(TrackDetailActivity.this)
+ && PreferencesUtils.isRecording(this);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
setShowWhenLocked(showOnLockScreen);
@@ -242,6 +252,17 @@ public class TrackDetailActivity extends AbstractListActivity implements ChooseA
}
}
+ private void setScreenOnPolicy() {
+ boolean keepScreenOn = PreferencesUtils.shouldKeepScreenOn(TrackDetailActivity.this)
+ && PreferencesUtils.isRecording(this);
+
+ if (keepScreenOn) {
+ getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ } else {
+ getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+ }
+ }
+
@Override
protected void onStart() {
super.onStart();
diff --git a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java
index 20afeb043..df05dc5d2 100644
--- a/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java
+++ b/src/main/java/de/dennisguse/opentracks/util/PreferencesUtils.java
@@ -289,6 +289,11 @@ public class PreferencesUtils {
return getBoolean(context, R.string.stats_show_on_lockscreen_while_recording_key, STATS_SHOW_ON_LOCKSCREEN_DEFAULT);
}
+ public static boolean shouldKeepScreenOn(Context context) {
+ final boolean DEFAULT = context.getResources().getBoolean(R.bool.stats_keep_screen_on_while_recording_default);
+ return getBoolean(context, R.string.stats_keep_screen_on_while_recording_key, DEFAULT);
+ }
+
public static boolean isShowStatsGradeElevation(Context context) {
final boolean STATS_SHOW_GRADE_ELEVATION = context.getResources().getBoolean(R.bool.stats_show_grade_elevation_default);
return PreferencesUtils.getBoolean(context, R.string.stats_show_grade_elevation_key, STATS_SHOW_GRADE_ELEVATION);
diff --git a/src/main/res/values/settings.xml b/src/main/res/values/settings.xml
index 48c80375f..3888ae9e1 100644
--- a/src/main/res/values/settings.xml
+++ b/src/main/res/values/settings.xml
@@ -25,6 +25,9 @@
trackdetail_show_on_lockscreen_while_recording
false
+ trackdetail_keep_screen_on_while_recording
+ false
+
settingsReset
bluetoothSensor
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index ea462c4ef..3b3a06d89 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -1194,6 +1194,13 @@ limitations under the License.
While recording, show statistics without unlocking the device.
+
+ Keep screen on
+
+
+ While recording, keep the screen on.
+
+
diff --git a/src/main/res/xml/settings.xml b/src/main/res/xml/settings.xml
index d4db0dccb..3ba34b93c 100644
--- a/src/main/res/xml/settings.xml
+++ b/src/main/res/xml/settings.xml
@@ -74,6 +74,11 @@ limitations under the License.
android:key="@string/stats_show_on_lockscreen_while_recording_key"
android:summary="@string/settings_recording_show_on_lockscreen_while_recording_summary"
android:title="@string/settings_recording_show_on_lockscreen_while_recording_title" />
+