summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/ui/ReaderWebView.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui/ReaderWebView.kt')
-rw-r--r--app/src/main/java/org/terst/feedreader/ui/ReaderWebView.kt43
1 files changed, 43 insertions, 0 deletions
diff --git a/app/src/main/java/org/terst/feedreader/ui/ReaderWebView.kt b/app/src/main/java/org/terst/feedreader/ui/ReaderWebView.kt
new file mode 100644
index 0000000..42a15f0
--- /dev/null
+++ b/app/src/main/java/org/terst/feedreader/ui/ReaderWebView.kt
@@ -0,0 +1,43 @@
+package org.terst.feedreader.ui
+
+import android.content.Context
+import android.view.View
+import android.webkit.WebResourceRequest
+import android.webkit.WebView
+import android.webkit.WebViewClient
+
+/**
+ * Shared factory for the read-only, dark-themed article WebView used by both the
+ * per-article ReaderScreen and LinkReaderScreen (for links tapped inside an article).
+ * JS is always off -- extracted/feed HTML never needs it, and this keeps articles
+ * from running arbitrary scripts. Link taps are intercepted rather than left to
+ * WebView's default behavior (handing off to the system browser) so following a
+ * link stays inside the app's own reader/extraction pipeline.
+ */
+fun newReaderWebView(context: Context, onOpenLink: (String) -> Unit): WebView =
+ WebView(context).apply {
+ settings.javaScriptEnabled = false
+ overScrollMode = View.OVER_SCROLL_NEVER
+ isVerticalScrollBarEnabled = false
+ isHorizontalScrollBarEnabled = false
+ webViewClient = object : WebViewClient() {
+ override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
+ onOpenLink(request.url.toString())
+ return true
+ }
+ }
+ }
+
+// Hardcoded dark palette, not @media (prefers-color-scheme) -- the app itself always
+// forces dark colorScheme() regardless of system setting (see MainActivity), so reader
+// content should match rather than following a system light/dark the app itself ignores.
+fun wrapReaderHtml(bodyContent: String): String = """
+ <html><head><meta name="viewport" content="width=device-width, initial-scale=1">
+ <style>
+ body { font-family: sans-serif; font-size: 18px; line-height: 1.5; padding: 16px;
+ background-color: #121212; color: #e1e1e1; }
+ a { color: #8ab4f8; }
+ img { max-width: 100%; height: auto; }
+ </style></head>
+ <body>$bodyContent</body></html>
+""".trimIndent()