refactor: modifiers (#414)

* refactor: remove Modifier.let calls

* refactor: remove composed modifier factory
This commit is contained in:
Diego Beraldin 2024-01-03 09:23:46 +01:00 committed by GitHub
parent 474b688dcc
commit 3caaac0b9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 201 additions and 158 deletions

View File

@ -50,17 +50,19 @@ fun InboxCard(
onOptionSelected: ((OptionId) -> Unit)? = null,
) {
Box(
modifier = Modifier.let {
modifier = Modifier.then(
if (postLayout == PostLayout.Card) {
it.padding(horizontal = Spacing.xs)
Modifier
.padding(horizontal = Spacing.xs)
.background(
color = MaterialTheme.colorScheme.surfaceColorAtElevation(5.dp),
shape = RoundedCornerShape(CornerSize.l),
).padding(Spacing.s)
)
.padding(Spacing.s)
} else {
it.background(MaterialTheme.colorScheme.background)
Modifier.background(MaterialTheme.colorScheme.background)
}
}.onClick(
).onClick(
onClick = rememberCallback {
onOpenPost(mention.post)
},

View File

@ -25,16 +25,19 @@ fun InboxCardPlaceholder(
postLayout: PostLayout = PostLayout.Card,
) {
Column(
modifier = Modifier.let {
modifier = Modifier.then(
if (postLayout == PostLayout.Card) {
it.padding(horizontal = Spacing.xs).background(
color = MaterialTheme.colorScheme.surfaceColorAtElevation(5.dp),
shape = RoundedCornerShape(CornerSize.l),
).padding(Spacing.s)
Modifier
.padding(horizontal = Spacing.xs)
.background(
color = MaterialTheme.colorScheme.surfaceColorAtElevation(5.dp),
shape = RoundedCornerShape(CornerSize.l),
)
.padding(Spacing.s)
} else {
it
Modifier
}
},
),
verticalArrangement = Arrangement.spacedBy(Spacing.xs),
) {
Box(

View File

@ -3,27 +3,26 @@ package com.github.diegoberaldin.raccoonforlemmy.core.utils.compose
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun Modifier.onClick(
onClick: () -> Unit = {},
onDoubleClick: () -> Unit = {},
onLongClick: () -> Unit = {},
): Modifier = composed {
combinedClickable(
indication = null,
interactionSource = remember { MutableInteractionSource() },
onClick = rememberCallback {
onClick()
},
onDoubleClick = rememberCallback {
onDoubleClick()
},
onLongClick = rememberCallback {
onLongClick()
}
)
}
): Modifier = combinedClickable(
indication = null,
interactionSource = remember { MutableInteractionSource() },
onClick = rememberCallback {
onClick()
},
onDoubleClick = rememberCallback {
onDoubleClick()
},
onLongClick = rememberCallback {
onLongClick()
}
)

View File

@ -6,21 +6,22 @@ import androidx.compose.animation.core.rememberInfiniteTransition
import androidx.compose.animation.core.tween
import androidx.compose.foundation.background
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.unit.IntSize
@Composable
fun Modifier.shimmerEffect(
duration: Int = 1000,
): Modifier = composed {
): Modifier {
val c1 = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.1f)
val c2 = MaterialTheme.colorScheme.onBackground.copy(alpha = 0.3f)
val colors = listOf(c1, c2, c1)
@ -36,7 +37,7 @@ fun Modifier.shimmerEffect(
)
)
background(
return this then background(
brush = Brush.linearGradient(
colors = colors,
start = Offset(startOffsetX, 0f),

View File

@ -153,13 +153,13 @@ object InboxScreen : Tab {
Column(
modifier = Modifier
.padding(paddingValues)
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
},
),
verticalArrangement = Arrangement.spacedBy(Spacing.s),
) {
SectionSelector(

View File

@ -149,17 +149,17 @@ internal object ProfileMainScreen : Tab {
},
)
},
) { paddinValues ->
) { paddingValues ->
Box(
modifier = Modifier
.padding(paddinValues)
.let {
.padding(paddingValues)
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
},
),
contentAlignment = Alignment.Center,
) {
// wait until logging status is determined

View File

@ -275,13 +275,13 @@ class ExploreScreen : Screen {
{ model.reduce(ExploreMviModel.Intent.Refresh) },
)
Box(
modifier = Modifier.padding(Spacing.xxs).let {
modifier = Modifier.padding(Spacing.xxs).then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}.nestedScroll(keyboardScrollConnection).pullRefresh(pullRefreshState),
).nestedScroll(keyboardScrollConnection).pullRefresh(pullRefreshState),
) {
LazyColumn(
state = lazyListState,

View File

@ -185,13 +185,13 @@ class AccountSettingsScreen : Screen {
Box(
modifier = Modifier
.padding(paddingValues)
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
},
)
) {
Column(
modifier = Modifier.fillMaxSize().verticalScroll(scrollState),

View File

@ -67,13 +67,13 @@ internal fun MessageCard(
Box {
Canvas(
modifier = Modifier.size(mediumDistance).let {
modifier = Modifier.size(mediumDistance).then(
if (isMyMessage) {
it.align(Alignment.TopEnd)
Modifier.align(Alignment.TopEnd)
} else {
it.align(Alignment.TopStart)
Modifier.align(Alignment.TopStart)
}
}
)
) {
if (isMyMessage) {
val path = Path().apply {
@ -94,13 +94,13 @@ internal fun MessageCard(
}
}
Box(
modifier = Modifier.let {
modifier = Modifier.then(
if (isMyMessage) {
it.padding(start = longDistance, end = mediumDistance)
Modifier.padding(start = longDistance, end = mediumDistance)
} else {
it.padding(end = longDistance, start = mediumDistance)
Modifier.padding(end = longDistance, start = mediumDistance)
}
}.background(
).background(
color = color, shape = RoundedCornerShape(
topStart = if (isMyMessage) CornerSize.m else 0.dp,
topEnd = if (isMyMessage) 0.dp else CornerSize.m,

View File

@ -497,13 +497,13 @@ class CommunityDetailScreen(
Box(
modifier = Modifier
.padding(padding)
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}
)
.nestedScroll(fabNestedScrollConnection)
.pullRefresh(pullRefreshState),
) {

View File

@ -159,13 +159,13 @@ class InstanceInfoScreen(
)
Box(
modifier = Modifier
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}
)
.padding(paddingValues)
.pullRefresh(pullRefreshState),
) {

View File

@ -113,13 +113,15 @@ class ManageBanScreen : Screen {
},
)
Column(
modifier = Modifier.padding(paddingValues).let {
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
}
},
modifier = Modifier
.padding(paddingValues)
.then(
if (settings.hideNavigationBarWhileScrolling) {
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
Modifier
}
),
verticalArrangement = Arrangement.spacedBy(Spacing.s),
) {
SectionSelector(
@ -146,13 +148,14 @@ class ManageBanScreen : Screen {
Box(
modifier = Modifier
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}.pullRefresh(pullRefreshState),
)
.pullRefresh(pullRefreshState),
) {
LazyColumn(
state = lazyListState,

View File

@ -145,13 +145,13 @@ class ManageSubscriptionsScreen : Screen {
Box(
modifier = Modifier
.padding(paddingValues)
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}
)
.nestedScroll(fabNestedScrollConnection)
.pullRefresh(pullRefreshState),
) {

View File

@ -124,24 +124,26 @@ class ModlogScreen(
},
) { paddingValues ->
Column(
modifier = Modifier.padding(paddingValues).let {
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
}
},
modifier = Modifier
.padding(paddingValues)
.then(
if (settings.hideNavigationBarWhileScrolling) {
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
Modifier
}
),
verticalArrangement = Arrangement.spacedBy(Spacing.s),
) {
Box(
modifier = Modifier
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}
)
.pullRefresh(pullRefreshState),
) {
LazyColumn(

View File

@ -241,13 +241,13 @@ class MultiCommunityScreen(
modifier = Modifier
.padding(padding)
.fillMaxWidth()
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}
)
.nestedScroll(fabNestedScrollConnection)
.pullRefresh(pullRefreshState),
) {

View File

@ -281,13 +281,13 @@ class PostDetailScreen(
},
)
Box(
modifier = Modifier.padding(padding).let {
modifier = Modifier.padding(padding).then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}.nestedScroll(fabNestedScrollConnection).pullRefresh(pullRefreshState),
).nestedScroll(fabNestedScrollConnection).pullRefresh(pullRefreshState),
) {
LazyColumn(
state = lazyListState
@ -660,20 +660,19 @@ class PostDetailScreen(
},
content = {
CommentCard(
modifier = Modifier.background(MaterialTheme.colorScheme.background)
.let {
modifier = Modifier
.background(MaterialTheme.colorScheme.background)
.then(
if (comment.id == commentIdToHighlight) {
it.background(
Modifier.background(
MaterialTheme.colorScheme.surfaceColorAtElevation(
5.dp
).copy(
alpha = 0.75f
)
).copy(alpha = 0.75f)
)
} else {
it
Modifier
}
},
),
comment = comment,
isOp = comment.creator?.id == uiState.post.creator?.id,
voteFormat = uiState.voteFormat,

View File

@ -121,6 +121,7 @@ class PostListScreen : Screen {
val settings by settingsRepository.currentSettings.collectAsState()
val keepScreenOn = rememberKeepScreenOn()
val detailOpener = remember { getDetailOpener() }
val connection = navigationCoordinator.getBottomBarScrollConnection()
LaunchedEffect(navigationCoordinator) {
navigationCoordinator.onDoubleTabSelection.onEach { section ->
@ -263,21 +264,19 @@ class PostListScreen : Screen {
modifier = Modifier
.padding(padding)
.fillMaxWidth()
.let {
val connection = navigationCoordinator.getBottomBarScrollConnection()
.then(
if (connection != null && settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(connection)
Modifier.nestedScroll(connection)
} else {
it
Modifier
}
}
.let {
).then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}
)
.nestedScroll(fabNestedScrollConnection)
.pullRefresh(pullRefreshState),
) {

View File

@ -156,13 +156,13 @@ class ReportListScreen(
},
) { paddingValues ->
Column(
modifier = Modifier.padding(paddingValues).let {
modifier = Modifier.padding(paddingValues).then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
},
),
verticalArrangement = Arrangement.spacedBy(Spacing.s),
) {
SectionSelector(
@ -186,13 +186,13 @@ class ReportListScreen(
Box(
modifier = Modifier
.let {
.then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}
)
.pullRefresh(pullRefreshState),
) {
LazyColumn(

View File

@ -69,17 +69,19 @@ internal fun InnerReportCard(
onOptionSelected: ((OptionId) -> Unit)? = null,
) {
Box(
modifier = modifier.let {
modifier = modifier.then(
if (postLayout == PostLayout.Card) {
it.padding(horizontal = Spacing.xs)
Modifier
.padding(horizontal = Spacing.xs)
.background(
color = MaterialTheme.colorScheme.surfaceColorAtElevation(5.dp),
shape = RoundedCornerShape(CornerSize.l),
).padding(Spacing.s)
)
.padding(Spacing.s)
} else {
it.background(MaterialTheme.colorScheme.background)
Modifier.background(MaterialTheme.colorScheme.background)
}
},
),
) {
Column(
verticalArrangement = Arrangement.spacedBy(Spacing.xs),

View File

@ -25,16 +25,19 @@ internal fun ReportCardPlaceHolder(
postLayout: PostLayout = PostLayout.Card,
) {
Column(
modifier = Modifier.let {
modifier = Modifier.then(
if (postLayout == PostLayout.Card) {
it.padding(horizontal = Spacing.xs).background(
color = MaterialTheme.colorScheme.surfaceColorAtElevation(5.dp),
shape = RoundedCornerShape(CornerSize.l),
).padding(Spacing.s)
Modifier
.padding(horizontal = Spacing.xs)
.background(
color = MaterialTheme.colorScheme.surfaceColorAtElevation(5.dp),
shape = RoundedCornerShape(CornerSize.l),
)
.padding(Spacing.s)
} else {
it
Modifier
}
},
),
verticalArrangement = Arrangement.spacedBy(Spacing.xs),
) {
Box(

View File

@ -166,13 +166,13 @@ class SavedItemsScreen : Screen {
},
) { paddingValues ->
Column(
modifier = Modifier.padding(paddingValues).let {
modifier = Modifier.padding(paddingValues).then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}.nestedScroll(fabNestedScrollConnection),
).nestedScroll(fabNestedScrollConnection),
verticalArrangement = Arrangement.spacedBy(Spacing.s),
) {
SectionSelector(

View File

@ -365,13 +365,13 @@ class UserDetailScreen(
},
)
Box(
modifier = Modifier.padding(padding).let {
modifier = Modifier.padding(padding).then(
if (settings.hideNavigationBarWhileScrolling) {
it.nestedScroll(scrollBehavior.nestedScrollConnection)
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
} else {
it
Modifier
}
}.nestedScroll(fabNestedScrollConnection).pullRefresh(pullRefreshState),
).nestedScroll(fabNestedScrollConnection).pullRefresh(pullRefreshState),
) {
LazyColumn(
state = lazyListState,
@ -385,7 +385,11 @@ class UserDetailScreen(
user = uiState.user,
autoLoadImages = uiState.autoLoadImages,
onOpenImage = rememberCallbackArgs { url ->
navigationCoordinator.pushScreen(ZoomableImageScreen(url))
navigationCoordinator.pushScreen(
ZoomableImageScreen(
url
)
)
},
)
SectionSelector(
@ -402,7 +406,11 @@ class UserDetailScreen(
1 -> UserDetailSection.Comments
else -> UserDetailSection.Posts
}
model.reduce(UserDetailMviModel.Intent.ChangeSection(section))
model.reduce(
UserDetailMviModel.Intent.ChangeSection(
section
)
)
},
)
Spacer(modifier = Modifier.height(Spacing.m))
@ -421,7 +429,9 @@ class UserDetailScreen(
}
}
}
items(uiState.posts, { it.id.toString() + it.updateDate }) { post ->
items(
uiState.posts,
{ it.id.toString() + it.updateDate }) { post ->
SwipeableCard(
modifier = Modifier.fillMaxWidth(),
enabled = uiState.swipeActionsEnabled,
@ -559,7 +569,10 @@ class UserDetailScreen(
}
},
onOpenCommunity = rememberCallbackArgs { community, instance ->
detailOpener.openCommunityDetail(community, instance)
detailOpener.openCommunityDetail(
community,
instance
)
},
onOpenCreator = rememberCallbackArgs { user, instance ->
detailOpener.openUserDetail(user, instance)
@ -623,7 +636,9 @@ class UserDetailScreen(
}
OptionId.CrossPost -> {
detailOpener.openCreatePost(crossPost = post)
detailOpener.openCreatePost(
crossPost = post
)
}
OptionId.SeeRaw -> {
@ -642,8 +657,11 @@ class UserDetailScreen(
)
)
} else {
val screen = ShareBottomSheet(urls = urls)
navigationCoordinator.showBottomSheet(screen)
val screen =
ShareBottomSheet(urls = urls)
navigationCoordinator.showBottomSheet(
screen
)
}
}
@ -662,7 +680,8 @@ class UserDetailScreen(
if (uiState.posts.isEmpty() && !uiState.loading) {
item {
Text(
modifier = Modifier.fillMaxWidth().padding(top = Spacing.xs),
modifier = Modifier.fillMaxWidth()
.padding(top = Spacing.xs),
textAlign = TextAlign.Center,
text = stringResource(MR.strings.message_empty_list),
style = MaterialTheme.typography.bodyLarge,
@ -680,7 +699,9 @@ class UserDetailScreen(
)
}
}
items(uiState.comments, { it.id.toString() + it.updateDate }) { comment ->
items(
uiState.comments,
{ it.id.toString() + it.updateDate }) { comment ->
SwipeableCard(
modifier = Modifier.fillMaxWidth(),
enabled = uiState.swipeActionsEnabled,
@ -756,7 +777,9 @@ class UserDetailScreen(
},
onDismissToEnd = rememberCallback(model) {
model.reduce(
UserDetailMviModel.Intent.DownVoteComment(comment.id),
UserDetailMviModel.Intent.DownVoteComment(
comment.id
),
)
},
content = {
@ -776,7 +799,9 @@ class UserDetailScreen(
)
},
onImageClick = rememberCallbackArgs { url ->
navigationCoordinator.pushScreen(ZoomableImageScreen(url))
navigationCoordinator.pushScreen(
ZoomableImageScreen(url)
)
},
onDoubleClick = if (!uiState.doubleTapActionEnabled) {
null
@ -834,7 +859,10 @@ class UserDetailScreen(
}
},
onOpenCommunity = rememberCallbackArgs { community, instance ->
detailOpener.openCommunityDetail(community, instance)
detailOpener.openCommunityDetail(
community,
instance
)
},
onOpenCreator = rememberCallbackArgs { user, instance ->
detailOpener.openUserDetail(user, instance)
@ -892,7 +920,8 @@ class UserDetailScreen(
if (uiState.comments.isEmpty() && !uiState.loading) {
item {
Text(
modifier = Modifier.fillMaxWidth().padding(top = Spacing.xs),
modifier = Modifier.fillMaxWidth()
.padding(top = Spacing.xs),
textAlign = TextAlign.Center,
text = stringResource(MR.strings.message_empty_list),
style = MaterialTheme.typography.bodyLarge,
@ -907,7 +936,8 @@ class UserDetailScreen(
model.reduce(UserDetailMviModel.Intent.LoadNextPage)
} else {
Row(
modifier = Modifier.fillMaxWidth().padding(top = Spacing.s),
modifier = Modifier.fillMaxWidth()
.padding(top = Spacing.s),
horizontalArrangement = Arrangement.Center,
) {
Button(