diff --git a/app/src/main/java/com/jerboa/datatypes/Others.kt b/app/src/main/java/com/jerboa/datatypes/Others.kt index 498d99fcd..36c9934f6 100644 --- a/app/src/main/java/com/jerboa/datatypes/Others.kt +++ b/app/src/main/java/com/jerboa/datatypes/Others.kt @@ -181,16 +181,6 @@ data class PostFeatureData( val featured: Boolean, ) -// TODO this should be got rid of after https://github.com/LemmyNet/lemmy/issues/4449 -enum class VoteDisplayMode { - Full, - ScoreAndDownvote, - ScoreAndUpvotePercentage, - UpvotePercentage, - Score, - HideAll, -} - /** * Says which type of users can view which bottom app bar tabs. */ diff --git a/app/src/main/java/com/jerboa/feat/Voting.kt b/app/src/main/java/com/jerboa/feat/Voting.kt index ee653cd30..d9bca730f 100644 --- a/app/src/main/java/com/jerboa/feat/Voting.kt +++ b/app/src/main/java/com/jerboa/feat/Voting.kt @@ -1,6 +1,6 @@ package com.jerboa.feat -import com.jerboa.datatypes.VoteDisplayMode +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode enum class VoteType(val value: Int) { Upvote(1), @@ -32,7 +32,7 @@ data class InstantScores( ) } - fun scoreOrPctStr(voteDisplayMode: VoteDisplayMode): String? { + fun scoreOrPctStr(voteDisplayMode: LocalUserVoteDisplayMode): String? { return scoreOrPctStr( score = score, upvotes = upvotes, @@ -63,11 +63,22 @@ private fun scoreOrPctStr( score: Long, upvotes: Long, downvotes: Long, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ): String? { - return when (voteDisplayMode) { - VoteDisplayMode.UpvotePercentage -> formatPercent(upvotePercent(upvotes, downvotes)) - VoteDisplayMode.HideAll -> null - else -> score.toString() + return if (voteDisplayMode.upvote_percentage) { + formatPercent(upvotePercent(upvotes, downvotes)) + } else if (!(voteDisplayMode.score && voteDisplayMode.upvotes && voteDisplayMode.downvotes)) { + null + } else { + score.toString() } } + +fun LocalUserVoteDisplayMode.Companion.default() = + LocalUserVoteDisplayMode( + local_user_id = -1, + upvotes = true, + downvotes = true, + score = false, + upvote_percentage = false, + ) diff --git a/app/src/main/java/com/jerboa/model/SiteViewModel.kt b/app/src/main/java/com/jerboa/model/SiteViewModel.kt index a61f37d27..c6a1a3cc2 100644 --- a/app/src/main/java/com/jerboa/model/SiteViewModel.kt +++ b/app/src/main/java/com/jerboa/model/SiteViewModel.kt @@ -15,10 +15,10 @@ import com.jerboa.api.API import com.jerboa.api.ApiState import com.jerboa.api.DEFAULT_INSTANCE import com.jerboa.api.toApiState -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.db.entity.AnonAccount import com.jerboa.db.entity.isAnon import com.jerboa.db.repository.AccountRepository +import com.jerboa.feat.default import com.jerboa.jerboaApplication import it.vercruysse.lemmyapi.v0x19.datatypes.CommunityFollowerView import it.vercruysse.lemmyapi.v0x19.datatypes.CommunityId @@ -27,6 +27,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.GetReportCountResponse import it.vercruysse.lemmyapi.v0x19.datatypes.GetSiteResponse import it.vercruysse.lemmyapi.v0x19.datatypes.GetUnreadCountResponse import it.vercruysse.lemmyapi.v0x19.datatypes.GetUnreadRegistrationApplicationCountResponse +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView import it.vercruysse.lemmyapi.v0x19.datatypes.SaveUserSettings import kotlinx.coroutines.Job @@ -39,7 +40,9 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode var siteRes: ApiState by mutableStateOf(ApiState.Empty) private var unreadCountRes: ApiState by mutableStateOf(ApiState.Empty) - private var unreadAppCountRes: ApiState by mutableStateOf(ApiState.Empty) + private var unreadAppCountRes: ApiState by mutableStateOf( + ApiState.Empty, + ) private var unreadReportCountRes: ApiState by mutableStateOf(ApiState.Empty) val unreadCount by derivedStateOf { getUnreadCountTotal() } @@ -166,7 +169,10 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode return when (val res = unreadReportCountRes) { is ApiState.Success -> { val unreads = res.data - unreads.post_reports + unreads.comment_reports + (unreads.private_message_reports ?: 0) + unreads.post_reports + unreads.comment_reports + ( + unreads.private_message_reports + ?: 0 + ) } else -> null @@ -218,23 +224,13 @@ class SiteViewModel(private val accountRepository: AccountRepository) : ViewMode } } - // TODO this should probably be persisted rather than waited for - // For the current default, just use FullScores - fun voteDisplayMode(): VoteDisplayMode { - val defaultMode = VoteDisplayMode.ScoreAndUpvotePercentage + // For the current default, just use Upvotes / Downvotes + fun voteDisplayMode(): LocalUserVoteDisplayMode { return when (val res = siteRes) { is ApiState.Success -> - res.data.my_user?.let { mui -> - if (mui.local_user_view.local_user.show_scores) { - defaultMode - } else { - VoteDisplayMode.HideAll - } - } ?: run { - defaultMode - } + res.data.my_user?.local_user_view?.local_user_vote_display_mode ?: LocalUserVoteDisplayMode.default() - else -> defaultMode + else -> LocalUserVoteDisplayMode.default() } } diff --git a/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt b/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt index 8680d7bb9..2fa34d85e 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/CommentNode.kt @@ -50,7 +50,6 @@ import com.jerboa.border import com.jerboa.buildCommentsTree import com.jerboa.calculateCommentOffset import com.jerboa.datatypes.BanFromCommunityData -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.getContent import com.jerboa.datatypes.sampleCommentView import com.jerboa.datatypes.sampleCommunity @@ -66,6 +65,7 @@ import com.jerboa.feat.SwipeToActionType import com.jerboa.feat.VoteType import com.jerboa.feat.amMod import com.jerboa.feat.canMod +import com.jerboa.feat.default import com.jerboa.feat.isReadyAndIfNotShowSimplifiedInfoToast import com.jerboa.isPostCreator import com.jerboa.ui.components.common.ActionBarButton @@ -87,6 +87,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.Comment import it.vercruysse.lemmyapi.v0x19.datatypes.CommentId import it.vercruysse.lemmyapi.v0x19.datatypes.CommentView import it.vercruysse.lemmyapi.v0x19.datatypes.Community +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.Person import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView @@ -103,7 +104,7 @@ fun CommentNodeHeader( onClick: () -> Unit, onLongClick: () -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { CommentOrPostNodeHeader( creator = commentView.creator, @@ -135,7 +136,7 @@ fun CommentNodeHeaderPreview() { downvotes = 2, myVote = 26, ), - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), onPersonClick = {}, onClick = {}, onLongClick = {}, @@ -221,7 +222,7 @@ fun LazyListScope.commentNodeItem( enableDownVotes: Boolean, showAvatar: Boolean, blurNSFW: BlurNSFW, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, swipeToActionPreset: SwipeToActionPreset, ) { val commentView = node.commentView @@ -531,7 +532,7 @@ fun LazyListScope.missingCommentNodeItem( enableDownVotes: Boolean, showAvatar: Boolean, blurNSFW: BlurNSFW, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, swipeToActionPreset: SwipeToActionPreset, ) { val commentId = node.missingCommentView.commentId @@ -925,7 +926,7 @@ fun CommentNodesPreview() { showAvatar = true, blurNSFW = BlurNSFW.NSFW, account = AnonAccount, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), swipeToActionPreset = SwipeToActionPreset.TwoSides, ) } diff --git a/app/src/main/java/com/jerboa/ui/components/comment/CommentNodes.kt b/app/src/main/java/com/jerboa/ui/components/comment/CommentNodes.kt index c79160792..366b169da 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/CommentNodes.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/CommentNodes.kt @@ -12,13 +12,13 @@ import com.jerboa.CommentNode import com.jerboa.CommentNodeData import com.jerboa.MissingCommentNode import com.jerboa.datatypes.BanFromCommunityData -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.db.entity.Account import com.jerboa.feat.BlurNSFW import com.jerboa.feat.SwipeToActionPreset import it.vercruysse.lemmyapi.v0x19.datatypes.CommentId import it.vercruysse.lemmyapi.v0x19.datatypes.CommentView import it.vercruysse.lemmyapi.v0x19.datatypes.Community +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.Person import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView @@ -66,7 +66,7 @@ fun CommentNodes( enableDownVotes: Boolean, showAvatar: Boolean, blurNSFW: BlurNSFW, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, swipeToActionPreset: SwipeToActionPreset, ) { LazyColumn(state = listState) { @@ -159,7 +159,7 @@ fun LazyListScope.commentNodeItems( enableDownVotes: Boolean, showAvatar: Boolean, blurNSFW: BlurNSFW, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, swipeToActionPreset: SwipeToActionPreset, ) { nodes.forEach { node -> diff --git a/app/src/main/java/com/jerboa/ui/components/comment/mentionnode/CommentMentionNode.kt b/app/src/main/java/com/jerboa/ui/components/comment/mentionnode/CommentMentionNode.kt index 563665ec0..9d5cae5fc 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/mentionnode/CommentMentionNode.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/mentionnode/CommentMentionNode.kt @@ -27,13 +27,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.jerboa.R -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.samplePersonMentionView import com.jerboa.db.entity.Account import com.jerboa.feat.BlurNSFW import com.jerboa.feat.InstantScores import com.jerboa.feat.VoteType import com.jerboa.feat.canMod +import com.jerboa.feat.default import com.jerboa.ui.components.comment.CommentBody import com.jerboa.ui.components.comment.PostAndCommunityContextHeader import com.jerboa.ui.components.common.ActionBarButton @@ -44,6 +44,7 @@ import com.jerboa.ui.theme.SMALL_PADDING import com.jerboa.ui.theme.XXL_PADDING import com.jerboa.ui.theme.muted import it.vercruysse.lemmyapi.v0x19.datatypes.Community +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.Person import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PersonMentionView @@ -58,7 +59,7 @@ fun CommentMentionNodeHeader( onClick: () -> Unit, onLongClick: () -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { CommentOrPostNodeHeader( creator = personMentionView.creator, @@ -88,7 +89,7 @@ fun CommentMentionNodeHeaderPreview() { upvotes = 21, downvotes = 2, ), - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), onPersonClick = {}, onClick = {}, onLongClick = {}, @@ -260,7 +261,7 @@ fun CommentMentionNode( showAvatar: Boolean, blurNSFW: BlurNSFW, enableDownvotes: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { // These are necessary for instant comment voting var instantScores by diff --git a/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt b/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt index b2ebaced6..300a47b75 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/reply/CommentReply.kt @@ -15,11 +15,11 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.tooling.preview.Preview import com.jerboa.R -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.getContent import com.jerboa.datatypes.sampleCommentView import com.jerboa.db.entity.Account import com.jerboa.feat.InstantScores +import com.jerboa.feat.default import com.jerboa.ui.components.comment.CommentNodeHeader import com.jerboa.ui.components.comment.mentionnode.CommentMentionNodeHeader import com.jerboa.ui.components.comment.replynode.CommentReplyNodeHeader @@ -29,6 +29,7 @@ import com.jerboa.ui.theme.LARGE_PADDING import com.jerboa.ui.theme.MEDIUM_PADDING import it.vercruysse.lemmyapi.v0x19.datatypes.CommentReplyView import it.vercruysse.lemmyapi.v0x19.datatypes.CommentView +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PersonMentionView import it.vercruysse.lemmyapi.v0x19.datatypes.PostView @@ -38,7 +39,7 @@ fun RepliedComment( commentView: CommentView, onPersonClick: (personId: PersonId) -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Column(modifier = Modifier.padding(MEDIUM_PADDING)) { CommentNodeHeader( @@ -68,7 +69,7 @@ fun RepliedCommentReply( commentReplyView: CommentReplyView, onPersonClick: (personId: PersonId) -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Column(modifier = Modifier.padding(MEDIUM_PADDING)) { CommentReplyNodeHeader( @@ -96,7 +97,7 @@ fun RepliedMentionReply( personMentionView: PersonMentionView, onPersonClick: (personId: PersonId) -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Column(modifier = Modifier.padding(MEDIUM_PADDING)) { CommentMentionNodeHeader( @@ -126,7 +127,7 @@ fun RepliedCommentPreview() { commentView = sampleCommentView, onPersonClick = {}, showAvatar = true, - VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), ) } @@ -135,7 +136,7 @@ fun RepliedPost( postView: PostView, onPersonClick: (personId: PersonId) -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Column(modifier = Modifier.padding(MEDIUM_PADDING)) { PostNodeHeader( @@ -166,7 +167,7 @@ fun CommentReply( account: Account, modifier: Modifier = Modifier, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { val scrollState = rememberScrollState() @@ -198,7 +199,7 @@ fun CommentReplyReply( account: Account, modifier: Modifier = Modifier, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { val scrollState = rememberScrollState() @@ -230,7 +231,7 @@ fun MentionReply( account: Account, modifier: Modifier = Modifier, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { val scrollState = rememberScrollState() @@ -262,7 +263,7 @@ fun PostReply( account: Account, modifier: Modifier = Modifier, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { val scrollState = rememberScrollState() diff --git a/app/src/main/java/com/jerboa/ui/components/comment/replynode/CommentReplyNode.kt b/app/src/main/java/com/jerboa/ui/components/comment/replynode/CommentReplyNode.kt index 1cc6404e1..c490142e5 100644 --- a/app/src/main/java/com/jerboa/ui/components/comment/replynode/CommentReplyNode.kt +++ b/app/src/main/java/com/jerboa/ui/components/comment/replynode/CommentReplyNode.kt @@ -27,12 +27,12 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.jerboa.R -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.sampleCommentReplyView import com.jerboa.db.entity.Account import com.jerboa.feat.BlurNSFW import com.jerboa.feat.InstantScores import com.jerboa.feat.VoteType +import com.jerboa.feat.default import com.jerboa.ui.components.comment.CommentBody import com.jerboa.ui.components.comment.PostAndCommunityContextHeader import com.jerboa.ui.components.common.ActionBarButton @@ -44,6 +44,7 @@ import com.jerboa.ui.theme.XXL_PADDING import com.jerboa.ui.theme.muted import it.vercruysse.lemmyapi.v0x19.datatypes.CommentReplyView import it.vercruysse.lemmyapi.v0x19.datatypes.Community +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.Person import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PostId @@ -56,7 +57,7 @@ fun CommentReplyNodeHeader( onClick: () -> Unit, onLongClick: () -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { CommentOrPostNodeHeader( creator = commentReplyView.creator, @@ -86,7 +87,7 @@ fun CommentReplyNodeHeaderPreview() { upvotes = 21, downvotes = 2, ), - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), onPersonClick = {}, onClick = {}, onLongClick = {}, @@ -241,7 +242,7 @@ fun CommentReplyNodeInbox( showAvatar: Boolean, blurNSFW: BlurNSFW, enableDownvotes: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { // These are necessary for instant comment voting // This stores vote data diff --git a/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt b/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt index 6c0cf4abf..c63376f78 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/AppBars.kt @@ -48,13 +48,13 @@ import androidx.compose.ui.unit.dp import com.jerboa.R import com.jerboa.api.ApiState import com.jerboa.datatypes.UserViewType -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.data import com.jerboa.datatypes.samplePerson import com.jerboa.datatypes.samplePost import com.jerboa.db.entity.Account import com.jerboa.db.entity.AnonAccount import com.jerboa.feat.InstantScores +import com.jerboa.feat.default import com.jerboa.feat.isReadyAndIfNotShowSimplifiedInfoToast import com.jerboa.scrollToNextParentComment import com.jerboa.scrollToPreviousParentComment @@ -64,6 +64,7 @@ import com.jerboa.ui.components.person.PersonProfileLink import com.jerboa.ui.theme.* import it.vercruysse.lemmyapi.dto.SortType import it.vercruysse.lemmyapi.v0x19.datatypes.CommunityModeratorView +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.Person import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView @@ -254,7 +255,7 @@ fun CommentOrPostNodeHeader( isExpanded: Boolean = true, collapsedCommentsCount: Long = 0, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { FlowRow( horizontalArrangement = Arrangement.SpaceBetween, @@ -328,7 +329,7 @@ fun CommentOrPostNodeHeaderPreview() { onClick = {}, onLongCLick = {}, showAvatar = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), ) } diff --git a/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt b/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt index b4c0d76a4..0c5a5a8f5 100644 --- a/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt +++ b/app/src/main/java/com/jerboa/ui/components/common/TimeAgo.kt @@ -11,31 +11,36 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ArrowDownward +import androidx.compose.material.icons.outlined.ArrowUpward +import androidx.compose.material.icons.outlined.FavoriteBorder +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp import com.jerboa.R import com.jerboa.SHOW_UPVOTE_PCT_THRESHOLD -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.samplePerson import com.jerboa.datatypes.samplePost import com.jerboa.feat.InstantScores import com.jerboa.feat.formatPercent import com.jerboa.feat.upvotePercent import com.jerboa.formatDuration -import com.jerboa.ui.theme.SCORE_SIZE_ADD import com.jerboa.ui.theme.SMALL_PADDING import com.jerboa.ui.theme.muted +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import java.time.Instant import java.time.format.DateTimeParseException import java.util.Date @@ -125,7 +130,7 @@ fun ScoreAndTime( isExpanded: Boolean = true, collapsedCommentsCount: Long = 0, isNsfw: Boolean = false, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Row( horizontalArrangement = Arrangement.spacedBy(SMALL_PADDING), @@ -138,72 +143,88 @@ fun ScoreAndTime( upvotes = instantScores.upvotes, downvotes = instantScores.downvotes, ) - when (voteDisplayMode) { - VoteDisplayMode.Full -> { - LargeVoteIndicator(data = instantScores.score.toString(), myVote = instantScores.myVote) - DotSpacer(style = MaterialTheme.typography.labelMedium) - if (upvotePct < SHOW_UPVOTE_PCT_THRESHOLD) { - SmallVoteIndicator(data = "${instantScores.upvotes}↑") - DotSpacer(style = MaterialTheme.typography.labelMedium) - SmallVoteIndicator(data = "${instantScores.downvotes}↓") - DotSpacer(style = MaterialTheme.typography.labelMedium) - } - } - VoteDisplayMode.ScoreAndDownvote -> { - LargeVoteIndicator(data = instantScores.score.toString(), myVote = instantScores.myVote) - DotSpacer(style = MaterialTheme.typography.labelMedium) - if (upvotePct < SHOW_UPVOTE_PCT_THRESHOLD) { - SmallVoteIndicator(data = "${instantScores.downvotes}↓") - DotSpacer(style = MaterialTheme.typography.labelMedium) - } - } - VoteDisplayMode.ScoreAndUpvotePercentage -> { - LargeVoteIndicator(data = instantScores.score.toString(), myVote = instantScores.myVote) - DotSpacer(style = MaterialTheme.typography.labelMedium) - if (upvotePct < SHOW_UPVOTE_PCT_THRESHOLD) { - SmallVoteIndicator(data = formatPercent(upvotePct)) - DotSpacer(style = MaterialTheme.typography.labelMedium) - } - } - VoteDisplayMode.UpvotePercentage -> { - LargeVoteIndicator(data = formatPercent(upvotePct), myVote = instantScores.myVote) - DotSpacer(style = MaterialTheme.typography.labelMedium) - } - VoteDisplayMode.Score -> { - LargeVoteIndicator(data = instantScores.score.toString(), myVote = instantScores.myVote) - DotSpacer(style = MaterialTheme.typography.labelMedium) - } - VoteDisplayMode.HideAll -> {} + + // A special case for scores, where if both are enabled, + // and the score is the same as the upvotes, then hide the score + val hideScore = + voteDisplayMode.score && voteDisplayMode.upvotes && instantScores.score == instantScores.upvotes + + if (voteDisplayMode.score && !hideScore) { + VoteIndicator( + data = instantScores.score.toString(), + myVote = instantScores.myVote, + iconAndDescription = Pair( + Icons.Outlined.FavoriteBorder, + stringResource(id = R.string.score), + ), + ) + } + if (voteDisplayMode.upvote_percentage && (upvotePct < SHOW_UPVOTE_PCT_THRESHOLD)) { + // Always mute the color + VoteIndicator(data = formatPercent(upvotePct), myVote = 0) + } + if (voteDisplayMode.upvotes) { + // Mute color if not 1 + val myVote = if (instantScores.myVote == 1) 1 else 0 + VoteIndicator( + data = instantScores.upvotes.toString(), + myVote = myVote, + iconAndDescription = Pair( + Icons.Outlined.ArrowUpward, + stringResource(id = R.string.upvoted), + ), + ) + } + if (voteDisplayMode.downvotes && instantScores.downvotes > 0) { + // Mute color if not -1 + val myVote = if (instantScores.myVote == -1) -1 else 0 + VoteIndicator( + data = instantScores.downvotes.toString(), + myVote = myVote, + iconAndDescription = Pair( + Icons.Outlined.ArrowDownward, + stringResource(id = R.string.downvoted), + ), + ) + } + // Only show this spacer if at least one of the fields is enabled + if (voteDisplayMode.score || voteDisplayMode.upvotes || voteDisplayMode.downvotes || voteDisplayMode.upvote_percentage) { + DotSpacer(style = MaterialTheme.typography.labelMedium) } TimeAgo(published = published, updated = updated) } } @Composable -private fun LargeVoteIndicator( +private fun VoteIndicator( data: String, myVote: Int, + iconAndDescription: Pair? = null, ) { - Text( - text = data, - color = scoreColor(myVote = myVote), - style = MaterialTheme.typography.labelMedium, - fontSize = MaterialTheme.typography.labelMedium.fontSize.value.plus(SCORE_SIZE_ADD).sp, - ) -} - -@Composable -private fun SmallVoteIndicator(data: String) { - Text( - text = data, - color = MaterialTheme.colorScheme.onBackground.muted, - style = MaterialTheme.typography.labelMedium, - ) + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = data, + color = scoreColor(myVote = myVote), + style = MaterialTheme.typography.labelMedium, + modifier = Modifier.padding(horizontal = 0.dp), + ) + iconAndDescription?.let { + val size = MaterialTheme.typography.labelMedium.fontSize.value.dp + Icon( + imageVector = iconAndDescription.first, + contentDescription = iconAndDescription.second, + tint = scoreColor(myVote = myVote), + modifier = Modifier.size(size), + ) + } + } } @Preview @Composable -fun ScoreFullAndTimePreview() { +fun UpvoteAndDownvotePreview() { ScoreAndTime( instantScores = InstantScores( score = 25, @@ -213,7 +234,13 @@ fun ScoreFullAndTimePreview() { ), published = samplePost.published, updated = samplePost.updated, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode( + local_user_id = -1, + score = false, + upvotes = true, + downvotes = true, + upvote_percentage = false, + ), ) } @@ -223,13 +250,19 @@ fun ScoreAndUpvotePctAndTimePreview() { ScoreAndTime( instantScores = InstantScores( score = 25, - myVote = -1, + myVote = 1, upvotes = 10, downvotes = 15, ), published = samplePost.published, updated = samplePost.updated, - voteDisplayMode = VoteDisplayMode.ScoreAndUpvotePercentage, + voteDisplayMode = LocalUserVoteDisplayMode( + local_user_id = -1, + score = true, + upvote_percentage = true, + upvotes = false, + downvotes = false, + ), ) } @@ -245,7 +278,13 @@ fun UpvotePctAndTimePreview() { ), published = samplePost.published, updated = samplePost.updated, - voteDisplayMode = VoteDisplayMode.UpvotePercentage, + voteDisplayMode = LocalUserVoteDisplayMode( + local_user_id = -1, + upvote_percentage = true, + score = false, + upvotes = false, + downvotes = false, + ), ) } @@ -261,7 +300,13 @@ fun ScoreAndTimePreview() { ), published = samplePost.published, updated = samplePost.updated, - voteDisplayMode = VoteDisplayMode.Score, + voteDisplayMode = LocalUserVoteDisplayMode( + local_user_id = -1, + score = true, + upvote_percentage = false, + upvotes = false, + downvotes = false, + ), ) } @@ -277,7 +322,13 @@ fun HideAllAndTimePreview() { ), published = samplePost.published, updated = samplePost.updated, - voteDisplayMode = VoteDisplayMode.HideAll, + voteDisplayMode = LocalUserVoteDisplayMode( + local_user_id = -1, + score = false, + upvote_percentage = false, + upvotes = false, + downvotes = false, + ), ) } diff --git a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt index 41843f4cb..5f7590be3 100644 --- a/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt +++ b/app/src/main/java/com/jerboa/ui/components/person/PersonProfileActivity.kt @@ -42,7 +42,6 @@ import com.jerboa.R import com.jerboa.api.ApiState import com.jerboa.commentsToFlatNodes import com.jerboa.datatypes.BanFromCommunityData -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.getDisplayName import com.jerboa.datatypes.getLocalizedStringForUserTab import com.jerboa.db.entity.Account @@ -94,6 +93,7 @@ import it.vercruysse.lemmyapi.v0x19.datatypes.DistinguishComment import it.vercruysse.lemmyapi.v0x19.datatypes.FeaturePost import it.vercruysse.lemmyapi.v0x19.datatypes.GetPersonDetails import it.vercruysse.lemmyapi.v0x19.datatypes.HidePost +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.LockPost import it.vercruysse.lemmyapi.v0x19.datatypes.MarkPostAsRead import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId @@ -336,7 +336,7 @@ fun UserTabs( showPostLinkPreviews: Boolean, markAsReadOnScroll: Boolean, snackbarHostState: SnackbarHostState, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, postActionBarMode: PostActionBarMode, swipeToActionPreset: SwipeToActionPreset, ) { diff --git a/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt b/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt index 06e71eb25..798c8f749 100644 --- a/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt +++ b/app/src/main/java/com/jerboa/ui/components/post/PostListing.kt @@ -62,7 +62,6 @@ import com.jerboa.PostViewMode import com.jerboa.R import com.jerboa.datatypes.BanFromCommunityData import com.jerboa.datatypes.PostFeatureData -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.sampleImagePostView import com.jerboa.datatypes.sampleLinkNoThumbnailPostView import com.jerboa.datatypes.sampleLinkPostView @@ -78,6 +77,7 @@ import com.jerboa.feat.SwipeToActionType import com.jerboa.feat.VoteType import com.jerboa.feat.amMod import com.jerboa.feat.canMod +import com.jerboa.feat.default import com.jerboa.feat.isReadyAndIfNotShowSimplifiedInfoToast import com.jerboa.feat.needBlur import com.jerboa.feat.simulateModerators @@ -140,7 +140,7 @@ fun PostHeaderLine( showAvatar: Boolean, fullBody: Boolean, blurNSFW: BlurNSFW, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Column(modifier = modifier) { Row( @@ -269,7 +269,7 @@ fun PostHeaderLinePreview() { showAvatar = true, blurNSFW = BlurNSFW.NSFW, fullBody = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), ) } @@ -279,7 +279,7 @@ fun PostNodeHeader( instantScores: InstantScores, onPersonClick: (personId: PersonId) -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { CommentOrPostNodeHeader( creator = postView.creator, @@ -907,7 +907,7 @@ fun PreviewPostListingCard() { appState = rememberJerboaAppState(), showPostLinkPreview = true, showIfRead = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), postActionBarMode = PostActionBarMode.Long, swipeToActionPreset = SwipeToActionPreset.TwoSides, ) @@ -949,7 +949,7 @@ fun PreviewLinkPostListing() { appState = rememberJerboaAppState(), showPostLinkPreview = true, showIfRead = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), postActionBarMode = PostActionBarMode.Long, swipeToActionPreset = SwipeToActionPreset.TwoSides, ) @@ -991,7 +991,7 @@ fun PreviewImagePostListingCard() { appState = rememberJerboaAppState(), showPostLinkPreview = true, showIfRead = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), postActionBarMode = PostActionBarMode.Long, swipeToActionPreset = SwipeToActionPreset.TwoSides, ) @@ -1033,7 +1033,7 @@ fun PreviewImagePostListingSmallCard() { appState = rememberJerboaAppState(), showPostLinkPreview = true, showIfRead = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), postActionBarMode = PostActionBarMode.Long, swipeToActionPreset = SwipeToActionPreset.TwoSides, ) @@ -1075,7 +1075,7 @@ fun PreviewLinkNoThumbnailPostListing() { appState = rememberJerboaAppState(), showPostLinkPreview = true, showIfRead = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), postActionBarMode = PostActionBarMode.Long, swipeToActionPreset = SwipeToActionPreset.TwoSides, ) @@ -1118,7 +1118,7 @@ fun PostListing( appState: JerboaAppState, showPostLinkPreview: Boolean, showIfRead: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, postActionBarMode: PostActionBarMode, swipeToActionPreset: SwipeToActionPreset, ) { @@ -1304,7 +1304,7 @@ fun PostVotingTile( onDownvoteClick: () -> Unit, account: Account, enableDownVotes: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Column( horizontalAlignment = Alignment.CenterHorizontally, @@ -1365,7 +1365,7 @@ fun PostListingList( appState: JerboaAppState, showIfRead: Boolean, enableDownVotes: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { Column( modifier = @@ -1591,7 +1591,7 @@ fun PostListingListPreview() { appState = rememberJerboaAppState(), showIfRead = true, enableDownVotes = false, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), ) } @@ -1620,7 +1620,7 @@ fun PostListingListWithThumbPreview() { appState = rememberJerboaAppState(), showIfRead = true, enableDownVotes = false, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), ) } @@ -1662,7 +1662,7 @@ fun PostListingCard( showPostLinkPreview: Boolean, appState: JerboaAppState, showIfRead: Boolean = false, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, postActionBarMode: PostActionBarMode, ) { Column( diff --git a/app/src/main/java/com/jerboa/ui/components/post/PostListings.kt b/app/src/main/java/com/jerboa/ui/components/post/PostListings.kt index 4d564d2d7..cddd2faa8 100644 --- a/app/src/main/java/com/jerboa/ui/components/post/PostListings.kt +++ b/app/src/main/java/com/jerboa/ui/components/post/PostListings.kt @@ -14,7 +14,6 @@ import com.jerboa.JerboaAppState import com.jerboa.PostViewMode import com.jerboa.datatypes.BanFromCommunityData import com.jerboa.datatypes.PostFeatureData -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.sampleLinkPostView import com.jerboa.datatypes.samplePostView import com.jerboa.db.entity.Account @@ -22,10 +21,12 @@ import com.jerboa.db.entity.AnonAccount import com.jerboa.feat.BlurNSFW import com.jerboa.feat.PostActionBarMode import com.jerboa.feat.SwipeToActionPreset +import com.jerboa.feat.default import com.jerboa.rememberJerboaAppState import com.jerboa.ui.components.common.RetryLoadingPosts import com.jerboa.ui.components.common.TriggerWhenReachingEnd import it.vercruysse.lemmyapi.v0x19.datatypes.Community +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.Person import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PersonView @@ -71,7 +72,7 @@ fun PostListings( markAsReadOnScroll: Boolean, onMarkAsRead: (postView: PostView) -> Unit, showIfRead: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, postActionBarMode: PostActionBarMode, showPostAppendRetry: Boolean, swipeToActionPreset: SwipeToActionPreset, @@ -188,7 +189,7 @@ fun PreviewPostListings() { markAsReadOnScroll = false, onMarkAsRead = {}, showIfRead = true, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), postActionBarMode = PostActionBarMode.Long, showPostAppendRetry = false, swipeToActionPreset = SwipeToActionPreset.TwoSides, diff --git a/app/src/main/java/com/jerboa/ui/components/reports/CommentReportItem.kt b/app/src/main/java/com/jerboa/ui/components/reports/CommentReportItem.kt index 4409a4c1f..b407672d4 100644 --- a/app/src/main/java/com/jerboa/ui/components/reports/CommentReportItem.kt +++ b/app/src/main/java/com/jerboa/ui/components/reports/CommentReportItem.kt @@ -7,9 +7,9 @@ import androidx.compose.material3.HorizontalDivider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.sampleCommentReportView import com.jerboa.feat.InstantScores +import com.jerboa.feat.default import com.jerboa.ui.components.comment.CommentBody import com.jerboa.ui.components.comment.CommentNodeHeader import com.jerboa.ui.theme.MEDIUM_PADDING @@ -18,6 +18,7 @@ import it.vercruysse.lemmyapi.dto.SubscribedType import it.vercruysse.lemmyapi.v0x19.datatypes.CommentId import it.vercruysse.lemmyapi.v0x19.datatypes.CommentReportView import it.vercruysse.lemmyapi.v0x19.datatypes.CommentView +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.ResolveCommentReport @@ -28,7 +29,7 @@ fun CommentReportItem( onPersonClick: (PersonId) -> Unit, onCommentClick: (CommentId) -> Unit, showAvatar: Boolean, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, ) { // Build a comment-view using the content at the time it was reported, // not the current state. @@ -122,6 +123,6 @@ fun CommentReportItemPreview() { onResolveClick = {}, onCommentClick = {}, showAvatar = false, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), ) } diff --git a/app/src/main/java/com/jerboa/ui/components/reports/PostReportItem.kt b/app/src/main/java/com/jerboa/ui/components/reports/PostReportItem.kt index cdd487534..7aaa2bf37 100644 --- a/app/src/main/java/com/jerboa/ui/components/reports/PostReportItem.kt +++ b/app/src/main/java/com/jerboa/ui/components/reports/PostReportItem.kt @@ -10,12 +10,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import com.jerboa.JerboaAppState -import com.jerboa.datatypes.VoteDisplayMode import com.jerboa.datatypes.samplePostReportView import com.jerboa.db.entity.Account import com.jerboa.db.entity.AnonAccount import com.jerboa.feat.BlurNSFW import com.jerboa.feat.InstantScores +import com.jerboa.feat.default import com.jerboa.feat.needBlur import com.jerboa.rememberJerboaAppState import com.jerboa.ui.components.post.PostBody @@ -24,6 +24,7 @@ import com.jerboa.ui.theme.MEDIUM_PADDING import com.jerboa.ui.theme.SMALL_PADDING import it.vercruysse.lemmyapi.dto.SubscribedType import it.vercruysse.lemmyapi.v0x19.datatypes.Community +import it.vercruysse.lemmyapi.v0x19.datatypes.LocalUserVoteDisplayMode import it.vercruysse.lemmyapi.v0x19.datatypes.PersonId import it.vercruysse.lemmyapi.v0x19.datatypes.PostReportView import it.vercruysse.lemmyapi.v0x19.datatypes.PostView @@ -39,7 +40,7 @@ fun PostReportItem( onCommunityClick: (Community) -> Unit, showAvatar: Boolean, blurNSFW: BlurNSFW, - voteDisplayMode: VoteDisplayMode, + voteDisplayMode: LocalUserVoteDisplayMode, account: Account, ) { // Build a post-view using the content at the time it was reported, @@ -160,7 +161,7 @@ fun PostReportItemPreview() { onResolveClick = {}, showAvatar = false, blurNSFW = BlurNSFW.NSFW, - voteDisplayMode = VoteDisplayMode.Full, + voteDisplayMode = LocalUserVoteDisplayMode.default(), account = AnonAccount, appState = rememberJerboaAppState(), ) diff --git a/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt b/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt index e6200f333..25392fa9f 100644 --- a/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt +++ b/app/src/main/java/com/jerboa/ui/components/settings/account/AccountSettings.kt @@ -123,6 +123,7 @@ fun SettingsForm( val scope = rememberCoroutineScope() val ctx = LocalContext.current + val api = API.getInstanceOrNull() var displayName by rememberSaveable { mutableStateOf(luv?.person?.display_name.orEmpty()) } var bio by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue(luv?.person?.bio.orEmpty())) @@ -144,7 +145,10 @@ fun SettingsForm( val showNsfwState = remember { mutableStateOf(luv?.local_user?.show_nsfw ?: false) } val showAvatarsState = remember { mutableStateOf(luv?.local_user?.show_avatars ?: false) } - val showScoresState = remember { mutableStateOf(luv?.local_user?.show_scores ?: false) } + val showScoresState = remember { mutableStateOf(luv?.local_user_vote_display_mode?.score ?: false) } + val showUpvotesState = remember { mutableStateOf(luv?.local_user_vote_display_mode?.upvotes ?: false) } + val showDownvotesState = remember { mutableStateOf(luv?.local_user_vote_display_mode?.downvotes ?: false) } + val showUpvotePercentageState = remember { mutableStateOf(luv?.local_user_vote_display_mode?.upvote_percentage ?: false) } val showBotAccountState = remember { mutableStateOf(luv?.local_user?.show_bot_accounts ?: false) } val botAccountState = remember { mutableStateOf(luv?.person?.bot_account ?: false) } val showReadPostsState = remember { mutableStateOf(luv?.local_user?.show_read_posts ?: false) } @@ -169,6 +173,9 @@ fun SettingsForm( show_read_posts = showReadPostsState.value, theme = theme, show_scores = showScoresState.value, + show_upvotes = showUpvotesState.value, + show_downvotes = showDownvotesState.value, + show_upvote_percentage = showUpvotePercentageState.value, discussion_languages = null, ) var isUploadingAvatar by rememberSaveable { mutableStateOf(false) } @@ -310,12 +317,32 @@ fun SettingsForm( Text(text = stringResource(R.string.account_settings_show_bot_accounts)) }, ) - SwitchPreference( - state = showScoresState, - title = { - Text(text = stringResource(R.string.account_settings_show_scores)) - }, - ) + if (api != null && api.FF.hidePost()) { + SwitchPreference( + state = showScoresState, + title = { + Text(text = stringResource(R.string.account_settings_show_scores)) + }, + ) + SwitchPreference( + state = showUpvotesState, + title = { + Text(text = stringResource(R.string.show_upvotes)) + }, + ) + SwitchPreference( + state = showDownvotesState, + title = { + Text(text = stringResource(R.string.show_downvotes)) + }, + ) + SwitchPreference( + state = showUpvotePercentageState, + title = { + Text(text = stringResource(R.string.show_upvote_percentage)) + }, + ) + } SwitchPreference( enabled = !email.isNullOrEmpty(), diff --git a/app/src/main/java/com/jerboa/ui/theme/Sizes.kt b/app/src/main/java/com/jerboa/ui/theme/Sizes.kt index 10c8bbaa9..03f5c1e8c 100644 --- a/app/src/main/java/com/jerboa/ui/theme/Sizes.kt +++ b/app/src/main/java/com/jerboa/ui/theme/Sizes.kt @@ -3,7 +3,6 @@ package com.jerboa.ui.theme import androidx.compose.ui.unit.dp const val DEFAULT_FONT_SIZE = 16 -const val SCORE_SIZE_ADD = 4 val ACTION_BAR_ICON_SIZE = 16.dp val MARKDOWN_BAR_ICON_SIZE = 24.dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 86f4bd68f..7fc9d1bd1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -475,6 +475,10 @@ Post unhidden Hide Post Unhide Post + Show Upvotes + Show Downvotes + Show Upvote % + Score Info Baseline profile Installed