Add dynamic SVG image

This commit is contained in:
Ash 2022-04-15 00:00:28 +08:00
parent 00231970cd
commit c621f7d794
33 changed files with 467 additions and 997 deletions

View File

@ -13,8 +13,8 @@ android {
applicationId "me.ash.reader"
minSdk 26
targetSdk 32
versionCode 4
versionName "0.7.0"
versionCode 5
versionName "0.7.2"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
@ -53,10 +53,12 @@ android {
}
dependencies {
implementation 'com.caverock:androidsvg-aar:1.4'
implementation 'com.github.ireward:compose-html:1.0.2'
implementation 'be.ceau:opml-parser:2.2.0'
implementation "androidx.profileinstaller:profileinstaller:1.2.0-alpha02"
implementation("io.coil-kt:coil-compose:2.0.0-rc02")
implementation("io.coil-kt:coil-svg:2.0.0-rc03")
implementation("io.coil-kt:coil-compose:2.0.0-rc03")
implementation("androidx.compose.animation:animation-graphics:$compose_version")
implementation("com.google.accompanist:accompanist-flowlayout:0.24.3-alpha")
implementation("com.google.accompanist:accompanist-navigation-animation:0.24.3-alpha")

View File

@ -11,8 +11,8 @@
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 4,
"versionName": "0.7.0",
"versionCode": 5,
"versionName": "0.7.2",
"outputFile": "app-release.apk"
}
],

View File

@ -1,16 +1,27 @@
package me.ash.reader
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.graphics.drawable.Drawable
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.core.view.WindowCompat
import androidx.profileinstaller.ProfileInstallerInitializer
import coil.ComponentRegistry
import coil.ImageLoader
import coil.decode.DataSource
import coil.decode.SvgDecoder
import coil.disk.DiskCache
import coil.memory.MemoryCache
import coil.request.*
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.CompletableDeferred
import me.ash.reader.ui.page.common.HomeEntry
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
class MainActivity : ComponentActivity(), ImageLoader {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -20,4 +31,49 @@ class MainActivity : ComponentActivity() {
HomeEntry()
}
}
override val components: ComponentRegistry
get() = ComponentRegistry.Builder().add(SvgDecoder.Factory()).build()
override val defaults: DefaultRequestOptions
get() = DefaultRequestOptions()
override val diskCache: DiskCache
get() = DiskCache.Builder()
.directory(this.cacheDir.resolve("images"))
.maxSizePercent(0.02)
.build()
override val memoryCache: MemoryCache
get() = MemoryCache.Builder(this)
.maxSizePercent(0.25)
.build()
override fun enqueue(request: ImageRequest): Disposable {
// Always call onStart before onSuccess.
request.target?.onStart(request.placeholder)
val result = ColorDrawable(Color.BLACK)
request.target?.onSuccess(result)
return object : Disposable {
override val job = CompletableDeferred(newResult(request, result))
override val isDisposed get() = true
override fun dispose() {}
}
}
override suspend fun execute(request: ImageRequest): ImageResult {
return newResult(request, ColorDrawable(Color.BLACK))
}
override fun newBuilder(): ImageLoader.Builder {
throw UnsupportedOperationException()
}
override fun shutdown() {
}
private fun newResult(request: ImageRequest, drawable: Drawable): SuccessResult {
return SuccessResult(
drawable = drawable,
request = request,
dataSource = DataSource.MEMORY_CACHE
)
}
}

View File

