Skip to content

Commit 329bf39

Browse files
committed
Better colors for interaction indicators and wip reactions
1 parent 3be0cbe commit 329bf39

4 files changed

Lines changed: 106 additions & 10 deletions

File tree

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package site.remlit.snowdrop.component
2+
3+
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.layout.Box
5+
import androidx.compose.foundation.layout.height
6+
import androidx.compose.foundation.layout.width
7+
import androidx.compose.material3.MaterialTheme
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.layout.ContentScale
11+
import androidx.compose.ui.unit.dp
12+
import io.kamel.image.KamelImage
13+
import io.kamel.image.asyncPainterResource
14+
import site.remlit.snowdrop.model.Emoji
15+
16+
val emojiSize = 20.dp
17+
18+
@Composable
19+
fun Emoji(emoji: Emoji) {
20+
@Composable
21+
fun fallback() {
22+
Box(
23+
modifier = Modifier.background(MaterialTheme.colorScheme.surfaceContainerHigh)
24+
.height(emojiSize)
25+
.width(emojiSize)
26+
)
27+
}
28+
29+
KamelImage(
30+
{ asyncPainterResource(emoji.staticUrl) },
31+
emoji.shortcode,
32+
onLoading = { fallback() },
33+
modifier = Modifier
34+
.height(emojiSize)
35+
.width(emojiSize),
36+
contentScale = ContentScale.Fit
37+
)
38+
}

