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 b0a33f757..2d73c0957 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 @@ -1,7 +1,9 @@ package app.omnivore.omnivore.ui.reader import android.annotation.SuppressLint -import android.view.ViewGroup +import android.content.Context +import android.util.Log +import android.view.* import android.webkit.WebView import android.webkit.WebViewClient import androidx.compose.material3.Text @@ -9,6 +11,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.ui.viewinterop.AndroidView +import app.omnivore.omnivore.R @Composable fun WebReaderLoadingContainer(slug: String, webReaderViewModel: WebReaderViewModel) { @@ -45,7 +48,7 @@ fun WebReader(params: WebReaderParams) { val styledContent = webReaderContent.styledContent() AndroidView(factory = { - WebView(it).apply { + OmnivoreWebView(it).apply { layoutParams = ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT @@ -66,3 +69,65 @@ fun WebReader(params: WebReaderParams) { it.loadDataWithBaseURL("file:///android_asset/", styledContent, "text/html; charset=utf-8", "utf-8", null); }) } + +class OmnivoreWebView(context: Context) : WebView(context) { + private val actionModeCallback = object : ActionMode.Callback { + // Called when the action mode is created; startActionMode() was called + override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { + val inflater: MenuInflater = mode.menuInflater + inflater.inflate(R.menu.text_selection_menu, menu) + return true + } + + // Called each time the action mode is shown. Always called after onCreateActionMode, but + // may be called multiple times if the mode is invalidated. + override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean { + return false // Return false if nothing is done + } + + // Called when the user selects a contextual menu item + override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { + return when (item.itemId) { + R.id.annotate -> { + Log.d("Loggo", "Annotate action selected") + mode.finish() + true + } + R.id.highlight -> { + Log.d("Loggo", "Highlight action selected") + mode.finish() + true + } + else -> { + Log.d("Loggo", "${item.itemId} selected") + false + } + } + } + + // Called when the user exits the action mode + override fun onDestroyActionMode(mode: ActionMode) { +// actionMode = null + } + } + + private var currentActionModeCallback: ActionMode.Callback? = actionModeCallback + + override fun startActionMode(callback: ActionMode.Callback?): ActionMode { + Log.d("Loggo", "startActionModeCalled") + return super.startActionMode(currentActionModeCallback) + } + + override fun startActionModeForChild( + originalView: View?, + callback: ActionMode.Callback? + ): ActionMode { + Log.d("Loggo", "startActionModeForChild") + return super.startActionModeForChild(originalView, currentActionModeCallback) + } + + override fun startActionMode(callback: ActionMode.Callback?, type: Int): ActionMode { + Log.d("Loggo", "startActionMode:callback:type") + return super.startActionMode(currentActionModeCallback, type) + } +} diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderContent.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderContent.kt index 6dbc1a6db..2597f4b42 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderContent.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderContent.kt @@ -104,7 +104,7 @@ data class WebReaderContent( """ - Log.d("Loggo", content) + Log.d("Loggos", content) return content } diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt index cc717e553..e0272e124 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/ui/reader/WebReaderViewModel.kt @@ -68,7 +68,7 @@ class WebReaderViewModel @Inject constructor( suffix = it.highlightFields.suffix, patch = it.highlightFields.patch, annotation = it.highlightFields.annotation, - createdAt = null, + createdAt = null, // TODO: update gql query to get this updatedAt = it.highlightFields.updatedAt, createdByMe = it.highlightFields.createdByMe, ) diff --git a/android/Omnivore/app/src/main/res/menu/text_selection_menu.xml b/android/Omnivore/app/src/main/res/menu/text_selection_menu.xml new file mode 100644 index 000000000..9e32b6d1b --- /dev/null +++ b/android/Omnivore/app/src/main/res/menu/text_selection_menu.xml @@ -0,0 +1,15 @@ + + + + + + + + diff --git a/android/Omnivore/app/src/main/res/values/strings.xml b/android/Omnivore/app/src/main/res/values/strings.xml index 366c15319..7bb14ba15 100644 --- a/android/Omnivore/app/src/main/res/values/strings.xml +++ b/android/Omnivore/app/src/main/res/values/strings.xml @@ -1,8 +1,8 @@ Omnivore - 590528454690-mpmbvcb4c3ifmnojmrultt37eo8f64at.apps.googleusercontent.com - Never miss a great read Learn More Save articles and read them later in our distraction-free reader. + Highlight + Annotate