@ -24,7 +24,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import me.ash.reader.ui.theme.palette.onDark
import me.ash.reader.ui.theme.palette.alwaysLight
@Composable
fun Banner(
@ -46,7 +46,7 @@ fun Banner(
.fillMaxSize()
.padding(horizontal = 16.dp)
.clip(RoundedCornerShape(32.dp))
.background(MaterialTheme.colorScheme.primaryContainer onDark MaterialTheme.colorScheme.onPrimaryContainer)
.background(MaterialTheme.colorScheme.primaryContainer alwaysLight true)
.clickable { onClick() }
.padding(16.dp, 20.dp),
verticalAlignment = Alignment.CenterVertically
@ -57,7 +57,7 @@ fun Banner(
imageVector = it,
contentDescription = null,
modifier = Modifier.padding(end = 16.dp),
tint = MaterialTheme.colorScheme.onSurface onDark MaterialTheme.colorScheme.surface,
tint = MaterialTheme.colorScheme.onSurface alwaysLight true,
)
}
}
@ -71,15 +71,14 @@ fun Banner(
text = title,
maxLines = if (desc == null) 2 else 1,
style = MaterialTheme.typography.titleLarge.copy(fontSize = 20.sp),
color = MaterialTheme.colorScheme.onSurface onDark MaterialTheme.colorScheme.surface,
color = MaterialTheme.colorScheme.onSurface alwaysLight true,
overflow = TextOverflow.Ellipsis,
)
desc?.let {
Text(
text = it,
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurface.copy(alpha = 0.7f)
onDark MaterialTheme.colorScheme.surface.copy(alpha = 0.7f),
color = (MaterialTheme.colorScheme.onSurface alwaysLight true).copy(alpha = 0.7f),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
@ -88,10 +87,7 @@ fun Banner(
action?.let {
Box(Modifier.padding(start = 16.dp)) {
CompositionLocalProvider(
LocalContentColor provides (
MaterialTheme.colorScheme.onSurface
onDark MaterialTheme.colorScheme.surface
)
LocalContentColor provides (MaterialTheme.colorScheme.onSurface alwaysLight true)
) { it() }
}
}

View File

@ -14,6 +14,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import me.ash.reader.ui.theme.palette.alwaysLight
import me.ash.reader.ui.theme.palette.onDark
@Composable
@ -22,9 +23,9 @@ fun BlockButton(
text: String = "",
selected: Boolean = false,
containerColor: Color = MaterialTheme.colorScheme.surface.copy(0.7f) onDark MaterialTheme.colorScheme.inverseOnSurface,
selectedContainerColor: Color = MaterialTheme.colorScheme.primaryContainer onDark MaterialTheme.colorScheme.onPrimaryContainer,
selectedContainerColor: Color = MaterialTheme.colorScheme.primaryContainer alwaysLight true,
contentColor: Color = MaterialTheme.colorScheme.inverseSurface,
selectedContentColor: Color = MaterialTheme.colorScheme.onSurface onDark MaterialTheme.colorScheme.surface,
selectedContentColor: Color = MaterialTheme.colorScheme.onSurface alwaysLight true,
onClick: () -> Unit = {},
) {
Column(

View File

@ -0,0 +1,59 @@
package me.ash.reader.ui.component
import android.graphics.drawable.PictureDrawable
import androidx.compose.animation.Crossfade
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.IntSize
import coil.compose.AsyncImage
import coil.imageLoader
import coil.request.ImageRequest
import com.caverock.androidsvg.SVG
import me.ash.reader.ui.svg.parseDynamicColor
import me.ash.reader.ui.theme.LocalUseDarkTheme
import me.ash.reader.ui.theme.palette.LocalTonalPalettes
@Composable
fun DynamicSVGImage(
modifier: Modifier = Modifier,
svgImageString: String,
contentDescription: String,
) {
val context = LocalContext.current
val useDarkTheme = LocalUseDarkTheme.current
val tonalPalettes = LocalTonalPalettes.current
var size by remember { mutableStateOf(IntSize.Zero) }
val pic by remember(tonalPalettes, size) {
mutableStateOf(
PictureDrawable(
SVG.getFromString(svgImageString.parseDynamicColor(tonalPalettes, useDarkTheme))
.renderToPicture(size.width, size.height)
)
)
}
Row(
modifier = modifier
.aspectRatio(1.38f)
.onGloballyPositioned {
if (it.size != IntSize.Zero) {
size = it.size
}
},
) {
Crossfade(targetState = pic) {
AsyncImage(
contentDescription = contentDescription,
model = ImageRequest.Builder(context)
.data(it)
.crossfade(true)
.build(),
imageLoader = context.imageLoader,
)
}
}
}

View File

@ -2,11 +2,10 @@ package me.ash.reader.ui.component
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.defaultMinSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.ChipDefaults
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.FilterChip
@ -17,16 +16,13 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
import me.ash.reader.R
import me.ash.reader.ui.theme.palette.alwaysLight
@OptIn(ExperimentalMaterialApi::class)
@Composable
@ -47,14 +43,8 @@ fun SelectionChip(
modifier = modifier.defaultMinSize(minHeight = 36.dp),
colors = ChipDefaults.filterChipColors(
backgroundColor = MaterialTheme.colorScheme.surfaceVariant,
contentColor = MaterialTheme.colorScheme.onSurfaceVariant,
leadingIconColor = MaterialTheme.colorScheme.surfaceVariant,
disabledBackgroundColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.7f),
disabledContentColor = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
disabledLeadingIconColor = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
selectedBackgroundColor = MaterialTheme.colorScheme.primaryContainer,
selectedContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
selectedLeadingIconColor = MaterialTheme.colorScheme.onPrimaryContainer
selectedBackgroundColor = MaterialTheme.colorScheme.primaryContainer alwaysLight true,
),
border = border,
interactionSource = interactionSource,
@ -62,11 +52,12 @@ fun SelectionChip(
selected = selected,
selectedIcon = selectedIcon ?: {
Icon(
imageVector = Icons.Rounded.Check,
contentDescription = stringResource(R.string.selected),
modifier = Modifier
.padding(start = 8.dp)
.size(20.dp),
imageVector = Icons.Rounded.Check,
contentDescription = stringResource(R.string.selected),
tint = MaterialTheme.colorScheme.onSurface alwaysLight true
)
},
shape = shape,
@ -84,101 +75,7 @@ fun SelectionChip(
),
text = content,
style = MaterialTheme.typography.titleSmall,
)
},
)
}
@OptIn(ExperimentalMaterialApi::class)
@Composable
fun SelectionEditorChip(
modifier: Modifier = Modifier,
content: String,
onValueChange: (String) -> Unit = {},
selected: Boolean,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
shape: Shape = CircleShape,
selectedIcon: @Composable (() -> Unit)? = null,
onKeyboardAction: () -> Unit = {},
onClick: () -> Unit,
) {
val focusManager = LocalFocusManager.current
val placeholder = stringResource(R.string.add_to_group)
FilterChip(
modifier = modifier.defaultMinSize(minHeight = 36.dp),
colors = ChipDefaults.filterChipColors(
backgroundColor = MaterialTheme.colorScheme.surfaceVariant,
contentColor = MaterialTheme.colorScheme.onSurfaceVariant,
leadingIconColor = MaterialTheme.colorScheme.surfaceVariant,
disabledBackgroundColor = MaterialTheme.colorScheme.surfaceVariant.copy(alpha = 0.7f),
disabledContentColor = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
disabledLeadingIconColor = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
selectedBackgroundColor = MaterialTheme.colorScheme.primaryContainer,
selectedContentColor = MaterialTheme.colorScheme.onPrimaryContainer,
selectedLeadingIconColor = MaterialTheme.colorScheme.onPrimaryContainer
),
interactionSource = interactionSource,
enabled = enabled,
selected = selected,
selectedIcon = selectedIcon ?: {
Icon(
imageVector = Icons.Rounded.Check,
contentDescription = stringResource(R.string.selected),
modifier = Modifier
.padding(start = 8.dp)
.size(20.dp),
)
},
shape = shape,
onClick = onClick,
content = {
BasicTextField(
modifier = Modifier
.padding(
start = if (selected) 0.dp else 8.dp,
top = 8.dp,
end = if (content.isEmpty()) 0.dp else 8.dp,
bottom = 8.dp
)
.onFocusChanged {
if (it.isFocused) {
onClick()
} else {
focusManager.clearFocus()
}
},
value = content,
onValueChange = { onValueChange(it) },
cursorBrush = SolidColor(MaterialTheme.colorScheme.onSurfaceVariant),
textStyle = MaterialTheme.typography.titleSmall.copy(
color = MaterialTheme.colorScheme.onSurfaceVariant,
),
decorationBox = { innerTextField ->
Row(
horizontalArrangement = Arrangement.Start,
verticalAlignment = Alignment.CenterVertically,
) {
if (content.isEmpty()) {
Text(
text = placeholder,
color = MaterialTheme.colorScheme.onSurfaceVariant.copy(alpha = 0.7f),
style = MaterialTheme.typography.titleSmall,
)
}
}
innerTextField()
},
keyboardActions = KeyboardActions(
onDone = {
focusManager.clearFocus()
onKeyboardAction()
}
),
keyboardOptions = KeyboardOptions(
imeAction = ImeAction.Done
),
color = MaterialTheme.colorScheme.onSurface alwaysLight selected,
)
},
)

View File

@ -26,8 +26,8 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import me.ash.reader.ui.theme.palette.LocalTonalPalettes
import me.ash.reader.ui.theme.palette.onDark
import me.ash.reader.ui.theme.palette.tonalPalettes
// TODO: ripple & swipe
@Composable
@ -37,10 +37,12 @@ fun Switch(
enable: Boolean = true,
onClick: (() -> Unit)? = null
) {
val tonalPalettes = MaterialTheme.colorScheme.tonalPalettes()
val tonalPalettes = LocalTonalPalettes.current
Surface(
modifier = modifier.size(56.dp, 28.dp).alpha(if (enable) 1f else 0.5f),
modifier = modifier
.size(56.dp, 28.dp)
.alpha(if (enable) 1f else 0.5f),
shape = CircleShape,
color = animateColorAsState(
if (activated) (tonalPalettes primary 40) onDark (tonalPalettes neutralVariant 50)
@ -74,7 +76,7 @@ fun SwitchHeadline(
title: String,
modifier: Modifier = Modifier
) {
val tonalPalettes = MaterialTheme.colorScheme.tonalPalettes()
val tonalPalettes = LocalTonalPalettes.current
Surface(
modifier = modifier,

View File

@ -19,7 +19,7 @@ val Context.currentAccountId: Int
val Context.currentAccountType: Int
get() = this.dataStore.get(DataStoreKeys.CurrentAccountType)!!
val Context.themeIndex: Int
get() = this.dataStore.get(DataStoreKeys.ThemeIndex) ?: 0
get() = this.dataStore.get(DataStoreKeys.ThemeIndex) ?: 5
val Context.customPrimaryColor: String
get() = this.dataStore.get(DataStoreKeys.CustomPrimaryColor) ?: ""

View File

@ -2,7 +2,6 @@ package me.ash.reader.ui.page.common
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@ -24,19 +23,21 @@ import me.ash.reader.ui.page.settings.ColorAndStyle
import me.ash.reader.ui.page.settings.SettingsPage
import me.ash.reader.ui.page.startup.StartupPage
import me.ash.reader.ui.theme.AppTheme
import me.ash.reader.ui.theme.LocalUseDarkTheme
@OptIn(ExperimentalAnimationApi::class, androidx.compose.material.ExperimentalMaterialApi::class)
@Composable
fun HomeEntry() {
AppTheme {
val context = LocalContext.current
val useDarkTheme = LocalUseDarkTheme.current
val navController = rememberAnimatedNavController()
AppTheme {
ProvideWindowInsets {
rememberSystemUiController().run {
setStatusBarColor(Color.Transparent, !isSystemInDarkTheme())
setSystemBarsColor(Color.Transparent, !isSystemInDarkTheme())
setNavigationBarColor(MaterialTheme.colorScheme.surface, !isSystemInDarkTheme())
setStatusBarColor(Color.Transparent, !useDarkTheme)
setSystemBarsColor(Color.Transparent, !useDarkTheme)
setNavigationBarColor(MaterialTheme.colorScheme.surface, !useDarkTheme)
}
Column {
Row(

View File

@ -11,6 +11,7 @@ import androidx.compose.ui.zIndex
import com.google.accompanist.pager.ExperimentalPagerApi
import me.ash.reader.data.entity.Filter
import me.ash.reader.ui.ext.getName
import me.ash.reader.ui.theme.palette.alwaysLight
@OptIn(ExperimentalPagerApi::class)
@Composable
@ -55,11 +56,11 @@ fun FilterBar(
filterOnClick(item)
},
colors = NavigationBarItemDefaults.colors(
// selectedIconColor = MaterialTheme.colorScheme.onSecondaryContainer,
selectedIconColor = MaterialTheme.colorScheme.onSecondaryContainer alwaysLight true,
// unselectedIconColor = MaterialTheme.colorScheme.outline,
// selectedTextColor = MaterialTheme.colorScheme.onSurface,
selectedTextColor = MaterialTheme.colorScheme.onSurface alwaysLight true,
// unselectedTextColor = MaterialTheme.colorScheme.onSurfaceVariant,
indicatorColor = MaterialTheme.colorScheme.primaryContainer,
indicatorColor = MaterialTheme.colorScheme.primaryContainer alwaysLight true,
)
)
}

View File

@ -35,6 +35,7 @@ import me.ash.reader.data.entity.Group
import me.ash.reader.ui.component.SelectionChip
import me.ash.reader.ui.component.Subtitle
import me.ash.reader.ui.ext.roundClick
import me.ash.reader.ui.theme.palette.alwaysLight
@Composable
fun ResultView(
@ -131,11 +132,12 @@ private fun Preset(
selected = selectedAllowNotificationPreset,
selectedIcon = {
Icon(
imageVector = Icons.Outlined.Notifications,
contentDescription = stringResource(R.string.allow_notification),
modifier = Modifier
.padding(start = 8.dp)
.size(20.dp),
imageVector = Icons.Outlined.Notifications,
contentDescription = stringResource(R.string.allow_notification),
tint = MaterialTheme.colorScheme.onSurface alwaysLight true,
)
},
) {
@ -147,11 +149,12 @@ private fun Preset(
selected = selectedParseFullContentPreset,
selectedIcon = {
Icon(
imageVector = Icons.Outlined.Article,
contentDescription = stringResource(R.string.parse_full_content),
modifier = Modifier
.padding(start = 8.dp)
.size(20.dp),
imageVector = Icons.Outlined.Article,
contentDescription = stringResource(R.string.parse_full_content),
tint = MaterialTheme.colorScheme.onSurface alwaysLight true,
)
},
) {

View File

@ -24,6 +24,7 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import me.ash.reader.R
import me.ash.reader.ui.component.AnimatedPopup
import me.ash.reader.ui.theme.palette.alwaysLight
@Composable
fun MarkAsReadBar(
@ -101,7 +102,7 @@ fun MarkAsReadBarItem(
tonalElevation = 2.dp,
shape = RoundedCornerShape(16.dp),
color = if (isPrimary) {
MaterialTheme.colorScheme.primaryContainer
MaterialTheme.colorScheme.primaryContainer alwaysLight true
} else {
MaterialTheme.colorScheme.surface
}
@ -115,7 +116,7 @@ fun MarkAsReadBarItem(
text = text,
style = MaterialTheme.typography.titleSmall,
color = if (isPrimary) {
MaterialTheme.colorScheme.onSurface
MaterialTheme.colorScheme.onSurface alwaysLight true
} else {
MaterialTheme.colorScheme.secondary
},

View File

@ -96,7 +96,7 @@ fun ReadBar(
starredOnClick(!isStarred)
}
CanBeDisabledIconButton(
disabled = disabled,
disabled = true,
modifier = Modifier.size(40.dp),
imageVector = Icons.Rounded.ExpandMore,
contentDescription = "Next Article",
@ -106,7 +106,7 @@ fun ReadBar(
}
CanBeDisabledIconButton(
modifier = Modifier.size(40.dp),
disabled = disabled,
disabled = true,
imageVector = Icons.Outlined.TextFormat,
contentDescription = "Add Tag",
tint = MaterialTheme.colorScheme.outline,

View File

@ -15,6 +15,7 @@ import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
@ -155,13 +156,14 @@ private fun TopBar(
actions = {
if (isShowActions) {
FeedbackIconButton(
modifier = Modifier.size(22.dp),
modifier = Modifier.size(22.dp).alpha(0.5f),
imageVector = Icons.Outlined.Headphones,
contentDescription = stringResource(R.string.mark_all_as_read),
tint = MaterialTheme.colorScheme.onSurface,
) {
}
FeedbackIconButton(
modifier = Modifier.alpha(0.5f),
imageVector = Icons.Outlined.MoreVert,
contentDescription = stringResource(R.string.search),
tint = MaterialTheme.colorScheme.onSurface,

View File

@ -3,9 +3,12 @@ package me.ash.reader.ui.page.settings
import android.annotation.SuppressLint
import android.os.Build
import androidx.compose.animation.*
import androidx.compose.foundation.*
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.horizontalScroll
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
@ -18,7 +21,6 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
@ -29,6 +31,9 @@ import kotlinx.coroutines.launch
import me.ash.reader.R
import me.ash.reader.ui.component.*
import me.ash.reader.ui.ext.*
import me.ash.reader.ui.svg.PALETTE
import me.ash.reader.ui.svg.SVGString
import me.ash.reader.ui.theme.LocalUseDarkTheme
import me.ash.reader.ui.theme.palette.*
import me.ash.reader.ui.theme.palette.TonalPalettes.Companion.toTonalPalettes
import me.ash.reader.ui.theme.palette.dynamic.extractTonalPalettesFromUserWallpaper
@ -40,6 +45,7 @@ fun ColorAndStyle(
navController: NavHostController,
) {
val context = LocalContext.current
val useDarkTheme = LocalUseDarkTheme.current
val wallpaperTonalPalettes = extractTonalPalettesFromUserWallpaper()
var radioButtonSelected by remember { mutableStateOf(if (context.themeIndex > 4) 0 else 1) }
@ -86,10 +92,10 @@ fun ColorAndStyle(
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically
) {
Image(
DynamicSVGImage(
modifier = Modifier.padding(60.dp),
painter = painterResource(id = R.drawable.palettie),
contentDescription = stringResource(R.string.welcome),
svgImageString = SVGString.PALETTE,
contentDescription = stringResource(R.string.color_and_style),
)
}
Spacer(modifier = Modifier.height(24.dp))
@ -129,7 +135,7 @@ fun ColorAndStyle(
item {
Subtitle(
modifier = Modifier.padding(horizontal = 24.dp),
text = stringResource(R.string.style)
text = stringResource(R.string.appearance),
)
SettingItem(
title = stringResource(R.string.dark_theme),
@ -138,10 +144,11 @@ fun ColorAndStyle(
separatedActions = true,
onClick = {},
) {
Switch(activated = isSystemInDarkTheme(), enable = false)
Switch(activated = useDarkTheme, enable = false)
}
SettingItem(
title = stringResource(R.string.tonal_elevation),
title = stringResource(R.string.basic_fonts),
desc = "Google Sans",
enable = false,
onClick = {},
) {}
@ -150,23 +157,20 @@ fun ColorAndStyle(
item {
Subtitle(
modifier = Modifier.padding(horizontal = 24.dp),
text = stringResource(R.string.fonts)
text = stringResource(R.string.style)
)
SettingItem(
title = stringResource(R.string.basic_fonts),
desc = "Google Sans",
title = stringResource(R.string.feeds_page),
enable = false,
onClick = {},
) {}
SettingItem(
title = stringResource(R.string.reading_fonts),
desc = "Google Sans",
title = stringResource(R.string.flow_page),
enable = false,
onClick = {},
) {}
SettingItem(
title = stringResource(R.string.reading_fonts_size),
desc = "16sp",
title = stringResource(R.string.reading_page),
enable = false,
onClick = {},
) {}
@ -252,10 +256,10 @@ fun Palettes(
TextFieldDialog(
visible = addDialogVisible,
title = "强调色",
title = stringResource(R.string.primary_color),
icon = Icons.Outlined.Palette,
value = customColorValue,
placeholder = "#123456",
placeholder = stringResource(R.string.primary_color_hint),
onValueChange = {
customColorValue = it
},
@ -314,7 +318,7 @@ fun SelectableMiniPalette(
modifier = Modifier
.size(48.dp)
.offset(24.dp, 24.dp),
color = palette secondary 50,
color = palette secondary 60,
) {}
AnimatedVisibility(
visible = selected,

View File

@ -55,8 +55,8 @@ fun SettingsPage(
}
item {
Banner(
title = stringResource(R.string.get_new_updates),
desc = stringResource(R.string.get_new_updates_desc),
title = stringResource(R.string.in_coding),
desc = stringResource(R.string.coming_soon),
icon = Icons.Outlined.Lightbulb,
action = {
Icon(

View File

@ -2,7 +2,6 @@ package me.ash.reader.ui.page.startup
import android.content.Intent
import android.net.Uri
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
@ -14,7 +13,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavHostController
@ -23,10 +21,13 @@ import com.ireward.htmlcompose.HtmlText
import kotlinx.coroutines.launch
import me.ash.reader.R
import me.ash.reader.ui.component.DisplayText
import me.ash.reader.ui.component.DynamicSVGImage
import me.ash.reader.ui.ext.DataStoreKeys
import me.ash.reader.ui.ext.dataStore
import me.ash.reader.ui.ext.put
import me.ash.reader.ui.page.common.RouteName
import me.ash.reader.ui.svg.SVGString
import me.ash.reader.ui.svg.WELCOME
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@ -37,7 +38,9 @@ fun StartupPage(
val scope = rememberCoroutineScope()
Scaffold(
modifier = Modifier.statusBarsPadding().background(MaterialTheme.colorScheme.surface),
modifier = Modifier
.statusBarsPadding()
.background(MaterialTheme.colorScheme.surface),
topBar = {},
content = {
LazyColumn {
@ -47,10 +50,10 @@ fun StartupPage(
}
item {
Spacer(modifier = Modifier.height(16.dp))
Image(
modifier = Modifier.padding(horizontal = 16.dp),
painter = painterResource(id = R.drawable.welcome),
contentDescription = stringResource(R.string.welcome),
DynamicSVGImage(
modifier = Modifier.padding(horizontal = 60.dp),
svgImageString = SVGString.WELCOME,
contentDescription = stringResource(R.string.color_and_style),
)
}
item {

View File

@ -0,0 +1,50 @@
package me.ash.reader.ui.svg
import android.util.Log
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
import me.ash.reader.ui.theme.palette.TonalPalettes
object SVGString
fun String.parseDynamicColor(tonalPalettes: TonalPalettes, isDarkTheme: Boolean): String =
replace("fill=\"(.+?)\"".toRegex()) {
val value = it.groupValues[1]
if (value.startsWith("#")) return@replace it.value
try {
val (scheme, tone) = value.split("(?<=\\d)(?=\\D)|(?=\\d)(?<=\\D)".toRegex())
val argb = when (scheme) {
"p" -> tonalPalettes.primary[tone.toInt().autoToDarkTone(isDarkTheme)]
"s" -> tonalPalettes.secondary[tone.toInt().autoToDarkTone(isDarkTheme)]
"t" -> tonalPalettes.tertiary[tone.toInt().autoToDarkTone(isDarkTheme)]
"n" -> tonalPalettes.neutral[tone.toInt().autoToDarkTone(isDarkTheme)]
"nv" -> tonalPalettes.neutralVariant[tone.toInt().autoToDarkTone(isDarkTheme)]
"e" -> tonalPalettes.error[tone.toInt().autoToDarkTone(isDarkTheme)]
else -> Color.Transparent
}?.toArgb() ?: 0xFFFFFF
"fill=\"${String.format("#%06X", 0xFFFFFF and argb)}\""
} catch (e: Exception) {
Log.e("RLog", "parseDynamicColor: ${e.message}")
it.value
}
}
internal fun Int.autoToDarkTone(isDarkTheme: Boolean): Int =
if (!isDarkTheme) this
else when (this) {
10 -> 99
20 -> 95
25 -> 90
30 -> 90
40 -> 80
50 -> 60
60 -> 50
70 -> 40
80 -> 40
90 -> 30
95 -> 20
98 -> 10
99 -> 10
100 -> 20
else -> this
}

View File

@ -0,0 +1,63 @@
package me.ash.reader.ui.svg
val SVGString.PALETTE: String
get() = """
<svg width="100%" height="100%" viewBox="0 0 888 678" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_7439_23886)">
<path d="M307.693 659.535L316.417 662.148L330.648 629.74L317.772 625.884L307.693 659.535Z" fill="#FFB8B8"/>
<path d="M306.32 656.02L323.502 661.166L323.503 661.166C326.407 662.036 328.846 664.024 330.284 666.692C331.722 669.361 332.042 672.491 331.172 675.395L331.065 675.751L302.934 667.325L306.32 656.02Z" fill="s50"/>
<path d="M390.602 666.663L399.153 663.528L391.13 629.055L378.51 633.682L390.602 666.663Z" fill="#FFB8B8"/>
<path d="M387.398 664.671L404.237 658.496L404.238 658.496C407.084 657.453 410.228 657.583 412.978 658.858C415.729 660.132 417.86 662.447 418.904 665.293L419.031 665.642L391.46 675.751L387.398 664.671Z" fill="s50"/>
<path d="M322.321 600.868L307.464 649.897L325.292 655.097L342.378 609.782L322.321 600.868Z" fill="s90"/>
<path d="M369.121 612.011L382.493 658.068L401.064 649.154L387.693 606.068L369.121 612.011Z" fill="s90"/>
<path d="M362.162 620.318C350.27 620.263 338.406 619.169 326.705 617.047L326.407 616.987V605.657L319.617 604.903L324.917 585.975C322.446 556.815 325.957 519.885 327.092 509.256C327.352 506.764 327.524 505.365 327.524 505.365L333.482 454.715L343.453 445.512L347.982 448.46L356.384 456.861C366.15 480.895 373.899 503.522 373.948 504.976L406.699 609.929L406.479 610.085C395.106 618.113 377.77 620.318 362.162 620.318Z" fill="s40"/>
<path opacity="0.2" d="M337.708 477.181L335.418 491.475L350.921 497.87L337.708 477.181Z" fill="black"/>
<path d="M368.128 445.437H332.284C331.547 445.436 330.84 445.143 330.319 444.622C329.797 444.1 329.504 443.394 329.503 442.656V427.206C329.514 421.723 331.7 416.467 335.581 412.593C339.463 408.72 344.722 406.544 350.206 406.544C355.69 406.544 360.95 408.72 364.831 412.593C368.712 416.467 370.898 421.723 370.909 427.206V442.656C370.908 443.394 370.615 444.1 370.094 444.622C369.572 445.143 368.865 445.436 368.128 445.437V445.437Z" fill="#2F2E41"/>
<path d="M354.164 444.507C362.547 444.507 369.342 437.711 369.342 429.328C369.342 420.945 362.547 414.149 354.164 414.149C345.781 414.149 338.985 420.945 338.985 429.328C338.985 437.711 345.781 444.507 354.164 444.507Z" fill="#FFB8B8"/>
<path d="M375.807 428.751H353.889L353.665 425.605L352.541 428.751H349.166L348.721 422.515L346.493 428.751H339.963V428.442C339.968 424.101 341.695 419.938 344.765 416.868C347.835 413.797 351.998 412.07 356.34 412.065H359.43C363.772 412.07 367.935 413.797 371.005 416.868C374.075 419.938 375.802 424.1 375.807 428.442V428.751Z" fill="#2F2E41"/>
<path d="M353.71 448.321C353.545 448.321 353.38 448.307 353.218 448.278L337.169 445.446V418.922H354.836L354.398 419.432C348.313 426.529 352.897 438.038 356.172 444.266C356.413 444.722 356.521 445.237 356.482 445.752C356.444 446.266 356.261 446.76 355.954 447.175C355.698 447.53 355.36 447.819 354.97 448.018C354.58 448.218 354.148 448.321 353.71 448.321V448.321Z" fill="#2F2E41"/>
<path d="M382.029 512.433H373.231C372.949 512.434 372.677 512.33 372.468 512.14C372.259 511.95 372.128 511.689 372.101 511.408L370.34 493.359H384.919L383.159 511.408C383.132 511.689 383.001 511.95 382.792 512.14C382.583 512.33 382.311 512.434 382.029 512.433V512.433Z" fill="t90"/>
<path d="M384.896 495.63H370.364C370.063 495.63 369.774 495.51 369.561 495.297C369.348 495.085 369.229 494.796 369.228 494.495V491.77C369.229 491.469 369.348 491.18 369.561 490.968C369.774 490.755 370.063 490.635 370.364 490.635H384.896C385.197 490.635 385.486 490.755 385.699 490.968C385.911 491.18 386.031 491.469 386.031 491.77V494.495C386.031 494.796 385.911 495.085 385.699 495.297C385.486 495.51 385.197 495.63 384.896 495.63V495.63Z" fill="t40"/>
<path opacity="0.2" d="M327.892 504.667C331.932 509.345 337.412 512.547 343.47 513.772C349.528 514.996 355.821 514.173 361.36 511.432L364.664 509.797L327.892 504.667Z" fill="black"/>
<path d="M380.711 501.173C380.034 500.412 379.198 499.809 378.263 499.406C377.327 499.004 376.315 498.811 375.297 498.842C374.279 498.872 373.28 499.126 372.371 499.584C371.462 500.043 370.664 500.695 370.034 501.495L354.709 497.193L349.823 505.869L371.551 511.64C372.965 512.61 374.686 513.026 376.387 512.812C378.088 512.597 379.651 511.766 380.78 510.475C381.909 509.185 382.526 507.525 382.513 505.811C382.5 504.096 381.859 502.446 380.711 501.173V501.173Z" fill="#FFB8B8"/>
<path d="M344.139 510.801C336.852 510.802 326.993 506.53 315.29 498.255C314.637 497.803 314.086 497.221 313.671 496.545C313.255 495.869 312.985 495.114 312.876 494.327C312.013 488.858 317.348 481.464 317.871 480.756L323.479 465.355C323.543 465.105 325.351 458.441 329.888 456.071C330.843 455.581 331.893 455.303 332.966 455.258C334.039 455.212 335.108 455.399 336.102 455.806C344.744 458.953 337.996 483.254 337.069 486.441L348.52 491.83L355.791 496.465L365.748 497.507L363.045 510.019L347.922 510.359C346.684 510.662 345.413 510.811 344.139 510.801V510.801Z" fill="s50"/>
<path d="M887.675 396.659C887.667 382.038 884.407 367.601 878.13 354.396C871.854 341.19 862.719 329.546 851.386 320.307C840.054 311.068 826.808 304.465 812.609 300.978C798.409 297.49 783.612 297.205 769.289 300.143C754.966 303.08 741.475 309.167 729.795 317.963C718.115 326.758 708.538 338.042 701.757 350.996C694.976 363.95 691.162 378.25 690.591 392.86C690.02 407.47 692.706 422.025 698.454 435.469C698.358 435.362 698.258 435.257 698.162 435.15C702.541 445.355 708.611 454.748 716.116 462.932C716.139 462.957 716.162 462.981 716.184 463.006C716.79 463.666 717.399 464.322 718.022 464.966C727.031 474.362 737.816 481.874 749.752 487.068C761.687 492.261 774.536 495.032 787.551 495.219L784.22 676.148H794.512L792.429 556.733L807.316 548.895L805.045 544.582L792.334 551.274L791.356 495.21C817.102 494.62 841.595 483.978 859.596 465.56C877.596 447.143 887.674 422.412 887.675 396.659V396.659Z" fill="s90"/>
<path d="M595.087 348.612C595.078 331.477 591.257 314.558 583.902 299.082C576.547 283.606 565.841 269.96 552.56 259.133C539.28 248.306 523.757 240.568 507.116 236.481C490.476 232.394 473.135 232.06 456.349 235.502C439.564 238.945 423.754 246.079 410.066 256.386C396.378 266.694 385.154 279.917 377.208 295.098C369.262 310.279 364.792 327.038 364.122 344.159C363.453 361.281 366.601 378.338 373.337 394.093C373.224 393.967 373.108 393.845 372.995 393.719C378.127 405.679 385.24 416.686 394.036 426.278C394.062 426.307 394.089 426.335 394.116 426.364C394.825 427.137 395.539 427.907 396.269 428.661C406.826 439.672 419.466 448.476 433.454 454.563C447.441 460.649 462.499 463.896 477.752 464.115L473.848 676.148H485.908L483.467 536.204L500.913 527.019L498.252 521.964L483.356 529.806L482.21 464.105C512.382 463.413 541.086 450.941 562.181 429.358C583.276 407.774 595.087 378.792 595.087 348.612V348.612Z" fill="s90"/>
<path d="M263.259 303.418C263.249 283.919 258.901 264.666 250.531 247.055C242.16 229.444 229.977 213.915 214.864 201.593C199.751 189.272 182.086 180.467 163.15 175.816C144.213 171.165 124.48 170.785 105.378 174.702C86.2763 178.62 68.2854 186.738 52.7086 198.468C37.1319 210.197 24.3595 225.245 15.3167 242.521C6.27402 259.797 1.18748 278.868 0.425642 298.352C-0.336191 317.836 3.24577 337.246 10.912 355.175C10.7835 355.032 10.6506 354.893 10.5227 354.75C16.362 368.36 24.4571 380.886 34.4667 391.801C34.4966 391.834 34.5273 391.866 34.5572 391.899C35.3649 392.779 36.1771 393.655 37.0081 394.513C49.022 407.043 63.4053 417.062 79.323 423.989C95.2408 430.915 112.376 434.61 129.733 434.859L125.291 676.148H139.016L136.238 516.895L156.091 506.442L153.062 500.69L136.111 509.614L134.807 434.847C169.142 434.06 201.807 419.868 225.812 395.306C249.818 370.744 263.258 337.763 263.259 303.418V303.418Z" fill="s90"/>
<path d="M756.685 171.952C804.169 171.952 842.661 133.459 842.661 85.9757C842.661 38.4926 804.169 0 756.685 0C709.202 0 670.71 38.4926 670.71 85.9757C670.71 133.459 709.202 171.952 756.685 171.952Z" fill="t90"/>
<path d="M245.559 359.928C340.724 359.928 417.871 282.782 417.871 187.616C417.871 92.4513 340.724 15.3047 245.559 15.3047C150.394 15.3047 73.2471 92.4513 73.2471 187.616C73.2471 282.782 150.394 359.928 245.559 359.928Z" fill="p50"/>
<path opacity="0.2" d="M118.329 72.5254C102.257 110.123 100.076 152.21 112.178 191.267C124.28 230.324 149.875 263.805 184.39 285.727C218.905 307.65 260.09 316.586 300.587 310.937C341.084 305.289 378.252 285.425 405.452 254.895C395.633 277.865 380.938 298.426 362.384 315.154C343.831 331.881 321.862 344.374 298.001 351.768C274.139 359.162 248.956 361.28 224.195 357.975C199.433 354.67 175.687 346.021 154.6 332.628C133.513 319.234 115.591 301.416 102.074 280.408C88.5569 259.401 79.7689 235.705 76.3188 210.964C72.8686 186.223 74.8388 161.027 82.0929 137.123C89.3469 113.218 101.711 91.1768 118.329 72.5254V72.5254Z" fill="black"/>
<path d="M246.032 187.616H246.506L255.027 676.148H237.038L246.032 187.616Z" fill="s30"/>
<path d="M273.438 446.177L244.954 461.173L248.923 468.713L277.407 453.717L273.438 446.177Z" fill="s30"/>
<path d="M509.115 671.578C509.115 671.578 509.737 658.552 522.482 660.066Z" fill="s40"/>
<path d="M505.514 659.182C509.037 659.182 511.893 656.326 511.893 652.803C511.893 649.281 509.037 646.425 505.514 646.425C501.991 646.425 499.135 649.281 499.135 652.803C499.135 656.326 501.991 659.182 505.514 659.182Z" fill="t90"/>
<path d="M506.277 663.544H504.476V676.148H506.277V663.544Z" fill="s40"/>
<path d="M67.0829 669.778C67.0829 669.778 67.7046 656.751 80.4493 658.266Z" fill="s40"/>
<path d="M63.4818 657.381C67.0046 657.381 69.8605 654.526 69.8605 651.003C69.8605 647.48 67.0046 644.624 63.4818 644.624C59.959 644.624 57.1032 647.48 57.1032 651.003C57.1032 654.526 59.959 657.381 63.4818 657.381Z" fill="t90"/>
<path d="M64.2445 661.744H62.4439V674.348H64.2445V661.744Z" fill="s40"/>
<path d="M171.514 670.678C171.514 670.678 172.136 657.651 184.881 659.165Z" fill="s40"/>
<path d="M167.913 658.282C171.436 658.282 174.292 655.426 174.292 651.903C174.292 648.38 171.436 645.524 167.913 645.524C164.39 645.524 161.534 648.38 161.534 651.903C161.534 655.426 164.39 658.282 167.913 658.282Z" fill="t90"/>
<path d="M168.676 662.645H166.875V675.248H168.676V662.645Z" fill="s40"/>
<path d="M449.243 83.2986L462.038 73.0652C452.098 71.9686 448.014 77.3895 446.343 81.6802C438.578 78.4557 430.124 82.6815 430.124 82.6815L455.724 91.9753C454.433 88.5257 452.185 85.5159 449.243 83.2986V83.2986Z" fill="#3F3D56"/>
<path d="M643.827 187.54L656.622 177.306C646.682 176.21 642.598 181.631 640.927 185.921C633.161 182.697 624.708 186.923 624.708 186.923L650.308 196.216C649.016 192.767 646.768 189.757 643.827 187.54V187.54Z" fill="#3F3D56"/>
<path d="M433.955 276.492L446.749 266.259C436.81 265.162 432.726 270.583 431.054 274.874C423.289 271.65 414.835 275.875 414.835 275.875L440.435 285.169C439.144 281.72 436.896 278.71 433.955 276.492Z" fill="#3F3D56"/>
<path d="M683.655 676.307C683.655 676.307 684.277 663.28 697.022 664.794Z" fill="s40"/>
<path d="M563.919 676.307C563.919 676.307 564.541 663.28 577.286 664.794Z" fill="s40"/>
<path d="M127.289 676.307C127.289 676.307 127.91 663.28 140.655 664.794Z" fill="s40"/>
<path d="M737.671 676.307C737.671 676.307 738.293 663.28 751.038 664.794Z" fill="s40"/>
<path d="M712.464 676.307C712.464 676.307 713.086 663.28 725.83 664.794Z" fill="s40"/>
<path d="M660.465 676.307C660.465 676.307 659.843 663.28 647.099 664.794Z" fill="s40"/>
<path d="M453.403 676.307C453.403 676.307 452.781 663.28 440.037 664.794Z" fill="s40"/>
<path d="M281.452 676.307C281.452 676.307 280.83 663.28 268.085 664.794Z" fill="s40"/>
<path d="M98.6969 676.307C98.6969 676.307 98.0752 663.28 85.3305 664.794Z" fill="s40"/>
<path d="M791.904 676.307C791.904 676.307 791.283 663.28 778.538 664.794Z" fill="s40"/>
<path d="M714.481 677.207C714.481 677.207 713.859 664.181 701.115 665.695Z" fill="s40"/>
<path d="M888 674.604H0V676.604H888V674.604Z" fill="s40"/>
</g>
<defs>
<clipPath id="clip0_7439_23886">
<rect width="888" height="677.207" fill="white"/>
</clipPath>
</defs>
</svg>
"""

View File

@ -0,0 +1,51 @@
package me.ash.reader.ui.svg
val SVGString.WELCOME: String
get() = """
<svg width="100%" height="100%" viewBox="0 0 847 498" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_7447_23936)">
<path d="M303.773 372.098C303.817 370.979 300.388 369.934 296.114 369.764C291.84 369.595 288.339 370.365 288.294 371.484C288.25 372.603 291.679 373.648 295.953 373.817C300.227 373.987 303.728 373.217 303.773 372.098Z" fill="s90"/>
<path d="M353.075 369.487C353.12 368.368 349.691 367.323 345.417 367.154C341.142 366.984 337.641 367.754 337.597 368.873C337.553 369.992 340.982 371.037 345.256 371.206C349.53 371.376 353.031 370.606 353.075 369.487Z" fill="p50"/>
<path d="M284.83 356.885C284.874 355.766 281.445 354.721 277.171 354.551C272.897 354.382 269.396 355.152 269.351 356.271C269.307 357.39 272.736 358.435 277.01 358.604C281.284 358.774 284.785 358.004 284.83 356.885Z" fill="t90"/>
<path d="M261.017 351.328C261.13 350.328 259.69 349.344 257.799 349.128C255.909 348.913 254.284 349.548 254.17 350.547C254.056 351.546 255.496 352.531 257.387 352.747C259.278 352.962 260.903 352.327 261.017 351.328Z" fill="s90"/>
<path d="M249.639 339.674C249.752 338.675 248.312 337.69 246.421 337.475C244.531 337.259 242.905 337.895 242.792 338.894C242.678 339.893 244.118 340.878 246.009 341.093C247.9 341.309 249.525 340.673 249.639 339.674Z" fill="p50"/>
<path d="M313.94 359.516C314.053 358.517 312.613 357.532 310.722 357.317C308.832 357.101 307.207 357.737 307.093 358.736C306.979 359.735 308.419 360.72 310.31 360.935C312.201 361.151 313.826 360.515 313.94 359.516Z" fill="s90"/>
<path d="M291.375 364.475C291.489 363.475 290.049 362.491 288.158 362.275C286.267 362.06 284.642 362.695 284.528 363.694C284.414 364.693 285.855 365.678 287.746 365.894C289.636 366.109 291.261 365.474 291.375 364.475Z" fill="t90"/>
<path d="M327.872 372.462C327.986 371.463 326.546 370.479 324.655 370.263C322.764 370.048 321.139 370.683 321.026 371.682C320.912 372.681 322.352 373.666 324.243 373.881C326.134 374.097 327.758 373.462 327.872 372.462Z" fill="p50"/>
<path d="M2.05258e-05 331.112C-0.000445544 331.269 0.0300241 331.424 0.0896659 331.568C0.149308 331.713 0.236954 331.844 0.347555 331.955C0.458156 332.065 0.589526 332.153 0.734121 332.213C0.878716 332.272 1.03368 332.303 1.19008 332.302H845.48C845.796 332.302 846.098 332.177 846.322 331.954C846.545 331.731 846.67 331.428 846.67 331.112C846.67 330.797 846.545 330.494 846.322 330.271C846.098 330.048 845.796 329.922 845.48 329.922H1.19002C1.03362 329.922 0.878676 329.952 0.73409 330.012C0.589505 330.072 0.458133 330.159 0.347539 330.27C0.236946 330.38 0.149306 330.512 0.0896659 330.656C0.030026 330.801 -0.000440196 330.956 2.05258e-05 331.112Z" fill="n80"/>
<path d="M288.588 310.088C288.013 310.115 287.444 309.964 286.958 309.656C286.471 309.348 286.092 308.898 285.869 308.367C285.647 307.836 285.594 307.249 285.716 306.687C285.839 306.124 286.131 305.613 286.554 305.222L286.746 304.458C286.721 304.396 286.695 304.335 286.67 304.274C286.09 302.906 285.12 301.739 283.88 300.921C282.639 300.102 281.185 299.669 279.699 299.674C278.213 299.68 276.762 300.124 275.528 300.952C274.294 301.779 273.332 302.953 272.763 304.326C270.488 309.804 267.593 315.291 266.88 321.083C266.566 323.644 266.698 326.239 267.271 328.754C261.929 317.101 259.155 304.435 259.137 291.615C259.136 288.398 259.315 285.184 259.672 281.987C259.968 279.366 260.378 276.764 260.903 274.18C263.766 260.162 269.914 247.024 278.841 235.843C283.162 233.486 286.656 229.86 288.853 225.456C289.649 223.872 290.211 222.182 290.523 220.438C290.035 220.502 288.685 213.079 289.053 212.623C288.373 211.593 287.158 211.08 286.416 210.074C282.726 205.072 277.643 205.946 274.99 212.743C269.321 215.604 269.266 220.349 272.744 224.912C274.957 227.816 275.261 231.744 277.203 234.852C277.003 235.108 276.795 235.356 276.596 235.611C272.944 240.307 269.762 245.349 267.094 250.665C267.742 244.709 266.968 238.685 264.834 233.086C262.671 227.869 258.618 223.475 255.048 218.965C250.76 213.547 241.968 215.912 241.212 222.779C241.205 222.846 241.198 222.912 241.191 222.979C241.721 223.278 242.24 223.595 242.748 223.931C243.386 224.357 243.88 224.966 244.166 225.678C244.452 226.39 244.516 227.172 244.35 227.921C244.184 228.67 243.796 229.352 243.236 229.876C242.676 230.401 241.971 230.744 241.213 230.861L241.135 230.873C241.324 232.784 241.658 234.678 242.134 236.538C237.554 254.248 247.441 260.699 261.558 260.988C261.87 261.148 262.173 261.308 262.485 261.46C259.804 269.056 258.123 276.969 257.483 284.999C257.121 289.737 257.142 294.496 257.547 299.23L257.523 299.062C256.5 293.798 253.692 289.048 249.573 285.614C243.454 280.589 234.811 278.738 228.21 274.698C227.509 274.248 226.693 274.007 225.859 274.005C225.026 274.003 224.209 274.24 223.505 274.687C222.802 275.133 222.24 275.772 221.888 276.528C221.535 277.283 221.406 278.124 221.516 278.95C221.525 279.009 221.534 279.068 221.543 279.126C222.527 279.527 223.485 279.989 224.411 280.509C224.942 280.808 225.461 281.125 225.968 281.461C226.606 281.887 227.101 282.496 227.387 283.208C227.673 283.92 227.737 284.702 227.571 285.451C227.405 286.2 227.016 286.882 226.457 287.406C225.897 287.931 225.191 288.274 224.433 288.391L224.355 288.403C224.299 288.411 224.251 288.419 224.196 288.427C225.877 292.441 228.236 296.136 231.171 299.35C234.035 314.81 246.333 316.277 259.489 311.775H259.497C260.94 318.047 263.031 324.152 265.737 329.992H288.03C288.11 329.745 288.182 329.489 288.254 329.241C286.19 329.371 284.119 329.248 282.085 328.874C283.739 326.844 285.393 324.799 287.047 322.769C287.084 322.731 287.119 322.691 287.151 322.649C287.99 321.611 288.837 320.58 289.676 319.541L289.676 319.54C289.721 316.356 289.356 313.179 288.589 310.089L288.588 310.088Z" fill="s90"/>
<path d="M177.301 297.719C176.369 297.762 175.446 297.517 174.657 297.018C173.869 296.519 173.252 295.789 172.892 294.928C172.532 294.067 172.446 293.116 172.644 292.204C172.843 291.292 173.317 290.463 174.002 289.829C174.117 289.373 174.199 289.045 174.314 288.589C174.273 288.49 174.232 288.391 174.19 288.292C173.251 286.073 171.677 284.181 169.666 282.855C167.655 281.528 165.297 280.824 162.888 280.833C160.479 280.842 158.126 281.563 156.125 282.905C154.124 284.247 152.564 286.15 151.641 288.375C147.953 297.258 143.258 306.155 142.102 315.547C141.593 319.698 141.807 323.906 142.737 327.984C134.075 309.089 129.577 288.552 129.548 267.766C129.546 262.55 129.836 257.338 130.416 252.155C130.895 247.905 131.56 243.686 132.411 239.497C137.054 216.768 147.022 195.465 161.496 177.336C168.502 173.513 174.168 167.635 177.73 160.494C179.02 157.926 179.932 155.186 180.437 152.357C179.647 152.461 177.458 140.425 178.054 139.687C176.952 138.016 174.981 137.185 173.778 135.554C167.796 127.443 159.554 128.86 155.252 139.881C146.06 144.52 145.971 152.213 151.611 159.613C155.199 164.32 155.692 170.69 158.84 175.729C158.516 176.144 158.18 176.546 157.856 176.96C151.935 184.574 146.775 192.749 142.449 201.369C143.501 191.712 142.245 181.943 138.785 172.866C135.278 164.407 128.706 157.282 122.918 149.969C115.965 141.185 101.709 145.019 100.484 156.154C100.472 156.262 100.461 156.37 100.449 156.477C101.309 156.962 102.151 157.477 102.974 158.022C104.008 158.713 104.81 159.7 105.273 160.855C105.737 162.009 105.841 163.277 105.572 164.491C105.303 165.706 104.673 166.811 103.765 167.661C102.858 168.512 101.714 169.069 100.485 169.258L100.359 169.277C100.665 172.376 101.206 175.447 101.978 178.463C94.5527 207.179 110.583 217.638 133.473 218.107C133.978 218.366 134.471 218.626 134.976 218.872C130.63 231.189 127.904 244.019 126.866 257.039C126.278 264.721 126.313 272.437 126.97 280.113L126.931 279.841C125.272 271.306 120.719 263.604 114.04 258.037C104.119 249.888 90.104 246.887 79.4018 240.336C74.2501 237.183 67.6485 241.258 68.5477 247.231C68.562 247.326 68.5766 247.421 68.5914 247.517C70.1868 248.167 71.7401 248.915 73.2424 249.758C74.1021 250.243 74.9437 250.758 75.7671 251.302C76.8015 251.993 77.603 252.981 78.0666 254.135C78.5302 255.29 78.6343 256.557 78.3652 257.772C78.0961 258.987 77.4664 260.092 76.5586 260.942C75.6508 261.793 74.5072 262.349 73.2776 262.539L73.1516 262.558C73.061 262.571 72.9832 262.584 72.8927 262.597C75.6186 269.106 79.4445 275.097 84.2028 280.307C88.8457 305.375 108.787 307.753 130.118 300.453H130.131C132.471 310.624 135.862 320.523 140.249 329.992H176.395C176.525 329.591 176.641 329.176 176.758 328.774C173.412 328.985 170.053 328.785 166.756 328.179C169.438 324.888 172.12 321.571 174.802 318.28C174.861 318.219 174.918 318.154 174.97 318.086C176.33 316.402 177.704 314.73 179.064 313.046L179.065 313.044C179.137 307.882 178.545 302.731 177.302 297.72L177.301 297.719Z" fill="s90"/>
<path d="M671.989 18.0403C669.562 -0.559444 626.66 0.62705 622.609 18.1264C620.46 16.7824 614.994 17.7127 612.955 19.2575C610.917 20.8023 609.61 23.0734 608.331 25.2779C606.584 28.3399 604.774 31.5115 604.387 35.0223C603.984 38.5264 605.361 42.4959 608.538 44.0562C611.058 45.2996 616.604 44.46 619.374 43.9033C621.307 43.519 622.93 43.1823 624.307 42.8522C624.77 40.6743 624.45 38.403 623.405 36.437C624.518 36.658 625.569 37.1226 626.481 37.7975C627.393 38.4724 628.145 39.3408 628.682 40.3405C628.899 40.7592 636.759 99.926 636.759 99.926C638.908 100.185 641.076 100.239 643.235 100.088C644.575 92.8059 644.818 85.3648 643.958 78.011C646.235 82.2142 648.035 86.658 649.327 91.2601C650.067 93.8342 650.675 96.4443 651.149 99.0804C669.855 95.5825 695.142 83.5344 699.756 63.0768C699.73 63.0108 699.705 62.9448 699.679 62.8788C699.427 62.2536 699.4 61.5602 699.603 60.9174C699.806 60.2745 700.226 59.7221 700.791 59.3549C701.357 58.9877 702.032 58.8285 702.702 58.9045C703.372 58.9805 703.994 59.2871 704.463 59.7716C705.027 60.352 705.53 60.8481 705.954 61.2326C704.315 48.168 694.405 36.4117 671.989 18.0403Z" fill="#2F2E41"/>
<path d="M398.857 473.567L388.37 468.084L405 424.121L420.479 432.214L398.857 473.567Z" fill="#A0616A"/>
<path d="M356.54 473.037C355.891 474.281 355.762 475.731 356.181 477.07C356.601 478.409 357.534 479.527 358.776 480.179L379.629 491.079L387.101 485.526L384.622 493.685L392.488 497.803L404.136 470.141L401.481 468.55L390.663 462.034L387.169 459.938L383.245 467.444L360.578 470.238C359.729 470.343 358.918 470.653 358.214 471.14C357.511 471.628 356.937 472.279 356.54 473.037V473.037Z" fill="s50"/>
<path d="M388.113 311.722L380.485 302.674L412.533 268.29L423.791 281.644L388.113 311.722Z" fill="#A0616A"/>
<path d="M349.152 295.198C348.08 296.103 347.411 297.396 347.292 298.794C347.172 300.192 347.612 301.58 348.515 302.654L363.683 320.643L372.702 318.335L367.317 324.946L373.035 331.738L394.297 310.552L392.442 308.073L384.9 297.944L382.46 294.681L375.985 300.14L353.95 294.138C353.124 293.913 352.256 293.892 351.42 294.077C350.585 294.261 349.806 294.646 349.152 295.198Z" fill="s50"/>
<path d="M724.532 277.818C724.532 277.818 756.918 347.137 622.802 328.458C622.802 328.458 551.348 249.27 553.412 239.742C553.412 239.742 523 208.84 524.488 208.277C525.977 207.715 526.894 206.493 524.435 206.604C521.976 206.715 521.977 203.054 521.977 203.054C521.977 203.054 467.015 262.657 420.737 292.234L404.737 274.234C404.737 274.234 410.977 254.715 413.977 254.715C416.977 254.715 418.01 255.436 418.494 251.575C418.977 247.715 416.588 244.4 419.782 244.057C422.977 243.714 489.184 166.335 489.184 166.335C489.184 166.335 496.328 140.848 518.152 145.781C539.977 150.714 653.382 242.915 653.382 242.915L724.532 277.818Z" fill="s40"/>
<path d="M669.918 330.704L492.737 329.234L415.737 451.234L393.977 439.715L398.8 437.679C398.8 437.679 397.34 420.722 399.129 416.43C400.918 412.137 406.24 413.428 406.24 413.428L451.132 309.899C454.229 300.71 460.311 292.821 468.411 287.489C476.51 282.156 486.161 279.688 495.826 280.477C532.973 275.059 593.273 279.388 655.918 284.704L669.918 330.704Z" fill="s40"/>
<path d="M567.335 123.073C570.708 123.59 573.746 125.402 575.802 128.125C577.859 130.847 578.772 134.265 578.347 137.65C578.25 138.337 578.096 139.015 577.887 139.676L614.294 167.292L606.781 190.695L560.998 147.473C558.323 146.395 556.08 144.461 554.619 141.973C553.158 139.485 552.562 136.584 552.924 133.722C553.145 132.096 553.685 130.529 554.512 129.111C555.339 127.692 556.437 126.451 557.744 125.458C559.05 124.464 560.54 123.738 562.128 123.32C563.715 122.902 565.369 122.801 566.996 123.022C567.109 123.037 567.222 123.054 567.335 123.073Z" fill="#A0616A"/>
<path d="M727.948 124.797L714.858 161.037L663.668 233.377C663.668 233.377 663.248 233.197 662.488 232.877C658.088 230.977 642.108 223.997 627.078 216.067C612.968 208.617 599.678 200.327 597.618 194.627C597.398 194.027 597.198 193.447 597.018 192.887V192.877C596.058 189.974 595.457 186.965 595.228 183.917C595.058 181.567 595.208 180.307 594.888 180.157C594.638 180.047 594.118 180.587 592.968 181.807C592.888 181.887 592.818 181.967 592.738 182.037C588.578 186.207 583.468 185.667 584.718 183.687C585.998 181.657 585.328 181.697 583.448 179.577C582.048 177.997 577.498 171.817 575.258 168.767C574.488 167.717 573.998 167.037 573.998 167.037L574.768 165.827L576.898 162.487L587.028 146.607L587.588 145.737C587.588 145.737 608.408 150.547 611.178 155.117C613.958 159.687 606.988 159.537 613.958 159.687C620.928 159.837 628.038 150.357 622.948 159.787C617.858 169.207 619.198 172.497 625.498 171.007C628.058 170.397 632.108 172.327 636.008 174.827V174.837C638.446 176.421 640.8 178.134 643.058 179.967C645.468 181.907 647.098 183.377 647.098 183.377L686.638 103.157L691.018 94.2769C692.353 91.5748 694.213 89.166 696.49 87.1913C698.766 85.2167 701.414 83.716 704.278 82.7769L705.648 85.1668C714.178 97.7292 721.637 110.986 727.948 124.797V124.797Z" fill="s60"/>
<path d="M730.138 239.817C742.258 242.637 729.364 330.862 714.918 331.137C609.918 333.137 641.888 274.227 636.258 268.587C630.628 262.937 625.548 266.987 630.628 258.197C634.328 251.797 639.818 252.747 639.898 249.157C639.938 247.817 639.228 245.857 637.388 242.637C630.628 230.797 630.628 227.267 630.628 227.267C628.943 223.712 627.748 219.944 627.078 216.067C625.981 210.302 625.846 204.396 626.678 198.587C627.947 190.065 631.138 181.944 636.008 174.837V174.827C636.518 174.067 637.048 173.297 637.608 172.537C638.878 170.807 645.918 171.137 645.918 171.137L660.918 108.137L652.238 83.0168L693.348 63.7568L704.278 82.7768L705.648 85.1668C714.178 97.7291 721.637 110.986 727.948 124.797C734.018 138.307 739.008 153.307 739.188 166.357C739.668 200.387 733.798 210.507 733.798 210.507C733.798 210.507 748.048 221.157 740.918 227.667C733.798 234.187 718.018 236.997 730.138 239.817Z" fill="s50"/>
<path d="M543.898 114.785L537.191 119.88C535.866 120.893 534.996 122.39 534.773 124.043C534.55 125.696 534.991 127.37 535.999 128.698L552.154 149.932L561.693 162.459C562.704 163.782 564.199 164.65 565.849 164.873C567.5 165.096 569.171 164.656 570.497 163.649L577.213 158.548C578.532 157.532 579.397 156.036 579.619 154.385C579.84 152.735 579.401 151.064 578.397 149.736L577.407 148.427L557.837 122.715L552.703 115.975C552.203 115.318 551.579 114.766 550.866 114.351C550.153 113.936 549.365 113.666 548.547 113.555C547.729 113.445 546.898 113.496 546.1 113.707C545.303 113.918 544.554 114.284 543.898 114.785Z" fill="nv40"/>
<path d="M546.406 115.4L539.18 120.44C538.543 120.857 538.001 121.404 537.591 122.045C537.18 122.687 536.911 123.408 536.799 124.161C536.688 124.914 536.738 125.682 536.945 126.415C537.152 127.148 537.512 127.828 538.001 128.411L547.459 139.807L552.499 145.878L555.862 149.929L563.383 158.99C564.446 160.205 565.92 160.987 567.522 161.187C569.125 161.386 570.745 160.989 572.074 160.071L577.489 156.294L579.29 155.037C580.188 154.438 580.889 153.588 581.305 152.592C581.721 151.596 581.834 150.499 581.629 149.44C581.448 148.559 581.05 147.738 580.471 147.05L558.248 120.271L555.097 116.481C554.035 115.263 552.561 114.48 550.958 114.281C549.355 114.081 547.734 114.48 546.406 115.4V115.4Z" fill="t90"/>
<path d="M552.023 142.545C555.396 143.062 558.434 144.875 560.49 147.597C562.547 150.32 563.46 153.737 563.035 157.122C562.938 157.809 562.784 158.487 562.575 159.148L598.982 186.764L591.469 210.168L545.686 166.946C543.011 165.867 540.768 163.933 539.307 161.445C537.846 158.957 537.25 156.056 537.612 153.194C537.833 151.568 538.373 150.001 539.2 148.583C540.027 147.165 541.125 145.923 542.432 144.93C543.738 143.936 545.228 143.21 546.815 142.792C548.403 142.374 550.057 142.273 551.684 142.494C551.797 142.51 551.91 142.527 552.023 142.545Z" fill="#A0616A"/>
<path d="M700.508 101.59C703.69 102.238 706.696 103.563 709.32 105.477C711.944 107.39 714.126 109.846 715.716 112.677C717.306 115.509 718.268 118.65 718.536 121.887C718.804 125.123 718.372 128.379 717.269 131.434L699.55 180.507L648.352 252.853C648.352 252.853 586.952 226.918 582.303 214.099C577.655 201.28 581.853 196.856 577.655 201.28C573.457 205.703 568.134 205.179 569.408 203.154C570.683 201.13 570.012 201.173 568.136 199.053C566.259 196.932 558.687 186.512 558.687 186.512L572.275 165.211C572.275 165.211 593.096 170.017 595.87 174.59C598.644 179.163 591.672 179.014 598.644 179.163C605.616 179.313 612.728 169.829 607.636 179.256C602.543 188.684 603.886 191.97 610.186 190.477C616.487 188.983 631.781 202.851 631.781 202.851L675.71 113.751C677.919 109.27 681.551 105.646 686.037 103.446C690.523 101.246 695.612 100.593 700.508 101.59Z" fill="s70"/>
<path d="M674.309 72.0504C687.037 59.3225 687.037 38.6863 674.309 25.9583C661.582 13.2304 640.945 13.2304 628.217 25.9583C615.489 38.6863 615.489 59.3225 628.217 72.0504C640.945 84.7784 661.582 84.7784 674.309 72.0504Z" fill="#A0616A"/>
<path d="M689.375 13.4983C686.948 -5.10144 644.046 -3.91494 639.995 13.5844C637.846 12.2404 632.38 13.1707 630.341 14.7155C628.302 16.2604 626.996 18.5314 625.716 20.7359C623.97 23.7979 611.749 34.1572 609.918 31.1369C605.797 24.3398 597.715 39.1926 603.918 49.1369C605.405 51.5213 634.147 47.6936 636.918 47.1369C638.851 46.7526 635.541 47.467 636.918 47.1369C637.363 44.9796 641.853 33.8333 640.791 31.895C641.904 32.116 642.955 32.5806 643.867 33.2555C644.779 33.9303 645.531 34.7988 646.068 35.7984C646.285 36.2171 654.145 95.3839 654.145 95.3839C656.294 95.6429 658.462 95.697 660.621 95.5455C661.96 88.2638 662.204 80.8228 661.344 73.469C663.62 77.6722 665.421 82.116 666.713 86.7181C667.453 89.2921 668.061 91.9023 668.535 94.5383C687.241 91.0404 712.528 78.9923 717.141 58.5347C691.918 50.1369 711.791 31.8697 689.375 13.4983Z" fill="#2F2E41"/>
<path d="M404.092 106.964C404.51 104.091 401.501 101.275 397.371 100.674C393.241 100.073 389.554 101.915 389.136 104.788C388.718 107.661 391.727 110.477 395.857 111.078C399.987 111.679 403.674 109.837 404.092 106.964Z" fill="s90"/>
<path d="M453.263 102.166C453.681 99.2934 450.672 96.4772 446.542 95.8763C442.412 95.2754 438.726 97.1173 438.308 99.9903C437.89 102.863 440.899 105.68 445.029 106.28C449.159 106.881 452.845 105.039 453.263 102.166Z" fill="p50"/>
<path d="M390.627 67.1562C391.045 64.2831 388.036 61.467 383.906 60.8661C379.776 60.2652 376.089 62.1071 375.671 64.9801C375.253 67.8531 378.263 70.6693 382.392 71.2701C386.522 71.871 390.209 70.0292 390.627 67.1562Z" fill="t90"/>
<path d="M369.261 50.8502C369.281 48.2127 367.81 46.0633 365.975 46.0494C364.14 46.0356 362.637 48.1625 362.617 50.8C362.597 53.4375 364.068 55.5869 365.903 55.6008C367.737 55.6147 369.241 53.4878 369.261 50.8502Z" fill="s90"/>
<path d="M362.015 20.4782C362.035 17.8406 360.564 15.6912 358.729 15.6774C356.894 15.6635 355.391 17.7904 355.371 20.4279C355.351 23.0655 356.822 25.2149 358.657 25.2287C360.492 25.2426 361.995 23.1157 362.015 20.4782Z" fill="p50"/>
<path d="M418.36 73.9303C418.38 71.2928 416.909 69.1434 415.074 69.1295C413.24 69.1156 411.736 71.2425 411.716 73.8801C411.696 76.5176 413.167 78.667 415.002 78.6809C416.837 78.6948 418.341 76.5679 418.36 73.9303Z" fill="s90"/>
<path d="M394.599 85.7942C394.619 83.1566 393.147 81.0072 391.313 80.9934C389.478 80.9795 387.974 83.1064 387.954 85.7439C387.934 88.3814 389.405 90.5308 391.24 90.5447C393.075 90.5585 394.579 88.4317 394.599 85.7942Z" fill="t90"/>
<path d="M427.676 107.722C427.696 105.085 426.225 102.935 424.39 102.922C422.555 102.908 421.051 105.035 421.031 107.672C421.012 110.31 422.483 112.459 424.318 112.473C426.152 112.487 427.656 110.36 427.676 107.722Z" fill="p50"/>
<path d="M541.19 135.767C541.64 135.446 541.353 134.275 540.55 133.152C539.747 132.029 538.732 131.379 538.283 131.7C537.833 132.021 538.12 133.192 538.923 134.315C539.726 135.438 540.741 136.088 541.19 135.767Z" fill="nv40"/>
<path d="M538.19 131.767C538.64 131.446 538.353 130.275 537.55 129.152C536.747 128.029 535.732 127.379 535.283 127.7C534.833 128.021 535.12 129.192 535.923 130.315C536.726 131.438 537.741 132.088 538.19 131.767Z" fill="nv40"/>
</g>
<defs>
<clipPath id="clip0_7447_23936">
<rect width="846.67" height="497.803" fill="white"/>
</clipPath>
</defs>
</svg>
"""

View File

@ -6,6 +6,7 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.ui.platform.LocalContext
import kotlinx.coroutines.flow.map
import me.ash.reader.ui.ext.DataStoreKeys
@ -17,6 +18,8 @@ import me.ash.reader.ui.theme.palette.dynamic.extractTonalPalettesFromUserWallpa
import me.ash.reader.ui.theme.palette.dynamicDarkColorScheme
import me.ash.reader.ui.theme.palette.dynamicLightColorScheme
val LocalUseDarkTheme = compositionLocalOf { false }
@SuppressLint("FlowOperatorInvokedInComposition")
@Composable
fun AppTheme(
@ -25,12 +28,11 @@ fun AppTheme(
content: @Composable () -> Unit
) {
val context = LocalContext.current
val themeIndex = context.dataStore.data.map { it[DataStoreKeys.ThemeIndex.key] ?: 0 }
.collectAsState(initial = 0).value
val themeIndex = context.dataStore.data
.map { it[DataStoreKeys.ThemeIndex.key] ?: 5 }
.collectAsState(initial = 5).value
ProvideZcamViewingConditions {
CompositionLocalProvider(
LocalTonalPalettes provides wallpaperPalettes[
val tonalPalettes = wallpaperPalettes[
if (themeIndex >= wallpaperPalettes.size) {
when {
wallpaperPalettes.size == 5 -> 0
@ -41,6 +43,11 @@ fun AppTheme(
themeIndex
}
]
ProvideZcamViewingConditions {
CompositionLocalProvider(
LocalTonalPalettes provides tonalPalettes.also { it.Preheating() },
LocalUseDarkTheme provides useDarkTheme
) {
MaterialTheme(
colorScheme =

View File

@ -1,11 +1,12 @@
package me.ash.reader.ui.theme.palette
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import me.ash.reader.ui.theme.LocalUseDarkTheme
@Composable
fun dynamicLightColorScheme(): ColorScheme {
@ -65,18 +66,55 @@ fun dynamicDarkColorScheme(): ColorScheme {
)
}
@Composable
fun ColorScheme.tonalPalettes() = LocalTonalPalettes.current
@Suppress("NOTHING_TO_INLINE")
@Composable
inline infix fun Color.onLight(lightColor: Color): Color =
if (!isSystemInDarkTheme()) lightColor else this
if (!LocalUseDarkTheme.current) lightColor else this
@Suppress("NOTHING_TO_INLINE")
@Composable
inline infix fun Color.onDark(darkColor: Color): Color =
if (isSystemInDarkTheme()) darkColor else this
if (LocalUseDarkTheme.current) darkColor else this
@Composable
infix fun Color.alwaysLight(isAlways: Boolean): Color {
val colorScheme = MaterialTheme.colorScheme
return if (isAlways && LocalUseDarkTheme.current) {
when (this) {
colorScheme.primary -> colorScheme.onPrimary
colorScheme.secondary -> colorScheme.onSecondary
colorScheme.tertiary -> colorScheme.onTertiary
colorScheme.background -> colorScheme.onBackground
colorScheme.error -> colorScheme.onError
colorScheme.surface -> colorScheme.onSurface
colorScheme.surfaceVariant -> colorScheme.onSurfaceVariant
colorScheme.error -> colorScheme.onError
colorScheme.primaryContainer -> colorScheme.onPrimaryContainer
colorScheme.secondaryContainer -> colorScheme.onSecondaryContainer
colorScheme.tertiaryContainer -> colorScheme.onTertiaryContainer
colorScheme.errorContainer -> colorScheme.onErrorContainer
colorScheme.inverseSurface -> colorScheme.inverseOnSurface
colorScheme.onPrimary -> colorScheme.primary
colorScheme.onSecondary -> colorScheme.secondary
colorScheme.onTertiary -> colorScheme.tertiary
colorScheme.onBackground -> colorScheme.background
colorScheme.onError -> colorScheme.error
colorScheme.onSurface -> colorScheme.surface
colorScheme.onSurfaceVariant -> colorScheme.surfaceVariant
colorScheme.onError -> colorScheme.error
colorScheme.onPrimaryContainer -> colorScheme.primaryContainer
colorScheme.onSecondaryContainer -> colorScheme.secondaryContainer
colorScheme.onTertiaryContainer -> colorScheme.tertiaryContainer
colorScheme.onErrorContainer -> colorScheme.errorContainer
colorScheme.inverseOnSurface -> colorScheme.inverseSurface
else -> Color.Unspecified
}
} else {
this
}
}
fun String.checkColorHex(): String? {
var s = this.trim()

View File

@ -95,6 +95,17 @@ data class TonalPalettes(
).clampToRgb().toColor()
}
@Composable
fun Preheating() {
val tonalValues = listOf(0, 10, 20, 25, 30, 35, 40, 50, 60, 70, 80, 90, 95, 98, 99, 100)
tonalValues.forEach { primary(it) }
tonalValues.forEach { secondary(it) }
tonalValues.forEach { tertiary(it) }
tonalValues.forEach { neutral(it) }
tonalValues.forEach { neutralVariant(it) }
tonalValues.forEach { error(it) }
}
companion object {
@Composable
fun Color.toTonalPalettes(): TonalPalettes {

View File

@ -1,27 +0,0 @@
/**
* Copyright (C) 2021 Kyant0
*
* @link https://github.com/Kyant0/MusicYou
* @author Kyant0
*/
package me.ash.reader.ui.theme.palette.data
import me.ash.reader.ui.theme.palette.TonalPalettes
data class Theme(
val hue: Double,
val primaryChroma: Double,
) {
fun toTonalPalettes(): TonalPalettes = TonalPalettes(
hue = hue,
primaryChroma = primaryChroma,
)
companion object {
fun TonalPalettes.toTheme(): Theme = Theme(
hue = hue,
primaryChroma = primaryChroma,
)
}
}

View File

@ -1,118 +0,0 @@
package me.ash.reader.ui.theme.palette.preset
import androidx.compose.ui.graphics.Color
object BlueColor : IColor {
override val md_theme_light_primary: Color
get() = Color(0xFF00658e)
override val md_theme_light_onPrimary: Color
get() = Color(0xFFffffff)
override val md_theme_light_primaryContainer: Color
get() = Color(0xFFc3e7ff)
override val md_theme_light_onPrimaryContainer: Color
get() = Color(0xFF001e2e)
override val md_theme_light_secondary: Color
get() = Color(0xFF4f616e)
override val md_theme_light_onSecondary: Color
get() = Color(0xFFffffff)
override val md_theme_light_secondaryContainer: Color
get() = Color(0xFFd2e5f4)
override val md_theme_light_onSecondaryContainer: Color
get() = Color(0xFF0b1d28)
override val md_theme_light_tertiary: Color
get() = Color(0xFF625a7c)
override val md_theme_light_onTertiary: Color
get() = Color(0xFFffffff)
override val md_theme_light_tertiaryContainer: Color
get() = Color(0xFFe8ddff)
override val md_theme_light_onTertiaryContainer: Color
get() = Color(0xFF1e1735)
override val md_theme_light_error: Color
get() = Color(0xFFba1b1b)
override val md_theme_light_errorContainer: Color
get() = Color(0xFFffdad4)
override val md_theme_light_onError: Color
get() = Color(0xFFffffff)
override val md_theme_light_onErrorContainer: Color
get() = Color(0xFF410001)
override val md_theme_light_background: Color
get() = Color(0xFFfbfcff)
override val md_theme_light_onBackground: Color
get() = Color(0xFF191c1e)
override val md_theme_light_surface: Color
get() = Color(0xFFfbfcff)
override val md_theme_light_onSurface: Color
get() = Color(0xFF191c1e)
override val md_theme_light_surfaceVariant: Color
get() = Color(0xFFdde3ea)
override val md_theme_light_onSurfaceVariant: Color
get() = Color(0xFF41484d)
override val md_theme_light_outline: Color
get() = Color(0xFF71787e)
override val md_theme_light_inverseOnSurface: Color
get() = Color(0xFFf0f1f4)
override val md_theme_light_inverseSurface: Color
get() = Color(0xFF2e3133)
override val md_theme_light_inversePrimary: Color
get() = Color(0xFF7fcfff)
override val md_theme_light_shadow: Color
get() = Color(0xFF000000)
override val md_theme_dark_primary: Color
get() = Color(0xFF7fcfff)
override val md_theme_dark_onPrimary: Color
get() = Color(0xFF00344b)
override val md_theme_dark_primaryContainer: Color
get() = Color(0xFF004c6c)
override val md_theme_dark_onPrimaryContainer: Color
get() = Color(0xFFc3e7ff)
override val md_theme_dark_secondary: Color
get() = Color(0xFFb6c9d8)
override val md_theme_dark_onSecondary: Color
get() = Color(0xFF21333e)
override val md_theme_dark_secondaryContainer: Color
get() = Color(0xFF374955)
override val md_theme_dark_onSecondaryContainer: Color
get() = Color(0xFFd2e5f4)
override val md_theme_dark_tertiary: Color
get() = Color(0xFFccc1e9)
override val md_theme_dark_onTertiary: Color
get() = Color(0xFF332c4b)
override val md_theme_dark_tertiaryContainer: Color
get() = Color(0xFF4a4263)
override val md_theme_dark_onTertiaryContainer: Color
get() = Color(0xFFe8ddff)
override val md_theme_dark_error: Color
get() = Color(0xFFffb4a9)
override val md_theme_dark_errorContainer: Color
get() = Color(0xFF930006)
override val md_theme_dark_onError: Color
get() = Color(0xFF680003)
override val md_theme_dark_onErrorContainer: Color
get() = Color(0xFFffdad4)
override val md_theme_dark_background: Color
get() = Color(0xFF191c1e)
override val md_theme_dark_onBackground: Color
get() = Color(0xFFe1e2e5)
override val md_theme_dark_surface: Color
get() = Color(0xFF191c1e)
override val md_theme_dark_onSurface: Color
get() = Color(0xFFe1e2e5)
override val md_theme_dark_surfaceVariant: Color
get() = Color(0xFF41484d)
override val md_theme_dark_onSurfaceVariant: Color
get() = Color(0xFFc1c7ce)
override val md_theme_dark_outline: Color
get() = Color(0xFF8b9298)
override val md_theme_dark_inverseOnSurface: Color
get() = Color(0xFF191c1e)
override val md_theme_dark_inverseSurface: Color
get() = Color(0xFFe1e2e5)
override val md_theme_dark_inversePrimary: Color
get() = Color(0xFF00658e)
override val md_theme_dark_shadow: Color
get() = Color(0xFF000000)
override val seed: Color
get() = Color(0xFF006187)
override val error: Color
get() = Color(0xFFba1b1b)
}

View File

@ -1,118 +0,0 @@
package me.ash.reader.ui.theme.palette.preset
import androidx.compose.ui.graphics.Color
object GreenColor : IColor {
override val md_theme_light_primary: Color
get() = Color(0xFF3c6a1b)
override val md_theme_light_onPrimary: Color
get() = Color(0xFFffffff)
override val md_theme_light_primaryContainer: Color
get() = Color(0xFFbbf292)
override val md_theme_light_onPrimaryContainer: Color
get() = Color(0xFF0b2000)
override val md_theme_light_secondary: Color
get() = Color(0xFF56624b)
override val md_theme_light_onSecondary: Color
get() = Color(0xFFffffff)
override val md_theme_light_secondaryContainer: Color
get() = Color(0xFFd9e7c9)
override val md_theme_light_onSecondaryContainer: Color
get() = Color(0xFF141e0c)
override val md_theme_light_tertiary: Color
get() = Color(0xFF386665)
override val md_theme_light_onTertiary: Color
get() = Color(0xFFffffff)
override val md_theme_light_tertiaryContainer: Color
get() = Color(0xFFbbebea)
override val md_theme_light_onTertiaryContainer: Color
get() = Color(0xFF002020)
override val md_theme_light_error: Color
get() = Color(0xFFba1b1b)
override val md_theme_light_errorContainer: Color
get() = Color(0xFFffdad4)
override val md_theme_light_onError: Color
get() = Color(0xFFffffff)
override val md_theme_light_onErrorContainer: Color
get() = Color(0xFF410001)
override val md_theme_light_background: Color
get() = Color(0xFFfdfdf5)
override val md_theme_light_onBackground: Color
get() = Color(0xFF1a1c17)
override val md_theme_light_surface: Color
get() = Color(0xFFfdfdf5)
override val md_theme_light_onSurface: Color
get() = Color(0xFF1a1c17)
override val md_theme_light_surfaceVariant: Color
get() = Color(0xFFe0e4d6)
override val md_theme_light_onSurfaceVariant: Color
get() = Color(0xFF43483e)
override val md_theme_light_outline: Color
get() = Color(0xFF74796d)
override val md_theme_light_inverseOnSurface: Color
get() = Color(0xFFf1f1ea)
override val md_theme_light_inverseSurface: Color
get() = Color(0xFF2f312c)
override val md_theme_light_inversePrimary: Color
get() = Color(0xFFa0d579)
override val md_theme_light_shadow: Color
get() = Color(0xFF000000)
override val md_theme_dark_primary: Color
get() = Color(0xFFa0d579)
override val md_theme_dark_onPrimary: Color
get() = Color(0xFF143800)
override val md_theme_dark_primaryContainer: Color
get() = Color(0xFF245101)
override val md_theme_dark_onPrimaryContainer: Color
get() = Color(0xFFbbf292)
override val md_theme_dark_secondary: Color
get() = Color(0xFFbecbaf)
override val md_theme_dark_onSecondary: Color
get() = Color(0xFF283420)
override val md_theme_dark_secondaryContainer: Color
get() = Color(0xFF3e4a34)
override val md_theme_dark_onSecondaryContainer: Color
get() = Color(0xFFd9e7c9)
override val md_theme_dark_tertiary: Color
get() = Color(0xFFa0cfce)
override val md_theme_dark_onTertiary: Color
get() = Color(0xFF003737)
override val md_theme_dark_tertiaryContainer: Color
get() = Color(0xFF1e4e4d)
override val md_theme_dark_onTertiaryContainer: Color
get() = Color(0xFFbbebea)
override val md_theme_dark_error: Color
get() = Color(0xFFffb4a9)
override val md_theme_dark_errorContainer: Color
get() = Color(0xFF930006)
override val md_theme_dark_onError: Color
get() = Color(0xFF680003)
override val md_theme_dark_onErrorContainer: Color
get() = Color(0xFFffdad4)
override val md_theme_dark_background: Color
get() = Color(0xFF1a1c17)
override val md_theme_dark_onBackground: Color
get() = Color(0xFFe3e3dc)
override val md_theme_dark_surface: Color
get() = Color(0xFF1a1c17)
override val md_theme_dark_onSurface: Color
get() = Color(0xFFe3e3dc)
override val md_theme_dark_surfaceVariant: Color
get() = Color(0xFF43483e)
override val md_theme_dark_onSurfaceVariant: Color
get() = Color(0xFFc4c8bb)
override val md_theme_dark_outline: Color
get() = Color(0xFF8e9386)
override val md_theme_dark_inverseOnSurface: Color
get() = Color(0xFF1a1c17)
override val md_theme_dark_inverseSurface: Color
get() = Color(0xFFe3e3dc)
override val md_theme_dark_inversePrimary: Color
get() = Color(0xFF3c6a1b)
override val md_theme_dark_shadow: Color
get() = Color(0xFF000000)
override val seed: Color
get() = Color(0xFF3c6a1b)
override val error: Color
get() = Color(0xFFba1b1b)
}

View File

@ -1,127 +0,0 @@
package me.ash.reader.ui.theme.palette.preset
import androidx.compose.material3.ColorScheme
import androidx.compose.material3.darkColorScheme
import androidx.compose.material3.lightColorScheme
import androidx.compose.ui.graphics.Color
interface IColor {
val md_theme_light_primary: Color
val md_theme_light_onPrimary: Color
val md_theme_light_primaryContainer: Color
val md_theme_light_onPrimaryContainer: Color
val md_theme_light_secondary: Color
val md_theme_light_onSecondary: Color
val md_theme_light_secondaryContainer: Color
val md_theme_light_onSecondaryContainer: Color
val md_theme_light_tertiary: Color
val md_theme_light_onTertiary: Color
val md_theme_light_tertiaryContainer: Color
val md_theme_light_onTertiaryContainer: Color
val md_theme_light_error: Color
val md_theme_light_errorContainer: Color
val md_theme_light_onError: Color
val md_theme_light_onErrorContainer: Color
val md_theme_light_background: Color
val md_theme_light_onBackground: Color
val md_theme_light_surface: Color
val md_theme_light_onSurface: Color
val md_theme_light_surfaceVariant: Color
val md_theme_light_onSurfaceVariant: Color
val md_theme_light_outline: Color
val md_theme_light_inverseOnSurface: Color
val md_theme_light_inverseSurface: Color
val md_theme_light_inversePrimary: Color
val md_theme_light_shadow: Color
val md_theme_dark_primary: Color
val md_theme_dark_onPrimary: Color
val md_theme_dark_primaryContainer: Color
val md_theme_dark_onPrimaryContainer: Color
val md_theme_dark_secondary: Color
val md_theme_dark_onSecondary: Color
val md_theme_dark_secondaryContainer: Color
val md_theme_dark_onSecondaryContainer: Color
val md_theme_dark_tertiary: Color
val md_theme_dark_onTertiary: Color
val md_theme_dark_tertiaryContainer: Color
val md_theme_dark_onTertiaryContainer: Color
val md_theme_dark_error: Color
val md_theme_dark_errorContainer: Color
val md_theme_dark_onError: Color
val md_theme_dark_onErrorContainer: Color
val md_theme_dark_background: Color
val md_theme_dark_onBackground: Color
val md_theme_dark_surface: Color
val md_theme_dark_onSurface: Color
val md_theme_dark_surfaceVariant: Color
val md_theme_dark_onSurfaceVariant: Color
val md_theme_dark_outline: Color
val md_theme_dark_inverseOnSurface: Color
val md_theme_dark_inverseSurface: Color
val md_theme_dark_inversePrimary: Color
val md_theme_dark_shadow: Color
val seed: Color
val error: Color
val lightColorScheme: ColorScheme
get() = lightColorScheme(
primary = md_theme_light_primary,
onPrimary = md_theme_light_onPrimary,
primaryContainer = md_theme_light_primaryContainer,
onPrimaryContainer = md_theme_light_onPrimaryContainer,
secondary = md_theme_light_secondary,
onSecondary = md_theme_light_onSecondary,
secondaryContainer = md_theme_light_secondaryContainer,
onSecondaryContainer = md_theme_light_onSecondaryContainer,
tertiary = md_theme_light_tertiary,
onTertiary = md_theme_light_onTertiary,
tertiaryContainer = md_theme_light_tertiaryContainer,
onTertiaryContainer = md_theme_light_onTertiaryContainer,
error = md_theme_light_error,
errorContainer = md_theme_light_errorContainer,
onError = md_theme_light_onError,
onErrorContainer = md_theme_light_onErrorContainer,
background = md_theme_light_background,
onBackground = md_theme_light_onBackground,
surface = md_theme_light_surface,
onSurface = md_theme_light_onSurface,
surfaceVariant = md_theme_light_surfaceVariant,
onSurfaceVariant = md_theme_light_onSurfaceVariant,
outline = md_theme_light_outline,
inverseOnSurface = md_theme_light_inverseOnSurface,
inverseSurface = md_theme_light_inverseSurface,
inversePrimary = md_theme_light_inversePrimary,
)
val darkColorScheme: ColorScheme
get() = darkColorScheme(
primary = md_theme_dark_primary,
onPrimary = md_theme_dark_onPrimary,
primaryContainer = md_theme_dark_primaryContainer,
onPrimaryContainer = md_theme_dark_onPrimaryContainer,
secondary = md_theme_dark_secondary,
onSecondary = md_theme_dark_onSecondary,
secondaryContainer = md_theme_dark_secondaryContainer,
onSecondaryContainer = md_theme_dark_onSecondaryContainer,
tertiary = md_theme_dark_tertiary,
onTertiary = md_theme_dark_onTertiary,
tertiaryContainer = md_theme_dark_tertiaryContainer,
onTertiaryContainer = md_theme_dark_onTertiaryContainer,
error = md_theme_dark_error,
errorContainer = md_theme_dark_errorContainer,
onError = md_theme_dark_onError,
onErrorContainer = md_theme_dark_onErrorContainer,
background = md_theme_dark_background,
onBackground = md_theme_dark_onBackground,
surface = md_theme_dark_surface,
onSurface = md_theme_dark_onSurface,
surfaceVariant = md_theme_dark_surfaceVariant,
onSurfaceVariant = md_theme_dark_onSurfaceVariant,
outline = md_theme_dark_outline,
inverseOnSurface = md_theme_dark_inverseOnSurface,
inverseSurface = md_theme_dark_inverseSurface,
inversePrimary = md_theme_dark_inversePrimary,
)
}

View File

@ -1,118 +0,0 @@
package me.ash.reader.ui.theme.palette.preset
import androidx.compose.ui.graphics.Color
object PurpleColor : IColor {
override val md_theme_light_primary: Color
get() = Color(0xFF5f51ac)
override val md_theme_light_onPrimary: Color
get() = Color(0xFFffffff)
override val md_theme_light_primaryContainer: Color
get() = Color(0xFFe6deff)
override val md_theme_light_onPrimaryContainer: Color
get() = Color(0xFF190065)
override val md_theme_light_secondary: Color
get() = Color(0xFF605c72)
override val md_theme_light_onSecondary: Color
get() = Color(0xFFffffff)
override val md_theme_light_secondaryContainer: Color
get() = Color(0xFFe5dff9)
override val md_theme_light_onSecondaryContainer: Color
get() = Color(0xFF1c192c)
override val md_theme_light_tertiary: Color
get() = Color(0xFF7c5264)
override val md_theme_light_onTertiary: Color
get() = Color(0xFFffffff)
override val md_theme_light_tertiaryContainer: Color
get() = Color(0xFFffd8e8)
override val md_theme_light_onTertiaryContainer: Color
get() = Color(0xFF301020)
override val md_theme_light_error: Color
get() = Color(0xFFba1b1b)
override val md_theme_light_errorContainer: Color
get() = Color(0xFFffdad4)
override val md_theme_light_onError: Color
get() = Color(0xFFffffff)
override val md_theme_light_onErrorContainer: Color
get() = Color(0xFF410001)
override val md_theme_light_background: Color
get() = Color(0xFFfffbff)
override val md_theme_light_onBackground: Color
get() = Color(0xFF1c1b1e)
override val md_theme_light_surface: Color
get() = Color(0xFFfffbff)
override val md_theme_light_onSurface: Color
get() = Color(0xFF1c1b1e)
override val md_theme_light_surfaceVariant: Color
get() = Color(0xFFe5e0ec)
override val md_theme_light_onSurfaceVariant: Color
get() = Color(0xFF48454f)
override val md_theme_light_outline: Color
get() = Color(0xFF79767f)
override val md_theme_light_inverseOnSurface: Color
get() = Color(0xFFf4eff4)
override val md_theme_light_inverseSurface: Color
get() = Color(0xFF313033)
override val md_theme_light_inversePrimary: Color
get() = Color(0xFFcabeff)
override val md_theme_light_shadow: Color
get() = Color(0xFF000000)
override val md_theme_dark_primary: Color
get() = Color(0xFFcabeff)
override val md_theme_dark_onPrimary: Color
get() = Color(0xFF301f7a)
override val md_theme_dark_primaryContainer: Color
get() = Color(0xFF473892)
override val md_theme_dark_onPrimaryContainer: Color
get() = Color(0xFFe6deff)
override val md_theme_dark_secondary: Color
get() = Color(0xFFc9c3dc)
override val md_theme_dark_onSecondary: Color
get() = Color(0xFF312e41)
override val md_theme_dark_secondaryContainer: Color
get() = Color(0xFF484459)
override val md_theme_dark_onSecondaryContainer: Color
get() = Color(0xFFe5dff9)
override val md_theme_dark_tertiary: Color
get() = Color(0xFFedb8cd)
override val md_theme_dark_onTertiary: Color
get() = Color(0xFF492536)
override val md_theme_dark_tertiaryContainer: Color
get() = Color(0xFF613b4c)
override val md_theme_dark_onTertiaryContainer: Color
get() = Color(0xFFffd8e8)
override val md_theme_dark_error: Color
get() = Color(0xFFffb4a9)
override val md_theme_dark_errorContainer: Color
get() = Color(0xFF930006)
override val md_theme_dark_onError: Color
get() = Color(0xFF680003)
override val md_theme_dark_onErrorContainer: Color
get() = Color(0xFFffdad4)
override val md_theme_dark_background: Color
get() = Color(0xFF1c1b1e)
override val md_theme_dark_onBackground: Color
get() = Color(0xFFe5e1e5)
override val md_theme_dark_surface: Color
get() = Color(0xFF1c1b1e)
override val md_theme_dark_onSurface: Color
get() = Color(0xFFe5e1e5)
override val md_theme_dark_surfaceVariant: Color
get() = Color(0xFF48454f)
override val md_theme_dark_onSurfaceVariant: Color
get() = Color(0xFFc9c4d0)
override val md_theme_dark_outline: Color
get() = Color(0xFF938f99)
override val md_theme_dark_inverseOnSurface: Color
get() = Color(0xFF1c1b1e)
override val md_theme_dark_inverseSurface: Color
get() = Color(0xFFe5e1e5)
override val md_theme_dark_inversePrimary: Color
get() = Color(0xFF5f51ac)
override val md_theme_dark_shadow: Color
get() = Color(0xFF000000)
override val seed: Color
get() = Color(0xFF53459f)
override val error: Color
get() = Color(0xFFba1b1b)
}

View File

@ -1,159 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="888dp"
android:height="677.20703dp"
android:viewportWidth="888"
android:viewportHeight="677.20703">
<path
android:pathData="M307.693,659.535l8.724,2.613l14.231,-32.408l-12.876,-3.856l-10.079,33.651z"
android:fillColor="#ffb8b8"/>
<path
android:pathData="M306.32,656.02l17.182,5.146 0.001,0a11.431,11.431 0,0 1,7.669 14.229l-0.107,0.356 -28.131,-8.426Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M390.602,666.663l8.551,-3.135l-8.023,-34.473l-12.62,4.627l12.092,32.981z"
android:fillColor="#ffb8b8"/>
<path
android:pathData="M387.398,664.671l16.839,-6.174 0.001,-0a11.431,11.431 0,0 1,14.666 6.797l0.128,0.349L391.46,675.751Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M322.321,600.868l-14.857,49.029l17.828,5.2l17.086,-45.315l-20.057,-8.914z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M369.121,612.011l13.372,46.057l18.571,-8.914l-13.371,-43.086l-18.572,5.943z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M362.162,620.318a203.98,203.98 0,0 1,-35.458 -3.27l-0.298,-0.06v-11.33l-6.79,-0.754 5.3,-18.928c-2.47,-29.16 1.04,-66.089 2.176,-76.719 0.26,-2.493 0.431,-3.891 0.431,-3.891l5.959,-50.65 9.97,-9.203 4.529,2.948 8.402,8.401c9.766,24.034 17.515,46.661 17.564,48.115l32.751,104.953 -0.221,0.156C395.106,618.113 377.77,620.318 362.162,620.318Z"
android:fillColor="#3f3d56"/>
<path
android:fillColor="#FF000000"
android:pathData="M337.708,477.181l-2.29,14.294l15.503,6.395l-13.213,-20.689z"
android:strokeAlpha="0.2"
android:fillAlpha="0.2"/>
<path
android:pathData="M368.128,445.438L332.284,445.438a2.784,2.784 0,0 1,-2.781 -2.781v-15.45a20.703,20.703 0,0 1,41.406 0v15.45A2.784,2.784 0,0 1,368.128 445.438Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M354.164,429.328m-15.179,0a15.179,15.179 0,1 1,30.357 0a15.179,15.179 0,1 1,-30.357 0"
android:fillColor="#ffb8b8"/>
<path
android:pathData="M375.807,428.752L353.889,428.752l-0.225,-3.147 -1.124,3.147h-3.375l-0.445,-6.237 -2.227,6.237h-6.53v-0.309a16.395,16.395 0,0 1,16.377 -16.377L359.43,412.065a16.395,16.395 0,0 1,16.377 16.377Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M353.71,448.322a2.841,2.841 0,0 1,-0.492 -0.043l-16.049,-2.832L337.169,418.922h17.667l-0.437,0.51c-6.086,7.097 -1.501,18.606 1.774,24.834a2.74,2.74 0,0 1,-0.218 2.909A2.77,2.77 0,0 1,353.71 448.322Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M382.029,512.433h-8.797a1.131,1.131 0,0 1,-1.13 -1.025l-1.761,-18.049h14.579l-1.761,18.049A1.131,1.131 0,0 1,382.029 512.433Z"
android:fillColor="#6c63ff"/>
<path
android:pathData="M384.896,495.63L370.364,495.63a1.137,1.137 0,0 1,-1.135 -1.135v-2.725a1.137,1.137 0,0 1,1.135 -1.135h14.532a1.137,1.137 0,0 1,1.135 1.135v2.725A1.137,1.137 0,0 1,384.896 495.63Z"
android:fillColor="#2f2e41"/>
<path
android:fillColor="#FF000000"
android:pathData="M327.892,504.667l0,0a27.881,27.881 0,0 0,33.468 6.765l3.304,-1.635Z"
android:strokeAlpha="0.2"
android:fillAlpha="0.2"/>
<path
android:pathData="M380.711,501.173a6.966,6.966 0,0 0,-10.676 0.322l-15.326,-4.302 -4.886,8.676 21.728,5.772a7.004,7.004 0,0 0,9.16 -10.467Z"
android:fillColor="#ffb8b8"/>
<path
android:pathData="M344.139,510.801c-7.286,0.001 -17.145,-4.271 -28.849,-12.546a5.731,5.731 0,0 1,-2.413 -3.928c-0.863,-5.469 4.471,-12.863 4.995,-13.572l5.608,-15.401c0.065,-0.25 1.872,-6.914 6.409,-9.284a7.438,7.438 0,0 1,6.214 -0.265c8.642,3.147 1.894,27.448 0.968,30.635l11.45,5.389 7.271,4.635 9.958,1.042 -2.704,12.512 -15.123,0.34A15.434,15.434 0,0 1,344.139 510.801Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M887.675,396.659A98.58,98.58 0,1 0,698.454 435.469c-0.096,-0.107 -0.196,-0.211 -0.292,-0.319a98.666,98.666 0,0 0,17.954 27.783c0.022,0.025 0.045,0.049 0.068,0.073 0.606,0.66 1.215,1.317 1.838,1.96a98.28,98.28 0,0 0,69.529 30.254l-3.331,180.929h10.291l-2.083,-119.415 14.887,-7.838 -2.271,-4.314 -12.711,6.692 -0.978,-56.064A98.578,98.578 0,0 0,887.675 396.659Z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M595.087,348.612a115.526,115.526 0,1 0,-221.75 45.481c-0.113,-0.126 -0.23,-0.248 -0.342,-0.374a115.628,115.628 0,0 0,21.041 32.559c0.026,0.029 0.053,0.057 0.08,0.086 0.71,0.774 1.423,1.543 2.154,2.297a115.176,115.176 0,0 0,81.482 35.454l-3.904,212.033h12.06l-2.441,-139.944 17.446,-9.185 -2.661,-5.055 -14.896,7.842 -1.146,-65.702A115.525,115.525 0,0 0,595.087 348.612Z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M263.259,303.418A131.467,131.467 0,1 0,10.912 355.175c-0.129,-0.143 -0.261,-0.282 -0.389,-0.426a131.582,131.582 0,0 0,23.944 37.051c0.03,0.033 0.061,0.065 0.091,0.098 0.808,0.88 1.62,1.756 2.451,2.614a131.068,131.068 0,0 0,92.725 40.347L125.291,676.148h13.725L136.238,516.895 156.091,506.442l-3.029,-5.753 -16.952,8.925 -1.304,-74.767A131.465,131.465 0,0 0,263.259 303.418Z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M756.685,85.976m-85.976,0a85.976,85.976 0,1 1,171.952 0a85.976,85.976 0,1 1,-171.952 0"
android:fillColor="#ff6584"/>
<path
android:pathData="M245.559,187.616m-172.312,0a172.312,172.312 0,1 1,344.623 0a172.312,172.312 0,1 1,-344.623 0"
android:fillColor="#6c63ff"/>
<path
android:fillColor="#FF000000"
android:pathData="M118.329,72.526A172.325,172.325 0,0 0,405.452 254.895,172.327 172.327,0 1,1 118.329,72.526Z"
android:strokeAlpha="0.2"
android:fillAlpha="0.2"/>
<path
android:pathData="M246.032,187.616l0.474,0l8.521,488.532l-17.989,0l8.994,-488.532z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M244.954,461.173l28.484,-14.996l3.97,7.54l-28.484,14.996z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M509.115,671.578s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M505.514,652.803m-6.379,0a6.379,6.379 0,1 1,12.757 0a6.379,6.379 0,1 1,-12.757 0"
android:fillColor="#6c63ff"/>
<path
android:pathData="M504.476,663.545h1.801v12.604h-1.801z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M67.083,669.778s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M63.482,651.003m-6.379,0a6.379,6.379 0,1 1,12.757 0a6.379,6.379 0,1 1,-12.757 0"
android:fillColor="#6c63ff"/>
<path
android:pathData="M62.444,661.744h1.801v12.604h-1.801z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M171.514,670.678s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M167.913,651.903m-6.379,0a6.379,6.379 0,1 1,12.757 0a6.379,6.379 0,1 1,-12.757 0"
android:fillColor="#6c63ff"/>
<path
android:pathData="M166.875,662.644h1.801v12.604h-1.801z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M449.243,83.299l12.795,-10.233c-9.94,-1.097 -14.024,4.324 -15.695,8.615 -7.765,-3.224 -16.219,1.001 -16.219,1.001l25.6,9.294A19.372,19.372 0,0 0,449.243 83.299Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M643.827,187.54l12.795,-10.233c-9.94,-1.097 -14.024,4.324 -15.695,8.615 -7.765,-3.224 -16.219,1.001 -16.219,1.001l25.6,9.294A19.372,19.372 0,0 0,643.827 187.54Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M433.955,276.492l12.795,-10.233c-9.94,-1.097 -14.024,4.324 -15.695,8.615 -7.765,-3.224 -16.219,1.001 -16.219,1.001l25.6,9.294A19.372,19.372 0,0 0,433.955 276.492Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M683.655,676.307s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M563.919,676.307s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M127.289,676.307s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M737.671,676.307s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M712.464,676.307s0.622,-13.027 13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M660.465,676.307s-0.622,-13.027 -13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M453.403,676.307s-0.622,-13.027 -13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M281.452,676.307s-0.622,-13.027 -13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M98.697,676.307s-0.622,-13.027 -13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M791.904,676.307s-0.622,-13.027 -13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M714.481,677.207s-0.622,-13.027 -13.366,-11.513"
android:fillColor="#3f3d56"/>
<path
android:pathData="M0,674.604h888v2h-888z"
android:fillColor="#3f3d56"/>
</vector>

View File

@ -1,123 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="846.67004dp"
android:height="497.80338dp"
android:viewportWidth="846.67004"
android:viewportHeight="497.80338">
<path
android:pathData="M137.075,56.711a25.667,25.667 0,0 0,-25.638 25.638L111.437,361.073a25.667,25.667 0,0 0,25.638 25.638L714.8,386.711a25.667,25.667 0,0 0,25.638 -25.638L740.437,82.348A25.667,25.667 0,0 0,714.8 56.711Z"
android:fillColor="#fff"/>
<path
android:pathData="M714.8,387.711L137.075,387.711a26.668,26.668 0,0 1,-26.638 -26.638L110.437,82.348a26.668,26.668 0,0 1,26.638 -26.638L714.8,55.711a26.668,26.668 0,0 1,26.638 26.638L741.437,361.073A26.668,26.668 0,0 1,714.8 387.711ZM137.075,57.711a24.665,24.665 0,0 0,-24.638 24.638L112.437,361.073a24.665,24.665 0,0 0,24.638 24.638L714.8,385.711a24.665,24.665 0,0 0,24.638 -24.638L739.437,82.348A24.665,24.665 0,0 0,714.8 57.711Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M295.953,373.817a2.028,7.745 92.272,1 0,0.161 -4.053a2.028,7.745 92.272,1 0,-0.161 4.053z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M345.256,371.206a2.028,7.745 92.272,1 0,0.161 -4.053a2.028,7.745 92.272,1 0,-0.161 4.053z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M277.01,358.605a2.028,7.745 92.272,1 0,0.161 -4.053a2.028,7.745 92.272,1 0,-0.161 4.053z"
android:fillColor="#ff6584"/>
<path
android:pathData="M257.387,352.746a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M246.009,341.093a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M310.31,360.935a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M287.746,365.894a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#ff6584"/>
<path
android:pathData="M324.243,373.881a1.821,3.446 96.502,1 0,0.412 -3.618a1.821,3.446 96.502,1 0,-0.412 3.618z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M0,331.112a1.186,1.186 0,0 0,1.19 1.19h844.29a1.19,1.19 0,0 0,0 -2.38L1.19,329.922A1.187,1.187 0,0 0,0 331.112Z"
android:fillColor="#ccc"/>
<path
android:pathData="M288.588,310.088a2.807,2.807 0,0 1,-2.035 -4.866l0.192,-0.765q-0.038,-0.092 -0.076,-0.184a7.539,7.539 0,0 0,-13.907 0.052c-2.275,5.478 -5.17,10.966 -5.883,16.758a22.303,22.303 0,0 0,0.392 7.671,89.419 89.419,0 0,1 -8.134,-37.139 86.307,86.307 0,0 1,0.535 -9.628q0.443,-3.931 1.231,-7.807A90.456,90.456 0,0 1,278.841 235.843a24.073,24.073 0,0 0,10.012 -10.387,18.362 18.362,0 0,0 1.67,-5.018c-0.487,0.064 -1.838,-7.359 -1.47,-7.815 -0.679,-1.031 -1.895,-1.543 -2.637,-2.549 -3.689,-5.002 -8.773,-4.129 -11.426,2.669 -5.669,2.861 -5.724,7.606 -2.245,12.169 2.213,2.903 2.517,6.832 4.459,9.94 -0.2,0.256 -0.408,0.503 -0.607,0.759a91.04,91.04 0,0 0,-9.502 15.054,37.846 37.846,0 0,0 -2.259,-17.579c-2.163,-5.217 -6.216,-9.611 -9.786,-14.122 -4.288,-5.418 -13.08,-3.053 -13.836,3.814q-0.011,0.1 -0.021,0.199 0.795,0.449 1.557,0.952a3.808,3.808 0,0 1,-1.535 6.93l-0.078,0.012a37.89,37.89 0,0 0,0.999 5.665c-4.579,17.71 5.307,24.16 19.424,24.45 0.312,0.16 0.615,0.32 0.927,0.471a92.925,92.925 0,0 0,-5.002 23.539,88.137 88.137,0 0,0 0.064,14.231l-0.024,-0.168a23.289,23.289 0,0 0,-7.95 -13.448c-6.118,-5.026 -14.762,-6.877 -21.363,-10.917a4.371,4.371 0,0 0,-6.694 4.252q0.013,0.088 0.027,0.176a25.581,25.581 0,0 1,2.868 1.382q0.795,0.449 1.557,0.952a3.808,3.808 0,0 1,-1.535 6.93l-0.078,0.012c-0.056,0.008 -0.104,0.016 -0.16,0.024a37.923,37.923 0,0 0,6.975 10.923c2.863,15.46 15.162,16.927 28.318,12.425h0.008a92.898,92.898 0,0 0,6.24 18.218h22.293c0.08,-0.248 0.152,-0.503 0.224,-0.751A25.329,25.329 0,0 1,282.085 328.874c1.654,-2.03 3.308,-4.075 4.962,-6.105a1.384,1.384 0,0 0,0.104 -0.12c0.839,-1.039 1.686,-2.069 2.525,-3.108l0,-0.001a37.101,37.101 0,0 0,-1.087 -9.451Z"
android:fillColor="#f2f2f2"/>
<path
android:pathData="M177.301,297.719a4.552,4.552 0,0 1,-3.299 -7.89c0.115,-0.456 0.197,-0.784 0.312,-1.24q-0.062,-0.149 -0.124,-0.298a12.224,12.224 0,0 0,-22.549 0.084c-3.688,8.882 -8.383,17.78 -9.54,27.171a36.164,36.164 0,0 0,0.635 12.437,144.987 144.987,0 0,1 -13.189,-60.218 139.941,139.941 0,0 1,0.868 -15.612q0.719,-6.374 1.995,-12.658a146.667,146.667 0,0 1,29.085 -62.161,39.032 39.032,0 0,0 16.233,-16.842 29.773,29.773 0,0 0,2.708 -8.136c-0.79,0.104 -2.98,-11.932 -2.384,-12.671 -1.101,-1.671 -3.073,-2.502 -4.275,-4.133 -5.982,-8.111 -14.224,-6.694 -18.527,4.327 -9.191,4.639 -9.28,12.332 -3.641,19.731 3.588,4.707 4.081,11.077 7.229,16.117 -0.324,0.415 -0.661,0.816 -0.985,1.231a147.615,147.615 0,0 0,-15.407 24.409,61.364 61.364,0 0,0 -3.664,-28.503c-3.507,-8.459 -10.079,-15.584 -15.867,-22.897 -6.952,-8.784 -21.209,-4.951 -22.434,6.185q-0.018,0.162 -0.035,0.323 1.29,0.727 2.525,1.544a6.174,6.174 0,0 1,-2.489 11.236l-0.126,0.019a61.435,61.435 0,0 0,1.619 9.186c-7.425,28.716 8.605,39.174 31.495,39.644 0.505,0.259 0.998,0.518 1.503,0.764a150.671,150.671 0,0 0,-8.11 38.167,142.905 142.905,0 0,0 0.104,23.074l-0.039,-0.272a37.762,37.762 0,0 0,-12.891 -21.804c-9.92,-8.149 -23.936,-11.15 -34.638,-17.7 -5.152,-3.153 -11.753,0.922 -10.854,6.894q0.022,0.143 0.044,0.286a41.475,41.475 0,0 1,4.651 2.241q1.29,0.728 2.525,1.544a6.175,6.175 0,0 1,-2.489 11.236l-0.126,0.019c-0.091,0.013 -0.168,0.026 -0.259,0.039a61.489,61.489 0,0 0,11.31 17.71c4.643,25.068 24.584,27.446 45.915,20.146h0.013A150.626,150.626 0,0 0,140.249 329.992h36.146c0.13,-0.402 0.246,-0.816 0.363,-1.218a41.069,41.069 0,0 1,-10.002 -0.596c2.682,-3.291 5.364,-6.608 8.045,-9.898a2.243,2.243 0,0 0,0.168 -0.194c1.36,-1.684 2.734,-3.355 4.094,-5.04l0.001,-0.002a60.157,60.157 0,0 0,-1.763 -15.325Z"
android:fillColor="#f2f2f2"/>
<path
android:pathData="M671.989,18.041c-2.427,-18.6 -45.329,-17.413 -49.38,0.086 -2.149,-1.344 -7.615,-0.414 -9.654,1.131s-3.345,3.816 -4.625,6.02c-1.746,3.062 -3.557,6.234 -3.943,9.744 -0.403,3.504 0.974,7.474 4.151,9.034 2.52,1.243 8.066,0.404 10.836,-0.153 1.933,-0.384 3.556,-0.721 4.933,-1.051a9.474,9.474 0,0 0,-0.902 -6.415A7.69,7.69 0,0 1,628.682 40.341c0.217,0.419 8.077,59.585 8.077,59.585a34.144,34.144 0,0 0,6.476 0.162,74.297 74.297,0 0,0 0.723,-22.077 64.334,64.334 0,0 1,5.369 13.249,78.653 78.653,0 0,1 1.822,7.82c18.706,-3.498 43.993,-15.546 48.606,-36.004q-0.038,-0.099 -0.076,-0.198a2.906,2.906 0,0 1,4.784 -3.107c0.564,0.58 1.067,1.077 1.491,1.461C704.315,48.168 694.405,36.412 671.989,18.041Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M398.857,473.567l-10.487,-5.483l16.63,-43.963l15.479,8.093l-21.622,41.353z"
android:fillColor="#a0616a"/>
<path
android:pathData="M356.54,473.037a5.298,5.298 0,0 0,2.236 7.142l20.853,10.901 7.472,-5.554 -2.479,8.159 7.865,4.119 11.649,-27.663 -2.656,-1.591L390.663,462.034l-3.494,-2.095 -3.924,7.505 -22.667,2.795A5.289,5.289 0,0 0,356.54 473.037Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M388.113,311.722l-7.628,-9.048l32.048,-34.384l11.258,13.354l-35.678,30.078z"
android:fillColor="#a0616a"/>
<path
android:pathData="M349.152,295.198a5.298,5.298 0,0 0,-0.637 7.456l15.168,17.989 9.019,-2.308 -5.386,6.611 5.718,6.792 21.262,-21.186 -1.855,-2.478 -7.542,-10.129 -2.439,-3.263 -6.475,5.459 -22.036,-6.002A5.289,5.289 0,0 0,349.152 295.198Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M724.532,277.818s32.386,69.319 -101.729,50.64c0,0 -71.454,-79.188 -69.39,-88.716 0,0 -30.412,-30.903 -28.924,-31.465s2.406,-1.785 -0.053,-1.674 -2.459,-3.549 -2.459,-3.549 -54.961,59.603 -101.24,89.18l-16,-18s6.24,-19.519 9.24,-19.519 4.034,0.721 4.517,-3.14 -1.906,-7.175 1.289,-7.518 69.402,-77.722 69.402,-77.722 7.143,-25.487 28.968,-20.554 135.23,97.134 135.23,97.134Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M669.918,330.704l-177.181,-1.47 -77,122L393.977,439.715l4.824,-2.036s-1.46,-16.956 0.329,-21.249 7.111,-3.001 7.111,-3.001l44.893,-103.529a43.435,43.435 0,0 1,44.694 -29.423c37.146,-5.417 97.446,-1.089 160.092,4.227Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M567.335,123.073a13.098,13.098 0,0 1,11.012 14.577,12.566 12.566,0 0,1 -0.46,2.026L614.294,167.292l-7.513,23.404 -45.783,-43.222a13.062,13.062 0,0 1,-8.074 -13.751,12.5 12.5,0 0,1 14.072,-10.7Q567.166,123.045 567.335,123.073Z"
android:fillColor="#a0616a"/>
<path
android:pathData="M727.948,124.797l-13.09,36.24 -51.19,72.34s-0.42,-0.18 -1.18,-0.5c-4.4,-1.9 -20.38,-8.88 -35.41,-16.81 -14.11,-7.45 -27.4,-15.74 -29.46,-21.44q-0.33,-0.9 -0.6,-1.74v-0.01a37.511,37.511 0,0 1,-1.79 -8.96c-0.17,-2.35 -0.02,-3.61 -0.34,-3.76 -0.25,-0.11 -0.77,0.43 -1.92,1.65 -0.08,0.08 -0.15,0.16 -0.23,0.23 -4.16,4.17 -9.27,3.63 -8.02,1.65 1.28,-2.03 0.61,-1.99 -1.27,-4.11 -1.4,-1.58 -5.95,-7.76 -8.19,-10.81 -0.77,-1.05 -1.26,-1.73 -1.26,-1.73l0.77,-1.21 2.13,-3.34 10.13,-15.88 0.56,-0.87s20.82,4.81 23.59,9.38c2.78,4.57 -4.19,4.42 2.78,4.57 6.97,0.15 14.08,-9.33 8.99,0.1 -5.09,9.42 -3.75,12.71 2.55,11.22 2.56,-0.61 6.61,1.32 10.51,3.82v0.01a82.532,82.532 0,0 1,7.05 5.13c2.41,1.94 4.04,3.41 4.04,3.41l39.54,-80.22 4.38,-8.88a22.668,22.668 0,0 1,13.26 -11.5l1.37,2.39A271.157,271.157 0,0 1,727.948 124.797Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M730.138,239.817c12.12,2.82 -0.774,91.045 -15.22,91.32 -105,2 -73.03,-56.91 -78.66,-62.55 -5.63,-5.65 -10.71,-1.6 -5.63,-10.39 3.7,-6.4 9.19,-5.45 9.27,-9.04 0.04,-1.34 -0.67,-3.3 -2.51,-6.52 -6.76,-11.84 -6.76,-15.37 -6.76,-15.37a43.439,43.439 0,0 1,-3.55 -11.2,53.185 53.185,0 0,1 -0.4,-17.48 56.831,56.831 0,0 1,9.33 -23.75v-0.01c0.51,-0.76 1.04,-1.53 1.6,-2.29 1.27,-1.73 8.31,-1.4 8.31,-1.4l15,-63 -8.68,-25.12 41.11,-19.26 10.93,19.02 1.37,2.39a271.157,271.157 0,0 1,22.3 39.63c6.07,13.51 11.06,28.51 11.24,41.56 0.48,34.03 -5.39,44.15 -5.39,44.15s14.25,10.65 7.12,17.16C733.798,234.187 718.018,236.997 730.138,239.817Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M543.898,114.785l-6.708,5.095a6.304,6.304 0,0 0,-1.192 8.819l16.155,21.234 9.539,12.527a6.293,6.293 0,0 0,8.804 1.19l6.715,-5.101a6.315,6.315 0,0 0,1.184 -8.812l-0.99,-1.309L557.837,122.715l-5.134,-6.74A6.28,6.28 0,0 0,543.898 114.785Z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M547.406,114.4l-7.226,5.041a5.387,5.387 0,0 0,-1.179 7.971l9.458,11.396 5.04,6.071 3.363,4.05 7.521,9.061a6.579,6.579 0,0 0,8.691 1.081l5.415,-3.777 1.802,-1.257a5.476,5.476 0,0 0,2.338 -5.598,5.4 5.4,0 0,0 -1.158,-2.39l-22.223,-26.779 -3.151,-3.79A6.57,6.57 0,0 0,547.406 114.4Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M552.023,142.545A13.098,13.098 0,0 1,563.035 157.123a12.565,12.565 0,0 1,-0.46 2.026L598.982,186.764l-7.513,23.404 -45.783,-43.222a13.062,13.062 0,0 1,-8.074 -13.751,12.5 12.5,0 0,1 14.072,-10.7Q551.854,142.517 552.023,142.545Z"
android:fillColor="#a0616a"/>
<path
android:pathData="M700.508,101.59l0,0a22.618,22.618 0,0 1,16.761 29.844L699.55,180.507l-51.198,72.346S586.952,226.918 582.303,214.099s-0.451,-17.242 -4.649,-12.819 -9.521,3.899 -8.246,1.875 0.604,-1.981 -1.273,-4.102S558.687,186.512 558.687,186.512l13.588,-21.301s20.821,4.806 23.595,9.379 -4.198,4.423 2.774,4.573 14.084,-9.334 8.991,0.093 -3.75,12.714 2.551,11.22 21.595,12.374 21.595,12.374l43.929,-89.1A22.618,22.618 0,0 1,700.508 101.59Z"
android:fillColor="#c3e7ff"/>
<path
android:pathData="M651.263,49.004m-23.046,23.046a32.592,32.592 90,1 1,46.092 -46.092a32.592,32.592 90,1 1,-46.092 46.092"
android:fillColor="#a0616a"/>
<path
android:pathData="M689.375,13.498c-2.427,-18.6 -45.329,-17.413 -49.38,0.086 -2.149,-1.344 -7.615,-0.414 -9.654,1.131s-3.345,3.816 -4.625,6.02c-1.746,3.062 -13.967,13.421 -15.799,10.401 -4.121,-6.797 -12.203,8.056 -6,18 1.487,2.384 30.23,-1.443 33,-2 1.933,-0.384 -1.377,0.33 0,0 0.445,-2.157 4.935,-13.304 3.873,-15.242a7.69,7.69 0,0 1,5.277 3.903c0.217,0.419 8.077,59.585 8.077,59.585a34.144,34.144 0,0 0,6.476 0.162,74.297 74.297,0 0,0 0.723,-22.077 64.334,64.334 0,0 1,5.369 13.249,78.654 78.654,0 0,1 1.822,7.82c18.706,-3.498 43.993,-15.546 48.606,-36.004C691.918,50.137 711.791,31.87 689.375,13.498Z"
android:fillColor="#2f2e41"/>
<path
android:pathData="M395.857,111.078a5.257,7.557 98.278,1 0,1.514 -10.404a5.257,7.557 98.278,1 0,-1.514 10.404z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M445.029,106.28a5.257,7.557 98.278,1 0,1.514 -10.404a5.257,7.557 98.278,1 0,-1.514 10.404z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M382.392,71.27a5.257,7.557 98.278,1 0,1.514 -10.404a5.257,7.557 98.278,1 0,-1.514 10.404z"
android:fillColor="#ff6584"/>
<path
android:pathData="M365.903,55.601a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M358.657,25.229a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M415.002,78.681a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#e6e6e6"/>
<path
android:pathData="M391.24,90.545a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#ff6584"/>
<path
android:pathData="M424.318,112.473a4.776,3.322 90.433,1 0,0.072 -9.551a4.776,3.322 90.433,1 0,-0.072 9.551z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M538.923,134.315a2.5,1 54.441,1 0,1.627 -1.163a2.5,1 54.441,1 0,-1.627 1.163z"
android:fillColor="#3f3d56"/>
<path
android:pathData="M535.923,130.315a2.5,1 54.441,1 0,1.627 -1.163a2.5,1 54.441,1 0,-1.627 1.163z"
android:fillColor="#3f3d56"/>
</vector>

View File

@ -74,6 +74,8 @@
<string name="close">关闭</string>
<string name="get_new_updates">获取新的更新</string>
<string name="get_new_updates_desc">版本 0.6.1 现已发布</string>
<string name="in_coding">施工中</string>
<string name="coming_soon">正在路上</string>
<string name="accounts">账户</string>
<string name="accounts_desc">本地、FreshRSS</string>
<string name="color_and_style">颜色和样式</string>
@ -93,12 +95,16 @@
<string name="no_palettes">暂无色板</string>
<string name="only_android_8.1_plus">仅限 Android 8.1+</string>
<string name="basic_colors">基本颜色</string>
<string name="primary_color">强调色</string>
<string name="primary_color_hint">例如 #666666 或 666666</string>
<string name="appearance">外观</string>
<string name="style">样式</string>
<string name="dark_theme">深色模式</string>
<string name="use_device_theme">跟随系统设置</string>
<string name="tonal_elevation">色调海拔</string>
<string name="fonts">字体</string>
<string name="basic_fonts">基本字体</string>
<string name="reading_fonts">阅读字体</string>
<string name="reading_fonts_size">阅读字体大小</string>
<string name="feeds_page">订阅源页面</string>
<string name="flow_page">信息流页面</string>
<string name="reading_page">阅读页面</string>
</resources>

View File

@ -72,8 +72,10 @@
<string name="three_days">3d</string>
<string name="seven_days">7d</string>
<string name="close">Close</string>
<string name="get_new_updates">Get New updates</string>
<string name="get_new_updates">Get new updates</string>
<string name="get_new_updates_desc">Version 0.6.1 has been released</string>
<string name="in_coding">In coding</string>
<string name="coming_soon">Coming soon</string>
<string name="accounts">Accounts</string>
<string name="accounts_desc">Local, FreshRSS</string>
<string name="color_and_style">Color &amp; style</string>
@ -93,12 +95,16 @@
<string name="no_palettes">No Palettes</string>
<string name="only_android_8.1_plus">Only Android 8.1+</string>
<string name="basic_colors">Basic Colors</string>
<string name="primary_color">Primary Color</string>
<string name="primary_color_hint">Like #666666 or 666666</string>
<string name="appearance">Appearance</string>
<string name="style">Style</string>
<string name="dark_theme">Dark Theme</string>
<string name="use_device_theme">Use Device Theme</string>
<string name="tonal_elevation">Tonal Elevation</string>
<string name="fonts">Fonts</string>
<string name="basic_fonts">Basic Fonts</string>
<string name="reading_fonts">Reading Fonts</string>
<string name="reading_fonts_size">Reading Fonts Size</string>
<string name="feeds_page">Feeds Page</string>
<string name="flow_page">Flow Page</string>
<string name="reading_page">Reading Page</string>
</resources>