@@ -27,16 +27,18 @@ import androidx.compose.animation.core.tween
2727import androidx.compose.animation.fadeIn
2828import androidx.compose.animation.fadeOut
2929import androidx.compose.foundation.background
30+ import androidx.compose.foundation.basicMarquee
31+ import androidx.compose.foundation.layout.Arrangement
3032import androidx.compose.foundation.layout.Box
3133import androidx.compose.foundation.layout.Column
32- import androidx.compose.foundation.layout.PaddingValues
3334import androidx.compose.foundation.layout.Row
35+ import androidx.compose.foundation.layout.Spacer
36+ import androidx.compose.foundation.layout.fillMaxHeight
3437import androidx.compose.foundation.layout.fillMaxSize
3538import androidx.compose.foundation.layout.fillMaxWidth
3639import androidx.compose.foundation.layout.height
3740import androidx.compose.foundation.layout.offset
3841import androidx.compose.foundation.layout.padding
39- import androidx.compose.foundation.layout.width
4042import androidx.compose.foundation.layout.windowInsetsPadding
4143import androidx.compose.foundation.layout.wrapContentHeight
4244import androidx.compose.foundation.layout.wrapContentSize
@@ -50,26 +52,24 @@ import androidx.compose.runtime.Composable
5052import androidx.compose.ui.Alignment
5153import androidx.compose.ui.Modifier
5254import androidx.compose.ui.res.stringResource
53- import androidx.compose.ui.text.style.TextOverflow
5455import androidx.compose.ui.tooling.preview.Preview
5556import androidx.compose.ui.unit.dp
56- import androidx.compose.ui.unit.em
5757import androidx.media3.common.util.UnstableApi
5858import net.newpipe.newplayer.R
59- import net.newpipe.newplayer.uiModel.NewPlayerUIState
60- import net.newpipe.newplayer.uiModel.InternalNewPlayerViewModel
61- import net.newpipe.newplayer.uiModel.NewPlayerViewModelDummy
62- import net.newpipe.newplayer.uiModel.UIModeState
6359import net.newpipe.newplayer.ui.common.NewPlayerSeeker
6460import net.newpipe.newplayer.ui.common.ThumbPreview
65- import net.newpipe.newplayer.ui.selection_ui.ChapterSelectUI
66- import net.newpipe.newplayer.ui.selection_ui.StreamSelectUI
67- import net.newpipe.newplayer.ui.theme.VideoPlayerTheme
6861import net.newpipe.newplayer.ui.common.Thumbnail
6962import net.newpipe.newplayer.ui.common.getInsets
7063import net.newpipe.newplayer.ui.common.getLocale
7164import net.newpipe.newplayer.ui.common.getTimeStringFromMs
7265import net.newpipe.newplayer.ui.seeker.SeekerDefaults
66+ import net.newpipe.newplayer.ui.selection_ui.ChapterSelectUI
67+ import net.newpipe.newplayer.ui.selection_ui.StreamSelectUI
68+ import net.newpipe.newplayer.ui.theme.VideoPlayerTheme
69+ import net.newpipe.newplayer.uiModel.InternalNewPlayerViewModel
70+ import net.newpipe.newplayer.uiModel.NewPlayerUIState
71+ import net.newpipe.newplayer.uiModel.NewPlayerViewModelDummy
72+ import net.newpipe.newplayer.uiModel.UIModeState
7373
7474
7575private val UI_ENTER_ANIMATION = fadeIn(tween(200 ))
@@ -88,7 +88,11 @@ internal fun lightAudioControlButtonColorScheme() = ButtonDefaults.buttonColors(
8888@Composable
8989
9090/* * @hide */
91- internal fun AudioPlayerUI (viewModel : InternalNewPlayerViewModel , uiState : NewPlayerUIState , isLandScape : Boolean ) {
91+ internal fun AudioPlayerUI (
92+ viewModel : InternalNewPlayerViewModel ,
93+ uiState : NewPlayerUIState ,
94+ isLandScape : Boolean
95+ ) {
9296 val insets = getInsets()
9397
9498 Box (
@@ -125,23 +129,22 @@ internal fun AudioPlayerUI(viewModel: InternalNewPlayerViewModel, uiState: NewPl
125129 enter = UI_ENTER_ANIMATION ,
126130 exit = UI_EXIT_ANIMATION
127131 ) {
128- Scaffold (modifier = Modifier
129- .fillMaxSize()
130- .windowInsetsPadding(insets),
131- topBar = {
132-
133- }) { innerPadding ->
132+ Scaffold (
133+ modifier = Modifier
134+ .fillMaxSize()
135+ .windowInsetsPadding(insets),
136+ ) { innerPadding ->
134137 if (isLandScape) {
135138 LandscapeLayout (
136139 viewModel = viewModel,
137140 uiState = uiState,
138- innerPadding = innerPadding
141+ modifier = Modifier .padding( innerPadding).padding( 16 .dp),
139142 )
140143 } else {
141144 PortraitLayout (
142145 viewModel = viewModel,
143146 uiState = uiState,
144- innerPadding = innerPadding
147+ modifier = Modifier .padding( innerPadding).padding( 16 .dp),
145148 )
146149 }
147150 }
@@ -152,145 +155,66 @@ internal fun AudioPlayerUI(viewModel: InternalNewPlayerViewModel, uiState: NewPl
152155@OptIn(UnstableApi ::class )
153156@Composable
154157private fun LandscapeLayout (
155- modifier : Modifier = Modifier ,
156158 viewModel : InternalNewPlayerViewModel ,
157159 uiState : NewPlayerUIState ,
158- innerPadding : PaddingValues
160+ modifier : Modifier = Modifier ,
159161) {
160- Row (
161- modifier = modifier
162- .fillMaxSize()
163- .padding(20 .dp)
164- ) {
165- Column (
162+ Column (modifier = modifier) {
163+ TitleView (
166164 modifier = Modifier
167- .fillMaxSize()
168- .weight(1f )
165+ .fillMaxWidth(),
166+ uiState = uiState,
167+ )
168+
169+ Spacer (modifier = Modifier .height(8 .dp))
170+
171+ Row (
172+ verticalAlignment = Alignment .CenterVertically ,
173+ horizontalArrangement = Arrangement .spacedBy(32 .dp),
169174 ) {
170175 CoverArt (
171- modifier = Modifier
172- .fillMaxSize()
173- .weight(0.9f ), uiState = uiState
176+ uiState = uiState,
177+ modifier = Modifier .weight(1f )
174178 )
175179
176- TitleView (
177- modifier = Modifier
178- .fillMaxSize()
179- .weight(0.1f ), uiState = uiState
180- )
181- }
182-
183- Box (modifier = Modifier .width(20 .dp))
184-
185- Column (
186- modifier = Modifier
187- .fillMaxSize()
188- .weight(1f )
189- ) {
190180 Column (
191- modifier = Modifier
192- .fillMaxSize()
193- .weight(1f )
181+ verticalArrangement = Arrangement .SpaceEvenly ,
182+ modifier = Modifier .fillMaxHeight().weight(1f )
194183 ) {
195- Box (
196- modifier = Modifier
197- .fillMaxSize()
198- .weight(1f )
199- )
200- AudioPlaybackController (
201- viewModel = viewModel,
202- uiState = uiState
203- )
204- Box (
205- modifier = Modifier
206- .fillMaxSize()
207- .weight(1f )
208- )
209- ProgressUI (
210- viewModel = viewModel,
211- uiState = uiState
212- )
213- Box (
214- modifier = Modifier
215- .fillMaxSize()
216- .weight(1f )
217- )
184+ AudioPlaybackController (viewModel = viewModel, uiState = uiState)
185+ ProgressUI (viewModel = viewModel, uiState = uiState)
186+ AudioBottomUI (viewModel = viewModel, uiState = uiState)
218187 }
219- AudioBottomUI (viewModel, uiState)
220- Box (
221- modifier = Modifier
222- .fillMaxSize()
223- .weight(0.025f )
224- )
225188 }
226189 }
227190}
228191
229192@OptIn(UnstableApi ::class )
230193@Composable
231194private fun PortraitLayout (
232- modifier : Modifier = Modifier ,
233195 viewModel : InternalNewPlayerViewModel ,
234196 uiState : NewPlayerUIState ,
235- innerPadding : PaddingValues
197+ modifier : Modifier = Modifier ,
236198) {
237- Box (
238- modifier = modifier
239- .fillMaxSize()
240- .padding(innerPadding)
199+ Column (
200+ modifier = modifier,
201+ horizontalAlignment = Alignment . CenterHorizontally ,
202+ verticalArrangement = Arrangement .spacedBy( 32 .dp),
241203 ) {
242204 Column (
243205 modifier = Modifier
244- .fillMaxSize()
206+ .fillMaxHeight()
207+ .weight(1f ),
208+ horizontalAlignment = Alignment .CenterHorizontally ,
209+ verticalArrangement = Arrangement .Center ,
245210 ) {
246- Column (
247- modifier = Modifier
248- .fillMaxSize()
249- .padding(20 .dp)
250- .weight(1f ),
251- horizontalAlignment = Alignment .CenterHorizontally ,
252- ) {
253- Box (
254- modifier = Modifier
255- .fillMaxSize()
256- .weight(0.5f )
257- )
258- CoverArt (uiState = uiState)
259- Box (
260- modifier = Modifier
261- .fillMaxSize()
262- .weight(0.3f )
263- )
264-
265- TitleView (uiState = uiState)
266-
267- Box (
268- modifier = Modifier
269- .fillMaxSize()
270- .weight(0.45f )
271- )
272- AudioPlaybackController (viewModel = viewModel, uiState = uiState)
273-
274-
275- Box (
276- modifier = Modifier
277- .fillMaxSize()
278- .weight(0.2f )
279- )
280- ProgressUI (viewModel = viewModel, uiState = uiState)
281- Box (
282- modifier = Modifier
283- .fillMaxSize()
284- .weight(0.2f )
285- )
286- }
287- AudioBottomUI (viewModel, uiState)
288- Box (
289- modifier = Modifier
290- .fillMaxSize()
291- .weight(0.025f )
292- )
211+ CoverArt (uiState = uiState)
212+ Spacer (modifier = Modifier .height(24 .dp))
213+ TitleView (uiState = uiState)
293214 }
215+ AudioPlaybackController (viewModel = viewModel, uiState = uiState)
216+ ProgressUI (viewModel = viewModel, uiState = uiState)
217+ AudioBottomUI (viewModel, uiState)
294218 }
295219}
296220
@@ -347,23 +271,24 @@ private fun TitleView(modifier: Modifier = Modifier, uiState: NewPlayerUIState)
347271 Column (modifier = modifier) {
348272 Text (
349273 text = uiState.currentlyPlaying?.mediaMetadata?.title.toString(),
350- overflow = TextOverflow .Ellipsis ,
351274 maxLines = 1 ,
352- fontSize = 6 .em
275+ style = MaterialTheme .typography.headlineMedium,
276+ modifier = Modifier .basicMarquee(),
353277 )
278+ Spacer (modifier = Modifier .height(6 .dp))
354279 Text (
355280 text = uiState.currentlyPlaying?.mediaMetadata?.artist.toString(),
356- overflow = TextOverflow .Ellipsis ,
357281 maxLines = 1 ,
358- fontSize = 4 .em
282+ style = MaterialTheme .typography.bodyLarge,
283+ modifier = Modifier .basicMarquee(),
359284 )
360285 }
361286}
362287
363288@OptIn(UnstableApi ::class )
364289@Composable
365290private fun CoverArt (modifier : Modifier = Modifier , uiState : NewPlayerUIState ) {
366- Box {
291+ Box (modifier = modifier) {
367292 Card (
368293 elevation = CardDefaults .cardElevation(defaultElevation = 4 .dp)
369294 ) {
0 commit comments