Add amoled dark theme

This commit is contained in:
Ash 2022-05-05 20:44:17 +08:00
parent 7933aa4d11
commit 58da4c8f2d
7 changed files with 22 additions and 7 deletions

View File

@ -27,7 +27,7 @@ fun DynamicSVGImage(
val useDarkTheme = LocalDarkTheme.current.isDarkTheme() val useDarkTheme = LocalDarkTheme.current.isDarkTheme()
val tonalPalettes = LocalTonalPalettes.current val tonalPalettes = LocalTonalPalettes.current
var size by remember { mutableStateOf(IntSize.Zero) } var size by remember { mutableStateOf(IntSize.Zero) }
val pic by remember(tonalPalettes, size) { val pic by remember(useDarkTheme, tonalPalettes, size) {
mutableStateOf( mutableStateOf(
PictureDrawable( PictureDrawable(
SVG.getFromString(svgImageString.parseDynamicColor(tonalPalettes, useDarkTheme)) SVG.getFromString(svgImageString.parseDynamicColor(tonalPalettes, useDarkTheme))

View File

@ -2,7 +2,6 @@ package me.ash.reader.ui.page.home.read
import android.util.Log import android.util.Log
import androidx.compose.animation.* import androidx.compose.animation.*
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.LazyListState
@ -77,7 +76,7 @@ fun ReadPage(
} }
Scaffold( Scaffold(
modifier = Modifier.background(MaterialTheme.colorScheme.surface), containerColor = MaterialTheme.colorScheme.surface,
topBar = {}, topBar = {},
content = { content = {
Box(Modifier.fillMaxSize()) { Box(Modifier.fillMaxSize()) {

View File

@ -19,6 +19,8 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import me.ash.reader.ui.theme.palette.LocalTonalPalettes
import me.ash.reader.ui.theme.palette.onDark
@Composable @Composable
fun SettingItem( fun SettingItem(
@ -31,6 +33,8 @@ fun SettingItem(
onClick: () -> Unit, onClick: () -> Unit,
action: (@Composable () -> Unit)? = null action: (@Composable () -> Unit)? = null
) { ) {
val tonalPalettes = LocalTonalPalettes.current
Surface( Surface(
modifier = modifier modifier = modifier
.clickable { onClick() } .clickable { onClick() }
@ -71,7 +75,8 @@ fun SettingItem(
Divider( Divider(
modifier = Modifier modifier = Modifier
.padding(start = 16.dp) .padding(start = 16.dp)
.size(1.dp, 32.dp) .size(1.dp, 32.dp),
color = tonalPalettes neutralVariant 80 onDark (tonalPalettes neutralVariant 30),
) )
} }
Box(Modifier.padding(start = 16.dp)) { Box(Modifier.padding(start = 16.dp)) {

View File

@ -81,10 +81,10 @@ fun DarkTheme(
} }
Subtitle( Subtitle(
modifier = Modifier.padding(horizontal = 24.dp), modifier = Modifier.padding(horizontal = 24.dp),
text = "其他", text = stringResource(R.string.other),
) )
SettingItem( SettingItem(
title = "Amoled 的深色主题", title = stringResource(R.string.amoled_dark_theme),
onClick = { onClick = {
(!amoledDarkTheme).put(context, scope) (!amoledDarkTheme).put(context, scope)
}, },

View File

@ -6,6 +6,7 @@ import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import me.ash.reader.data.preference.LocalAmoledDarkTheme
import me.ash.reader.data.preference.LocalDarkTheme import me.ash.reader.data.preference.LocalDarkTheme
@Composable @Composable
@ -41,6 +42,8 @@ fun dynamicLightColorScheme(): ColorScheme {
@Composable @Composable
fun dynamicDarkColorScheme(): ColorScheme { fun dynamicDarkColorScheme(): ColorScheme {
val palettes = LocalTonalPalettes.current val palettes = LocalTonalPalettes.current
val amoledDarkTheme = LocalAmoledDarkTheme.current
return darkColorScheme( return darkColorScheme(
primary = palettes primary 80, primary = palettes primary 80,
onPrimary = palettes primary 20, onPrimary = palettes primary 20,
@ -57,7 +60,7 @@ fun dynamicDarkColorScheme(): ColorScheme {
onTertiaryContainer = palettes tertiary 90, onTertiaryContainer = palettes tertiary 90,
background = palettes neutral 10, background = palettes neutral 10,
onBackground = palettes neutral 90, onBackground = palettes neutral 90,
surface = palettes neutral 10, surface = palettes neutral if (amoledDarkTheme.value) 0 else 10,
onSurface = palettes neutral 90, onSurface = palettes neutral 90,
surfaceVariant = palettes neutralVariant 30, surfaceVariant = palettes neutralVariant 30,
onSurfaceVariant = palettes neutralVariant 80, onSurfaceVariant = palettes neutralVariant 80,

View File

@ -102,6 +102,10 @@
<string name="style">样式</string> <string name="style">样式</string>
<string name="dark_theme">深色主题</string> <string name="dark_theme">深色主题</string>
<string name="use_device_theme">跟随系统设置</string> <string name="use_device_theme">跟随系统设置</string>
<string name="on">开启</string>
<string name="off">关闭</string>
<string name="amoled_dark_theme">Amoled 深色主题</string>
<string name="other">其他</string>
<string name="tonal_elevation">色调海拔</string> <string name="tonal_elevation">色调海拔</string>
<string name="fonts">字体</string> <string name="fonts">字体</string>
<string name="basic_fonts">基本字体</string> <string name="basic_fonts">基本字体</string>

View File

@ -103,6 +103,10 @@
<string name="style">Style</string> <string name="style">Style</string>
<string name="dark_theme">Dark Theme</string> <string name="dark_theme">Dark Theme</string>
<string name="use_device_theme">Use Device Theme</string> <string name="use_device_theme">Use Device Theme</string>
<string name="on">On</string>
<string name="off">Off</string>
<string name="other">Other</string>
<string name="amoled_dark_theme">Amoled Dark Theme</string>
<string name="tonal_elevation">Tonal Elevation</string> <string name="tonal_elevation">Tonal Elevation</string>
<string name="fonts">Fonts</string> <string name="fonts">Fonts</string>
<string name="basic_fonts">Basic Fonts</string> <string name="basic_fonts">Basic Fonts</string>