refactor(tv): replace deprecated tv lazy layouts with normal lazy layouts

Use beta version of compose for now (1.7.x)
TV compose foundation library removed
No longer using bom to specify dependencies (doesn't work with the beta versions)
This commit is contained in:
Jarne Demeulemeester 2024-07-15 22:18:09 +02:00
parent 307ce957c2
commit 15c1ac9593
No known key found for this signature in database
GPG key ID: 1E5C6AFBD622E9F5
18 changed files with 64 additions and 66 deletions

View file

@ -81,15 +81,14 @@ ktlint {
} }
dependencies { dependencies {
val composeBom = platform(libs.androidx.compose.bom)
implementation(projects.core) implementation(projects.core)
implementation(projects.data) implementation(projects.data)
implementation(projects.preferences) implementation(projects.preferences)
implementation(projects.player.core) implementation(projects.player.core)
implementation(projects.player.video) implementation(projects.player.video)
implementation(libs.androidx.activity.compose) implementation(libs.androidx.activity.compose)
implementation(composeBom) implementation(libs.androidx.compose.foundation)
implementation(libs.androidx.compose.runtime)
implementation(libs.androidx.compose.ui.tooling.preview) implementation(libs.androidx.compose.ui.tooling.preview)
implementation(libs.androidx.compose.material3) implementation(libs.androidx.compose.material3)
implementation(libs.androidx.core) implementation(libs.androidx.core)
@ -99,7 +98,6 @@ dependencies {
implementation(libs.androidx.media3.ui) implementation(libs.androidx.media3.ui)
implementation(libs.androidx.media3.session) implementation(libs.androidx.media3.session)
implementation(libs.androidx.paging.compose) implementation(libs.androidx.paging.compose)
implementation(libs.androidx.tv.foundation)
implementation(libs.androidx.tv.material) implementation(libs.androidx.tv.material)
implementation(libs.coil.compose) implementation(libs.coil.compose)
implementation(libs.coil.svg) implementation(libs.coil.svg)

View file

@ -115,7 +115,7 @@ private fun AddServerScreenLayout(
}, },
singleLine = true, singleLine = true,
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
autoCorrect = false, autoCorrectEnabled = false,
keyboardType = KeyboardType.Uri, keyboardType = KeyboardType.Uri,
imeAction = ImeAction.Go, imeAction = ImeAction.Go,
), ),

View file

