From b7cc17b4f2bb088684c2128aeb84da34c1a4e007 Mon Sep 17 00:00:00 2001 From: danielvanpaass Date: Mon, 28 Apr 2025 22:20:55 +0200 Subject: [PATCH] Add option to make screen off optional --- .../java/de/badaix/snapcast/MainActivity.java | 10 +++++- .../de/badaix/snapcast/SnapclientService.java | 31 ++++++++++++++++--- Snapcast/src/main/res/menu/menu_snapcast.xml | 6 ++++ Snapcast/src/main/res/values-de/strings.xml | 1 + Snapcast/src/main/res/values-ja/strings.xml | 2 ++ Snapcast/src/main/res/values/strings.xml | 1 + 6 files changed, 46 insertions(+), 5 deletions(-) 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