refactor: replace rememberModalBottomSheetState with rememberNuvioBottomSheetState across multiple components

This commit is contained in:
tapframe 2026-06-02 21:10:59 +05:30
parent 9d2fe291e8
commit fc272ef3a6
10 changed files with 43 additions and 29 deletions

View file

@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
@ -15,8 +16,6 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.SheetState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
@ -27,12 +26,25 @@ import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.nuvio.app.isIos
import com.mohamedrejeb.calf.ui.sheet.AdaptiveBottomSheet
import com.mohamedrejeb.calf.ui.sheet.AdaptiveSheetState
import com.mohamedrejeb.calf.ui.sheet.rememberAdaptiveSheetState
typealias NuvioBottomSheetState = AdaptiveSheetState
@Composable
@OptIn(ExperimentalMaterial3Api::class)
fun rememberNuvioBottomSheetState(
skipPartiallyExpanded: Boolean = !isIos,
): NuvioBottomSheetState =
rememberAdaptiveSheetState(skipPartiallyExpanded = skipPartiallyExpanded)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun NuvioModalBottomSheet(
onDismissRequest: () -> Unit,
sheetState: SheetState,
sheetState: NuvioBottomSheetState,
modifier: Modifier = Modifier,
containerColor: Color = MaterialTheme.colorScheme.surface,
contentColor: Color = MaterialTheme.colorScheme.onSurface,
@ -40,10 +52,16 @@ fun NuvioModalBottomSheet(
showDragHandle: Boolean = true,
content: @Composable ColumnScope.() -> Unit,
) {
ModalBottomSheet(
val sheetModifier = if (isIos) {
modifier.fillMaxSize()
} else {
modifier
}
AdaptiveBottomSheet(
onDismissRequest = onDismissRequest,
sheetState = sheetState,
modifier = modifier,
adaptiveSheetState = sheetState,
modifier = sheetModifier,
containerColor = containerColor,
contentColor = contentColor,
shape = shape,
@ -104,7 +122,7 @@ fun NuvioBottomSheetActionRow(
@OptIn(ExperimentalMaterial3Api::class)
suspend fun dismissNuvioBottomSheet(
sheetState: SheetState,
sheetState: NuvioBottomSheetState,
onDismiss: () -> Unit,
) {
if (sheetState.isVisible) {
@ -122,4 +140,4 @@ private fun NuvioBottomSheetDragHandle() {
.clip(RoundedCornerShape(999.dp))
.background(MaterialTheme.colorScheme.outlineVariant.copy(alpha = 0.65f)),
)
}
}

View file

@ -17,7 +17,6 @@ import androidx.compose.material.icons.filled.Replay
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
@ -52,7 +51,7 @@ fun NuvioContinueWatchingActionSheet(
onRemove: () -> Unit,
) {
if (item == null) return
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
fun dismissAfter(action: () -> Unit) {

View file

@ -18,9 +18,7 @@ import androidx.compose.material.icons.rounded.KeyboardArrowDown
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SheetState
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@ -51,7 +49,7 @@ fun NuvioDropdownChip(
modifier: Modifier = Modifier,
) {
var isSheetVisible by remember { mutableStateOf(false) }
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
Row(
@ -117,7 +115,7 @@ private fun NuvioDropdownOptionsSheet(
title: String,
options: List<NuvioDropdownOption>,
selectedKey: String?,
sheetState: SheetState,
sheetState: NuvioBottomSheetState,
onDismiss: () -> Unit,
onSelected: (NuvioDropdownOption) -> Unit,
) {

View file

@ -24,7 +24,6 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
@ -58,7 +57,7 @@ fun NuvioPosterActionSheet(
onToggleWatched: () -> Unit,
) {
if (item == null) return
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
NuvioModalBottomSheet(

View file

@ -44,7 +44,7 @@ import androidx.compose.material3.Switch
import androidx.compose.material3.SwitchDefaults
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.rememberModalBottomSheetState
import com.nuvio.app.core.ui.rememberNuvioBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
@ -1918,7 +1918,7 @@ private fun GenrePickerSheet(
onSelect: (String?) -> Unit,
onDismiss: () -> Unit,
) {
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
NuvioModalBottomSheet(
onDismissRequest = onDismiss,

View file

@ -24,7 +24,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import com.nuvio.app.core.ui.rememberNuvioBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment
@ -51,7 +51,7 @@ fun CommentDetailSheet(
onNext: () -> Unit,
onDismiss: () -> Unit,
) {
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val scrollState = rememberScrollState()
LaunchedEffect(comment.id) {

View file

@ -12,7 +12,7 @@ import androidx.compose.material.icons.filled.PlaylistAddCheckCircle
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.rememberModalBottomSheetState
import com.nuvio.app.core.ui.rememberNuvioBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
@ -46,7 +46,7 @@ fun EpisodeWatchedActionSheet(
showPlayManually: Boolean = false,
onPlayManually: (() -> Unit)? = null,
) {
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
NuvioModalBottomSheet(
@ -140,7 +140,7 @@ fun SeasonWatchedActionSheet(
onToggleSeasonWatched: () -> Unit,
onMarkPreviousSeasonsWatched: () -> Unit,
) {
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
NuvioModalBottomSheet(

View file

@ -18,7 +18,7 @@ import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.rememberModalBottomSheetState
import com.nuvio.app.core.ui.rememberNuvioBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@ -67,7 +67,7 @@ fun TrailerPlayerPopup(
}
}.joinToString(separator = "")
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
var playerError by remember(playbackSource?.videoUrl, playbackSource?.audioUrl) {
mutableStateOf<String?>(null)

View file

@ -65,7 +65,7 @@ import nuvio.composeapp.generated.resources.settings_appearance_section_theme
import org.jetbrains.compose.resources.StringResource
import org.jetbrains.compose.resources.stringResource
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.rememberModalBottomSheetState
import com.nuvio.app.core.ui.rememberNuvioBottomSheetState
@OptIn(ExperimentalLayoutApi::class)
internal fun LazyListScope.appearanceSettingsContent(
@ -196,7 +196,7 @@ private fun AppearanceLanguageBottomSheet(
onLanguageSelected: (AppLanguage) -> Unit,
onDismiss: () -> Unit,
) {
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
val options = remember {
AppLanguage.entries.map { language ->

View file

@ -86,7 +86,7 @@ import com.nuvio.app.core.ui.dismissNuvioBottomSheet
import com.nuvio.app.features.downloads.DownloadsRepository
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.rememberModalBottomSheetState
import com.nuvio.app.core.ui.rememberNuvioBottomSheetState
import coil3.compose.AsyncImage
import com.nuvio.app.core.ui.nuvioSafeBottomPadding
import com.nuvio.app.features.debrid.DebridProviders
@ -1126,7 +1126,7 @@ private fun StreamActionsSheet(
) {
if (stream == null) return
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val sheetState = rememberNuvioBottomSheetState()
val coroutineScope = rememberCoroutineScope()
NuvioModalBottomSheet(