diff --git a/Snapcast/src/main/java/de/badaix/snapcast/MainActivity.java b/Snapcast/src/main/java/de/badaix/snapcast/MainActivity.java
index 68a8ed0d..15120214 100644
--- a/Snapcast/src/main/java/de/badaix/snapcast/MainActivity.java
+++ b/Snapcast/src/main/java/de/badaix/snapcast/MainActivity.java
@@ -231,6 +231,15 @@ public void onAutoStartChanged(boolean autoStart) {
Settings.getInstance(this).put("hide_offline", item.isChecked());
groupListFragment.setHideOffline(item.isChecked());
return true;
+ } else if (id == R.id.action_prevent_screen_off) {
+ item.setChecked(!item.isChecked());
+ Settings.getInstance(this).put("prevent_screen_off", item.isChecked());
+ // Update the wake lock setting in the SnapclientService
+ if (snapclientService != null) {
+ boolean fullWakeLock = item.isChecked(); // true = FULL_WAKE_LOCK, false = PARTIAL_WAKE_LOCK
+ snapclientService.updateWakeLock(fullWakeLock);
+ }
+ return true;
} else if (id == R.id.action_refresh) {
if (host.trim().isEmpty()) {
showWarning(getString(R.string.host_empty));
@@ -242,7 +251,6 @@ public void onAutoStartChanged(boolean autoStart) {
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
}
-
return super.onOptionsItemSelected(item);
}
diff --git a/Snapcast/src/main/java/de/badaix/snapcast/SnapclientService.java b/Snapcast/src/main/java/de/badaix/snapcast/SnapclientService.java
index 25fe786b..4d92c145 100644
--- a/Snapcast/src/main/java/de/badaix/snapcast/SnapclientService.java
+++ b/Snapcast/src/main/java/de/badaix/snapcast/SnapclientService.java
@@ -280,15 +280,17 @@ private void start(String host, int port) {
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_AUDIO);
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
+ boolean preventScreenOff = Settings.getInstance(getApplicationContext()).getBoolean("prevent_screen_off", false);
- UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
- if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
- Log.d(TAG, "Running on a TV Device");
+ // Set the wake lock type based on the setting
+ if (preventScreenOff) {
+ Log.d(TAG, "Using FULL_WAKE_LOCK due to setting");
wakeLock = powerManager.newWakeLock(FULL_WAKE_LOCK, "snapcast:SnapcastFullWakeLock");
} else {
- Log.d(TAG, "Running on a non-TV Device");
+ Log.d(TAG, "Using PARTIAL_WAKE_LOCK due to setting");
wakeLock = powerManager.newWakeLock(PARTIAL_WAKE_LOCK, "snapcast:SnapcastPartialWakeLock");
}
+ wakeLock = powerManager.newWakeLock(PARTIAL_WAKE_LOCK, "snapcast:SnapcastPartialWakeLock");
wakeLock.acquire();
@@ -381,6 +383,27 @@ private void stop() {
listener.onPlayerStop(this);
}
+ public void updateWakeLock(boolean useFullWakeLock) {
+ try {
+ if (wakeLock != null && wakeLock.isHeld()) {
+ wakeLock.release();
+ }
+
+ PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
+ if (useFullWakeLock) {
+ Log.d(TAG, "Switching to FULL_WAKE_LOCK");
+ wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "snapcast:SnapcastFullWakeLock");
+ } else {
+ Log.d(TAG, "Switching to PARTIAL_WAKE_LOCK");
+ wakeLock = powerManager.newWakeLock(PARTIAL_WAKE_LOCK, "snapcast:SnapcastPartialWakeLock");
+ }
+
+ wakeLock.acquire();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
public interface SnapclientListener {
void onPlayerStart(SnapclientService snapclientService);
diff --git a/Snapcast/src/main/res/menu/menu_snapcast.xml b/Snapcast/src/main/res/menu/menu_snapcast.xml
index 9d926672..84f6d771 100644
--- a/Snapcast/src/main/res/menu/menu_snapcast.xml
+++ b/Snapcast/src/main/res/menu/menu_snapcast.xml
@@ -37,4 +37,10 @@
android:orderInCategory="100"
android:title="@string/action_hide_offline"
app:showAsAction="never" />
+
diff --git a/Snapcast/src/main/res/values-de/strings.xml b/Snapcast/src/main/res/values-de/strings.xml
index eca28295..53d85396 100644
--- a/Snapcast/src/main/res/values-de/strings.xml
+++ b/Snapcast/src/main/res/values-de/strings.xml
@@ -16,6 +16,7 @@
Suche nach Server
Aktualisiere Client-Liste
Verstecke offline Clients
+ Bildschirm ausschalten verhindern
Client Einstellungen
Name
diff --git a/Snapcast/src/main/res/values-ja/strings.xml b/Snapcast/src/main/res/values-ja/strings.xml
index 6e24e2e0..05758c67 100644
--- a/Snapcast/src/main/res/values-ja/strings.xml
+++ b/Snapcast/src/main/res/values-ja/strings.xml
@@ -15,6 +15,8 @@
サーバーのスキャン
クライアント一覧の更新
オフラインのクライアントを非表示
+ 画面がオフになるのを防ぐ
+
クライアント設定
名前
diff --git a/Snapcast/src/main/res/values/strings.xml b/Snapcast/src/main/res/values/strings.xml
index e148dcd5..613de97c 100644
--- a/Snapcast/src/main/res/values/strings.xml
+++ b/Snapcast/src/main/res/values/strings.xml
@@ -16,6 +16,7 @@
Scan for server
Refresh client list
Hide offline clients
+ Prevent screen from turning off
Cannot set ActionBar!
Client settings