feat(android): switch comments page to a swipe action

This commit is contained in:
Harsh Shandilya 2023-08-02 01:28:48 +05:30
parent 45b6f3c4d5
commit bae671ad23
No known key found for this signature in database
4 changed files with 26 additions and 12 deletions

View file

@ -77,6 +77,7 @@ dependencies {
implementation(libs.napier) implementation(libs.napier)
implementation(libs.soloader) implementation(libs.soloader)
implementation(libs.sqldelight.extensions.coroutines) implementation(libs.sqldelight.extensions.coroutines)
implementation(libs.swipe)
implementation(libs.unfurl) implementation(libs.unfurl)
implementation(projects.api) implementation(projects.api)
implementation(projects.common) implementation(projects.common)

View file

@ -1,18 +1,24 @@
/* /*
* Copyright © 2021-2022 Harsh Shandilya. * Copyright © 2021-2023 Harsh Shandilya.
* Use of this source code is governed by an MIT-style * Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at * license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT. * https://opensource.org/licenses/MIT.
*/ */
package dev.msfjarvis.claw.android.ui.lists package dev.msfjarvis.claw.android.ui.lists
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Reply
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.produceState import androidx.compose.runtime.produceState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import dev.msfjarvis.claw.common.posts.LobstersCard import dev.msfjarvis.claw.common.posts.LobstersCard
import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.database.local.SavedPost import dev.msfjarvis.claw.database.local.SavedPost
import me.saket.swipe.SwipeAction
import me.saket.swipe.SwipeableActionsBox
@Composable @Composable
fun ListItem( fun ListItem(
@ -22,10 +28,20 @@ fun ListItem(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val saved by produceState(false, item) { value = isSaved(item) } val saved by produceState(false, item) { value = isSaved(item) }
val commentsAction =
SwipeAction(
icon = rememberVectorPainter(Icons.Filled.Reply),
background = MaterialTheme.colorScheme.tertiary,
onSwipe = { postActions.viewCommentsPage(item.commentsUrl) },
)
SwipeableActionsBox(
endActions = listOf(commentsAction),
) {
LobstersCard( LobstersCard(
post = item, post = item,
isSaved = saved, isSaved = saved,
postActions = postActions, postActions = postActions,
modifier = modifier, modifier = modifier,
) )
}
} }

View file

@ -7,10 +7,8 @@
package dev.msfjarvis.claw.common.posts package dev.msfjarvis.claw.common.posts
import androidx.compose.animation.Crossfade import androidx.compose.animation.Crossfade
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -62,7 +60,6 @@ import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
@Composable @Composable
@OptIn(ExperimentalFoundationApi::class)
fun LobstersCard( fun LobstersCard(
post: SavedPost, post: SavedPost,
isSaved: Boolean, isSaved: Boolean,
@ -102,10 +99,9 @@ fun LobstersCard(
CommentsButton( CommentsButton(
commentCount = post.commentCount, commentCount = post.commentCount,
modifier = modifier =
Modifier.combinedClickable( Modifier.clickable(
role = Role.Button, role = Role.Button,
onClick = { postActions.viewComments(post.shortId) }, onClick = { postActions.viewComments(post.shortId) },
onLongClick = { postActions.viewCommentsPage(post.commentsUrl) },
), ),
) )
} }

View file

@ -91,6 +91,7 @@ sqldelight-extensions-coroutines = { module = "app.cash.sqldelight:coroutines-ex
sqldelight-jvmDriver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" } sqldelight-jvmDriver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" }
sqldelight-primitiveAdapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqldelight" } sqldelight-primitiveAdapters = { module = "app.cash.sqldelight:primitive-adapters", version.ref = "sqldelight" }
sqlite-android = "com.github.requery:sqlite-android:3.42.0" sqlite-android = "com.github.requery:sqlite-android:3.42.0"
swipe = "me.saket.swipe:swipe:1.2.0"
testparameterinjector = "com.google.testparameterinjector:test-parameter-injector:1.12" testparameterinjector = "com.google.testparameterinjector:test-parameter-injector:1.12"
truth = "com.google.truth:truth:1.1.5" truth = "com.google.truth:truth:1.1.5"
unfurl = "me.saket.unfurl:unfurl:1.7.0" unfurl = "me.saket.unfurl:unfurl:1.7.0"