diff --git a/core-appearance/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/appearance/theme/Spacing.kt b/core-appearance/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/appearance/theme/Spacing.kt index cd8bc2509..dced83832 100644 --- a/core-appearance/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/appearance/theme/Spacing.kt +++ b/core-appearance/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/appearance/theme/Spacing.kt @@ -26,6 +26,7 @@ object IconSize { val s = 20.dp val m = 26.dp val l = 30.dp + val xl = 46.dp val xxl = 60.dp } diff --git a/core-commonui/components/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/FloatingActionButtonMenu.kt b/core-commonui/components/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/FloatingActionButtonMenu.kt index 2aeb77d25..c4c513876 100644 --- a/core-commonui/components/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/FloatingActionButtonMenu.kt +++ b/core-commonui/components/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/FloatingActionButtonMenu.kt @@ -97,7 +97,7 @@ fun FloatingActionButtonMenu( ) { Row( modifier = Modifier.onClick( - rememberCallback { + onClick = rememberCallback { fabExpanded = false item.onSelected?.invoke() }, diff --git a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/chat/InboxChatScreen.kt b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/chat/InboxChatScreen.kt index 2c2693a47..6b3bc2c63 100644 --- a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/chat/InboxChatScreen.kt +++ b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/chat/InboxChatScreen.kt @@ -111,8 +111,8 @@ class InboxChatScreen( navigationIcon = { Image( modifier = Modifier.onClick( - rememberCallback { - navigationCoordinator.getRootNavigator()?.pop() + onClick = rememberCallback { + navigationCoordinator.popScreen() }, ), imageVector = Icons.Default.ArrowBack, diff --git a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailMviModel.kt b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailMviModel.kt index 1dc03427a..e291c251c 100644 --- a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailMviModel.kt +++ b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailMviModel.kt @@ -46,6 +46,7 @@ interface CommunityDetailMviModel : val blurNsfw: Boolean = true, val currentUserId: Int? = null, val swipeActionsEnabled: Boolean = true, + val doubleTapActionEnabled: Boolean = false, val postLayout: PostLayout = PostLayout.Card, val fullHeightImages: Boolean = true, val separateUpAndDownVotes: Boolean = false, diff --git a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailScreen.kt b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailScreen.kt index 411df1f2d..3ab359cd4 100644 --- a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailScreen.kt +++ b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailScreen.kt @@ -237,7 +237,7 @@ class CommunityDetailScreen( if (!isOnOtherInstance && uiState.isLogged) { Image( modifier = Modifier.onClick( - rememberCallback { + onClick = rememberCallback { when (uiState.community.subscribed) { true -> model.reduce(CommunityDetailMviModel.Intent.Unsubscribe) false -> model.reduce(CommunityDetailMviModel.Intent.Subscribe) @@ -259,11 +259,11 @@ class CommunityDetailScreen( // sort button Image( modifier = Modifier.onClick( - rememberCallback { + onClick = rememberCallback { val sheet = SortBottomSheet( expandTop = true, ) - navigationCoordinator.getBottomNavigator()?.show(sheet) + navigationCoordinator.showBottomSheet(sheet) }, ), imageVector = uiState.sortType.toIcon(), @@ -297,7 +297,7 @@ class CommunityDetailScreen( modifier = Modifier.onGloballyPositioned { optionsOffset = it.positionInParent() }.padding(start = Spacing.s).onClick( - rememberCallback { + onClick = rememberCallback { optionsExpanded = true }, ), @@ -321,7 +321,7 @@ class CommunityDetailScreen( horizontal = Spacing.m, vertical = Spacing.s, ).onClick( - rememberCallback { + onClick = rememberCallback { optionsExpanded = false when (option.id) { OptionId.BlockInstance -> model.reduce( @@ -333,19 +333,17 @@ class CommunityDetailScreen( ) OptionId.InfoInstance -> { - navigationCoordinator.getRootNavigator() - ?.push( - InstanceInfoScreen( - url = uiState.community.instanceUrl, - ), - ) + navigationCoordinator.pushScreen( + InstanceInfoScreen( + url = uiState.community.instanceUrl, + ), + ) } OptionId.Info -> { - navigationCoordinator.getBottomNavigator() - ?.show( - CommunityInfoScreen(uiState.community), - ) + navigationCoordinator.showBottomSheet( + CommunityInfoScreen(uiState.community), + ) } else -> Unit @@ -359,12 +357,11 @@ class CommunityDetailScreen( } }, navigationIcon = { - val navigator = navigationCoordinator.getRootNavigator() - if (navigator?.canPop == true) { + if (navigationCoordinator.canPop) { Image( modifier = Modifier.onClick( - rememberCallback { - navigator.pop() + onClick = rememberCallback { + navigationCoordinator.popScreen() }, ), imageVector = Icons.Default.ArrowBack, @@ -437,7 +434,7 @@ class CommunityDetailScreen( val screen = CreatePostScreen( communityId = uiState.community.id, ) - navigationCoordinator.getBottomNavigator()?.show(screen) + navigationCoordinator.showBottomSheet(screen) }, ) } @@ -476,8 +473,7 @@ class CommunityDetailScreen( community = uiState.community, autoLoadImages = uiState.autoLoadImages, onOpenImage = rememberCallbackArgs { url -> - navigationCoordinator.getRootNavigator() - ?.push(ZoomableImageScreen(url)) + navigationCoordinator.pushScreen(ZoomableImageScreen(url)) }, ) Spacer(modifier = Modifier.height(Spacing.m)) @@ -559,15 +555,27 @@ class CommunityDetailScreen( post.id ) ) - navigationCoordinator.getRootNavigator()?.push( + navigationCoordinator.pushScreen( PostDetailScreen( post = post, otherInstance = otherInstanceName, ), ) }, + onDoubleClick = if (!uiState.doubleTapActionEnabled || !uiState.isLogged || isOnOtherInstance) { + null + } else { + rememberCallback(model) { + model.reduce( + CommunityDetailMviModel.Intent.UpVotePost( + id = post.id, + feedback = true, + ), + ) + } + }, onOpenCreator = rememberCallbackArgs { user -> - navigationCoordinator.getRootNavigator()?.push( + navigationCoordinator.pushScreen( UserDetailScreen( user = user, otherInstance = otherInstanceName, @@ -609,8 +617,7 @@ class CommunityDetailScreen( val screen = CreateCommentScreen( originalPost = post, ) - navigationCoordinator.getBottomNavigator() - ?.show(screen) + navigationCoordinator.showBottomSheet(screen) } }, onImageClick = rememberCallbackArgs(model) { url -> @@ -619,7 +626,7 @@ class CommunityDetailScreen( post.id ) ) - navigationCoordinator.getRootNavigator()?.push( + navigationCoordinator.pushScreen( ZoomableImageScreen(url), ) }, @@ -680,24 +687,21 @@ class CommunityDetailScreen( ) OptionId.Edit -> { - navigationCoordinator.getBottomNavigator() - ?.show( - CreatePostScreen(editedPost = post) - ) + navigationCoordinator.showBottomSheet( + CreatePostScreen(editedPost = post) + ) } OptionId.Report -> { - navigationCoordinator.getBottomNavigator() - ?.show( - CreateReportScreen(postId = post.id) - ) + navigationCoordinator.showBottomSheet( + CreateReportScreen(postId = post.id) + ) } OptionId.CrossPost -> { - navigationCoordinator.getBottomNavigator() - ?.show( - CreatePostScreen(crossPost = post) - ) + navigationCoordinator.showBottomSheet( + CreatePostScreen(crossPost = post) + ) } OptionId.SeeRaw -> { diff --git a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailViewModel.kt b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailViewModel.kt index efa407148..5fc2efe1b 100644 --- a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailViewModel.kt +++ b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/communitydetail/CommunityDetailViewModel.kt @@ -66,6 +66,7 @@ class CommunityDetailViewModel( it.copy( blurNsfw = settings.blurNsfw, swipeActionsEnabled = settings.enableSwipeActions, + doubleTapActionEnabled = settings.enableDoubleTapAction, sortType = settings.defaultPostSortType.toSortType(), fullHeightImages = settings.fullHeightImages, separateUpAndDownVotes = settings.separateUpAndDownVotes, diff --git a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/CommentCard.kt b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/CommentCard.kt index 325a1fe1e..cb894e07e 100644 --- a/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/CommentCard.kt +++ b/core-commonui/src/commonMain/kotlin/com/github/diegoberaldin/raccoonforlemmy/core/commonui/components/CommentCard.kt @@ -21,7 +21,6 @@ import com.github.diegoberaldin.raccoonforlemmy.core.appearance.di.getThemeRepos import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.IconSize import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick -import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommentModel import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.CommunityModel @@ -42,6 +41,7 @@ fun CommentCard( autoLoadImages: Boolean = true, options: List