From 6adc7f7221f318617022d50fc11a4f79193353e0 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Wed, 13 Sep 2023 20:21:06 +0800 Subject: [PATCH 1/4] Add option to disable category color harmonization --- app/src/main/java/com/hippo/ehviewer/Settings.kt | 1 + app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt | 8 +++++++- .../main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt | 9 +++++++-- .../java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt | 2 ++ .../main/java/com/hippo/ehviewer/ui/settings/EhScreen.kt | 4 ++++ app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/Settings.kt b/app/src/main/java/com/hippo/ehviewer/Settings.kt index 4773db5a4..cd1598200 100755 --- a/app/src/main/java/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/java/com/hippo/ehviewer/Settings.kt @@ -60,6 +60,7 @@ object Settings : DataStorePreferences(null) { var removeImageFiles by boolPref("include_pic", true) var needSignIn by boolPref("need_sign_in", true) var blackDarkTheme by boolPref("black_dark_theme", false).observed { updateWhenAmoledModeChanges() } + var harmonizeCategoryColor by boolPref("harmonize_category_color", true) var preloadThumbAggressively by boolPref("preload_thumb_aggressively", false) var downloadOriginImage by boolPref("download_origin_image", false) var thumbSizeDp by intPref("thumb_size_", 120) diff --git a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt index 74f8c4397..bbcfe3d44 100644 --- a/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt +++ b/app/src/main/java/com/hippo/ehviewer/client/EhUtils.kt @@ -126,12 +126,18 @@ object EhUtils { MISC -> BG_COLOR_MISC else -> BG_COLOR_UNKNOWN }.toInt() - return harmonizeWithRole(context, primary) + return if (Settings.harmonizeCategoryColor) { + harmonizeWithRole(context, primary) + } else { + primary + } } @Composable fun getCategoryColor(category: Int) = Color(getCategoryColor(LocalContext.current, category)) + val categoryTextColor = Color(0xffe6e0e9) + fun signOut() { EhCookieStore.signOut() Settings.avatar = null diff --git a/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt b/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt index 6c7a65f63..1e2559de0 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt @@ -21,6 +21,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle import androidx.compose.material3.ShapeDefaults import androidx.compose.material3.Text +import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.produceState @@ -28,12 +29,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.constraintlayout.compose.ConstraintLayout +import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED @@ -109,6 +112,7 @@ fun GalleryInfoListItem( start.linkTo(parent.start) bottom.linkTo(parent.bottom) }.clip(ShapeDefaults.Small).background(categoryColor).padding(vertical = 2.dp, horizontal = 8.dp), + color = if (Settings.harmonizeCategoryColor) Color.Unspecified else EhUtils.categoryTextColor, textAlign = TextAlign.Center, ) Row( @@ -198,10 +202,11 @@ fun GalleryInfoGridItem( modifier = Modifier.aspectRatio(aspect).fillMaxWidth(), contentScale = ContentScale.Crop, ) + val categoryColor = EhUtils.getCategoryColor(info.category) Badge( modifier = Modifier.align(Alignment.TopEnd).width(32.dp).height(24.dp), - containerColor = EhUtils.getCategoryColor(info.category), - contentColor = MaterialTheme.colorScheme.onSurface, + containerColor = categoryColor, + contentColor = if (Settings.harmonizeCategoryColor) contentColorFor(categoryColor) else EhUtils.categoryTextColor, ) { simpleLang?.let { Text(text = it.uppercase()) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt index 1ce5249d0..9e289902b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/DownloadsScene.kt @@ -46,6 +46,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.LocalContext @@ -809,6 +810,7 @@ class DownloadsScene : Text( text = categoryText, modifier = Modifier.clip(ShapeDefaults.Small).background(categoryColor).padding(vertical = 2.dp, horizontal = 8.dp), + color = if (Settings.harmonizeCategoryColor) Color.Unspecified else EhUtils.categoryTextColor, textAlign = TextAlign.Center, style = MaterialTheme.typography.labelLarge, ) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/settings/EhScreen.kt b/app/src/main/java/com/hippo/ehviewer/ui/settings/EhScreen.kt index ddb040918..b29efdf84 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/settings/EhScreen.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/settings/EhScreen.kt @@ -224,6 +224,10 @@ fun EhScreen() { title = stringResource(id = R.string.black_dark_theme), value = Settings::blackDarkTheme, ) + SwitchPreference( + title = stringResource(id = R.string.harmonize_category_color), + value = Settings::harmonizeCategoryColor, + ) SimpleMenuPreferenceInt( title = stringResource(id = R.string.settings_eh_launch_page), entry = R.array.launch_page_entries, diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 09c1937f7..028ec95ec 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -476,6 +476,7 @@ 下载服务 收藏画廊 纯黑深色主题 + 类别颜色适配动态配色 使用持续集成(CI)构建频道更新 过滤 全部 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ec57d15ac..e83cef97c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -541,6 +541,7 @@ Download Service Favorite Black dark theme + Harmonize category color for Dynamic Color Filter All Start all (reversed) From 21b39135fe77abb10de9e2a6a5debe669e71c270 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Fri, 15 Sep 2023 21:10:51 +0800 Subject: [PATCH 2/4] Tweak modify favorites dialog layout --- .../hippo/ehviewer/ui/tools/CircularLayout.kt | 4 +--- .../com/hippo/ehviewer/ui/tools/Dialog.kt | 24 ++++++++++++++----- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt b/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt index 0e4ace78d..e71200228 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt @@ -3,7 +3,6 @@ package com.hippo.ehviewer.ui.tools import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.layout.Layout -import androidx.compose.ui.unit.Dp import kotlin.math.PI import kotlin.math.cos import kotlin.math.roundToInt @@ -15,7 +14,6 @@ private const val QuarterCircle = PI / 2 @Composable fun CircularLayout( modifier: Modifier = Modifier, - radius: Dp, placeFirstItemInCenter: Boolean = false, content: @Composable () -> Unit, ) { @@ -23,7 +21,7 @@ fun CircularLayout( modifier = modifier, content = content, ) { measurables, constraints -> - val radiusPx = radius.toPx() + val radiusPx = constraints.maxWidth * 0.35 val itemConstraints = constraints.copy(minWidth = 0, minHeight = 0) val placeables = measurables.map { measurable -> measurable.measure(itemConstraints) } val outPlaceables = if (placeFirstItemInCenter) placeables.drop(1) else placeables diff --git a/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt b/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt index e5d6994d5..d82ea9904 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt @@ -45,6 +45,7 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import com.jamal.composeprefs3.ui.ifNotNullThen import kotlinx.coroutines.CancellableContinuation @@ -253,7 +254,6 @@ class DialogState { Column { Text(text = stringResource(id = title), modifier = Modifier.padding(horizontal = 16.dp).padding(top = 16.dp), style = MaterialTheme.typography.titleMedium) CircularLayout( - radius = 112.dp, modifier = Modifier.fillMaxWidth().aspectRatio(1F), placeFirstItemInCenter = true, ) { @@ -261,7 +261,7 @@ class DialogState { TextField( value = note, onValueChange = { note = it }, - modifier = Modifier.width(128.dp), + modifier = Modifier.fillMaxWidth(0.4F), textStyle = TextStyle(fontFamily = FontFamily.Monospace), label = { Text(text = stringResource(id = hint)) }, trailingIcon = { @@ -278,7 +278,7 @@ class DialogState { textAlign = TextAlign.End, ) }, - maxLines = 6, + maxLines = 5, shape = ShapeDefaults.ExtraSmall, colors = TextFieldDefaults.colors( focusedIndicatorColor = Color.Transparent, @@ -287,15 +287,27 @@ class DialogState { ) items.forEachIndexed { index, (icon, text) -> Column( - modifier = Modifier.clip(IconWithTextCorner).clickable { dismissWith(index to note) }, + modifier = Modifier.clip(IconWithTextCorner).clickable { dismissWith(index to note) } + .fillMaxWidth(0.2F), horizontalAlignment = Alignment.CenterHorizontally, ) { if (index == 0 && adjustTextPosition) { - Text(text = text, style = MaterialTheme.typography.bodySmall) + Text( + text = text, + overflow = TextOverflow.Ellipsis, + maxLines = 2, + textAlign = TextAlign.Center, + style = MaterialTheme.typography.bodySmall, + ) Icon(imageVector = icon, contentDescription = null, tint = AlertDialogDefaults.iconContentColor) } else { Icon(imageVector = icon, contentDescription = null, tint = AlertDialogDefaults.iconContentColor) - Text(text = text, style = MaterialTheme.typography.bodySmall) + Text( + text = text, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + style = MaterialTheme.typography.bodySmall, + ) } } } From bfbceefef2d56501809014cc9a572c48be5ed638 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sat, 16 Sep 2023 17:08:13 +0800 Subject: [PATCH 3/4] Fix respectDefaultWidth not working --- app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt b/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt index d82ea9904..f73c8bc01 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt @@ -47,6 +47,7 @@ import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.DialogProperties import com.jamal.composeprefs3.ui.ifNotNullThen import kotlinx.coroutines.CancellableContinuation import kotlinx.coroutines.suspendCancellableCoroutine @@ -184,6 +185,7 @@ class DialogState { } AlertDialog( onDismissRequest = { cont.cancel() }, + properties = DialogProperties(usePlatformDefaultWidth = respectDefaultWidth), content = { Surface( modifier = with(Modifier) { if (!respectDefaultWidth) defaultMinSize(280.dp) else width(280.dp) }, @@ -278,7 +280,7 @@ class DialogState { textAlign = TextAlign.End, ) }, - maxLines = 5, + maxLines = 6, shape = ShapeDefaults.ExtraSmall, colors = TextFieldDefaults.colors( focusedIndicatorColor = Color.Transparent, @@ -305,7 +307,7 @@ class DialogState { Text( text = text, overflow = TextOverflow.Ellipsis, - maxLines = 1, + maxLines = 2, style = MaterialTheme.typography.bodySmall, ) } From 68155e6a6b025f211e22b6460113a2d3d789e135 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sat, 16 Sep 2023 18:36:44 +0800 Subject: [PATCH 4/4] Refine modify favorites dialog layout --- .../hippo/ehviewer/ui/tools/CircularLayout.kt | 2 +- .../com/hippo/ehviewer/ui/tools/Dialog.kt | 33 +++++-------------- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 4 files changed, 12 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt b/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt index e71200228..7ba9ede51 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/tools/CircularLayout.kt @@ -21,7 +21,7 @@ fun CircularLayout( modifier = modifier, content = content, ) { measurables, constraints -> - val radiusPx = constraints.maxWidth * 0.35 + val radiusPx = constraints.maxWidth * 0.4 val itemConstraints = constraints.copy(minWidth = 0, minHeight = 0) val placeables = measurables.map { measurable -> measurable.measure(itemConstraints) } val outPlaceables = if (placeFirstItemInCenter) placeables.drop(1) else placeables diff --git a/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt b/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt index f73c8bc01..16a68913a 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/tools/Dialog.kt @@ -41,8 +41,6 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow @@ -251,7 +249,6 @@ class DialogState { @StringRes title: Int, @StringRes hint: Int, maxChar: Int, - adjustTextPosition: Boolean = true, ): Pair = showNoButton(false) { Column { Text(text = stringResource(id = title), modifier = Modifier.padding(horizontal = 16.dp).padding(top = 16.dp), style = MaterialTheme.typography.titleMedium) @@ -263,8 +260,7 @@ class DialogState { TextField( value = note, onValueChange = { note = it }, - modifier = Modifier.fillMaxWidth(0.4F), - textStyle = TextStyle(fontFamily = FontFamily.Monospace), + modifier = Modifier.fillMaxWidth(0.45F).aspectRatio(1F), label = { Text(text = stringResource(id = hint)) }, trailingIcon = { if (note.isNotEmpty()) { @@ -280,7 +276,6 @@ class DialogState { textAlign = TextAlign.End, ) }, - maxLines = 6, shape = ShapeDefaults.ExtraSmall, colors = TextFieldDefaults.colors( focusedIndicatorColor = Color.Transparent, @@ -293,24 +288,14 @@ class DialogState { .fillMaxWidth(0.2F), horizontalAlignment = Alignment.CenterHorizontally, ) { - if (index == 0 && adjustTextPosition) { - Text( - text = text, - overflow = TextOverflow.Ellipsis, - maxLines = 2, - textAlign = TextAlign.Center, - style = MaterialTheme.typography.bodySmall, - ) - Icon(imageVector = icon, contentDescription = null, tint = AlertDialogDefaults.iconContentColor) - } else { - Icon(imageVector = icon, contentDescription = null, tint = AlertDialogDefaults.iconContentColor) - Text( - text = text, - overflow = TextOverflow.Ellipsis, - maxLines = 2, - style = MaterialTheme.typography.bodySmall, - ) - } + Icon(imageVector = icon, contentDescription = null, tint = AlertDialogDefaults.iconContentColor) + Text( + text = text, + textAlign = TextAlign.Center, + overflow = TextOverflow.Ellipsis, + maxLines = 2, + style = MaterialTheme.typography.bodySmall, + ) } } } diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 028ec95ec..3aa78d6d3 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -419,7 +419,7 @@ 默认收藏夹 启用此项将无法添加收藏备注 让我选择 - 备注 + 收藏备注 收藏夹 需要登录 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e83cef97c..689582d85 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -477,7 +477,7 @@ Default favorites collection You won\'t be able to add favorite notes if you enable this Let me select - Note + Favorite Note Collections Signing in is required