From d87d25e381afcf3dd9212aed5d4363725f576cf8 Mon Sep 17 00:00:00 2001 From: Satindar Dhillon Date: Tue, 27 Sep 2022 10:11:48 -0700 Subject: [PATCH] send js to webview when annotation is created --- .../omnivore/omnivore/ui/reader/WebReader.kt | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt index 1c4532d97..58315be84 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReader.kt @@ -13,6 +13,8 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.ui.viewinterop.AndroidView import app.omnivore.omnivore.R import org.json.JSONObject @@ -37,6 +39,8 @@ fun WebReaderLoadingContainer(slug: String, webReaderViewModel: WebReaderViewMod @SuppressLint("SetJavaScriptEnabled") @Composable fun WebReader(params: WebReaderParams, webReaderViewModel: WebReaderViewModel) { + val javascriptToExecute = remember { mutableStateOf(null) } + val annotation: String? by webReaderViewModel.annotationLiveData.observeAsState(null) WebView.setWebContentsDebuggingEnabled(true) @@ -81,25 +85,23 @@ fun WebReader(params: WebReaderParams, webReaderViewModel: WebReaderViewModel) { "text/html; charset=utf-8", "utf-8", null - ); - + ) } }, update = { - it.loadDataWithBaseURL( - "file:///android_asset/", - styledContent, - "text/html; charset=utf-8", - "utf-8", - null - ); + if (javascriptToExecute.value != null) { + it.evaluateJavascript(javascriptToExecute.value!!, null) + } }) if (annotation != null) { AnnotationEditView( initialAnnotation = annotation!!, - onSave = { Log.d("Loggo", "Saving annotation: $it") }, + onSave = { + val script = "var event = new Event('saveAnnotation');event.annotation = '$it';document.dispatchEvent(event);" + javascriptToExecute.value = script + webReaderViewModel.cancelAnnotationEdit() + }, onCancel = { - Log.d("Loggo", "Cancelling annotation") webReaderViewModel.cancelAnnotationEdit() } )