From 634de67d741b850db1cdf69ab03b6ef43d7bcd56 Mon Sep 17 00:00:00 2001 From: antonio Date: Sun, 28 Jan 2024 23:22:03 +0100 Subject: [PATCH] feat: added an option to prevent phone from going into sleep mode if in-app --- .../tempo/ui/activity/base/BaseActivity.java | 8 ++++++++ .../tempo/ui/fragment/SettingsFragment.java | 15 +++++++++++++++ .../cappielloantonio/tempo/util/Preferences.kt | 6 ++++++ app/src/main/res/values/strings.xml | 1 + app/src/main/res/xml/global_preferences.xml | 5 +++++ 5 files changed, 35 insertions(+) diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java b/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java index 37fb3ebf..9eaa2c36 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/activity/base/BaseActivity.java @@ -6,6 +6,7 @@ import android.content.pm.PackageManager; import android.os.Build; import android.os.Bundle; import android.os.PowerManager; +import android.view.WindowManager; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; @@ -37,6 +38,7 @@ public class BaseActivity extends AppCompatActivity { initializeDownloader(); checkBatteryOptimization(); checkPermission(); + checkAlwaysOnDisplay(); } @Override @@ -66,6 +68,12 @@ public class BaseActivity extends AppCompatActivity { } } + private void checkAlwaysOnDisplay() { + if (Preferences.isDisplayAlwaysOn()) { + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + } + private boolean detectBatteryOptimization() { String packageName = getPackageName(); PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE); diff --git a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SettingsFragment.java b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SettingsFragment.java index c28335cd..99abcbdc 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SettingsFragment.java +++ b/app/src/main/java/com/cappielloantonio/tempo/ui/fragment/SettingsFragment.java @@ -6,6 +6,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.view.WindowManager; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; @@ -91,6 +92,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { actionSyncStarredTracks(); actionChangeDownloadStorage(); actionDeleteDownloadStorage(); + actionKeepScreenOn(); } @Override @@ -248,4 +250,17 @@ public class SettingsFragment extends PreferenceFragmentCompat { } }); } + + private void actionKeepScreenOn() { + findPreference("always_on_display").setOnPreferenceChangeListener((preference, newValue) -> { + if (newValue instanceof Boolean) { + if ((Boolean) newValue) { + activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } else { + activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + } + return true; + }); + } } diff --git a/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt b/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt index a3f2cedd..71c031ff 100644 --- a/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt +++ b/app/src/main/java/com/cappielloantonio/tempo/util/Preferences.kt @@ -46,6 +46,7 @@ object Preferences { private const val SKIP_MIN_STAR_RATING = "skip_min_star_rating" private const val MIN_STAR_RATING = "min_star_rating" private const val ARTIST_ALBUM_LAYOUT = "artist_album_layout" + private const val ALWAYS_ON_DISPLAY = "always_on_display" @JvmStatic @@ -357,4 +358,9 @@ object Preferences { App.getInstance().preferences.edit().putBoolean(ARTIST_ALBUM_LAYOUT, isArtistAlbumLayoutHorizontal) .apply() } + + @JvmStatic + fun isDisplayAlwaysOn(): Boolean { + return App.getInstance().preferences.getBoolean(ALWAYS_ON_DISPLAY, false) + } } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 4095540a..2fb179a9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -224,6 +224,7 @@ Server unreachable Tempo is an open source and lightweight music client for Subsonic, designed and built natively for Android. About + Always on display Transcode format If enabled, Tempo will not force download the track with the transcode settings below. Prioritize server settings used for streaming in downloads diff --git a/app/src/main/res/xml/global_preferences.xml b/app/src/main/res/xml/global_preferences.xml index ef6c8f15..683247ca 100644 --- a/app/src/main/res/xml/global_preferences.xml +++ b/app/src/main/res/xml/global_preferences.xml @@ -31,6 +31,11 @@ app:title="@string/settings_theme" app:useSimpleSummaryProvider="true" /> + +