shared/src/commonMain/kotlin/site/remlit/snowdrop/component/Status.kt

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,21 @@ import androidx.compose.foundation.clickable
66
import androidx.compose.foundation.layout.Arrangement
77
import androidx.compose.foundation.layout.Box
88
import androidx.compose.foundation.layout.Column
9+
import androidx.compose.foundation.layout.PaddingValues
910
import androidx.compose.foundation.layout.Row
1011
import androidx.compose.foundation.layout.Spacer
1112
import androidx.compose.foundation.layout.fillMaxWidth
1213
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.lazy.LazyRow
1315
import androidx.compose.foundation.shape.RoundedCornerShape
16+
import androidx.compose.material3.ButtonColors
17+
import androidx.compose.material3.ButtonDefaults
1418
import androidx.compose.material3.DropdownMenu
1519
import androidx.compose.material3.DropdownMenuItem
1620
import androidx.compose.material3.HorizontalDivider
1721
import androidx.compose.material3.Icon
1822
import androidx.compose.material3.MaterialTheme
23+
import androidx.compose.material3.OutlinedButton
1924
import androidx.compose.material3.Text
2025
import androidx.compose.material3.TextButton
2126
import androidx.compose.runtime.Composable
@@ -44,6 +49,9 @@ import site.remlit.snowdrop.ThreadRoute
4449
import site.remlit.snowdrop.component.dropdown.DangerDropdownItem
4550
import site.remlit.snowdrop.model.Status
4651
import site.remlit.snowdrop.model.Account
52+
import site.remlit.snowdrop.model.Emoji
53+
import site.remlit.snowdrop.util.BoostColor
54+
import site.remlit.snowdrop.util.LikeColor
4755
import site.remlit.snowdrop.util.LocalNavController
4856
import site.remlit.snowdrop.util.WarningColor25
4957
import site.remlit.snowdrop.util.atRoute
@@ -113,10 +121,12 @@ fun Status(status: Status) {
113121
@Composable
114122
fun FooterButton(
115123
onClick: () -> Unit,
124+
colors: ButtonColors? = null,
116125
content: @Composable () -> Unit
117126
) {
118127
TextButton(
119128
onClick = onClick,
129+
colors = colors ?: ButtonDefaults.textButtonColors()
120130
) {
121131
Row(
122132
verticalAlignment = Alignment.CenterVertically,
@@ -312,6 +322,33 @@ fun Status(status: Status) {
312322
MiniStatus(realStatus.quotedStatus!!)
313323
}
314324

325+
/*
326+
* Reactions
327+
*/
328+
if (!realStatus.reactions.isEmpty()) {
329+
LazyRow(
330+
horizontalArrangement = Arrangement.spacedBy(5.dp)
331+
) {
332+
realStatus.reactions.forEach {
333+
item {
334+
OutlinedButton(
335+
onClick = {},
336+
contentPadding = PaddingValues(horizontal = 10.dp, vertical = 10.dp)
337+
) {
338+
Row(
339+
horizontalArrangement = Arrangement.spacedBy(5.dp),
340+
verticalAlignment = Alignment.CenterVertically
341+
) {
342+
val emoji = it.toEmoji()
343+
if (emoji != null) Emoji(emoji) else Text(it.name)
344+
Text("${it.count}")
345+
}
346+
}
347+
}
348+
}
349+
}
350+
}
351+
315352
/*
316353
* Footer
317354
*/
@@ -333,7 +370,12 @@ fun Status(status: Status) {
333370
Text(realStatus.repliesCount.toFormatShort())
334371
}
335372

336-
FooterButton(onClick = { }) {
373+
FooterButton(
374+
onClick = { },
375+
colors = if (realStatus.reblogged) ButtonDefaults.textButtonColors(
376+
contentColor = BoostColor
377+
) else null
378+
) {
337379
if (isMine || realStatus.visibility == "public" || realStatus.visibility == "unlisted") {
338380
if (realStatus.reblogged) Icon(
339381
painterResource(Res.drawable.icon_repeat_24px),
@@ -354,11 +396,16 @@ fun Status(status: Status) {
354396
}
355397
}
356398

357-
FooterButton(onClick = { }) {
399+
FooterButton(
400+
onClick = { },
401+
colors = if (realStatus.favourited) ButtonDefaults.textButtonColors(
402+
contentColor = LikeColor
403+
) else null
404+
) {
358405
if (realStatus.favourited) Icon(
359406
painterResource(Res.drawable.icon_star_filled_24px),
360407
null,
361-
tint = MaterialTheme.colorScheme.primary
408+
tint = LikeColor
362409
) else Icon(
363410
painterResource(Res.drawable.icon_star_24px),
364411
null
@@ -369,11 +416,7 @@ fun Status(status: Status) {
369416
}
370417

371418
FooterButton(onClick = { }) {
372-
if (realStatus.favourited) Icon(
373-
painterResource(Res.drawable.icon_add_24px),
374-
null,
375-
tint = MaterialTheme.colorScheme.primary
376-
) else Icon(
419+
Icon(
377420
painterResource(Res.drawable.icon_add_24px),
378421
null
379422
)

shared/src/commonMain/kotlin/site/remlit/snowdrop/model/Status.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,15 @@ data class Status(
194194
val accounts: List<Account>? = emptyList(),
195195
@SerialName("account_ids")
196196
val accountIds: List<String> = emptyList()
197-
)
197+
) {
198+
fun toEmoji(): Emoji? =
199+
Emoji(
200+
shortcode = name,
201+
url = url ?: return null,
202+
staticUrl = staticUrl ?: url,
203+
visibleInPicker = true // doesnt matter here
204+
)
205+
}
198206

199207
@Serializable
200208
data class Tag(

shared/src/commonMain/kotlin/site/remlit/snowdrop/util/CustomColors.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,12 @@ package site.remlit.snowdrop.util
22

33
import androidx.compose.ui.graphics.Color
44

5+
val LikeColor = Color(color = 0xFFF5C51A)
6+
val LikeColor25 = Color(color = 0x40F5C51A)
7+
8+
val BoostColor = Color(color = 0xFF3DC60D)
9+
val BoostColor25 = Color(color = 0x403DC60D)
10+
11+
512
val WarningColor = Color(color = 0xFFFFAF25)
6-
val WarningColor25 = Color(color = 0x40FFAF25)
13+
val WarningColor25 = Color(color = 0x40FFAF25)

0 commit comments

Comments
 (0)