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
}