summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt')
-rw-r--r--app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt44
1 files changed, 43 insertions, 1 deletions
diff --git a/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt b/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt
index 5ebf2ba..d6111e2 100644
--- a/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt
+++ b/app/src/main/java/org/terst/feedreader/ui/ReaderScreen.kt
@@ -64,6 +64,7 @@ import org.terst.feedreader.data.ArticleEntity
import org.terst.feedreader.data.FeedEntity
import org.terst.feedreader.data.Net
import org.terst.feedreader.data.Settings
+import org.terst.feedreader.data.ensureStandaloneArticle
import org.terst.feedreader.readability.ReaderExtractor
import org.terst.feedreader.stash.StashClient
import org.terst.feedreader.stash.StashSaveResult
@@ -182,6 +183,7 @@ private fun ReaderContent(
var moreMenuExpanded by remember(articleId) { mutableStateOf(false) }
var showBugReportDialog by remember(articleId) { mutableStateOf(false) }
var bugReportDescription by remember(articleId) { mutableStateOf("") }
+ var longPressedLink by remember(articleId) { mutableStateOf<String?>(null) }
LaunchedEffect(articleId) {
val loaded = db.articleDao().getById(articleId) ?: return@LaunchedEffect
@@ -454,6 +456,46 @@ private fun ReaderContent(
}
)
}
+ longPressedLink?.let { url ->
+ LinkActionsDialog(
+ url = url,
+ onDismiss = { longPressedLink = null },
+ onOpenInBrowser = { context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url))) },
+ onShare = {
+ val send = Intent(Intent.ACTION_SEND).apply {
+ type = "text/plain"
+ putExtra(Intent.EXTRA_TEXT, url)
+ }
+ context.startActivity(Intent.createChooser(send, null))
+ },
+ onSaveToStash = {
+ scope.launch {
+ val entity = ensureStandaloneArticle(context, db, url)
+ val settings = Settings(context)
+ val client = StashClient(Net.client, settings.stashBaseUrlNow(), settings.stashApiKeyNow())
+ when (val result = client.saveArticle(url, entity.title)) {
+ is StashSaveResult.Saved -> {
+ db.articleDao().setStashArtifactId(entity.id, result.artifact.id)
+ snackbarHostState.showSnackbar("Saved to Stash")
+ }
+ is StashSaveResult.AlreadySaved -> {
+ db.articleDao().setStashArtifactId(entity.id, result.existingId)
+ snackbarHostState.showSnackbar("Already in Stash")
+ }
+ is StashSaveResult.Failed ->
+ snackbarHostState.showSnackbar("Save failed: ${result.message}")
+ }
+ }
+ },
+ onSaveForLater = {
+ scope.launch {
+ val entity = ensureStandaloneArticle(context, db, url)
+ if (!entity.isSaved) db.articleDao().setSaved(entity.id, true)
+ snackbarHostState.showSnackbar("Saved for later")
+ }
+ }
+ )
+ }
Box(modifier = Modifier.fillMaxSize().padding(padding)) {
val content = if (isReaderMode) readerContent else (feedContent ?: readerContent)
val baseUrl = article?.link
@@ -468,7 +510,7 @@ private fun ReaderContent(
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = { ctx ->
- newReaderWebView(ctx, onOpenLink).apply {
+ newReaderWebView(ctx, onOpenLink, onLongPressLink = { longPressedLink = it }).apply {
loadDataWithBaseURL(baseUrl, wrapReaderHtml(content, article?.title), "text/html", "UTF-8", null)
loadedContent.value = content
}