diff --git a/app/src/main/java/io/legado/app/ui/about/AboutScreen.kt b/app/src/main/java/io/legado/app/ui/about/AboutScreen.kt index e149ca46d..3a44b17ce 100644 --- a/app/src/main/java/io/legado/app/ui/about/AboutScreen.kt +++ b/app/src/main/java/io/legado/app/ui/about/AboutScreen.kt @@ -22,12 +22,15 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme.colorScheme +import androidx.compose.material3.MediumTopAppBar import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource @@ -43,23 +46,6 @@ import io.legado.app.ui.widget.components.SettingItem import io.legado.app.ui.widget.components.SplicedColumnGroup import io.legado.app.ui.widget.components.TextCard -@Preview(showBackground = true, name = "Light Mode") -@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES, name = "Dark Mode") -@Composable -fun PreviewAboutScreen() { - AppTheme { - AboutScreen( - versionName = "1.0", - onCheckUpdate = {}, - onOpenUrl = {}, - onShowMdFile = { _, _ -> }, - onSaveLog = {}, - onCreateHeapDump = {}, - onShowCrashLogs = {} - ) - } -} - @OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) @Composable fun AboutScreen( @@ -74,9 +60,12 @@ fun AboutScreen( ) { LocalContext.current + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + Scaffold( + modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - TopAppBar( + MediumTopAppBar( title = { Text(stringResource(R.string.about)) }, navigationIcon = { IconButton(onClick = onNavigateBack) { @@ -85,7 +74,8 @@ fun AboutScreen( contentDescription = stringResource(R.string.back) ) } - } + }, + scrollBehavior = scrollBehavior ) } ) { padding -> diff --git a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowScreen.kt b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowScreen.kt index 7eafd9328..f47c89389 100644 --- a/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/explore/ExploreShowScreen.kt @@ -529,7 +529,7 @@ fun ExploreBookItem( Cover( path = book.coverUrl, - modifier = Modifier.width(70.dp), + modifier = Modifier.width(72.dp), badgeContent = badge) Spacer(modifier = Modifier.width(8.dp)) @@ -556,14 +556,14 @@ fun ExploreBookItem( if (!latestChapter.isNullOrEmpty()) { Text( text = " • ", - style = MaterialTheme.typography.bodySmall, + style = MaterialTheme.typography.labelSmall, color = Color.Gray, maxLines = 1 ) Text( text = "最新: $latestChapter", - style = MaterialTheme.typography.bodySmall, + style = MaterialTheme.typography.labelSmall, color = Color.Gray, maxLines = 1, overflow = TextOverflow.Ellipsis @@ -575,7 +575,7 @@ fun ExploreBookItem( if (intro.isNotEmpty()) { Text( text = intro, - style = MaterialTheme.typography.bodySmall, + style = MaterialTheme.typography.labelSmall, color = Color.Gray, maxLines = 2, minLines = 2, diff --git a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt index d2bd79a4d..1557de8b1 100644 --- a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt +++ b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleScreen.kt @@ -8,6 +8,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.animateColorAsState import androidx.compose.animation.animateContentSize import androidx.compose.animation.core.FastOutSlowInEasing +import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut @@ -34,6 +35,7 @@ import androidx.compose.runtime.* import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color import androidx.compose.ui.hapticfeedback.HapticFeedback import androidx.compose.ui.hapticfeedback.HapticFeedbackType @@ -47,6 +49,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog +import androidx.compose.ui.zIndex import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.gson.Gson import io.legado.app.R @@ -500,13 +503,27 @@ fun ReplaceRuleScreen( ReorderableItem( state = reorderableState, key = ui.id - ) { _ -> + ) { isDragging -> + + val elevation by animateDpAsState(if (isDragging) 8.dp else 0.dp) ReplaceRuleItem( modifier = Modifier .padding(horizontal = 12.dp) + .zIndex(if (isDragging) 1f else 0f) + .shadow( + elevation = elevation, + shape = MaterialTheme.shapes.medium, + clip = false + ) .then( if (canReorder) { Modifier.longPressDraggableHandle( + onDragStarted = { + hapticFeedback.performHapticFeedback(HapticFeedbackType.GestureThresholdActivate) + }, + onDragStopped = { + hapticFeedback.performHapticFeedback(HapticFeedbackType.GestureEnd) + }, interactionSource = remember { MutableInteractionSource() } ) } else {