diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt index ca492b72..1e4244d8 100644 --- a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/LobstersApp.kt @@ -32,10 +32,8 @@ import dev.msfjarvis.claw.android.viewmodel.ClawViewModel import dev.msfjarvis.claw.common.comments.CommentsPage import dev.msfjarvis.claw.common.comments.HTMLConverter import dev.msfjarvis.claw.common.comments.LocalHTMLConverter -import dev.msfjarvis.claw.common.posts.PostActions import dev.msfjarvis.claw.common.theme.LobstersTheme import dev.msfjarvis.claw.common.urllauncher.UrlLauncher -import dev.msfjarvis.claw.database.local.SavedPost private const val ScrollDelta = 50 @@ -51,6 +49,7 @@ fun LobstersApp( val networkListState = rememberLazyListState() val savedListState = rememberLazyListState() val navController = rememberNavController() + val postActions = rememberPostActions(urlLauncher, navController, viewModel) // The destination needs to be tracked here rather than used directly since // `NavController#currentDestination` is not a Composable state. var currentDestination by remember { mutableStateOf(null) } @@ -71,25 +70,6 @@ fun LobstersApp( } } } - val postActions = remember { - object : PostActions { - override fun viewPost(postUrl: String, commentsUrl: String) { - urlLauncher.openUri(postUrl.ifEmpty { commentsUrl }) - } - - override fun viewComments(postId: String) { - navController.navigate(Destinations.Comments.getRoute(postId)) - } - - override fun viewCommentsPage(commentsUrl: String) { - urlLauncher.openUri(commentsUrl) - } - - override fun toggleSave(post: SavedPost) { - viewModel.toggleSave(post) - } - } - } navController.addOnDestinationChangedListener { _, destination, _ -> currentDestination = destination.route ?: Destinations.Hottest.getRoute() } diff --git a/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/PostActions.ext.kt b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/PostActions.ext.kt new file mode 100644 index 00000000..43e92450 --- /dev/null +++ b/android/src/main/kotlin/dev/msfjarvis/claw/android/ui/PostActions.ext.kt @@ -0,0 +1,36 @@ +package dev.msfjarvis.claw.android.ui + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.navigation.NavController +import dev.msfjarvis.claw.android.viewmodel.ClawViewModel +import dev.msfjarvis.claw.common.posts.PostActions +import dev.msfjarvis.claw.common.urllauncher.UrlLauncher +import dev.msfjarvis.claw.database.local.SavedPost + +@Composable +fun rememberPostActions( + urlLauncher: UrlLauncher, + navController: NavController, + viewModel: ClawViewModel, +): PostActions { + return remember { + object : PostActions { + override fun viewPost(postUrl: String, commentsUrl: String) { + urlLauncher.openUri(postUrl.ifEmpty { commentsUrl }) + } + + override fun viewComments(postId: String) { + navController.navigate(Destinations.Comments.getRoute(postId)) + } + + override fun viewCommentsPage(commentsUrl: String) { + urlLauncher.openUri(commentsUrl) + } + + override fun toggleSave(post: SavedPost) { + viewModel.toggleSave(post) + } + } + } +}