Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ internal fun EmojiPicker(
modifier = Modifier.fillMaxWidth(),
)
LazyVerticalGrid(
columns = GridCells.Adaptive(48.dp),
columns = GridCells.Adaptive(36.dp),
state = gridListState,
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalArrangement = Arrangement.spacedBy(8.dp),
Expand Down Expand Up @@ -103,7 +103,7 @@ internal fun EmojiPicker(
contentDescription = emoji.shortcode,
modifier =
Modifier
.size(48.dp)
.size(36.dp)
.clickable {
onEmojiSelected(emoji)
state.addHistory(emoji)
Expand All @@ -122,7 +122,6 @@ internal fun EmojiPicker(

actualData.forEach { (category, emojis) ->
if (emojis.any()) {
// TODO: after compose 1.8.0, we can use `stickyHeader` to make the header sticky
if (category.isNotEmpty() && category.isNotBlank()) {
item(
span = {
Expand Down Expand Up @@ -150,7 +149,7 @@ internal fun EmojiPicker(
contentDescription = emoji.shortcode,
modifier =
Modifier
.size(48.dp)
.size(36.dp)
.clickable {
onEmojiSelected(emoji)
state.addHistory(emoji)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,16 @@ internal fun ComposeScreen(
FlareTopAppBar(
colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent),
title = {
Text(text = stringResource(id = R.string.compose_title))
when (status) {
is ComposeStatus.VVOComment ->
Text(text = stringResource(id = R.string.compose_vvo_comment_title))
is ComposeStatus.Quote ->
Text(text = stringResource(id = R.string.compose_quote_title))
is ComposeStatus.Reply ->
Text(text = stringResource(id = R.string.compose_reply_title))
null ->
Text(text = stringResource(id = R.string.compose_title))
}
},
navigationIcon = {
IconButton(onClick = onBack) {
Expand Down Expand Up @@ -824,7 +833,7 @@ private fun composePresenter(

fun selectEmoji(emoji: UiEmoji) {
textFieldState.edit {
append(" ${emoji.shortcode} ")
append(emoji.insertText)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand All @@ -21,6 +22,7 @@ import dev.dimension.flare.model.MicroBlogKey
import dev.dimension.flare.ui.component.BackButton
import dev.dimension.flare.ui.component.FlareScaffold
import dev.dimension.flare.ui.component.FlareTopAppBar
import dev.dimension.flare.ui.component.LocalComponentAppearance
import dev.dimension.flare.ui.component.RefreshContainer
import dev.dimension.flare.ui.component.status.LazyStatusVerticalStaggeredGrid
import dev.dimension.flare.ui.component.status.StatusItem
Expand Down Expand Up @@ -60,28 +62,35 @@ internal fun VVOCommentScreen(
},
modifier = Modifier.nestedScroll(topAppBarScrollBehavior.nestedScrollConnection),
) { contentPadding ->
RefreshContainer(
onRefresh = state::refresh,
isRefreshing = state.isRefreshing,
indicatorPadding = contentPadding,
content = {
LazyStatusVerticalStaggeredGrid(
columns = StaggeredGridCells.Fixed(1),
modifier = Modifier.fillMaxSize(),
contentPadding = contentPadding,
) {
item {
state.state.root
.onSuccess {
StatusItem(item = it)
}.onLoading {
StatusItem(item = null)
}
CompositionLocalProvider(
LocalComponentAppearance provides
LocalComponentAppearance.current.copy(
lineLimit = Int.MAX_VALUE,
),
) {
RefreshContainer(
onRefresh = state::refresh,
isRefreshing = state.isRefreshing,
indicatorPadding = contentPadding,
content = {
LazyStatusVerticalStaggeredGrid(
columns = StaggeredGridCells.Fixed(1),
modifier = Modifier.fillMaxSize(),
contentPadding = contentPadding,
) {
item {
state.state.root
.onSuccess {
StatusItem(item = it)
}.onLoading {
StatusItem(item = null)
}
}
status(state.state.list)
}
status(state.state.list)
}
},
)
},
)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo
import androidx.compose.material3.adaptive.currentWindowSize
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.key
Expand All @@ -44,6 +45,7 @@ import dev.dimension.flare.ui.component.BackButton
import dev.dimension.flare.ui.component.FAIcon
import dev.dimension.flare.ui.component.FlareScaffold
import dev.dimension.flare.ui.component.FlareTopAppBar
import dev.dimension.flare.ui.component.LocalComponentAppearance
import dev.dimension.flare.ui.component.status.AdaptiveCard
import dev.dimension.flare.ui.component.status.LazyStatusVerticalStaggeredGrid
import dev.dimension.flare.ui.component.status.StatusItem
Expand Down Expand Up @@ -114,23 +116,30 @@ internal fun VVOStatusScreen(
)
}
}
LazyStatusVerticalStaggeredGrid(
contentPadding = contentPadding,
modifier = Modifier.fillMaxSize(),
CompositionLocalProvider(
LocalComponentAppearance provides
LocalComponentAppearance.current.copy(
lineLimit = Int.MAX_VALUE,
),
) {
if (!bigScreen) {
item {
AdaptiveCard {
StatusContent(statusState = state.status, detailStatusKey = statusKey)
LazyStatusVerticalStaggeredGrid(
contentPadding = contentPadding,
modifier = Modifier.fillMaxSize(),
) {
if (!bigScreen) {
item {
AdaptiveCard {
StatusContent(statusState = state.status, detailStatusKey = statusKey)
}
}
}
reactionContent(
comment = state.comment,
repost = state.repost,
detailType = state.type,
onDetailTypeChange = state::onTypeChanged,
)
}
reactionContent(
comment = state.comment,
repost = state.repost,
detailType = state.type,
onDetailTypeChange = state::onTypeChanged,
)
}
}
}
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,9 @@
<string name="notification_tab_likes_title">Likes</string>

<string name="compose_title">Compose</string>
<string name="compose_reply_title">Reply</string>
<string name="compose_quote_title">Quote</string>
<string name="compose_vvo_comment_title">Comment</string>
<string name="compose_hint">What\'s happening?</string>
<string name="compose_poll_option_hint">Option %1$s</string>
<string name="compose_poll_single_choice">Single choice</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,7 @@
<string name="retweet">Retweet</string>
<string name="retweet_remove">Remove retweet</string>
<string name="share">Share</string>
<string name="comment">Comment</string>

<string name="user_report">Report %1$s</string>
<string name="user_block">Block %1$s</string>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public data class ComponentAppearance(
val expandMediaSize: Boolean = false,
val compatLinkPreview: Boolean = false,
val aiConfig: AiConfig = AiConfig(),
val lineLimit: Int = 5,
) {
public data class AiConfig(
val translation: Boolean = false,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,12 @@ import compose.icons.FontAwesomeIcons
import compose.icons.fontawesomeicons.Regular
import compose.icons.fontawesomeicons.Solid
import compose.icons.fontawesomeicons.regular.Bookmark
import compose.icons.fontawesomeicons.regular.CommentDots
import compose.icons.fontawesomeicons.regular.Heart
import compose.icons.fontawesomeicons.solid.At
import compose.icons.fontawesomeicons.solid.Bookmark
import compose.icons.fontawesomeicons.solid.CircleInfo
import compose.icons.fontawesomeicons.solid.Comment
import compose.icons.fontawesomeicons.solid.Ellipsis
import compose.icons.fontawesomeicons.solid.Globe
import compose.icons.fontawesomeicons.solid.Heart
Expand All @@ -72,6 +74,7 @@ import compose.icons.fontawesomeicons.solid.Trash
import dev.dimension.flare.compose.ui.Res
import dev.dimension.flare.compose.ui.bookmark_add
import dev.dimension.flare.compose.ui.bookmark_remove
import dev.dimension.flare.compose.ui.comment
import dev.dimension.flare.compose.ui.delete
import dev.dimension.flare.compose.ui.like
import dev.dimension.flare.compose.ui.mastodon_item_show_less
Expand Down Expand Up @@ -245,7 +248,7 @@ public fun CommonStatusComponent(
content = item.content,
contentWarning = item.contentWarning,
poll = item.poll,
maxLines = 6,
maxLines = appearanceSettings.lineLimit,
)
}

Expand Down Expand Up @@ -849,6 +852,7 @@ private val StatusAction.Item.icon: ImageVector
is StatusAction.Item.Reply -> FontAwesomeIcons.Solid.Reply
is StatusAction.Item.Report -> FontAwesomeIcons.Solid.CircleInfo
is StatusAction.Item.Retweet -> FontAwesomeIcons.Solid.Retweet
is StatusAction.Item.Comment -> FontAwesomeIcons.Regular.CommentDots
}

private val StatusAction.Item.iconText: ImmutableList<Digit>?
Expand All @@ -863,6 +867,7 @@ private val StatusAction.Item.iconText: ImmutableList<Digit>?
is StatusAction.Item.Reply -> digits
is StatusAction.Item.Report -> null
is StatusAction.Item.Retweet -> digits
is StatusAction.Item.Comment -> digits
}

@Composable
Expand Down Expand Up @@ -917,6 +922,8 @@ private fun statusActionItemText(item: StatusAction.Item) =
stringResource(resource = Res.string.retweet)
}
}

is StatusAction.Item.Comment -> stringResource(resource = Res.string.comment)
}

@Composable
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,18 +118,13 @@ internal fun EmojiPicker(

actualData.forEach { (category, emojis) ->
if (emojis.any()) {
// TODO: after compose 1.8.0, we can use `stickyHeader` to make the header sticky
if (category.isNotEmpty() && category.isNotBlank()) {
item(
span = {
GridItemSpan(maxLineSpan)
},
) {
ListHeader(
content = {
Text(category)
},
)
Text(category)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -855,7 +855,7 @@ private fun composePresenter(

fun selectEmoji(emoji: UiEmoji) {
textFieldState.edit {
append(" ${emoji.shortcode} ")
append(emoji.insertText)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells
import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
Expand All @@ -18,7 +19,7 @@ import dev.dimension.flare.RegisterTabCallback
import dev.dimension.flare.common.onSuccess
import dev.dimension.flare.model.AccountType
import dev.dimension.flare.model.MicroBlogKey
import dev.dimension.flare.ui.common.plus
import dev.dimension.flare.ui.component.LocalComponentAppearance
import dev.dimension.flare.ui.component.status.LazyStatusVerticalStaggeredGrid
import dev.dimension.flare.ui.component.status.StatusItem
import dev.dimension.flare.ui.component.status.status
Expand Down Expand Up @@ -49,20 +50,27 @@ internal fun VVOCommentScreen(
Modifier
.fillMaxSize(),
) {
LazyStatusVerticalStaggeredGrid(
columns = StaggeredGridCells.Fixed(1),
contentPadding = LocalWindowPadding.current,
state = listState,
CompositionLocalProvider(
LocalComponentAppearance provides
LocalComponentAppearance.current.copy(
lineLimit = Int.MAX_VALUE,
),
) {
item {
state.state.root
.onSuccess {
StatusItem(item = it)
}.onLoading {
StatusItem(item = null)
}
LazyStatusVerticalStaggeredGrid(
columns = StaggeredGridCells.Fixed(1),
contentPadding = LocalWindowPadding.current,
state = listState,
) {
item {
state.state.root
.onSuccess {
StatusItem(item = it)
}.onLoading {
StatusItem(item = null)
}
}
status(state.state.list)
}
status(state.state.list)
}
if (state.isRefreshing) {
ProgressBar(
Expand Down
Loading
Loading