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