File tree 6 files changed +89
-22
lines changed
java/org/jellyfin/androidtv
integration/dream/composable
6 files changed +89
-22
lines changed Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import androidx.compose.runtime.getValue
6
6
import org.jellyfin.androidtv.integration.dream.DreamViewModel
7
7
import org.jellyfin.androidtv.preference.UserPreferences
8
8
import org.jellyfin.androidtv.preference.constant.ClockBehavior
9
+ import org.jellyfin.androidtv.preference.constant.ScreenSaverType
9
10
import org.koin.androidx.compose.koinViewModel
10
11
import org.koin.compose.koinInject
11
12
@@ -20,6 +21,11 @@ fun DreamHost() {
20
21
showClock = when (userPreferences[UserPreferences .clockBehavior]) {
21
22
ClockBehavior .ALWAYS , ClockBehavior .IN_MENUS -> true
22
23
else -> false
23
- }
24
+ },
25
+ showLogoSetting = userPreferences[UserPreferences .screensaverShowLogo],
26
+ showBlank = when (userPreferences[UserPreferences .screensaverType]) {
27
+ ScreenSaverType .EMPTY_SCREEN -> true
28
+ else -> false
29
+ },
24
30
)
25
31
}
Original file line number Diff line number Diff line change @@ -16,27 +16,33 @@ import org.jellyfin.androidtv.integration.dream.model.DreamContent
16
16
fun DreamView (
17
17
content : DreamContent ,
18
18
showClock : Boolean ,
19
- ) = Box (
20
- modifier = Modifier
21
- .fillMaxSize()
22
- ) {
23
- AnimatedContent (
24
- targetState = content,
25
- transitionSpec = {
26
- fadeIn(tween(durationMillis = 1_000 )) togetherWith fadeOut(snap(delayMillis = 1_000 ))
27
- },
28
- label = " DreamContentTransition"
29
- ) { content ->
30
- when (content) {
31
- DreamContent .Logo -> DreamContentLogo ()
32
- is DreamContent .LibraryShowcase -> DreamContentLibraryShowcase (content)
33
- is DreamContent .NowPlaying -> DreamContentNowPlaying (content)
19
+ showLogoSetting : Boolean ,
20
+ showBlank : Boolean ,
21
+ ) = if (showBlank) {
22
+ Box (modifier = Modifier .fillMaxSize()) {}
23
+ } else {
24
+ Box (
25
+ modifier = Modifier
26
+ .fillMaxSize()
27
+ ) {
28
+ AnimatedContent (
29
+ targetState = content,
30
+ transitionSpec = {
31
+ fadeIn(tween(durationMillis = 1_000 )) togetherWith fadeOut(snap(delayMillis = 1_000 ))
32
+ },
33
+ label = " DreamContentTransition"
34
+ ) { content ->
35
+ when (content) {
36
+ DreamContent .Logo -> DreamContentLogo ()
37
+ is DreamContent .LibraryShowcase -> DreamContentLibraryShowcase (content)
38
+ is DreamContent .NowPlaying -> DreamContentNowPlaying (content)
39
+ }
34
40
}
35
- }
36
41
37
- // Header overlay
38
- DreamHeader (
39
- showLogo = content != DreamContent .Logo ,
40
- showClock = showClock,
41
- )
42
+ // Header overlay
43
+ DreamHeader (
44
+ showLogo = content != DreamContent .Logo && showLogoSetting,
45
+ showClock = showClock,
46
+ )
47
+ }
42
48
}
Original file line number Diff line number Diff line change @@ -9,6 +9,7 @@ import org.jellyfin.androidtv.preference.constant.ClockBehavior
9
9
import org.jellyfin.androidtv.preference.constant.NextUpBehavior
10
10
import org.jellyfin.androidtv.preference.constant.RatingType
11
11
import org.jellyfin.androidtv.preference.constant.RefreshRateSwitchingBehavior
12
+ import org.jellyfin.androidtv.preference.constant.ScreenSaverType
12
13
import org.jellyfin.androidtv.preference.constant.WatchedIndicatorBehavior
13
14
import org.jellyfin.androidtv.preference.constant.ZoomMode
14
15
import org.jellyfin.androidtv.ui.playback.segment.MediaSegmentAction
@@ -190,6 +191,17 @@ class UserPreferences(context: Context) : SharedPreferenceStore(
190
191
*/
191
192
var screensaverInAppEnabled = booleanPreference(" screensaver_inapp_enabled" , true )
192
193
194
+ /* *
195
+ * Screensaver Type in app
196
+ */
197
+ var screensaverType = enumPreference(" screensaver_inapp_type" , ScreenSaverType .NORMAL )
198
+
199
+ /* *
200
+ * Show Logo in screensaver
201
+ */
202
+ var screensaverShowLogo = booleanPreference(" screensaver_inapp_showlogo" , true )
203
+
204
+
193
205
/* *
194
206
* Timeout before showing the screensaver in app, depends on [screensaverInAppEnabled].
195
207
*/
Original file line number Diff line number Diff line change
1
+ package org.jellyfin.androidtv.preference.constant
2
+
3
+ import org.jellyfin.androidtv.R
4
+ import org.jellyfin.preference.PreferenceEnum
5
+
6
+ enum class ScreenSaverType (
7
+ override val nameRes : Int ,
8
+ ) : PreferenceEnum {
9
+ /* *
10
+ * Sets the screensaver to normal slideshow behavior
11
+ */
12
+ NORMAL (R .string.lbl_fit),
13
+
14
+ /* *
15
+ * Sets the screensaver to black screen
16
+ */
17
+ EMPTY_SCREEN (R .string.lbl_empty_screen),
18
+ }
19
+
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ import org.jellyfin.androidtv.preference.UserPreferences
5
5
import org.jellyfin.androidtv.preference.constant.AppTheme
6
6
import org.jellyfin.androidtv.preference.constant.ClockBehavior
7
7
import org.jellyfin.androidtv.preference.constant.RatingType
8
+ import org.jellyfin.androidtv.preference.constant.ScreenSaverType
8
9
import org.jellyfin.androidtv.preference.constant.WatchedIndicatorBehavior
9
10
import org.jellyfin.androidtv.ui.preference.dsl.OptionsFragment
10
11
import org.jellyfin.androidtv.ui.preference.dsl.checkbox
@@ -122,6 +123,24 @@ class CustomizationPreferencesScreen : OptionsFragment() {
122
123
depends { userPreferences[UserPreferences .screensaverInAppEnabled] }
123
124
}
124
125
126
+ enum<ScreenSaverType > {
127
+ setTitle(R .string.pref_screensaver_inapp_type)
128
+ bind(userPreferences, UserPreferences .screensaverType)
129
+ depends { userPreferences[UserPreferences .screensaverInAppEnabled] }
130
+ }
131
+ checkbox {
132
+ setTitle(R .string.pref_screensaver_showlogo)
133
+ setContent(
134
+ R .string.pref_screensaver_showlogo_enabled,
135
+ R .string.pref_screensaver_showlogo_disabled,
136
+ )
137
+ depends {
138
+ userPreferences[UserPreferences .screensaverType] == ScreenSaverType .NORMAL
139
+ }
140
+
141
+ bind(userPreferences, UserPreferences .screensaverShowLogo)
142
+ }
143
+
125
144
checkbox {
126
145
setTitle(R .string.pref_screensaver_ageratingrequired_title)
127
146
setContent(
Original file line number Diff line number Diff line change 94
94
<string name =" msg_cannot_play" >This item cannot be played</string >
95
95
<string name =" lbl_no_items" >No items</string >
96
96
<string name =" lbl_empty" >Empty</string >
97
+ <string name =" lbl_empty_screen" >Empty Screen</string >
97
98
<string name =" lbl_tv_queuing" >Play next episode automatically</string >
98
99
<string name =" lbl_search_hint" >Search text (select for keyboard)</string >
99
100
<string name =" lbl_play_first_unwatched" >Play first unwatched</string >
476
477
<string name =" pref_screensaver_inapp_enabled" >Use in-app screensaver</string >
477
478
<string name =" pref_screensaver_inapp_enabled_description" >Show the Jellyfin screensaver while the app is open</string >
478
479
<string name =" pref_screensaver_inapp_timeout" >Start screensaver after</string >
480
+ <string name =" pref_screensaver_inapp_type" >Screensaver type</string >
479
481
<string name =" enable_reactive_homepage" >Enable reactive homepage</string >
480
482
<string name =" not_set" >Not set</string >
481
483
<string name =" lbl_album_artists" >Album artists</string >
497
499
<string name =" random" >Random</string >
498
500
<string name =" unreleased" >Not yet released</string >
499
501
<string name =" pref_playback_advanced" >Advanced playback preferences</string >
502
+ <string name =" pref_screensaver_showlogo" >Show Logo in Screensaver</string >
503
+ <string name =" pref_screensaver_showlogo_enabled" >Show Logo in Screensaver</string >
504
+ <string name =" pref_screensaver_showlogo_disabled" >Do not show Logo in Screensaver</string >
500
505
<string name =" pref_screensaver_ageratingmax" >Maximum age rating</string >
501
506
<string name =" pref_screensaver_ageratingmax_zero" >All ages</string >
502
507
<string name =" pref_screensaver_ageratingmax_entry" >Up to age %1$d</string >
You can’t perform that action at this time.
0 commit comments