mirror of
https://github.com/msfjarvis/compose-lobsters
synced 2025-08-14 22:17:03 +05:30
feat(android): add share action
This commit is contained in:
parent
b56de40b12
commit
b12b5c800f
7 changed files with 34 additions and 4 deletions
|
@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Swiping a post from left to right now offers a share action
|
||||||
|
|
||||||
## [1.47.0] - 2024-05-14
|
## [1.47.0] - 2024-05-14
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
@ -8,6 +8,7 @@ package dev.msfjarvis.claw.android.ui
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.ContextWrapper
|
import android.content.ContextWrapper
|
||||||
|
import android.content.Intent
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
@ -29,6 +30,7 @@ fun Context.getActivity(): ComponentActivity? {
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun rememberPostActions(
|
fun rememberPostActions(
|
||||||
|
context: Context,
|
||||||
urlLauncher: UrlLauncher,
|
urlLauncher: UrlLauncher,
|
||||||
navController: NavController,
|
navController: NavController,
|
||||||
viewModel: ClawViewModel,
|
viewModel: ClawViewModel,
|
||||||
|
@ -56,6 +58,18 @@ fun rememberPostActions(
|
||||||
viewModel.toggleSave(post)
|
viewModel.toggleSave(post)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun share(post: UIPost) {
|
||||||
|
val sendIntent: Intent =
|
||||||
|
Intent().apply {
|
||||||
|
action = Intent.ACTION_SEND
|
||||||
|
putExtra(Intent.EXTRA_TEXT, post.url.ifEmpty { post.commentsUrl })
|
||||||
|
putExtra(Intent.EXTRA_TITLE, post.title)
|
||||||
|
type = "text/plain"
|
||||||
|
}
|
||||||
|
val shareIntent = Intent.createChooser(sendIntent, null)
|
||||||
|
context.startActivity(shareIntent)
|
||||||
|
}
|
||||||
|
|
||||||
override suspend fun getComments(postId: String): UIPost {
|
override suspend fun getComments(postId: String): UIPost {
|
||||||
return viewModel.getPostComments(postId)
|
return viewModel.getPostComments(postId)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ package dev.msfjarvis.claw.android.ui.lists
|
||||||
|
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.automirrored.filled.Reply
|
import androidx.compose.material.icons.automirrored.filled.Reply
|
||||||
|
import androidx.compose.material.icons.filled.Share
|
||||||
import androidx.compose.material3.MaterialTheme
|
import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
@ -31,7 +32,13 @@ fun LobstersListItem(
|
||||||
background = MaterialTheme.colorScheme.tertiary,
|
background = MaterialTheme.colorScheme.tertiary,
|
||||||
onSwipe = { postActions.viewCommentsPage(item) },
|
onSwipe = { postActions.viewCommentsPage(item) },
|
||||||
)
|
)
|
||||||
SwipeableActionsBox(endActions = listOf(commentsAction)) {
|
val shareAction =
|
||||||
|
SwipeAction(
|
||||||
|
icon = rememberVectorPainter(Icons.Filled.Share),
|
||||||
|
background = MaterialTheme.colorScheme.tertiary,
|
||||||
|
onSwipe = { postActions.share(item) },
|
||||||
|
)
|
||||||
|
SwipeableActionsBox(startActions = listOf(shareAction), endActions = listOf(commentsAction)) {
|
||||||
LobstersCard(post = item, postActions = postActions, refresh = refresh, modifier = modifier)
|
LobstersCard(post = item, postActions = postActions, refresh = refresh, modifier = modifier)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,16 +91,16 @@ fun LobstersPostsScreen(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
viewModel: ClawViewModel = injectedViewModel(),
|
viewModel: ClawViewModel = injectedViewModel(),
|
||||||
) {
|
) {
|
||||||
|
val context = LocalContext.current
|
||||||
val hottestListState = rememberLazyListState()
|
val hottestListState = rememberLazyListState()
|
||||||
val newestListState = rememberLazyListState()
|
val newestListState = rememberLazyListState()
|
||||||
val savedListState = rememberLazyListState()
|
val savedListState = rememberLazyListState()
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
val snackbarHostState = remember { SnackbarHostState() }
|
val snackbarHostState = remember { SnackbarHostState() }
|
||||||
val postActions = rememberPostActions(urlLauncher, navController, viewModel)
|
val postActions = rememberPostActions(context, urlLauncher, navController, viewModel)
|
||||||
val backStackEntry by navController.currentBackStackEntryAsState()
|
val backStackEntry by navController.currentBackStackEntryAsState()
|
||||||
val currentDestination = backStackEntry?.destination?.route
|
val currentDestination = backStackEntry?.destination?.route
|
||||||
val context = LocalContext.current
|
|
||||||
|
|
||||||
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
|
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
|
||||||
val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
|
val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
|
||||||
|
|
|
@ -11,6 +11,7 @@ import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.navigation.NavType
|
import androidx.navigation.NavType
|
||||||
import androidx.navigation.compose.NavHost
|
import androidx.navigation.compose.NavHost
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
|
@ -35,7 +36,7 @@ fun SearchScreen(
|
||||||
viewModel: ClawViewModel = injectedViewModel(),
|
viewModel: ClawViewModel = injectedViewModel(),
|
||||||
) {
|
) {
|
||||||
val navController = rememberNavController()
|
val navController = rememberNavController()
|
||||||
val postActions = rememberPostActions(urlLauncher, navController, viewModel)
|
val postActions = rememberPostActions(LocalContext.current, urlLauncher, navController, viewModel)
|
||||||
val listState = rememberLazyListState()
|
val listState = rememberLazyListState()
|
||||||
Scaffold(modifier = modifier) { paddingValues ->
|
Scaffold(modifier = modifier) { paddingValues ->
|
||||||
NavHost(
|
NavHost(
|
||||||
|
|
|
@ -265,6 +265,8 @@ val TEST_POST_ACTIONS =
|
||||||
|
|
||||||
override fun toggleSave(post: UIPost) {}
|
override fun toggleSave(post: UIPost) {}
|
||||||
|
|
||||||
|
override fun share(post: UIPost) {}
|
||||||
|
|
||||||
override suspend fun getComments(postId: String): UIPost {
|
override suspend fun getComments(postId: String): UIPost {
|
||||||
return UIPost(
|
return UIPost(
|
||||||
shortId = "ooga",
|
shortId = "ooga",
|
||||||
|
|
|
@ -20,6 +20,8 @@ interface PostActions {
|
||||||
|
|
||||||
fun toggleSave(post: UIPost)
|
fun toggleSave(post: UIPost)
|
||||||
|
|
||||||
|
fun share(post: UIPost)
|
||||||
|
|
||||||
suspend fun getComments(postId: String): UIPost
|
suspend fun getComments(postId: String): UIPost
|
||||||
|
|
||||||
suspend fun getLinkMetadata(url: String): LinkMetadata
|
suspend fun getLinkMetadata(url: String): LinkMetadata
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue