update scaffolds

This commit is contained in:
2026-08-15 12:25:09 +03:00
parent 236ebb1462
commit 4f7d3dc6bc
26 changed files with 201 additions and 201 deletions
@@ -17,7 +17,7 @@ import ru.shadowsparky.vbox.shared.presentation.nav.Route
@Composable
fun createNavigationList(): List<NavigationEntry<Route>> {
val list = listOf(
return listOf(
NavigationEntry(
Route.default,
stringResource(Res.string.recommendations),
@@ -44,7 +44,6 @@ fun createNavigationList(): List<NavigationEntry<Route>> {
painterResource(Res.drawable.settings)
)
)
return list
}
fun List<NavigationEntry<*>>.findTitle(route: Route): String? {
@@ -29,7 +29,7 @@ fun MainScreen(route: Route, child: Child, root: VBoxRootComponent) {
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun BaseMainScreen(
fun MainScreenScaffold(
appBar: @Composable () -> Unit,
route: Route,
onNavigate: (Route) -> Unit,
@@ -47,13 +47,9 @@ fun BaseMainScreen(
@Composable
private fun MainScreenInternal(route: Route, child: Child, onNavigate: (Route) -> Unit) {
val navList = createNavigationList()
BaseMainScreen(
MainScreenScaffold(
appBar = {
navList.findTitle(route)?.let { title ->
TopAppBar(
title = { Text(title) }
)
}
navList.findTitle(route)?.let { title -> TopAppBar(title = { Text(title) }) }
},
route = route,
onNavigate = onNavigate,
@@ -1,15 +1,9 @@
package ru.shadowsparky.vbox.shared.presentation
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import com.seiko.imageloader.LocalImageLoader
import ru.shadowsparky.koin
import ru.shadowsparky.ui.nav.Nav
import ru.shadowsparky.updater.presentation.UpdateDialog
import ru.shadowsparky.vbox.shared.presentation.list.VideoScreen
@@ -27,11 +21,6 @@ import ru.shadowsparky.vbox.shared.presentation.settings.register.RegisterScreen
import ru.shadowsparky.vbox.shared.presentation.settings.serv.EditServScreen
import ru.shadowsparky.vbox.shared.presentation.settings.tag.TagScreen
@Composable
fun Modifier.imePaddingInternal(): Modifier {
return koin.get<UiConfiguration>().imePadding(this)
}
@Composable
fun Nav(root: VBoxRootComponent, onAttach: @Composable () -> Unit = {}) {
CompositionLocalProvider(
@@ -74,21 +63,3 @@ private fun NavInternal(root: VBoxRootComponent, onAttach: @Composable () -> Uni
UpdateDialog(root.updateComponent)
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AppScaffold(
scrollBehavior: TopAppBarScrollBehavior? = null,
snackbarState: SnackbarHostState? = null,
modifier: Modifier = Modifier,
content: @Composable (padding: PaddingValues) -> Unit,
appBar: @Composable () -> Unit
) {
ru.shadowsparky.ui.AppScaffold(
modifier,
scrollBehavior,
snackbarState,
content = content,
appBar = { appBar() }
)
}
@@ -1,13 +0,0 @@
package ru.shadowsparky.vbox.shared.presentation
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import org.koin.core.annotation.Single
@Single
class UiConfiguration {
@Composable
fun imePadding(modifier: Modifier): Modifier {
return modifier
}
}
@@ -11,14 +11,14 @@ import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.chat.presentation.ChatComponent
import ru.shadowsparky.chat.presentation.ChatContent
import ru.shadowsparky.ui.components.TopAppBar
import ru.shadowsparky.vbox.shared.presentation.BaseMainScreen
import ru.shadowsparky.vbox.shared.presentation.MainScreenScaffold
import ru.shadowsparky.vbox.shared.presentation.nav.Route
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun ChatScreen(component: ChatComponent, route: Route, onNavigate: (Route) -> Unit) {
val state by component.state.subscribeAsState()
BaseMainScreen(
MainScreenScaffold(
appBar = {
TopAppBar(title = { Text(stringResource(Res.string.chat_title_app_bar)) })
},
@@ -39,12 +39,12 @@ import androidx.compose.ui.unit.dp
import com.seiko.imageloader.rememberImagePainter
import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.ErrorContent
import ru.shadowsparky.ui.components.LazyVerticalGrid
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.ui.theme.focusBorder
import ru.shadowsparky.vbox.shared.domain.model.VideoItem
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
import ru.shadowsparky.vbox.shared.presentation.search.AppBarWithSearch
@OptIn(ExperimentalMaterial3Api::class)
@@ -5,8 +5,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -25,7 +25,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
@@ -45,6 +44,7 @@ import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.components.ExpressiveLazyColumn
import ru.shadowsparky.ui.components.IconButton
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.vbox.shared.domain.EpisodeOfflineVideo
import ru.shadowsparky.vbox.shared.domain.OfflineState
@@ -41,7 +41,6 @@ import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -68,13 +67,14 @@ import com.seiko.imageloader.rememberImagePainter
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.domain.Clip
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.components.ErrorContent
import ru.shadowsparky.ui.components.IconButton
import ru.shadowsparky.ui.components.LazyColumn
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.ui.components.TopAppBar
import ru.shadowsparky.vbox.shared.domain.model.VideoDetails
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
import ru.shadowsparky.vbox.shared.presentation.getClipboardText
import ru.shadowsparky.vbox.shared.presentation.settings.tag.LinkTagBottomSheet
@@ -24,7 +24,6 @@ import androidx.compose.material3.CircularWavyProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -44,15 +43,16 @@ import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.domain.Clip
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.components.ErrorContent
import ru.shadowsparky.ui.components.ExpressiveLazyColumn
import ru.shadowsparky.ui.components.IconButton
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.ui.components.TopAppBar
import ru.shadowsparky.vbox.shared.domain.OfflineState
import ru.shadowsparky.vbox.shared.domain.OfflineVideo
import ru.shadowsparky.vbox.shared.domain.model.Episode
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
import ru.shadowsparky.vbox.shared.presentation.getClipboardText
@OptIn(ExperimentalMaterial3Api::class)
@@ -20,13 +20,13 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.components.ErrorContent
import ru.shadowsparky.ui.components.ExpressiveLazyColumn
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.ui.components.TopAppBar
import ru.shadowsparky.vbox.shared.domain.model.Season
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -15,7 +15,6 @@ import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Checkbox
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -30,10 +29,11 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.components.AlertContent
import ru.shadowsparky.ui.components.IconButton
import ru.shadowsparky.ui.components.LazyColumn
import ru.shadowsparky.ui.components.TopAppBar
import ru.shadowsparky.vbox.shared.domain.tag.TagInfo
import ru.shadowsparky.vbox.shared.presentation.BaseMainScreen
import ru.shadowsparky.vbox.shared.presentation.MainScreenScaffold
import ru.shadowsparky.vbox.shared.presentation.list.VideoScreenContent
import ru.shadowsparky.vbox.shared.presentation.nav.Route
@@ -42,7 +42,7 @@ import ru.shadowsparky.vbox.shared.presentation.nav.Route
fun SavedMovieScreen(comp: SavedMovieComponent, route: Route, onNavigate: (Route) -> Unit) {
val tags by comp.userTags.collectAsStateWithLifecycle(null)
var filterBottomSheetVisible by rememberSaveable { mutableStateOf(false) }
BaseMainScreen(
MainScreenScaffold(
appBar = {
TopAppBar(
title = { Text(stringResource(Res.string.saved_movies)) },
@@ -24,7 +24,6 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LinearWavyProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
@@ -65,8 +64,8 @@ import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.components.AppBarWithSearch
import ru.shadowsparky.ui.components.ExpressiveLazyColumn
import ru.shadowsparky.vbox.shared.presentation.BaseMainScreen
import ru.shadowsparky.vbox.shared.presentation.imePaddingInternal
import ru.shadowsparky.ui.components.IconButton
import ru.shadowsparky.vbox.shared.presentation.MainScreenScaffold
import ru.shadowsparky.vbox.shared.presentation.nav.Route
@OptIn(ExperimentalMaterial3Api::class)
@@ -80,7 +79,7 @@ fun SearchScreen(
var textFieldValue by rememberSaveable(stateSaver = TextFieldValue.Saver) {
mutableStateOf(TextFieldValue())
}
BaseMainScreen(
MainScreenScaffold(
appBar = {
SearchAppBar(
textFieldValue = textFieldValue,
@@ -153,8 +152,7 @@ fun OldSearchInfo(
val keyboardController = LocalSoftwareKeyboardController.current
val nestedScrollConnection = remember { HideKeyboardConnection { keyboardController } }
ExpressiveLazyColumn(
modifier = Modifier.nestedScroll(nestedScrollConnection)
.imePaddingInternal(),
modifier = Modifier.nestedScroll(nestedScrollConnection),
contentPadding = contentPaddingValues,
content = {
section {
@@ -35,6 +35,7 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.flow.Flow
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.components.ErrorAlert
import ru.shadowsparky.ui.components.Loading
@@ -42,7 +43,6 @@ import ru.shadowsparky.ui.components.PasswordTextField
import ru.shadowsparky.vbox.shared.domain.model.EmptyLoginException
import ru.shadowsparky.vbox.shared.domain.model.EmptyPasswordException
import ru.shadowsparky.vbox.shared.domain.model.LoginException
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
@Composable
fun AuthScreen(comp: AuthComponent) {
@@ -32,10 +32,10 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.ui.components.PasswordTextField
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
import ru.shadowsparky.vbox.shared.presentation.settings.auth.AuthState
@OptIn(ExperimentalMaterial3Api::class)
@@ -11,7 +11,7 @@ import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import ru.shadowsparky.ui.components.IconButton
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@@ -34,10 +34,10 @@ import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
import org.jetbrains.compose.resources.painterResource
import org.jetbrains.compose.resources.stringResource
import ru.shadowsparky.ui.AppScaffold
import ru.shadowsparky.ui.components.BackButton
import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.ui.components.TopAppBar
import ru.shadowsparky.vbox.shared.presentation.AppScaffold
@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class)
@Composable