ui fixes
This commit is contained in:
@@ -39,3 +39,8 @@
|
|||||||
-keep class ru.shadowsparky.vbox.shared.domain.RemoteEvent$OnSaved { *; }
|
-keep class ru.shadowsparky.vbox.shared.domain.RemoteEvent$OnSaved { *; }
|
||||||
-keep class ru.shadowsparky.vbox.shared.domain.RemoteEvent$OnRecent { *; }
|
-keep class ru.shadowsparky.vbox.shared.domain.RemoteEvent$OnRecent { *; }
|
||||||
-keep class ru.shadowsparky.vbox.shared.domain.RemoteEvent$OnSearch { *; }
|
-keep class ru.shadowsparky.vbox.shared.domain.RemoteEvent$OnSearch { *; }
|
||||||
|
|
||||||
|
# Сохраняем все классы, реализующие Parcelable, и их обязательное поле CREATOR
|
||||||
|
-keepclassmembers class * implements android.os.Parcelable {
|
||||||
|
static ** CREATOR;
|
||||||
|
}
|
||||||
|
|||||||
-12
@@ -2,7 +2,6 @@ package ru.shadowsparky.vbox.shared.presentation
|
|||||||
|
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
import androidx.compose.material3.LargeTopAppBar
|
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBar
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
@@ -13,8 +12,6 @@ import androidx.compose.ui.Modifier
|
|||||||
import ru.shadowsparky.ui.BaseScreen
|
import ru.shadowsparky.ui.BaseScreen
|
||||||
import ru.shadowsparky.ui.LocalBlurState
|
import ru.shadowsparky.ui.LocalBlurState
|
||||||
import ru.shadowsparky.ui.applyBlurEffect
|
import ru.shadowsparky.ui.applyBlurEffect
|
||||||
import ru.shadowsparky.ui.currentWindowType
|
|
||||||
import ru.shadowsparky.ui.isCompact
|
|
||||||
import ru.shadowsparky.ui.rememberBlurState
|
import ru.shadowsparky.ui.rememberBlurState
|
||||||
import ru.shadowsparky.ui.theme.ComponentDefaults
|
import ru.shadowsparky.ui.theme.ComponentDefaults
|
||||||
import ru.shadowsparky.vbox.shared.presentation.list.VideoContent
|
import ru.shadowsparky.vbox.shared.presentation.list.VideoContent
|
||||||
@@ -65,14 +62,6 @@ private fun MainScreenInternal(route: Route, child: Child, onNavigate: (Route) -
|
|||||||
BaseMainScreen(
|
BaseMainScreen(
|
||||||
appBar = {
|
appBar = {
|
||||||
navList.findTitle(route)?.let { title ->
|
navList.findTitle(route)?.let { title ->
|
||||||
if (currentWindowType().isCompact) {
|
|
||||||
LargeTopAppBar(
|
|
||||||
title = { Text(title) },
|
|
||||||
scrollBehavior = scrollBehavior,
|
|
||||||
modifier = Modifier.applyBlurEffect(LocalBlurState.current),
|
|
||||||
colors = ComponentDefaults.topAppBarColors()
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = { Text(title) },
|
title = { Text(title) },
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
@@ -80,7 +69,6 @@ private fun MainScreenInternal(route: Route, child: Child, onNavigate: (Route) -
|
|||||||
colors = ComponentDefaults.topAppBarColors()
|
colors = ComponentDefaults.topAppBarColors()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
},
|
||||||
route = route,
|
route = route,
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
|
|||||||
+4
-1
@@ -1,6 +1,8 @@
|
|||||||
package ru.shadowsparky.vbox.shared.presentation.offline
|
package ru.shadowsparky.vbox.shared.presentation.offline
|
||||||
|
|
||||||
import com.arkivanov.decompose.ComponentContext
|
import com.arkivanov.decompose.ComponentContext
|
||||||
|
import kotlinx.coroutines.FlowPreview
|
||||||
|
import kotlinx.coroutines.flow.debounce
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.koin.core.annotation.Factory
|
import org.koin.core.annotation.Factory
|
||||||
import org.koin.core.annotation.Named
|
import org.koin.core.annotation.Named
|
||||||
@@ -20,7 +22,8 @@ class OfflineVideoComponent(
|
|||||||
private val showPlayer: (Route.Overview.Player) -> Unit,
|
private val showPlayer: (Route.Overview.Player) -> Unit,
|
||||||
val onBack: () -> Unit
|
val onBack: () -> Unit
|
||||||
) : ComponentContext by context {
|
) : ComponentContext by context {
|
||||||
val info = interactor.info
|
@OptIn(FlowPreview::class)
|
||||||
|
val info = interactor.info.debounce(300)
|
||||||
private val componentScope = createComponentScope()
|
private val componentScope = createComponentScope()
|
||||||
|
|
||||||
fun play(item: OfflineVideo) {
|
fun play(item: OfflineVideo) {
|
||||||
|
|||||||
+1
-1
@@ -56,7 +56,7 @@ fun SeasonOverviewScreen(component: SeasonOverviewComponent) {
|
|||||||
title = {
|
title = {
|
||||||
Text(stringResource(Res.string.seasons_overview))
|
Text(stringResource(Res.string.seasons_overview))
|
||||||
}, navigationIcon = {
|
}, navigationIcon = {
|
||||||
BackButton { component.doBack }
|
BackButton { component.doBack() }
|
||||||
}, scrollBehavior = scrollBehavior,
|
}, scrollBehavior = scrollBehavior,
|
||||||
colors = ComponentDefaults.topAppBarColors(),
|
colors = ComponentDefaults.topAppBarColors(),
|
||||||
modifier = Modifier.applyBlurEffect(blurState)
|
modifier = Modifier.applyBlurEffect(blurState)
|
||||||
|
|||||||
+23
-16
@@ -2,6 +2,7 @@ package ru.shadowsparky.vbox.shared.presentation.saved
|
|||||||
|
|
||||||
import androiddev.apps.vbox.client.shared.generated.resources.Res
|
import androiddev.apps.vbox.client.shared.generated.resources.Res
|
||||||
import androiddev.apps.vbox.client.shared.generated.resources.filter_list
|
import androiddev.apps.vbox.client.shared.generated.resources.filter_list
|
||||||
|
import androiddev.apps.vbox.client.shared.generated.resources.saved_movies
|
||||||
import androiddev.apps.vbox.client.shared.generated.resources.saved_movies_not_found
|
import androiddev.apps.vbox.client.shared.generated.resources.saved_movies_not_found
|
||||||
import androiddev.apps.vbox.client.shared.generated.resources.user_tags
|
import androiddev.apps.vbox.client.shared.generated.resources.user_tags
|
||||||
import androiddev.apps.vbox.client.shared.generated.resources.user_tags_filter_disable
|
import androiddev.apps.vbox.client.shared.generated.resources.user_tags_filter_disable
|
||||||
@@ -22,6 +23,7 @@ import androidx.compose.material3.ModalBottomSheet
|
|||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TopAppBar
|
import androidx.compose.material3.TopAppBar
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
|
import androidx.compose.material3.rememberModalBottomSheetState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
@@ -33,12 +35,12 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import org.jetbrains.compose.resources.painterResource
|
import org.jetbrains.compose.resources.painterResource
|
||||||
import org.jetbrains.compose.resources.stringResource
|
import org.jetbrains.compose.resources.stringResource
|
||||||
|
import ru.shadowsparky.ui.LocalBlurState
|
||||||
|
import ru.shadowsparky.ui.applyBlurEffect
|
||||||
import ru.shadowsparky.ui.components.LazyColumn
|
import ru.shadowsparky.ui.components.LazyColumn
|
||||||
import ru.shadowsparky.ui.theme.ComponentDefaults
|
import ru.shadowsparky.ui.theme.ComponentDefaults
|
||||||
import ru.shadowsparky.vbox.shared.domain.tag.TagInfo
|
import ru.shadowsparky.vbox.shared.domain.tag.TagInfo
|
||||||
import ru.shadowsparky.vbox.shared.presentation.BaseMainScreen
|
import ru.shadowsparky.vbox.shared.presentation.BaseMainScreen
|
||||||
import ru.shadowsparky.vbox.shared.presentation.createNavigationList
|
|
||||||
import ru.shadowsparky.vbox.shared.presentation.findTitle
|
|
||||||
import ru.shadowsparky.vbox.shared.presentation.list.VideoScreenContent
|
import ru.shadowsparky.vbox.shared.presentation.list.VideoScreenContent
|
||||||
import ru.shadowsparky.vbox.shared.presentation.nav.Route
|
import ru.shadowsparky.vbox.shared.presentation.nav.Route
|
||||||
|
|
||||||
@@ -46,20 +48,11 @@ import ru.shadowsparky.vbox.shared.presentation.nav.Route
|
|||||||
@Composable
|
@Composable
|
||||||
fun SavedMovieScreen(comp: SavedMovieScreenComponent, route: Route, onNavigate: (Route) -> Unit) {
|
fun SavedMovieScreen(comp: SavedMovieScreenComponent, route: Route, onNavigate: (Route) -> Unit) {
|
||||||
val tags by comp.userTags.collectAsStateWithLifecycle(null)
|
val tags by comp.userTags.collectAsStateWithLifecycle(null)
|
||||||
val navList = createNavigationList()
|
|
||||||
var filterBottomSheetVisible by rememberSaveable { mutableStateOf(false) }
|
var filterBottomSheetVisible by rememberSaveable { mutableStateOf(false) }
|
||||||
if (filterBottomSheetVisible) {
|
|
||||||
FilterBottomSheet(
|
|
||||||
comp.filterTag,
|
|
||||||
tags,
|
|
||||||
{ filterBottomSheetVisible = false },
|
|
||||||
onFilterBy = { comp.filterByTag(it) }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
BaseMainScreen(
|
BaseMainScreen(
|
||||||
appBar = {
|
appBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = { navList.findTitle(route)?.let { Text(it) } },
|
title = { Text(stringResource(Res.string.saved_movies)) },
|
||||||
actions = {
|
actions = {
|
||||||
IconButton(
|
IconButton(
|
||||||
onClick = { filterBottomSheetVisible = true }
|
onClick = { filterBottomSheetVisible = true }
|
||||||
@@ -70,13 +63,24 @@ fun SavedMovieScreen(comp: SavedMovieScreenComponent, route: Route, onNavigate:
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
colors = ComponentDefaults.topAppBarColors()
|
colors = ComponentDefaults.topAppBarColors(),
|
||||||
|
modifier = Modifier.applyBlurEffect(LocalBlurState.current)
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
route = route,
|
route = route,
|
||||||
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
|
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
|
||||||
onNavigate = onNavigate,
|
onNavigate = onNavigate,
|
||||||
content = { SavedMovieContent(comp, it) }
|
content = {
|
||||||
|
if (filterBottomSheetVisible) {
|
||||||
|
FilterBottomSheet(
|
||||||
|
comp.filterTag,
|
||||||
|
tags,
|
||||||
|
{ filterBottomSheetVisible = false },
|
||||||
|
onFilterBy = { comp.filterByTag(it) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
SavedMovieContent(comp, it)
|
||||||
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,8 +107,11 @@ private fun FilterBottomSheet(
|
|||||||
onFilterBy: (String?) -> Unit
|
onFilterBy: (String?) -> Unit
|
||||||
) {
|
) {
|
||||||
allTags ?: return
|
allTags ?: return
|
||||||
ModalBottomSheet(onDismissRequest = onDismiss) {
|
ModalBottomSheet(
|
||||||
LazyColumn(modifier = Modifier.fillMaxWidth().padding(8.dp)) {
|
onDismissRequest = onDismiss,
|
||||||
|
sheetState = rememberModalBottomSheetState(true)
|
||||||
|
) {
|
||||||
|
LazyColumn(modifier = Modifier.padding(8.dp)) {
|
||||||
item {
|
item {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(Res.string.user_tags),
|
text = stringResource(Res.string.user_tags),
|
||||||
|
|||||||
+5
-1
@@ -16,6 +16,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
|||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.ModalBottomSheet
|
import androidx.compose.material3.ModalBottomSheet
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
|
import androidx.compose.material3.rememberModalBottomSheetState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
@@ -35,7 +36,10 @@ fun LinkTagBottomSheet(
|
|||||||
requestTagsScreen: () -> Unit,
|
requestTagsScreen: () -> Unit,
|
||||||
updateTag: (String, Boolean) -> Unit
|
updateTag: (String, Boolean) -> Unit
|
||||||
) {
|
) {
|
||||||
ModalBottomSheet(onDismissRequest = onDismiss) {
|
ModalBottomSheet(
|
||||||
|
onDismissRequest = onDismiss,
|
||||||
|
sheetState = rememberModalBottomSheetState(true)
|
||||||
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.fillMaxWidth().padding(8.dp),
|
modifier = Modifier.fillMaxWidth().padding(8.dp),
|
||||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||||
|
|||||||
+5
-1
@@ -22,6 +22,7 @@ import androidx.compose.material3.ModalBottomSheet
|
|||||||
import androidx.compose.material3.OutlinedButton
|
import androidx.compose.material3.OutlinedButton
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.material3.TextField
|
import androidx.compose.material3.TextField
|
||||||
|
import androidx.compose.material3.rememberModalBottomSheetState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
@@ -121,7 +122,10 @@ private fun AddTagBottomSheet(
|
|||||||
keyboardController?.show()
|
keyboardController?.show()
|
||||||
}
|
}
|
||||||
|
|
||||||
ModalBottomSheet(onDismissRequest = onDismiss) {
|
ModalBottomSheet(
|
||||||
|
onDismissRequest = onDismiss,
|
||||||
|
sheetState = rememberModalBottomSheetState(true)
|
||||||
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.padding(8.dp),
|
modifier = Modifier.padding(8.dp),
|
||||||
verticalArrangement = Arrangement.spacedBy(6.dp)
|
verticalArrangement = Arrangement.spacedBy(6.dp)
|
||||||
|
|||||||
Reference in New Issue
Block a user