Skip to content

Commit 348367f

Browse files
committed
add post action style
1 parent 0287d66 commit 348367f

File tree

12 files changed

+123
-55
lines changed

12 files changed

+123
-55
lines changed

app/src/main/java/dev/dimension/flare/ui/AppContainer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ fun FlareApp(content: @Composable () -> Unit) {
7070
AvatarShape.CIRCLE -> ComponentAppearance.AvatarShape.CIRCLE
7171
AvatarShape.SQUARE -> ComponentAppearance.AvatarShape.SQUARE
7272
},
73-
showActions = appearanceSettings.showActions,
7473
showNumbers = appearanceSettings.showNumbers,
7574
showLinkPreview = appearanceSettings.showLinkPreview,
7675
showMedia = appearanceSettings.showMedia,
@@ -89,6 +88,7 @@ fun FlareApp(content: @Composable () -> Unit) {
8988
tldr = appSettings.aiConfig.tldr,
9089
),
9190
fullWidthPost = appearanceSettings.fullWidthPost,
91+
postActionStyle = appearanceSettings.postActionStyle,
9292
)
9393
},
9494
content = content,

app/src/main/java/dev/dimension/flare/ui/screen/compose/ComposeScreen.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ import dev.dimension.flare.R
9191
import dev.dimension.flare.common.FileItem
9292
import dev.dimension.flare.data.datasource.microblog.ComposeConfig
9393
import dev.dimension.flare.data.datasource.microblog.ComposeData
94+
import dev.dimension.flare.data.model.PostActionStyle
9495
import dev.dimension.flare.model.AccountType
9596
import dev.dimension.flare.ui.component.AvatarComponent
9697
import dev.dimension.flare.ui.component.EmojiPicker
@@ -622,8 +623,8 @@ internal fun ComposeScreen(
622623
LocalComponentAppearance.current.copy(
623624
showMedia = false,
624625
expandMediaSize = false,
625-
showActions = false,
626626
showLinkPreview = false,
627+
postActionStyle = PostActionStyle.Hidden,
627628
),
628629
) {
629630
CommonStatusComponent(

app/src/main/java/dev/dimension/flare/ui/screen/settings/AppearanceScreen.kt

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import dev.dimension.flare.data.model.AvatarShape
5050
import dev.dimension.flare.data.model.BottomBarBehavior
5151
import dev.dimension.flare.data.model.BottomBarStyle
5252
import dev.dimension.flare.data.model.LocalAppearanceSettings
53+
import dev.dimension.flare.data.model.PostActionStyle
5354
import dev.dimension.flare.data.model.Theme
5455
import dev.dimension.flare.data.model.VideoAutoplay
5556
import dev.dimension.flare.data.repository.SettingsRepository
@@ -424,33 +425,25 @@ internal fun AppearanceScreen(
424425
}
425426
},
426427
)
427-
ListItem(
428-
headlineContent = {
429-
Text(text = stringResource(id = R.string.settings_appearance_show_actions))
430-
},
431-
supportingContent = {
432-
Text(text = stringResource(id = R.string.settings_appearance_show_actions_description))
433-
},
434-
trailingContent = {
435-
Switch(
436-
checked = appearanceSettings.showActions,
437-
onCheckedChange = {
438-
state.updateSettings {
439-
copy(showActions = it)
440-
}
441-
},
442-
)
428+
SingleChoiceSettingsItem(
429+
headline = { Text(text = stringResource(id = R.string.settings_appearance_post_action_style)) },
430+
supporting = { Text(text = stringResource(id = R.string.settings_appearance_post_action_style_description)) },
431+
items =
432+
persistentMapOf(
433+
PostActionStyle.Hidden to stringResource(id = R.string.settings_appearance_post_action_style_hidden),
434+
PostActionStyle.LeftAligned to stringResource(id = R.string.settings_appearance_post_action_style_left_aligned),
435+
PostActionStyle.RightAligned to
436+
stringResource(id = R.string.settings_appearance_post_action_style_right_aligned),
437+
PostActionStyle.Stretch to stringResource(id = R.string.settings_appearance_post_action_style_stretch),
438+
),
439+
selected = appearanceSettings.postActionStyle,
440+
onSelected = {
441+
state.updateSettings {
442+
copy(postActionStyle = it)
443+
}
443444
},
444-
modifier =
445-
Modifier
446-
.listCardItem()
447-
.clickable {
448-
state.updateSettings {
449-
copy(showActions = !showActions)
450-
}
451-
},
452445
)
453-
AnimatedVisibility(appearanceSettings.showActions) {
446+
AnimatedVisibility(appearanceSettings.postActionStyle != PostActionStyle.Hidden) {
454447
ListItem(
455448
headlineContent = {
456449
Text(text = stringResource(id = R.string.settings_appearance_show_numbers))

app/src/main/res/values/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@
137137

138138
<string name="settings_appearance_show_actions">Show actions</string>
139139
<string name="settings_appearance_show_actions_description">Show actions on the bottom of the post</string>
140+
<string name="settings_appearance_post_action_style">Post action style</string>
141+
<string name="settings_appearance_post_action_style_description">Change the style of the post\'s action</string>
142+
<string name="settings_appearance_post_action_style_hidden">Hidden</string>
143+
<string name="settings_appearance_post_action_style_left_aligned">Left aligned</string>
144+
<string name="settings_appearance_post_action_style_right_aligned">Right aligned</string>
145+
<string name="settings_appearance_post_action_style_stretch">Stretch</string>
140146
<string name="settings_appearance_show_media">Show media</string>
141147
<string name="settings_appearance_show_media_description">Show media in the post</string>
142148
<string name="settings_appearance_show_numbers">Show numbers</string>

compose-ui/src/commonMain/kotlin/dev/dimension/flare/data/model/AppearanceSettings.kt

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,20 @@ import kotlinx.serialization.protobuf.ProtoBuf
1515
import okio.BufferedSink
1616
import okio.BufferedSource
1717

18-
public val LocalAppearanceSettings: ProvidableCompositionLocal<AppearanceSettings> = staticCompositionLocalOf { AppearanceSettings() }
18+
public val LocalAppearanceSettings: ProvidableCompositionLocal<AppearanceSettings> =
19+
staticCompositionLocalOf { AppearanceSettings() }
1920

2021
@Serializable
2122
public data class AppearanceSettings(
2223
val theme: Theme = Theme.SYSTEM,
2324
val dynamicTheme: Boolean = true,
2425
val colorSeed: ULong = Color(red = 103, green = 80, blue = 164).value,
2526
val avatarShape: AvatarShape = AvatarShape.CIRCLE,
27+
@Deprecated(
28+
"Use postActionStyle instead",
29+
ReplaceWith("postActionStyle"),
30+
DeprecationLevel.ERROR,
31+
)
2632
val showActions: Boolean = true,
2733
val pureColorMode: Boolean = true,
2834
val showNumbers: Boolean = true,
@@ -39,13 +45,21 @@ public data class AppearanceSettings(
3945
val bottomBarBehavior: BottomBarBehavior = BottomBarBehavior.MinimizeOnScroll,
4046
val inAppBrowser: Boolean = true,
4147
val fullWidthPost: Boolean = false,
48+
val postActionStyle: PostActionStyle = PostActionStyle.LeftAligned,
4249
) {
4350
public companion object {
4451
// for iOS
4552
public val Default: AppearanceSettings = AppearanceSettings()
4653
}
4754
}
4855

56+
public enum class PostActionStyle {
57+
Hidden,
58+
LeftAligned,
59+
RightAligned,
60+
Stretch,
61+
}
62+
4963
public enum class BottomBarStyle {
5064
Floating,
5165
Classic,

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/component/ComponentAppearance.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package dev.dimension.flare.ui.component
22

33
import androidx.compose.runtime.ProvidableCompositionLocal
44
import androidx.compose.runtime.staticCompositionLocalOf
5+
import dev.dimension.flare.data.model.PostActionStyle
56

67
public val LocalComponentAppearance: ProvidableCompositionLocal<ComponentAppearance> =
78
staticCompositionLocalOf {
@@ -11,7 +12,6 @@ public val LocalComponentAppearance: ProvidableCompositionLocal<ComponentAppeara
1112
public data class ComponentAppearance(
1213
val dynamicTheme: Boolean = true,
1314
val avatarShape: AvatarShape = AvatarShape.CIRCLE,
14-
val showActions: Boolean = true,
1515
val showNumbers: Boolean = true,
1616
val showLinkPreview: Boolean = true,
1717
val showMedia: Boolean = true,
@@ -22,6 +22,7 @@ public data class ComponentAppearance(
2222
val aiConfig: AiConfig = AiConfig(),
2323
val lineLimit: Int = 5,
2424
val fullWidthPost: Boolean = false,
25+
val postActionStyle: PostActionStyle = PostActionStyle.LeftAligned,
2526
) {
2627
public data class AiConfig(
2728
val translation: Boolean = false,

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/component/status/CommonStatusComponent.kt

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ import dev.dimension.flare.compose.ui.status_detail_translate
102102
import dev.dimension.flare.compose.ui.unlike
103103
import dev.dimension.flare.compose.ui.vote
104104
import dev.dimension.flare.data.datasource.microblog.StatusAction
105+
import dev.dimension.flare.data.model.PostActionStyle
105106
import dev.dimension.flare.model.MicroBlogKey
106107
import dev.dimension.flare.ui.common.PlatformShare
107108
import dev.dimension.flare.ui.component.AdaptiveGrid
@@ -374,7 +375,7 @@ public fun CommonStatusComponent(
374375
fullTime = true,
375376
)
376377
}
377-
if (appearanceSettings.showActions || isDetail) {
378+
if (appearanceSettings.postActionStyle != PostActionStyle.Hidden || isDetail) {
378379
Spacer(modifier = Modifier.height(8.dp))
379380
if (isDetail) {
380381
CompositionLocalProvider(
@@ -483,23 +484,23 @@ private fun StatusQuoteComponent(
483484
),
484485
) {
485486
Column {
486-
quotes.forEachIndexed { index, quote ->
487-
CompositionLocalProvider(
488-
LocalComponentAppearance provides
489-
LocalComponentAppearance.current.copy(
490-
showActions = false,
491-
),
492-
) {
487+
CompositionLocalProvider(
488+
LocalComponentAppearance provides
489+
LocalComponentAppearance.current.copy(
490+
postActionStyle = PostActionStyle.Hidden,
491+
),
492+
) {
493+
quotes.forEachIndexed { index, quote ->
493494
CommonStatusComponent(
494495
quote,
495496
isQuote = true,
496497
modifier =
497498
Modifier
498499
.padding(8.dp),
499500
)
500-
}
501-
if (index != quotes.lastIndex && quotes.size > 1) {
502-
HorizontalDivider()
501+
if (index != quotes.lastIndex && quotes.size > 1) {
502+
HorizontalDivider()
503+
}
503504
}
504505
}
505506
}
@@ -718,17 +719,25 @@ internal fun StatusActions(
718719
items: ImmutableList<StatusAction>,
719720
modifier: Modifier = Modifier,
720721
) {
722+
val appearanceSettings = LocalComponentAppearance.current
721723
val haptics = LocalHapticFeedback.current
722724
val launcher = LocalUriHandler.current
723725
Row(
724726
modifier =
725727
modifier
726728
.fillMaxWidth(),
727729
verticalAlignment = Alignment.CenterVertically,
730+
horizontalArrangement =
731+
when (appearanceSettings.postActionStyle) {
732+
PostActionStyle.Hidden -> Arrangement.Start
733+
PostActionStyle.LeftAligned -> Arrangement.Start
734+
PostActionStyle.RightAligned -> Arrangement.End
735+
PostActionStyle.Stretch -> Arrangement.SpaceBetween
736+
},
728737
// horizontalArrangement = Arrangement.spacedBy(4.dp),
729738
) {
730739
items.forEachIndexed { index, action ->
731-
if (index == items.lastIndex) {
740+
if (index == items.lastIndex && appearanceSettings.postActionStyle == PostActionStyle.LeftAligned) {
732741
Spacer(modifier = Modifier.weight(1f))
733742
}
734743
when (action) {

compose-ui/src/commonMain/kotlin/dev/dimension/flare/ui/component/status/UiTimelineComponent.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ import dev.dimension.flare.compose.ui.notification_item_reject_follow_request
231231
import dev.dimension.flare.compose.ui.vvo_notification_like
232232
import dev.dimension.flare.compose.ui.xqt_item_mention_status
233233
import dev.dimension.flare.compose.ui.xqt_item_reblogged_status
234+
import dev.dimension.flare.data.model.PostActionStyle
234235
import dev.dimension.flare.model.MicroBlogKey
235236
import dev.dimension.flare.ui.component.AvatarComponentDefaults
236237
import dev.dimension.flare.ui.component.FAIcon
@@ -474,7 +475,10 @@ private fun UserListContent(
474475
val status = data.status
475476
if (status != null) {
476477
CompositionLocalProvider(
477-
LocalComponentAppearance provides LocalComponentAppearance.current.copy(showActions = false),
478+
LocalComponentAppearance provides
479+
LocalComponentAppearance.current.copy(
480+
postActionStyle = PostActionStyle.Hidden,
481+
),
478482
) {
479483
CommonStatusComponent(
480484
item = status,

desktopApp/src/main/composeResources/values/strings.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,12 @@
207207
<string name="settings_appearance_full_width_post_description">Show the post in full width</string>
208208
<string name="settings_language_title">Language</string>
209209
<string name="settings_language_description">Change the language of the app</string>
210+
<string name="settings_appearance_post_action_style">Post action style</string>
211+
<string name="settings_appearance_post_action_style_description">Change the style of the post\'s action</string>
212+
<string name="settings_appearance_post_action_style_hidden">Hidden</string>
213+
<string name="settings_appearance_post_action_style_left_aligned">Left aligned</string>
214+
<string name="settings_appearance_post_action_style_right_aligned">Right aligned</string>
215+
<string name="settings_appearance_post_action_style_stretch">Stretch</string>
210216

211217
<string name="settings_about_source_code">Source code</string>
212218
<string name="settings_about_telegram">Telegram</string>

desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/compose/ComposeDialog.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import dev.dimension.flare.compose_poll_option_hint
7777
import dev.dimension.flare.compose_poll_single_choice
7878
import dev.dimension.flare.data.datasource.microblog.ComposeConfig
7979
import dev.dimension.flare.data.datasource.microblog.ComposeData
80+
import dev.dimension.flare.data.model.PostActionStyle
8081
import dev.dimension.flare.misskey_visibility_followers
8182
import dev.dimension.flare.misskey_visibility_followers_description
8283
import dev.dimension.flare.misskey_visibility_home
@@ -612,7 +613,7 @@ fun ComposeDialog(
612613
LocalComponentAppearance.current.copy(
613614
showMedia = false,
614615
expandMediaSize = false,
615-
showActions = false,
616+
postActionStyle = PostActionStyle.Hidden,
616617
showLinkPreview = false,
617618
),
618619
) {

0 commit comments

Comments
 (0)