@ -6,6 +6,9 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -19,9 +22,6 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.MaterialTheme import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
@ -107,7 +107,7 @@ private fun HomeScreenLayout(
} }
else -> Unit else -> Unit
} }
TvLazyColumn( LazyColumn(
contentPadding = PaddingValues(bottom = MaterialTheme.spacings.large), contentPadding = PaddingValues(bottom = MaterialTheme.spacings.large),
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
@ -122,7 +122,7 @@ private fun HomeScreenLayout(
modifier = Modifier.padding(start = MaterialTheme.spacings.large), modifier = Modifier.padding(start = MaterialTheme.spacings.large),
) )
Spacer(modifier = Modifier.height(MaterialTheme.spacings.medium)) Spacer(modifier = Modifier.height(MaterialTheme.spacings.medium))
TvLazyRow( LazyRow(
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.large), contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.large),
) { ) {
@ -145,7 +145,7 @@ private fun HomeScreenLayout(
modifier = Modifier.padding(start = MaterialTheme.spacings.large), modifier = Modifier.padding(start = MaterialTheme.spacings.large),
) )
Spacer(modifier = Modifier.height(MaterialTheme.spacings.medium)) Spacer(modifier = Modifier.height(MaterialTheme.spacings.medium))
TvLazyRow( LazyRow(
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.large), contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.large),
) { ) {

View file

@ -2,6 +2,9 @@ package dev.jdtech.jellyfin.ui
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -14,9 +17,6 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.grid.TvGridCells
import androidx.tv.foundation.lazy.grid.TvLazyVerticalGrid
import androidx.tv.foundation.lazy.grid.items
import androidx.tv.material3.MaterialTheme import androidx.tv.material3.MaterialTheme
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator import com.ramcosta.composedestinations.navigation.DestinationsNavigator
@ -72,8 +72,8 @@ private fun LibrariesScreenLayout(
val focusRequester = remember { FocusRequester() } val focusRequester = remember { FocusRequester() }
TvLazyVerticalGrid( LazyVerticalGrid(
columns = TvGridCells.Fixed(3), columns = GridCells.Fixed(3),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large), verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large),
contentPadding = PaddingValues( contentPadding = PaddingValues(

View file

@ -3,6 +3,9 @@ package dev.jdtech.jellyfin.ui
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.GridItemSpan
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -15,9 +18,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.paging.PagingData import androidx.paging.PagingData
import androidx.paging.compose.collectAsLazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems
import androidx.tv.foundation.lazy.grid.TvGridCells
import androidx.tv.foundation.lazy.grid.TvGridItemSpan
import androidx.tv.foundation.lazy.grid.TvLazyVerticalGrid
import androidx.tv.material3.MaterialTheme import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
@ -86,8 +86,8 @@ private fun LibraryScreenLayout(
is LibraryViewModel.UiState.Loading -> Text(text = "LOADING") is LibraryViewModel.UiState.Loading -> Text(text = "LOADING")
is LibraryViewModel.UiState.Normal -> { is LibraryViewModel.UiState.Normal -> {
val items = uiState.items.collectAsLazyPagingItems() val items = uiState.items.collectAsLazyPagingItems()
TvLazyVerticalGrid( LazyVerticalGrid(
columns = TvGridCells.Fixed(5), columns = GridCells.Fixed(5),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default * 2, vertical = MaterialTheme.spacings.large), contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default * 2, vertical = MaterialTheme.spacings.large),
@ -95,7 +95,7 @@ private fun LibraryScreenLayout(
.fillMaxSize() .fillMaxSize()
.focusRequester(focusRequester), .focusRequester(focusRequester),
) { ) {
item(span = { TvGridItemSpan(this.maxLineSpan) }) { item(span = { GridItemSpan(this.maxLineSpan) }) {
Text( Text(
text = libraryName, text = libraryName,
style = MaterialTheme.typography.displayMedium, style = MaterialTheme.typography.displayMedium,

View file

@ -152,7 +152,7 @@ private fun LoginScreenLayout(
label = { Text(text = stringResource(id = CoreR.string.edit_text_username_hint)) }, label = { Text(text = stringResource(id = CoreR.string.edit_text_username_hint)) },
singleLine = true, singleLine = true,
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
autoCorrect = false, autoCorrectEnabled = false,
keyboardType = KeyboardType.Text, keyboardType = KeyboardType.Text,
imeAction = ImeAction.Next, imeAction = ImeAction.Next,
), ),
@ -175,7 +175,7 @@ private fun LoginScreenLayout(
label = { Text(text = stringResource(id = CoreR.string.edit_text_password_hint)) }, label = { Text(text = stringResource(id = CoreR.string.edit_text_password_hint)) },
singleLine = true, singleLine = true,
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
autoCorrect = false, autoCorrectEnabled = false,
keyboardType = KeyboardType.Password, keyboardType = KeyboardType.Password,
imeAction = ImeAction.Go, imeAction = ImeAction.Go,
), ),

View file

@ -18,12 +18,12 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.media3.common.C import androidx.media3.common.C
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.common.TrackSelectionOverride import androidx.media3.common.TrackSelectionOverride

View file

@ -6,6 +6,8 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -16,8 +18,6 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.MaterialTheme import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
@ -109,7 +109,7 @@ private fun SeasonScreenLayout(
style = MaterialTheme.typography.headlineMedium, style = MaterialTheme.typography.headlineMedium,
) )
} }
TvLazyColumn( LazyColumn(
contentPadding = PaddingValues( contentPadding = PaddingValues(
top = MaterialTheme.spacings.large, top = MaterialTheme.spacings.large,
bottom = MaterialTheme.spacings.large, bottom = MaterialTheme.spacings.large,

View file

@ -13,6 +13,8 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -31,8 +33,6 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.Border import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.Icon import androidx.tv.material3.Icon
@ -172,7 +172,7 @@ private fun ServerSelectScreenLayout(
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
) )
} else { } else {
TvLazyRow( LazyRow(
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large),
contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default), contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default),
modifier = Modifier.focusRequester(focusRequester), modifier = Modifier.focusRequester(focusRequester),

View file

@ -3,6 +3,10 @@ package dev.jdtech.jellyfin.ui
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.GridItemSpan
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -15,10 +19,6 @@ import androidx.compose.ui.res.stringArrayResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.grid.TvGridCells
import androidx.tv.foundation.lazy.grid.TvGridItemSpan
import androidx.tv.foundation.lazy.grid.TvLazyVerticalGrid
import androidx.tv.foundation.lazy.grid.items
import androidx.tv.material3.MaterialTheme import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
@ -88,8 +88,8 @@ private fun SettingsScreenLayout(
when (uiState) { when (uiState) {
is SettingsViewModel.UiState.Normal -> { is SettingsViewModel.UiState.Normal -> {
TvLazyVerticalGrid( LazyVerticalGrid(
columns = TvGridCells.Fixed(3), columns = GridCells.Fixed(3),
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default * 2, vertical = MaterialTheme.spacings.large), contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default * 2, vertical = MaterialTheme.spacings.large),
@ -97,7 +97,7 @@ private fun SettingsScreenLayout(
.fillMaxSize() .fillMaxSize()
.focusRequester(focusRequester), .focusRequester(focusRequester),
) { ) {
item(span = { TvGridItemSpan(this.maxLineSpan) }) { item(span = { GridItemSpan(this.maxLineSpan) }) {
Text( Text(
text = stringResource(id = CoreR.string.title_settings), text = stringResource(id = CoreR.string.title_settings),
style = MaterialTheme.typography.displayMedium, style = MaterialTheme.typography.displayMedium,

View file

@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -23,8 +25,6 @@ import androidx.compose.ui.res.stringArrayResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.MaterialTheme import androidx.tv.material3.MaterialTheme
import androidx.tv.material3.Text import androidx.tv.material3.Text
import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.annotation.Destination
@ -131,7 +131,7 @@ private fun SettingsSubScreenLayout(
Row( Row(
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.large),
) { ) {
TvLazyColumn( LazyColumn(
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
contentPadding = PaddingValues(vertical = MaterialTheme.spacings.large), contentPadding = PaddingValues(vertical = MaterialTheme.spacings.large),
modifier = Modifier modifier = Modifier

View file

@ -1,5 +1,6 @@
package dev.jdtech.jellyfin.ui package dev.jdtech.jellyfin.ui
import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.net.Uri import android.net.Uri
import android.view.KeyEvent import android.view.KeyEvent
@ -16,6 +17,10 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -44,10 +49,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.toSize import androidx.compose.ui.unit.toSize
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
import androidx.tv.foundation.lazy.list.rememberTvLazyListState
import androidx.tv.material3.Button import androidx.tv.material3.Button
import androidx.tv.material3.Icon import androidx.tv.material3.Icon
import androidx.tv.material3.LocalContentColor import androidx.tv.material3.LocalContentColor
@ -136,7 +137,7 @@ private fun ShowScreenLayout(
) { ) {
val focusRequester = remember { FocusRequester() } val focusRequester = remember { FocusRequester() }
val listState = rememberTvLazyListState() val listState = rememberLazyListState()
val listSize = remember { mutableIntStateOf(2) } val listSize = remember { mutableIntStateOf(2) }
var currentIndex by remember { mutableIntStateOf(0) } var currentIndex by remember { mutableIntStateOf(0) }
@ -179,7 +180,7 @@ private fun ShowScreenLayout(
), ),
) )
} }
TvLazyColumn( LazyColumn(
state = listState, state = listState,
contentPadding = PaddingValues(top = 112.dp, bottom = MaterialTheme.spacings.large), contentPadding = PaddingValues(top = 112.dp, bottom = MaterialTheme.spacings.large),
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.medium), verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.medium),
@ -364,7 +365,7 @@ private fun ShowScreenLayout(
} }
} }
item { item {
TvLazyRow( LazyRow(
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default * 2), contentPadding = PaddingValues(horizontal = MaterialTheme.spacings.default * 2),
) { ) {

View file

@ -11,6 +11,8 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.shape.CircleShape
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -29,8 +31,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.tv.foundation.lazy.list.TvLazyRow
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.Border import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.Icon import androidx.tv.material3.Icon
@ -146,7 +146,7 @@ private fun UserSelectScreenLayout(
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
) )
} else { } else {
TvLazyRow( LazyRow(
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.default),
contentPadding = PaddingValues(MaterialTheme.spacings.default), contentPadding = PaddingValues(MaterialTheme.spacings.default),
modifier = Modifier.focusRequester(focusRequester), modifier = Modifier.focusRequester(focusRequester),

View file

@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -18,7 +19,6 @@ import androidx.compose.ui.res.stringArrayResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.material3.Border import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale import androidx.tv.material3.ClickableSurfaceScale
@ -56,7 +56,7 @@ fun SettingsDetailsCard(
Text(text = stringResource(id = it), style = MaterialTheme.typography.bodyMedium) Text(text = stringResource(id = it), style = MaterialTheme.typography.bodyMedium)
} }
Spacer(modifier = Modifier.height(MaterialTheme.spacings.default)) Spacer(modifier = Modifier.height(MaterialTheme.spacings.default))
TvLazyColumn( LazyColumn(
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.medium - MaterialTheme.spacings.extraSmall), verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.medium - MaterialTheme.spacings.extraSmall),
contentPadding = PaddingValues(vertical = MaterialTheme.spacings.extraSmall), contentPadding = PaddingValues(vertical = MaterialTheme.spacings.extraSmall),
) { ) {

View file

@ -10,6 +10,8 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -19,8 +21,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.media3.common.C import androidx.media3.common.C
import androidx.tv.foundation.lazy.list.TvLazyColumn
import androidx.tv.foundation.lazy.list.items
import androidx.tv.material3.Border import androidx.tv.material3.Border
import androidx.tv.material3.ClickableSurfaceDefaults import androidx.tv.material3.ClickableSurfaceDefaults
import androidx.tv.material3.ClickableSurfaceScale import androidx.tv.material3.ClickableSurfaceScale
@ -65,7 +65,7 @@ fun VideoPlayerTrackSelectorDialog(
style = MaterialTheme.typography.headlineMedium, style = MaterialTheme.typography.headlineMedium,
) )
Spacer(modifier = Modifier.height(MaterialTheme.spacings.medium)) Spacer(modifier = Modifier.height(MaterialTheme.spacings.medium))
TvLazyColumn( LazyColumn(
verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.medium - MaterialTheme.spacings.extraSmall), verticalArrangement = Arrangement.spacedBy(MaterialTheme.spacings.medium - MaterialTheme.spacings.extraSmall),
contentPadding = PaddingValues(vertical = MaterialTheme.spacings.extraSmall), contentPadding = PaddingValues(vertical = MaterialTheme.spacings.extraSmall),
) { ) {

View file

@ -49,13 +49,13 @@ ktlint {
} }
dependencies { dependencies {
val composeBom = platform(libs.androidx.compose.bom) // val composeBom = platform(libs.androidx.compose.bom)
implementation(projects.data) implementation(projects.data)
implementation(projects.preferences) implementation(projects.preferences)
implementation(projects.player.core) implementation(projects.player.core)
implementation(libs.androidx.appcompat) implementation(libs.androidx.appcompat)
implementation(composeBom) // implementation(composeBom)
implementation(libs.androidx.compose.ui) implementation(libs.androidx.compose.ui)
implementation(libs.androidx.core) implementation(libs.androidx.core)
implementation(libs.androidx.hilt.work) implementation(libs.androidx.hilt.work)

View file

@ -6,8 +6,8 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.input.key.onKeyEvent import androidx.compose.ui.input.key.onKeyEvent
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.repeatOnLifecycle import androidx.lifecycle.repeatOnLifecycle
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow

View file

@ -4,7 +4,7 @@ android-desugar-jdk-libs = "2.0.4"
android-plugin = "8.5.1" android-plugin = "8.5.1"
androidx-activity = "1.9.0" androidx-activity = "1.9.0"
androidx-appcompat = "1.7.0" androidx-appcompat = "1.7.0"
androidx-compose-bom = "2024.06.00" androidx-compose = "1.7.0-beta05"
androidx-compose-material3 = "1.2.1" androidx-compose-material3 = "1.2.1"
androidx-constraintlayout = "2.1.4" androidx-constraintlayout = "2.1.4"
androidx-core = "1.13.1" androidx-core = "1.13.1"
@ -22,7 +22,6 @@ androidx-test-expresso = "3.6.1"
androidx-test-junit = "1.2.1" androidx-test-junit = "1.2.1"
androidx-test-rules = "1.6.1" androidx-test-rules = "1.6.1"
androidx-test-runner = "1.6.1" androidx-test-runner = "1.6.1"
androidx-tv = "1.0.0-alpha11"
androidx-tv-material3 = "1.0.0-rc01" androidx-tv-material3 = "1.0.0-rc01"
androidx-work = "2.9.0" androidx-work = "2.9.0"
coil = "2.6.0" coil = "2.6.0"
@ -46,11 +45,12 @@ android-desugar-jdk = { group = "com.android.tools", name = "desugar_jdk_libs",
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "androidx-activity" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "androidx-activity" }
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity" } androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity" }
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidx-appcompat" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "androidx-appcompat" }
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidx-compose-bom" } androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation", version.ref = "androidx-compose" }
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-compose-material3" } androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidx-compose-material3" }
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime", version.ref = "androidx-compose" }
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } androidx-compose-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "androidx-compose" }
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "androidx-compose" }
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview", version.ref = "androidx-compose" }
androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "androidx-constraintlayout" }
androidx-core = { group = "androidx.core", name = "core", version.ref = "androidx-core" } androidx-core = { group = "androidx.core", name = "core", version.ref = "androidx-core" }
androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidx-hilt" } androidx-hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "androidx-hilt" }
@ -79,7 +79,6 @@ androidx-test-expresso = { group = "androidx.test.espresso", name = "espresso-co
androidx-test-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-junit" } androidx-test-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-junit" }
androidx-test-rules = { group = "androidx.test" , name = "rules", version.ref = "androidx-test-rules" } androidx-test-rules = { group = "androidx.test" , name = "rules", version.ref = "androidx-test-rules" }
androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidx-test-runner" } androidx-test-runner = { group = "androidx.test", name = "runner", version.ref = "androidx-test-runner" }
androidx-tv-foundation = { group = "androidx.tv", name = "tv-foundation", version.ref = "androidx-tv" }
androidx-tv-material = { group = "androidx.tv", name = "tv-material", version.ref = "androidx-tv-material3" } androidx-tv-material = { group = "androidx.tv", name = "tv-material", version.ref = "androidx-tv-material3" }
androidx-work = { group = "androidx.work", name = "work-runtime", version.ref = "androidx-work" } androidx-work = { group = "androidx.work", name = "work-runtime", version.ref = "androidx-work" }
androidx-work-testing = { group = "androidx.work", name = "work-testing", version.ref = "androidx-work" } androidx-work-testing = { group = "androidx.work", name = "work-testing", version.ref = "androidx-work" }