From a830be1403397ea7c796b275cdd8efdc663b043f Mon Sep 17 00:00:00 2001 From: Acclorite <140836141+Acclorite@users.noreply.github.com> Date: Wed, 14 Aug 2024 19:08:31 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20Improve=20Dictionary=20text=20se?= =?UTF-8?q?lection=20action?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Improved Dictionary action, now it supports most dictionary apps or redirects user to browser page. Previously if user had dictionary app he could not use it. Partly resolves: #46 --- app/src/main/AndroidManifest.xml | 20 ---------- .../book_story/presentation/data/Functions.kt | 6 ++- .../screens/reader/ReaderScreen.kt | 3 +- .../reader/components/ReaderTextParagraph.kt | 1 + .../screens/reader/data/ReaderEvent.kt | 1 + .../screens/reader/data/ReaderViewModel.kt | 38 ++++++++++++++----- 6 files changed, 36 insertions(+), 33 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 05ff76ad..ae9f380e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,26 +17,6 @@ android:name="ua.acclorite.book_story.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" tools:node="remove" /> - - - - - - - - - - - - - - - - - - - - Unit)? = null, error: () -> Unit ) { + val intent = if (createChooser) Intent.createChooser(this, "") else this if (openInNewWindow) { - this.flags = Intent.FLAG_ACTIVITY_NEW_TASK + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK } try { - activity.baseContext.startActivity(this) + activity.baseContext.startActivity(intent) } catch (e: Exception) { error() return diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt index 2dbff153..951a0c19 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/ReaderScreen.kt @@ -277,7 +277,8 @@ private fun ReaderScreen( onTranslateRequested = { textToTranslate -> onEvent( ReaderEvent.OnOpenTranslator( - textToTranslate, + textToTranslate = textToTranslate, + translateWholeParagraph = false, context, noAppsFound = { Toast.makeText( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt index a12be257..d05fb875 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/ReaderTextParagraph.kt @@ -85,6 +85,7 @@ fun LazyItemScope.ReaderTextParagraph( onEvent( ReaderEvent.OnOpenTranslator( textToTranslate = line, + translateWholeParagraph = true, context = context as ComponentActivity, noAppsFound = { Toast.makeText( diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt index 9134a288..1fc25861 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderEvent.kt @@ -46,6 +46,7 @@ sealed class ReaderEvent { data class OnOpenTranslator( val textToTranslate: String, + val translateWholeParagraph: Boolean, val context: ComponentActivity, val noAppsFound: () -> Unit ) : ReaderEvent() diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt index 2ab068c5..98dccf54 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/data/ReaderViewModel.kt @@ -2,6 +2,7 @@ package ua.acclorite.book_story.presentation.screens.reader.data import android.app.SearchManager import android.content.Intent +import android.net.Uri import android.util.Log import androidx.activity.ComponentActivity import androidx.compose.runtime.snapshotFlow @@ -337,7 +338,10 @@ class ReaderViewModel @Inject constructor( ) var translatorFailure = false - translatorIntent.launchActivity(event.context) { + translatorIntent.launchActivity( + event.context, + createChooser = !event.translateWholeParagraph + ) { translatorFailure = true } if (!translatorFailure) { @@ -358,20 +362,34 @@ class ReaderViewModel @Inject constructor( is ReaderEvent.OnOpenDictionary -> { launch { + val dictionaryIntent = Intent() val browserIntent = Intent() - browserIntent.action = Intent.ACTION_WEB_SEARCH - browserIntent.putExtra( - SearchManager.QUERY, - "dictionary" + - ": ${event.textToDefine.trim()}" + dictionaryIntent.type = "text/plain" + dictionaryIntent.action = Intent.ACTION_PROCESS_TEXT + dictionaryIntent.putExtra( + Intent.EXTRA_PROCESS_TEXT, + event.textToDefine.trim() ) + dictionaryIntent.putExtra(Intent.EXTRA_PROCESS_TEXT_READONLY, true) - var failure = false - browserIntent.launchActivity(event.context) { - failure = true + browserIntent.action = Intent.ACTION_VIEW + val text = event.textToDefine.trim().replace(" ", "+") + browserIntent.data = Uri.parse("https://www.onelook.com/?w=$text") + + var dictionaryFailure = false + dictionaryIntent.launchActivity(event.context, createChooser = true) { + dictionaryFailure = true } - if (!failure) { + if (!dictionaryFailure) { + return@launch + } + + var browserFailure = false + browserIntent.launchActivity(event.context) { + browserFailure = true + } + if (!browserFailure) { return@launch }