From e7020265fb60350dbbbc8273d7219d1c1882f2a4 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Fri, 23 Jan 2026 02:46:42 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=BC=98=E5=8C=96]=20=E4=BC=98=E5=8C=96Compos?= =?UTF-8?q?e=E7=95=8C=E9=9D=A2=E7=9A=84=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/lib/prefs/ThemeCardPreference.kt | 5 ++ .../io/legado/app/ui/about/AboutScreen.kt | 15 ++--- .../app/ui/book/bookmark/AllBookmarkScreen.kt | 4 +- .../app/ui/book/explore/ExploreShowScreen.kt | 4 +- .../ui/book/info/edit/BookInfoEditScreen.kt | 4 +- .../ui/book/readRecord/ReadRecordScreen.kt | 4 +- .../book/searchContent/SearchContentScreen.kt | 4 +- .../app/ui/config/ThemeConfigFragment.kt | 4 +- .../legado/app/ui/dict/rule/DictRuleScreen.kt | 4 +- .../java/io/legado/app/ui/main/my/MyScreen.kt | 4 +- .../app/ui/replace/ReplaceRuleScreen.kt | 4 +- .../app/ui/replace/edit/ReplaceEditScreen.kt | 4 +- .../app/ui/widget/GlassTonalIconButton.kt | 47 +++++++++++++++ .../app/ui/widget/components/GlassCard.kt | 2 +- .../GlassMediumFlexibleTopAppBar.kt | 59 +++++++++++++++++++ .../app/ui/widget/components/SettingItem.kt | 8 ++- app/src/main/res/xml/pref_config_theme.xml | 3 +- 17 files changed, 142 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/io/legado/app/ui/widget/GlassTonalIconButton.kt create mode 100644 app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt diff --git a/app/src/main/java/io/legado/app/lib/prefs/ThemeCardPreference.kt b/app/src/main/java/io/legado/app/lib/prefs/ThemeCardPreference.kt index ec5febf50..72a90ddb4 100644 --- a/app/src/main/java/io/legado/app/lib/prefs/ThemeCardPreference.kt +++ b/app/src/main/java/io/legado/app/lib/prefs/ThemeCardPreference.kt @@ -19,7 +19,9 @@ import com.google.android.material.card.MaterialCardView import io.legado.app.R import io.legado.app.constant.EventBus import io.legado.app.constant.PreferKey +import io.legado.app.help.config.AppConfig import io.legado.app.lib.dialogs.alert +import io.legado.app.ui.theme.ThemeSyncer import io.legado.app.utils.getPrefString import io.legado.app.utils.postEvent import io.legado.app.utils.restart @@ -87,6 +89,9 @@ class ThemeCardPreference(context: Context, attrs: AttributeSet) : Preference(co if (!hasLightBg || !hasDarkBg) { context.toastOnUi(R.string.transparent_theme_alarm) return@setOnClickListener + } else { + AppConfig.containerOpacity = 0 + ThemeSyncer.syncContainerOpacity() } } val oldValue = currentValue 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 2f1dd41d0..4e2a3a47a 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 @@ -11,16 +11,12 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.ArrowBack import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FilledTonalIconButton 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.MediumFlexibleTopAppBar import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBarDefaults @@ -37,6 +33,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import io.legado.app.R import io.legado.app.constant.AppConst.appInfo +import io.legado.app.ui.widget.GlassBackIconButton +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.SettingItem import io.legado.app.ui.widget.components.SplicedColumnGroup import io.legado.app.ui.widget.components.TextCard @@ -60,15 +58,10 @@ fun AboutScreen( Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { Text(stringResource(R.string.about)) }, navigationIcon = { - IconButton(onClick = onBack) { - Icon( - imageVector = Icons.AutoMirrored.Filled.ArrowBack, - contentDescription = stringResource(R.string.back) - ) - } + GlassBackIconButton(onClick = onBack) }, scrollBehavior = scrollBehavior ) diff --git a/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkScreen.kt b/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkScreen.kt index f56034666..684252f2a 100644 --- a/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/bookmark/AllBookmarkScreen.kt @@ -41,7 +41,6 @@ import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold @@ -68,6 +67,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import io.legado.app.data.entities.Bookmark import io.legado.app.ui.widget.components.EmptyMessageView +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.SearchBarSection import io.legado.app.ui.widget.components.lazylist.FastScrollLazyColumn import io.legado.app.ui.widget.components.lazylist.Scroller @@ -118,7 +118,7 @@ fun AllBookmarkScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { Column { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { Text( text = "所有书签" 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 416b69d4c..35be13bdc 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 @@ -55,7 +55,6 @@ import androidx.compose.material3.FilterChip import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.OutlinedButton import androidx.compose.material3.Scaffold import androidx.compose.material3.SheetValue @@ -95,6 +94,7 @@ import io.legado.app.model.BookShelfState import io.legado.app.ui.widget.components.AnimatedTextButton import io.legado.app.ui.widget.components.AnimatedTextLine import io.legado.app.ui.widget.components.Cover +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.SearchBarSection import io.legado.app.ui.widget.components.TextCard import io.legado.app.ui.widget.components.modalBottomSheet.GlassModalBottomSheet @@ -435,7 +435,7 @@ fun ExploreTopBar( ) { var showMenu by remember { mutableStateOf(false) } - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( modifier = modifier, title = { AnimatedTextLine(title, maxLines = 1, overflow = TextOverflow.Ellipsis) }, navigationIcon = { diff --git a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditScreen.kt b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditScreen.kt index bf9b0ac4b..8da0a44e1 100644 --- a/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/info/edit/BookInfoEditScreen.kt @@ -32,7 +32,6 @@ import androidx.compose.material3.FilledTonalIconButton import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.IconButtonDefaults -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold @@ -54,6 +53,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import io.legado.app.R import io.legado.app.ui.book.changecover.ChangeCoverDialog import io.legado.app.ui.widget.components.Cover +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.utils.SelectImageContract import io.legado.app.utils.launch import io.legado.app.utils.showDialogFragment @@ -71,7 +71,7 @@ fun BookInfoEditScreen( Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { Text(text = stringResource(id = R.string.book_info_edit)) }, navigationIcon = { IconButton(onClick = onBack) { diff --git a/app/src/main/java/io/legado/app/ui/book/readRecord/ReadRecordScreen.kt b/app/src/main/java/io/legado/app/ui/book/readRecord/ReadRecordScreen.kt index 234297bc2..a0fdabdf9 100644 --- a/app/src/main/java/io/legado/app/ui/book/readRecord/ReadRecordScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/readRecord/ReadRecordScreen.kt @@ -33,7 +33,6 @@ import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -64,6 +63,7 @@ import io.legado.app.ui.widget.components.AnimatedTextLine import io.legado.app.ui.widget.components.Calendar import io.legado.app.ui.widget.components.Cover import io.legado.app.ui.widget.components.EmptyMessageView +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.SearchBarSection import io.legado.app.ui.widget.components.SectionHeader import io.legado.app.utils.StringUtils.formatFriendlyDate @@ -96,7 +96,7 @@ fun ReadRecordScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { Column { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { Text( text = "阅读记录" diff --git a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentScreen.kt b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentScreen.kt index b438fe0e4..a60fb872b 100644 --- a/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentScreen.kt +++ b/app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentScreen.kt @@ -32,7 +32,6 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Scaffold import androidx.compose.material3.Text @@ -58,6 +57,7 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.unit.dp import io.legado.app.ui.widget.components.AnimatedText import io.legado.app.ui.widget.components.EmptyMessageView +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.SearchBarSection import io.legado.app.ui.widget.components.TextCard import io.legado.app.ui.widget.components.button.AnimatedActionButton @@ -130,7 +130,7 @@ fun SearchContentScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { Column { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { val title = if (searchQuery.isNotBlank() && searchResults.isNotEmpty()) { "共 ${searchResults.size} 条结果" diff --git a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt index bbf0b464e..8ee66e2a8 100644 --- a/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/ThemeConfigFragment.kt @@ -266,15 +266,15 @@ class ThemeConfigFragment : PreferenceFragmentCompat(), .setValue(AppConfig.containerOpacity) .setCustomButton((R.string.btn_default_s)) { AppConfig.containerOpacity = 100 + ThemeSyncer.syncContainerOpacity() Handler(Looper.getMainLooper()).postDelayed({ - ThemeSyncer.syncContainerOpacity() upPreferenceSummary(PreferKey.containerOpacity) }, 100) } .show { AppConfig.containerOpacity = it + ThemeSyncer.syncContainerOpacity() Handler(Looper.getMainLooper()).postDelayed({ - ThemeSyncer.syncContainerOpacity() upPreferenceSummary(PreferKey.containerOpacity) }, 100) } diff --git a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleScreen.kt b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleScreen.kt index a5261f2e6..73567dd21 100644 --- a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleScreen.kt +++ b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleScreen.kt @@ -31,7 +31,6 @@ import androidx.compose.material3.FloatingToolbarDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.OutlinedButton import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Scaffold @@ -65,6 +64,7 @@ import io.legado.app.data.entities.DictRule import io.legado.app.ui.widget.components.ActionItem import io.legado.app.ui.widget.components.AnimatedText import io.legado.app.ui.widget.components.DraggableSelectionHandler +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.ReorderableSelectionItem import io.legado.app.ui.widget.components.SearchBarSection import io.legado.app.ui.widget.components.SelectionBottomBar @@ -176,7 +176,7 @@ fun DictRuleScreen( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { Column { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { val titleText = remember(inSelectionMode, selectedIds, uiState.items) { when { diff --git a/app/src/main/java/io/legado/app/ui/main/my/MyScreen.kt b/app/src/main/java/io/legado/app/ui/main/my/MyScreen.kt index 55b911cee..a6d5daea4 100644 --- a/app/src/main/java/io/legado/app/ui/main/my/MyScreen.kt +++ b/app/src/main/java/io/legado/app/ui/main/my/MyScreen.kt @@ -29,7 +29,6 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.Scaffold import androidx.compose.material3.Switch import androidx.compose.material3.Text @@ -52,6 +51,7 @@ import io.legado.app.ui.config.ConfigTag import io.legado.app.ui.dict.rule.DictRuleActivity import io.legado.app.ui.file.FileManageActivity import io.legado.app.ui.replace.ReplaceRuleActivity +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.SettingItem import io.legado.app.ui.widget.components.SplicedColumnGroup @@ -71,7 +71,7 @@ fun MyScreen( contentWindowInsets = WindowInsets.systemBars .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Top), topBar = { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { Text( text = stringResource(R.string.my) 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 c264feb68..700487730 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 @@ -41,7 +41,6 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.LoadingIndicator import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.OutlinedButton import androidx.compose.material3.PlainTooltip import androidx.compose.material3.PrimaryScrollableTabRow @@ -92,6 +91,7 @@ import io.legado.app.ui.widget.components.ActionItem import io.legado.app.ui.widget.components.AnimatedText import io.legado.app.ui.widget.components.DraggableSelectionHandler import io.legado.app.ui.widget.components.EmptyMessageView +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import io.legado.app.ui.widget.components.ReorderableSelectionItem import io.legado.app.ui.widget.components.SearchBarSection import io.legado.app.ui.widget.components.SelectionBottomBar @@ -370,7 +370,7 @@ fun ReplaceRuleScreen( snackbarHost = { SnackbarHost(snackbarHostState) }, topBar = { Column { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { val titleText = remember(isUploading, inSelectionMode, selectedRuleIds, rules) { when { diff --git a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt b/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt index 7cd062ab0..c82a10977 100644 --- a/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt +++ b/app/src/main/java/io/legado/app/ui/replace/edit/ReplaceEditScreen.kt @@ -47,7 +47,6 @@ import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.MediumFlexibleTopAppBar import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold @@ -71,6 +70,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp +import io.legado.app.ui.widget.components.GlassMediumFlexibleTopAppBar import org.koin.androidx.compose.koinViewModel @Composable @@ -95,7 +95,7 @@ fun ReplaceEditScreen( Scaffold( modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - MediumFlexibleTopAppBar( + GlassMediumFlexibleTopAppBar( title = { Text(if (state.id > 0) "编辑替换规则" else "新增替换规则") }, navigationIcon = { IconButton(onClick = onBack) { Icon(Icons.AutoMirrored.Filled.ArrowBack, "Back") } diff --git a/app/src/main/java/io/legado/app/ui/widget/GlassTonalIconButton.kt b/app/src/main/java/io/legado/app/ui/widget/GlassTonalIconButton.kt new file mode 100644 index 000000000..929335fa1 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/GlassTonalIconButton.kt @@ -0,0 +1,47 @@ +package io.legado.app.ui.widget + +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material3.FilledTonalIconButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import io.legado.app.ui.theme.ThemeState + +@Composable +fun GlassBackIconButton( + onClick: () -> Unit, + modifier: Modifier = Modifier, + imageVector: ImageVector = Icons.AutoMirrored.Filled.ArrowBack, + contentDescription: String? = null +) { + val themeOpacity by ThemeState.containerOpacity.collectAsState() + + val baseColor = MaterialTheme.colorScheme.surfaceContainerHigh + val glassColor = baseColor.copy(alpha = (themeOpacity / 100f).coerceAtLeast(0.6f)) + + FilledTonalIconButton( + onClick = onClick, + modifier = modifier + .padding(horizontal = 12.dp) + .size(36.dp), + colors = IconButtonDefaults.filledTonalIconButtonColors( + containerColor = glassColor, + contentColor = MaterialTheme.colorScheme.onSurface + ) + ) { + Icon( + imageVector = imageVector, + contentDescription = contentDescription, + modifier = Modifier.size(20.dp) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/components/GlassCard.kt b/app/src/main/java/io/legado/app/ui/widget/components/GlassCard.kt index 393868cb3..e80a2d2ac 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/GlassCard.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/GlassCard.kt @@ -19,7 +19,7 @@ fun GlassCard( modifier: Modifier = Modifier, onClick: (() -> Unit)? = null, shape: Shape = CardDefaults.shape, - color: Color = MaterialTheme.colorScheme.surface, + color: Color = MaterialTheme.colorScheme.surfaceContainerLow, elevation: CardElevation = CardDefaults.cardElevation(), border: BorderStroke? = null, content: @Composable ColumnScope.() -> Unit diff --git a/app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt b/app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt new file mode 100644 index 000000000..71a88d821 --- /dev/null +++ b/app/src/main/java/io/legado/app/ui/widget/components/GlassMediumFlexibleTopAppBar.kt @@ -0,0 +1,59 @@ +package io.legado.app.ui.widget.components + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.MediumFlexibleTopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import io.legado.app.ui.theme.ThemeState + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalMaterial3ExpressiveApi::class) +@Composable +fun GlassMediumFlexibleTopAppBar( + modifier: Modifier = Modifier, + title: @Composable () -> Unit, + subtitle: (@Composable () -> Unit)? = null, + scrollBehavior: TopAppBarScrollBehavior? = null, + navigationIcon: @Composable () -> Unit = {}, + actions: @Composable RowScope.() -> Unit = {} +) { + val opacityValue by ThemeState.containerOpacity.collectAsState() + val enableBlur by ThemeState.enableBlur.collectAsState() + + val alpha = opacityValue / 100f + + val containerColor = if (enableBlur) { + Color.Transparent + } else { + MaterialTheme.colorScheme.surface.copy(alpha = alpha) + } + + val scrolledContainerColor = if (enableBlur) { + Color.Transparent + } else { + MaterialTheme.colorScheme.surfaceContainer.copy(alpha = alpha) + } + + val appBarColors = TopAppBarDefaults.topAppBarColors( + containerColor = containerColor, + scrolledContainerColor = scrolledContainerColor + ) + + MediumFlexibleTopAppBar( + modifier = modifier, + title = title, + subtitle = subtitle, + navigationIcon = navigationIcon, + actions = actions, + scrollBehavior = scrollBehavior, + colors = appBarColors + ) + +} \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/widget/components/SettingItem.kt b/app/src/main/java/io/legado/app/ui/widget/components/SettingItem.kt index d8bd07e09..436a84c52 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/SettingItem.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/SettingItem.kt @@ -13,6 +13,7 @@ import androidx.compose.material.icons.filled.Info import androidx.compose.material3.DropdownMenu import androidx.compose.material3.Icon import androidx.compose.material3.ListItem +import androidx.compose.material3.ListItemDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -21,6 +22,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.text.style.TextOverflow @@ -105,8 +107,7 @@ fun SettingItem( modifier = Modifier .fillMaxWidth() .animateContentSize(), - shape = RoundedCornerShape(8.dp), - color = MaterialTheme.colorScheme.surfaceContainerLow, + shape = RoundedCornerShape(8.dp) ) { ListItem( modifier = modifier @@ -161,7 +162,8 @@ fun SettingItem( } } }, - trailingContent = trailingContent + trailingContent = trailingContent, + colors = ListItemDefaults.colors(containerColor = Color.Transparent) ) if (dropdownMenu != null) { diff --git a/app/src/main/res/xml/pref_config_theme.xml b/app/src/main/res/xml/pref_config_theme.xml index a1280284d..aee0e10f3 100644 --- a/app/src/main/res/xml/pref_config_theme.xml +++ b/app/src/main/res/xml/pref_config_theme.xml @@ -111,8 +111,7 @@ app:iconSpaceReserved="false" />