diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/Dialogs.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/Dialogs.kt index 96ec4b22..8267f1ee 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/Dialogs.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/Dialogs.kt @@ -40,9 +40,12 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.huanchengfly.tieba.post.R +import com.huanchengfly.tieba.post.arch.BaseComposeActivity.Companion.LocalWindowSizeClass import com.huanchengfly.tieba.post.ui.common.theme.compose.ExtendedTheme +import com.huanchengfly.tieba.post.ui.common.windowsizeclass.WindowWidthSizeClass import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.AnyPopDialog import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.AnyPopDialogProperties +import com.huanchengfly.tieba.post.ui.widgets.compose.dialogs.DirectionState import com.huanchengfly.tieba.post.ui.widgets.compose.picker.TimePicker import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -340,6 +343,7 @@ fun Dialog( isActiveClose = true }, ) + val windowWidthSizeClass = LocalWindowSizeClass.current.widthSizeClass AnyPopDialog( isActiveClose = isActiveClose, onDismiss = { @@ -348,13 +352,24 @@ fun Dialog( showDialog = false }, properties = AnyPopDialogProperties( + direction = if (windowWidthSizeClass == WindowWidthSizeClass.Compact) { + DirectionState.BOTTOM + } else { + DirectionState.CENTER + }, dismissOnBackPress = cancelable, dismissOnClickOutside = cancelableOnTouchOutside ) ) { Column( modifier = modifier - .fillMaxWidth() + .fillMaxWidth( + fraction = if (windowWidthSizeClass == WindowWidthSizeClass.Compact) { + 1f + } else { + 0.6f + } + ) .padding(16.dp) .background( color = ExtendedTheme.colors.windowBackground, diff --git a/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/dialogs/AnyPopDialog.kt b/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/dialogs/AnyPopDialog.kt index 73fad80c..86b613ac 100644 --- a/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/dialogs/AnyPopDialog.kt +++ b/app/src/main/java/com/huanchengfly/tieba/post/ui/widgets/compose/dialogs/AnyPopDialog.kt @@ -9,8 +9,13 @@ import android.view.WindowManager import androidx.activity.compose.BackHandler import androidx.compose.animation.Animatable import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.spring import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut import androidx.compose.animation.slideInHorizontally import androidx.compose.animation.slideInVertically import androidx.compose.animation.slideOutHorizontally @@ -136,6 +141,7 @@ private fun DialogFullScreen( DirectionState.TOP -> Alignment.TopCenter DirectionState.LEFT -> Alignment.CenterStart DirectionState.RIGHT -> Alignment.CenterEnd + DirectionState.CENTER -> Alignment.Center else -> Alignment.BottomCenter } ) { @@ -155,12 +161,26 @@ private fun DialogFullScreen( DirectionState.TOP -> slideInVertically(initialOffsetY = { -it }) DirectionState.LEFT -> slideInHorizontally(initialOffsetX = { -it }) DirectionState.RIGHT -> slideInHorizontally(initialOffsetX = { it }) + DirectionState.CENTER -> fadeIn( + animationSpec = spring(stiffness = Spring.StiffnessMediumLow) + ) + scaleIn( + animationSpec = spring(stiffness = Spring.StiffnessMediumLow), + initialScale = 0.8F + ) + else -> slideInVertically(initialOffsetY = { it }) }, exit = when (properties.direction) { DirectionState.TOP -> fadeOut() + slideOutVertically(targetOffsetY = { -it }) DirectionState.LEFT -> fadeOut() + slideOutHorizontally(targetOffsetX = { -it }) DirectionState.RIGHT -> fadeOut() + slideOutHorizontally(targetOffsetX = { it }) + DirectionState.CENTER -> fadeOut( + animationSpec = spring(stiffness = Spring.StiffnessMediumLow) + ) + scaleOut( + animationSpec = spring(stiffness = Spring.StiffnessMediumLow), + targetScale = 0.8F + ) + else -> fadeOut() + slideOutVertically(targetOffsetY = { it }) } ) { @@ -251,7 +271,8 @@ enum class DirectionState { TOP, LEFT, RIGHT, - BOTTOM + BOTTOM, + CENTER } private fun Modifier.clickOutSideModifier(