diff --git a/app/src/main/java/code/name/monkey/retromusic/Constants.kt b/app/src/main/java/code/name/monkey/retromusic/Constants.kt index 2b49d2071..0757c507c 100644 --- a/app/src/main/java/code/name/monkey/retromusic/Constants.kt +++ b/app/src/main/java/code/name/monkey/retromusic/Constants.kt @@ -160,3 +160,4 @@ const val PLAYBACK_PITCH = "playback_pitch" const val CUSTOM_FONT = "custom_font" const val APPBAR_MODE = "appbar_mode" const val WALLPAPER_ACCENT = "wallpaper_accent" +const val SCREEN_ON_LYRICS = "screen_on_lyrics" \ No newline at end of file diff --git a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt index 938eae011..a3bd152e9 100644 --- a/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt +++ b/app/src/main/java/code/name/monkey/retromusic/activities/base/AbsSlidingMusicPanelActivity.kt @@ -110,9 +110,15 @@ abstract class AbsSlidingMusicPanelActivity : AbsMusicServiceActivity() { when (newState) { STATE_EXPANDED -> { onPanelExpanded() + if (PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics) { + keepScreenOn(true) + } } STATE_COLLAPSED -> { onPanelCollapsed() + if ((PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics) || !PreferenceUtil.isScreenOnEnabled) { + keepScreenOn(false) + } } STATE_SETTLING, STATE_DRAGGING -> { if (fromNotification) { diff --git a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt index b21a7f33f..86bec60d5 100644 --- a/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt +++ b/app/src/main/java/code/name/monkey/retromusic/extensions/ActivityThemeExtensions.kt @@ -22,6 +22,14 @@ fun AppCompatActivity.toggleScreenOn() { } } +fun AppCompatActivity.keepScreenOn(keepScreenOn: Boolean) { + if (keepScreenOn) { + window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } else { + window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) + } +} + fun AppCompatActivity.setEdgeToEdgeOrImmersive() { if (PreferenceUtil.isFullScreenMode) { setImmersiveFullscreen() diff --git a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt index 109a14eff..50687925a 100644 --- a/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt +++ b/app/src/main/java/code/name/monkey/retromusic/fragments/base/AbsPlayerFragment.kt @@ -43,7 +43,6 @@ import androidx.viewpager.widget.ViewPager import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.EXTRA_ALBUM_ID import code.name.monkey.retromusic.EXTRA_ARTIST_ID -import code.name.monkey.retromusic.PLAYBACK_SPEED import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.activities.tageditor.AbsTagEditorActivity @@ -53,6 +52,7 @@ import code.name.monkey.retromusic.db.toSongEntity import code.name.monkey.retromusic.dialogs.* import code.name.monkey.retromusic.extensions.currentFragment import code.name.monkey.retromusic.extensions.hide +import code.name.monkey.retromusic.extensions.keepScreenOn import code.name.monkey.retromusic.extensions.whichFragment import code.name.monkey.retromusic.fragments.NowPlayingScreen import code.name.monkey.retromusic.fragments.ReloadType @@ -88,6 +88,11 @@ abstract class AbsPlayerFragment(@LayoutRes layout: Int) : AbsMainActivityFragme R.id.action_toggle_lyrics -> { PreferenceUtil.showLyrics = !item.isChecked item.isChecked = !item.isChecked + if (PreferenceUtil.lyricsScreenOn && PreferenceUtil.showLyrics) { + mainActivity.keepScreenOn(true) + } else if (!PreferenceUtil.isScreenOnEnabled && !PreferenceUtil.showLyrics) { + mainActivity.keepScreenOn(false) + } return true } R.id.action_go_to_lyrics -> { @@ -420,6 +425,7 @@ fun goToLyrics(activity: Activity) { ) } } + /** Fixes checked state being ignored by injecting checked state directly into drawable */ @SuppressLint("RestrictedApi") class CheckDrawableWrapper(val menuItem: MenuItem) : DrawableWrapper(menuItem.icon) { diff --git a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt index 184b7460a..68e0148af 100644 --- a/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt +++ b/app/src/main/java/code/name/monkey/retromusic/util/PreferenceUtil.kt @@ -698,7 +698,13 @@ object PreferenceUtil { } val wallpaperAccent - get() = sharedPreferences.getBoolean(WALLPAPER_ACCENT, VersionUtils.hasOreoMR1() && !VersionUtils.hasS()) + get() = sharedPreferences.getBoolean( + WALLPAPER_ACCENT, + VersionUtils.hasOreoMR1() && !VersionUtils.hasS() + ) + + val lyricsScreenOn + get() = sharedPreferences.getBoolean(SCREEN_ON_LYRICS, false) } enum class LyricsType { REPLACE_LYRICS, OVER_LYRICS diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 530ab0441..d92e31cc8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -536,4 +536,5 @@ App bar mode Wallpaper accent color Extract accent color from wallpaper + Keep screen on when showing lyrics diff --git a/app/src/main/res/xml/pref_now_playing_screen.xml b/app/src/main/res/xml/pref_now_playing_screen.xml index a1eecf692..a424abd77 100644 --- a/app/src/main/res/xml/pref_now_playing_screen.xml +++ b/app/src/main/res/xml/pref_now_playing_screen.xml @@ -29,6 +29,13 @@ android:layout="@layout/list_item_view" android:title="@string/pref_title_lyrics_type" /> + +