diff --git a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt index 30e11975a..5cccc8355 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/Settings.kt @@ -130,8 +130,8 @@ object Settings : DataStorePreferences(null) { val displayName = stringOrNullPref("display_name", null) val avatar = stringOrNullPref("avatar", null) val recentDownloadLabel = stringOrNullPref("recent_download_label", null) + val showVoteStatus = boolPref("show_vote_status", false) - var showVoteStatus by boolPref("show_vote_status", false) var downloadScheme by stringOrNullPref("image_scheme", null) var downloadAuthority by stringOrNullPref("image_authority", null) var downloadPath by stringOrNullPref("image_path", null) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTag.kt b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTag.kt index 5dd4921b1..04b348678 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTag.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/client/data/GalleryTag.kt @@ -3,10 +3,10 @@ package com.hippo.ehviewer.client.data import android.os.Parcelable import kotlinx.parcelize.Parcelize -enum class VoteStatus(val append: String) { +enum class VoteStatus(val display: String) { NONE(""), - UP("↑"), - DOWN("↓"), + UP("+1"), + DOWN("-1"), } enum class PowerStatus { diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt index 055af0894..970d398dc 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/GalleryTag.kt @@ -1,6 +1,7 @@ package com.hippo.ehviewer.ui.main import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.FlowRow import androidx.compose.foundation.layout.IntrinsicSize @@ -12,17 +13,21 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.hapticfeedback.HapticFeedbackType import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import com.hippo.ehviewer.Settings import com.hippo.ehviewer.client.EhTagDatabase import com.hippo.ehviewer.client.data.GalleryTagGroup import com.hippo.ehviewer.client.data.PowerStatus import com.hippo.ehviewer.client.data.TagNamespace import com.hippo.ehviewer.client.data.VoteStatus +import com.hippo.ehviewer.collectAsState import com.hippo.ehviewer.ui.tools.includeFontPadding @Composable @@ -37,6 +42,7 @@ fun GalleryTags( val ehTags = EhTagDatabase.takeIf { canTranslate } fun TagNamespace.translate() = ehTags?.getTranslation(tag = value) ?: value fun String.translate(ns: TagNamespace) = ehTags?.getTranslation(prefix = ns.prefix, tag = this) ?: this + val showVote by Settings.showVoteStatus.collectAsState() Column(modifier) { tagGroups.forEach { (ns, tags) -> Row { @@ -49,17 +55,27 @@ fun GalleryTags( val translation = text.translate(ns) val tag = ns.value + ":" + text val hapticFeedback = LocalHapticFeedback.current - BaseRoundText( - text = if (Settings.showVoteStatus) translation + vote.append else translation, - weak = power == PowerStatus.WEAK, - modifier = Modifier.combinedClickable( - onClick = { onTagClick(tag) }, - onLongClick = { - hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) - onTagLongClick(tag, translation, vote) - }, - ), - ) + Box { + BaseRoundText( + text = translation, + weak = power == PowerStatus.WEAK, + modifier = Modifier.combinedClickable( + onClick = { onTagClick(tag) }, + onLongClick = { + hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) + onTagLongClick(tag, translation, vote) + }, + ), + ) + if (vote != VoteStatus.NONE && showVote) { + Text( + text = vote.display, + modifier = Modifier.align(Alignment.TopEnd).padding(horizontal = 2.dp), + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.labelSmallEmphasized.copy(fontSize = 10.sp), + ) + } + } } } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt index 35bbbb2b3..e85ef8000 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/settings/EhScreen.kt @@ -236,7 +236,7 @@ fun EhScreen(navigator: DestinationsNavigator) { ) SwitchPreference( title = stringResource(id = R.string.settings_eh_show_vote_status), - value = Settings::showVoteStatus, + value = Settings.showVoteStatus::value, ) val showComments = Settings::showComments.observed SwitchPreference(