From 0001838e52105892cfec8db49d3a806d6b557164 Mon Sep 17 00:00:00 2001 From: yukonisen Date: Mon, 2 Sep 2024 19:39:11 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B9=A6=E6=9E=B6?= =?UTF-8?q?=E9=A1=B5Tab=E6=A0=8F=E5=AE=BD=E5=BA=A6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bookshelf/home/BookshelfHomeScreen.kt | 29 +++---------------- 1 file changed, 4 insertions(+), 25 deletions(-) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt index 1252dd02..2b98c7bb 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt @@ -33,6 +33,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MediumTopAppBar +import androidx.compose.material3.PrimaryTabRow import androidx.compose.material3.ScrollableTabRow import androidx.compose.material3.Tab import androidx.compose.material3.TabRow @@ -118,7 +119,7 @@ fun BookshelfHomeScreen( drawRect(animatedBackgroundColor) } ) { - if (uiState.bookshelfList.size >= 4) { + if (uiState.bookshelfList.size > 4) { ScrollableTabRow( selectedTabIndex = uiState.selectedTabIndex, edgePadding = 16.dp, @@ -150,34 +151,12 @@ fun BookshelfHomeScreen( } } else { - TabRow( - selectedTabIndex = uiState.selectedTabIndex, - containerColor = Color.Transparent, - contentColor = MaterialTheme.colorScheme.primary, - indicator = { tabPositions -> - if (tabPositions.isNotEmpty()) - SecondaryIndicator( - modifier = Modifier - .tabIndicatorOffset(tabPositions[uiState.selectedTabIndex]) - .height(4.dp) - .clip(RoundedCornerShape(topStart = 3.dp, topEnd = 3.dp)) - .background(MaterialTheme.colorScheme.secondary), - color = MaterialTheme.colorScheme.primary, - ) - } - ) { + PrimaryTabRow(selectedTabIndex = uiState.selectedTabIndex) { uiState.bookshelfList.forEachIndexed { _, bookshelf -> Tab( selected = uiState.selectedBookshelfId == bookshelf.id, onClick = { if (!uiState.selectMode) changePage(bookshelf.id) }, - text = { - Text( - text = bookshelf.name, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) - }, - modifier = Modifier.padding(horizontal = 8.dp) + text = { Text(text = bookshelf.name, maxLines = 1, overflow = TextOverflow.Ellipsis) } ) } } From daa74430b67dfefa629802d5666f9218ea7c7d52 Mon Sep 17 00:00:00 2001 From: yukonisen Date: Mon, 2 Sep 2024 20:11:58 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E5=AF=B9=E4=B8=80=E4=BA=9B=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E4=B9=A6=E6=9C=AC=E6=8F=8F=E8=BF=B0=E4=BD=BF?= =?UTF-8?q?=E7=94=A8trim?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/home/bookshelf/home/BookshelfHomeScreen.kt | 2 +- .../lightnovelreader/ui/home/exploration/Exploration.kt | 3 +-- .../lightnovelreader/ui/home/reading/ReadingScreen.kt | 4 ++-- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt index 2b98c7bb..68d8c136 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt @@ -372,7 +372,7 @@ fun BookRow( overflow = TextOverflow.Ellipsis ) Text( - text = bookInformation.description, + text = bookInformation.description.trim(), style = descriptionTextStyle, maxLines = 1, overflow = TextOverflow.Ellipsis diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt index 61026177..56e7b80c 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/exploration/Exploration.kt @@ -188,7 +188,6 @@ fun ExplorationBookCard( style = MaterialTheme.typography.labelLarge, fontWeight = FontWeight.W700, fontSize = 16.sp, - lineHeight = 18.sp, maxLines = 2 ) IconButton( @@ -216,7 +215,7 @@ fun ExplorationBookCard( bookInformation.wordCount, if (bookInformation.isComplete) stringResource(R.string.book_completed) else stringResource(R.string.book_ongoing), - bookInformation.description + bookInformation.description.trim() ), style = MaterialTheme.typography.labelLarge, fontSize = 13.sp, diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt index 6bf39c6e..9f4e4da7 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/reading/ReadingScreen.kt @@ -207,7 +207,7 @@ private fun SimpleBookCard(book: ReadingBook, onClicked: () -> Unit) { maxLines = 1 ) Text( - text = book.description, + text = book.description.trim(), style = MaterialTheme.typography.titleMedium.copy( fontSize = 14.sp, fontWeight = FontWeight.W500 @@ -261,7 +261,7 @@ private fun LargeBookCard( ) Text( modifier = Modifier.fillMaxWidth().height(66.dp), - text = book.description, + text = book.description.trim(), style = MaterialTheme.typography.titleMedium.copy( fontWeight = FontWeight.W500 ), From 205b9d0654cc372c86ebe09e2a4804846aef4ecd Mon Sep 17 00:00:00 2001 From: yukonisen Date: Mon, 2 Sep 2024 20:22:21 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E8=AF=A6=E6=83=85=E9=A1=B5=E7=AB=A0?= =?UTF-8?q?=E8=8A=82=E6=98=BE=E7=A4=BA=E5=A4=9A=E8=A1=8C=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lightnovelreader/ui/book/detail/DetailScreen.kt | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt index cc7b2753..906ef681 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items @@ -45,6 +46,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.max import androidx.compose.ui.unit.sp import androidx.hilt.navigation.compose.hiltViewModel import indi.dmzz_yyhyy.lightnovelreader.R @@ -495,19 +497,21 @@ private fun VolumeItem( Box( modifier = Modifier .clickable { onClickChapter(it.id) } - .height(48.dp) + .wrapContentHeight() .fillMaxWidth() .padding(horizontal = 4.dp, vertical = 8.dp), ) { Row( - modifier = Modifier.fillMaxSize(), + modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp), verticalAlignment = Alignment.CenterVertically, ) { Text( - modifier = Modifier.padding(start = 8.dp), + modifier = Modifier.padding(horizontal = 8.dp), text = it.title, style = MaterialTheme.typography.bodyMedium, - fontSize = 16.sp, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + fontSize = 15.sp, fontWeight = if (readCompletedChapterIds.contains(it.id)) FontWeight.W400 From 57fa99f0925434aac49c4b56e721043942869820 Mon Sep 17 00:00:00 2001 From: yukonisen Date: Mon, 2 Sep 2024 20:48:54 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BC=80=E5=85=B3?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E9=A1=B9=E7=A6=81=E7=94=A8=E3=80=81=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B9=A6=E6=9E=B6=E5=88=86=E7=BB=84=E6=8A=98=E5=8F=A0?= =?UTF-8?q?=E5=9B=BE=E6=A0=87=E6=96=B9=E5=90=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- .../ui/components/SettingsEntry.kt | 27 +++++-------------- .../bookshelf/home/BookshelfHomeScreen.kt | 2 +- .../home/settings/list/AboutSettingsList.kt | 5 ++-- 4 files changed, 12 insertions(+), 24 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 26ed01fb..ddfec61d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,7 +20,7 @@ android { minSdk = 24 targetSdk = 34 // 版本号为x.y.z则versionCode为x*1000000+y*10000+z*100+debug版本号(开发需要时迭代, 两位数) - versionCode = 4_04_017 + versionCode = 4_04_018 versionName = "0.4.4" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt index b84653f7..bafc37fb 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt @@ -2,16 +2,12 @@ package indi.dmzz_yyhyy.lightnovelreader.ui.components import android.content.Intent import android.net.Uri -import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.wrapContentWidth import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.DropdownMenu import androidx.compose.material3.DropdownMenuItem @@ -22,41 +18,30 @@ import androidx.compose.material3.Switch import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.draw.drawBehind -import androidx.compose.ui.geometry.RoundRect -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.compose.ui.unit.times import androidx.core.content.ContextCompat.startActivity import indi.dmzz_yyhyy.lightnovelreader.ui.home.settings.data.MenuOptions import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import java.text.DecimalFormat import kotlin.math.roundToInt -/* NOTE -* SettingsSwitchEntry and SettingsSliderEntry renamed and moved from ContentScreen.kt -*/ @Composable fun SettingsSwitchEntry( title: String, description: String, checked: Boolean, onCheckedChange: (Boolean) -> Unit, + disabled: Boolean = false ) { FilledCard( modifier = Modifier @@ -66,8 +51,8 @@ fun SettingsSwitchEntry( Row( modifier = Modifier .fillMaxWidth() - .clickable { onCheckedChange(!checked) } - .padding(18.dp, 10.dp, 20.dp, 12.dp), + .then(if (disabled) Modifier.clickable {} else Modifier.clickable { onCheckedChange(!checked) }) + .padding(18.dp, 10.dp, 20.dp, 12.dp), verticalAlignment = Alignment.CenterVertically ) { Column( @@ -89,17 +74,19 @@ fun SettingsSwitchEntry( fontWeight = FontWeight.W500, fontSize = 13.sp, lineHeight = 14.sp, - color = MaterialTheme.colorScheme.secondary + color = MaterialTheme.colorScheme.onSurface ) } Switch( checked = checked, - onCheckedChange = onCheckedChange + enabled = !disabled, + onCheckedChange = if (disabled) null else onCheckedChange ) } } } + @Composable fun SettingsSliderEntry( description: String, diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt index 68d8c136..b7bd8c6b 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt @@ -300,7 +300,7 @@ fun CollapseGroupTitle( ) IconButton(onClickExpand) { Icon( - modifier = Modifier.rotate(if (expanded) 180f else 0f), + modifier = Modifier.rotate(if (expanded) 0f else 180f), painter = painterResource(R.drawable.keyboard_arrow_up_24px), contentDescription = "expand" ) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/AboutSettingsList.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/AboutSettingsList.kt index 61ac3a83..d0865b13 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/AboutSettingsList.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/AboutSettingsList.kt @@ -68,8 +68,9 @@ fun AboutSettingsList( SettingsSwitchEntry( title = stringResource(R.string.settings_statistics), description = stringResource(R.string.settings_statistics_desc), - checked = state.statisticsEnabled, - onCheckedChange = onStatisticsChanged + checked = if (BuildConfig.DEBUG) false else state.statisticsEnabled, + onCheckedChange = onStatisticsChanged, + disabled = BuildConfig.DEBUG ) } } From a580543fe99c303aa59fb08548db0ebe819fee99 Mon Sep 17 00:00:00 2001 From: yukonisen Date: Mon, 2 Sep 2024 22:23:30 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8A=A8=E6=80=81?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=20=E4=BC=98=E5=8C=96=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E5=BA=94=E7=94=A8=20=E8=AF=A6=E6=83=85=E9=A1=B5=E4=BB=8B?= =?UTF-8?q?=E7=BB=8D=E6=96=87=E6=9C=AC=E4=BD=BF=E7=94=A8=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=AD=97=E9=87=8D=E3=80=81=E6=B7=BB=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- app/src/debug/res/values-zh-rCN/strings.xml | 4 +++ app/src/debug/res/values/strings.xml | 1 + .../lightnovelreader/MainActivity.kt | 13 ++++++++-- .../data/userdata/UserDataPath.kt | 1 + .../lightnovelreader/theme/Themes.kt | 25 ++++++++++--------- .../ui/book/detail/DetailScreen.kt | 6 ++--- .../ui/components/SettingsEntry.kt | 2 +- .../ui/home/settings/SettingsScreen.kt | 3 ++- .../ui/home/settings/SettingsViewModel.kt | 12 +++++++++ .../home/settings/list/DisplaySettingsList.kt | 14 ++++++++++- app/src/main/res/values-zh-rCN/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 4 ++- 13 files changed, 66 insertions(+), 23 deletions(-) create mode 100644 app/src/debug/res/values-zh-rCN/strings.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index ddfec61d..bf4758c0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,7 +20,7 @@ android { minSdk = 24 targetSdk = 34 // 版本号为x.y.z则versionCode为x*1000000+y*10000+z*100+debug版本号(开发需要时迭代, 两位数) - versionCode = 4_04_018 + versionCode = 4_04_019 versionName = "0.4.4" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/debug/res/values-zh-rCN/strings.xml b/app/src/debug/res/values-zh-rCN/strings.xml new file mode 100644 index 00000000..e7f33312 --- /dev/null +++ b/app/src/debug/res/values-zh-rCN/strings.xml @@ -0,0 +1,4 @@ + + + *Debug 构建不可用 + \ No newline at end of file diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml index 2bc4f153..f7e34af8 100644 --- a/app/src/debug/res/values/strings.xml +++ b/app/src/debug/res/values/strings.xml @@ -1,3 +1,4 @@ [DEBUG] LightNovelReader + *Unavailable for debug builds \ No newline at end of file diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/MainActivity.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/MainActivity.kt index ec1e8187..958820e6 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/MainActivity.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/MainActivity.kt @@ -53,6 +53,7 @@ class MainActivity : ComponentActivity() { super.onCreate(savedInstanceState) var appLocale by mutableStateOf("${Locale.current.platformLocale.language}-${Locale.current.platformLocale.variant}") var darkMode by mutableStateOf("FollowSystem") + var dynamicColor by mutableStateOf(false) installSplashScreen() var statisticsEnabled by mutableStateOf(true) workManager.enqueueUniquePeriodicWork( @@ -98,17 +99,25 @@ class MainActivity : ComponentActivity() { it?.let { isUsingVolumeKeyFlip = it } } } - if (Build.VERSION.SDK_INT >= 33) { /* Android 13 + */ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { /* Android 13 + */ if (ContextCompat.checkSelfPermission(this, POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions( this, arrayOf(POST_NOTIFICATIONS), 0 ) } } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + coroutineScope.launch(Dispatchers.IO) { + userDataRepository.booleanUserData(UserDataPath.Settings.Display.DynamicColors.path).getFlow().collect { + dynamicColor = it ?: false + } + } + } setContent { LightNovelReaderTheme( darkMode = darkMode, - appLocale = appLocale + appLocale = appLocale, + isDynamicColor = dynamicColor ) { LightNovelReaderApp() } diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/userdata/UserDataPath.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/userdata/UserDataPath.kt index 6b2d662e..565da0eb 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/userdata/UserDataPath.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/data/userdata/UserDataPath.kt @@ -34,6 +34,7 @@ sealed class UserDataPath( } data object Display: UserDataPath("display", Settings) { data object DarkMode : UserDataPath("dark_mode", Display) + data object DynamicColors : UserDataPath("dynamic_color", Display) data object AppLocale : UserDataPath("app_locale", Display) } data object Reader : UserDataPath("reader", Settings) { diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/theme/Themes.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/theme/Themes.kt index 1bebb61d..8cd15856 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/theme/Themes.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/theme/Themes.kt @@ -21,24 +21,25 @@ import indi.dmzz_yyhyy.lightnovelreader.utils.LocaleUtil @Composable fun LightNovelReaderTheme( - isDarkTheme: Boolean = isSystemInDarkTheme(), darkMode: String, - isDynamicColor: Boolean = false, + isDynamicColor: Boolean = true, appLocale: String, content: @Composable () -> Unit ) { val context = LocalContext.current + val appDarkTheme = when (darkMode) { + "Enabled" -> true + "Disabled" -> false + "FollowSystem" -> isSystemInDarkTheme() + else -> isSystemInDarkTheme() + } val colorScheme = if (isDynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) - if ((darkMode == "FollowSystem" && isDarkTheme) || (darkMode == "Enabled")) - dynamicDarkColorScheme(context) - else - dynamicLightColorScheme(context) + if (appDarkTheme) dynamicDarkColorScheme(context) + else dynamicLightColorScheme(context) else - if ((darkMode == "FollowSystem" && isDarkTheme) || (darkMode == "Enabled")) - darkColorScheme() - else - lightColorScheme() + if (appDarkTheme) darkColorScheme() + else lightColorScheme() if (!LocalInspectionMode.current) { val view = LocalView.current @@ -53,11 +54,11 @@ fun LightNovelReaderTheme( val controller = WindowCompat.getInsetsController(window, view) window.statusBarColor = Color.Transparent.toArgb() - controller.isAppearanceLightStatusBars = !isDarkTheme + controller.isAppearanceLightStatusBars = !appDarkTheme if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) { window.navigationBarColor = Color.Transparent.toArgb() - controller.isAppearanceLightNavigationBars = !isDarkTheme + controller.isAppearanceLightNavigationBars = !appDarkTheme } } } diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt index 906ef681..c8538aaf 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/book/detail/DetailScreen.kt @@ -434,9 +434,7 @@ private fun Description(description: String) { onTextLayout = { isNeedExpand = it.hasVisualOverflow || isNeedExpand }, - style = MaterialTheme.typography.bodyMedium.copy( - fontWeight = FontWeight.W400 - ), + style = MaterialTheme.typography.bodyMedium, color = MaterialTheme.colorScheme.onSurface, overflow = TextOverflow.Ellipsis ) @@ -454,7 +452,7 @@ private fun Description(description: String) { tint = MaterialTheme.colorScheme.primary ) Text( - text = "展开", + text = if (expandSummaryText) "收起" else "展开", color = MaterialTheme.colorScheme.primary ) } diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt index bafc37fb..f01b03f0 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/components/SettingsEntry.kt @@ -171,7 +171,7 @@ fun SettingsMenuEntry( lineHeight = 14.sp, color = MaterialTheme.colorScheme.onSurface ) - Text( + AnimatedText( text = options.get(selectedOptionKey).name, fontSize = 13.sp, lineHeight = 14.sp, diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt index da881763..2bd84002 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsScreen.kt @@ -92,7 +92,8 @@ fun SettingsScreen( content = { DisplaySettingsList( state = state, onLocaleChanged = viewModel::onAppLocaleChanged, - onDarkModeChanged = viewModel::onDarkModeChanged + onDarkModeChanged = viewModel::onDarkModeChanged, + onDynamicColorChanged = viewModel::onDynamicColorChanged ) } ) /*SettingsCard( diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsViewModel.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsViewModel.kt index 75f4a16a..a7c6a15a 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsViewModel.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/SettingsViewModel.kt @@ -19,6 +19,7 @@ interface SettingsState { val statisticsEnabled: Boolean val updateChannelKey: String val darkModeKey: String + val dynamicColorsEnabled: Boolean val appLocaleKey: String } @@ -27,6 +28,7 @@ class MutableSettingsState: SettingsState { override var statisticsEnabled: Boolean by mutableStateOf(true) override var updateChannelKey: String by mutableStateOf("Development") override var darkModeKey: String by mutableStateOf("FollowSystem") + override var dynamicColorsEnabled: Boolean by mutableStateOf(true) override var appLocaleKey: String by mutableStateOf("zh-CN") } @@ -40,6 +42,7 @@ class SettingsViewModel @Inject constructor( private val appLocaleKey = userDataRepository.stringUserData(UserDataPath.Settings.Display.AppLocale.path) private val statisticsUserData = userDataRepository.booleanUserData(UserDataPath.Settings.App.Statistics.path) private val darkModeKey = userDataRepository.stringUserData(UserDataPath.Settings.Display.DarkMode.path) + private val dynamicColorsKey = userDataRepository.booleanUserData(UserDataPath.Settings.Display.DynamicColors.path) private val updateChannelKey = userDataRepository.stringUserData(UserDataPath.Settings.App.UpdateChannel.path) val settingsState: SettingsState = _settingsState @@ -49,11 +52,13 @@ class SettingsViewModel @Inject constructor( val statistics = statisticsUserData.getOrDefault(true) val darkModeKey = darkModeKey.getOrDefault("FollowSystem") val appLocaleKey = appLocaleKey.getOrDefault("zh-CN") + val dynamicColors = dynamicColorsKey.getOrDefault(false) val updateChannelKey = updateChannelKey.getOrDefault("Development") _settingsState.checkUpdateEnabled = checkUpdate _settingsState.statisticsEnabled = statistics _settingsState.darkModeKey = darkModeKey _settingsState.appLocaleKey = appLocaleKey + _settingsState.dynamicColorsEnabled = dynamicColors _settingsState.updateChannelKey = updateChannelKey } } @@ -86,6 +91,13 @@ class SettingsViewModel @Inject constructor( } } + fun onDynamicColorChanged(value: Boolean) { + viewModelScope.launch(Dispatchers.IO) { + userDataRepository.booleanUserData(UserDataPath.Settings.Display.DynamicColors.path).set(value) + _settingsState.dynamicColorsEnabled = value + } + } + fun onAppLocaleChanged(value: String) { viewModelScope.launch(Dispatchers.IO) { userDataRepository.stringUserData(UserDataPath.Settings.Display.AppLocale.path).set(value) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/DisplaySettingsList.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/DisplaySettingsList.kt index 7b0a192b..f2d9683e 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/DisplaySettingsList.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/settings/list/DisplaySettingsList.kt @@ -1,5 +1,6 @@ package indi.dmzz_yyhyy.lightnovelreader.ui.home.settings.list +import android.os.Build import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -10,8 +11,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp +import com.google.android.material.color.utilities.DynamicColor +import indi.dmzz_yyhyy.lightnovelreader.BuildConfig import indi.dmzz_yyhyy.lightnovelreader.R import indi.dmzz_yyhyy.lightnovelreader.ui.components.SettingsMenuEntry +import indi.dmzz_yyhyy.lightnovelreader.ui.components.SettingsSwitchEntry import indi.dmzz_yyhyy.lightnovelreader.ui.home.settings.SettingsState import indi.dmzz_yyhyy.lightnovelreader.ui.home.settings.data.MenuOptions @@ -19,7 +23,8 @@ import indi.dmzz_yyhyy.lightnovelreader.ui.home.settings.data.MenuOptions fun DisplaySettingsList( state: SettingsState, onDarkModeChanged: (String) -> Unit, - onLocaleChanged: (String) -> Unit + onLocaleChanged: (String) -> Unit, + onDynamicColorChanged: (Boolean) -> Unit ) { Box( modifier = Modifier.padding(top = 0.dp, end = 14.dp, start = 14.dp, bottom = 14.dp) @@ -35,6 +40,13 @@ fun DisplaySettingsList( selectedOptionKey = state.darkModeKey, onOptionChange = onDarkModeChanged ) + SettingsSwitchEntry( + title = stringResource(R.string.settings_dynamic_colors), + description = stringResource(R.string.settings_dynamic_colors_desc), + checked = state.dynamicColorsEnabled, + onCheckedChange = onDynamicColorChanged, + disabled = Build.VERSION.SDK_INT < Build.VERSION_CODES.S + ) SettingsMenuEntry( title = stringResource(R.string.settings_characters_variant), description = stringResource(R.string.settings_characters_variant_desc), diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 78eb3bdc..596cfda0 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -42,6 +42,8 @@ 显示 深色主题 选择是否启用深色主题 + 系统动态配色 + 从系统主题应用动态配色 (Android 12 +) 汉字变体 使用指定语言的汉字变体 关于 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eeaf4d25..2127959d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,7 +42,9 @@ Check and get the latest version Display Dark Theme - Enable dark theme + Apply dynamic colors from system (requires Android 12 +) + Dynamic Colors + Enable dark theme Chinese Characters Variant Specify Chinese characters variants for other languages About From 7ec715cdd758db0670910b5768bc695f3f1200f3 Mon Sep 17 00:00:00 2001 From: yukonisen Date: Mon, 2 Sep 2024 22:51:03 +0800 Subject: [PATCH 6/8] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E4=B9=A6=E6=9E=B6=E9=A1=B5=E9=9D=A2AppBar=E9=AB=98=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- .../ui/home/bookshelf/home/BookshelfHomeScreen.kt | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index bf4758c0..67c13df0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,7 +20,7 @@ android { minSdk = 24 targetSdk = 34 // 版本号为x.y.z则versionCode为x*1000000+y*10000+z*100+debug版本号(开发需要时迭代, 两位数) - versionCode = 4_04_019 + versionCode = 4_04_020 versionName = "0.4.4" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt index b7bd8c6b..5c275efc 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt @@ -612,7 +612,13 @@ fun TopBar( } }, actions = { - IconButton(if (!selectMode) onClickCreat else onClickSelectAll) { + IconButton( + if (!selectMode) { + scrollBehavior.state.heightOffset = 0f + onClickCreat + } + else onClickSelectAll + ) { Icon( painter = if (!selectMode) painterResource(R.drawable.library_add_24px) else painterResource(R.drawable.select_all_24px), contentDescription = if (!selectMode) "create" else "select all" From e3b62b6a6a73352fe1a1aff08abf5695c9b914ae Mon Sep 17 00:00:00 2001 From: yukonisen Date: Tue, 3 Sep 2024 01:27:39 +0800 Subject: [PATCH 7/8] =?UTF-8?q?=E9=81=BF=E5=85=8D=20Tab=20=E5=B4=A9?= =?UTF-8?q?=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bookshelf/home/BookshelfHomeScreen.kt | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt index 5c275efc..54ea052d 100644 --- a/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt +++ b/app/src/main/kotlin/indi/dmzz_yyhyy/lightnovelreader/ui/home/bookshelf/home/BookshelfHomeScreen.kt @@ -121,22 +121,21 @@ fun BookshelfHomeScreen( ) { if (uiState.bookshelfList.size > 4) { ScrollableTabRow( + containerColor = animatedBackgroundColor, selectedTabIndex = uiState.selectedTabIndex, edgePadding = 16.dp, indicator = { tabPositions -> - if (tabPositions.isNotEmpty()) { - SecondaryIndicator( - modifier = Modifier - .tabIndicatorOffset(tabPositions[uiState.selectedTabIndex]) - .height(4.dp) - .clip(RoundedCornerShape(topStart = 3.dp, topEnd = 3.dp)) - .background(MaterialTheme.colorScheme.secondary), - color = MaterialTheme.colorScheme.primary, - ) - } + SecondaryIndicator( + modifier = Modifier + .tabIndicatorOffset(tabPositions[uiState.selectedTabIndex]) + .height(4.dp) + .clip(RoundedCornerShape(topStart = 3.dp, topEnd = 3.dp)) + .background(MaterialTheme.colorScheme.secondary), + color = MaterialTheme.colorScheme.primary, + ) }, ) { - uiState.bookshelfList.forEachIndexed { _, bookshelf -> + uiState.bookshelfList.forEach { bookshelf -> Tab( selected = uiState.selectedBookshelfId == bookshelf.id, onClick = { if (!uiState.selectMode) changePage(bookshelf.id) }, @@ -151,12 +150,15 @@ fun BookshelfHomeScreen( } } else { - PrimaryTabRow(selectedTabIndex = uiState.selectedTabIndex) { - uiState.bookshelfList.forEachIndexed { _, bookshelf -> + PrimaryTabRow( + selectedTabIndex = uiState.selectedTabIndex, + containerColor = animatedBackgroundColor + ) { + uiState.bookshelfList.forEach { bookshelf -> Tab( selected = uiState.selectedBookshelfId == bookshelf.id, onClick = { if (!uiState.selectMode) changePage(bookshelf.id) }, - text = { Text(text = bookshelf.name, maxLines = 1, overflow = TextOverflow.Ellipsis) } + text = { Text(text = bookshelf.name, maxLines = 1, overflow = TextOverflow.Ellipsis) }, ) } } From 0803d9c2c38169bc278ab0d233a3bcf2209a6ce6 Mon Sep 17 00:00:00 2001 From: yukonisen Date: Tue, 3 Sep 2024 01:45:22 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E7=BF=BB=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values/strings.xml | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 67c13df0..2a7aa429 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,7 +20,7 @@ android { minSdk = 24 targetSdk = 34 // 版本号为x.y.z则versionCode为x*1000000+y*10000+z*100+debug版本号(开发需要时迭代, 两位数) - versionCode = 4_04_020 + versionCode = 4_04_021 versionName = "0.4.4" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 596cfda0..9b79e702 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -45,7 +45,7 @@ 系统动态配色 从系统主题应用动态配色 (Android 12 +) 汉字变体 - 使用指定语言的汉字变体 + (实验性)使用指定语言的汉字变体,需要系统字体支持 关于 构建 GitHub 仓库 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2127959d..01f9edbf 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -42,11 +42,11 @@ Check and get the latest version Display Dark Theme - Apply dynamic colors from system (requires Android 12 +) + Override application dark theme Dynamic Colors - Enable dark theme + Apply dynamic colors from system (requires Android 12 +) Chinese Characters Variant - Specify Chinese characters variants for other languages + (Experimental) Specify Chinese characters variants for other languages About Build GitHub Repo