From 3aefb379355c054f9259215c3f8a2eca7ad7bf4a Mon Sep 17 00:00:00 2001 From: acclorite Date: Wed, 17 Jul 2024 04:47:55 +0300 Subject: [PATCH] =?UTF-8?q?Added=20=C2=ABDouble=20click=20translation?= =?UTF-8?q?=C2=BB=20with=20external=20translator.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../screens/reader/ReaderScreen.kt | 4 ++ .../reader/components/ReaderTextParagraph.kt | 51 ++++++++++++++++++- .../ReaderSettingsBottomSheet.kt | 28 ++++++++++ .../settings/nested/reader/ReaderSettings.kt | 28 ++++++++++ app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 112 insertions(+), 3 deletions(-) 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 119d3084..e7af3f1b 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 @@ -330,6 +330,7 @@ private fun ReaderScreen( ) { line -> ReaderTextParagraph( line = line.second, + context = context, fontFamily = fontFamily, fontColor = fontColor, lineHeight = lineHeight, @@ -337,6 +338,9 @@ private fun ReaderScreen( fontSize = mainState.value.fontSize!!.sp, sidePadding = sidePadding, paragraphIndentation = mainState.value.paragraphIndentation!!, + doubleClickTranslationEnabled = mainState.value.doubleClickTranslation!!, + toolbarHidden = toolbarHidden, + onEvent = onEvent ) } 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 b953fa18..e4284eb9 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 @@ -1,5 +1,10 @@ package ua.acclorite.book_story.presentation.screens.reader.components +import android.content.Context +import android.widget.Toast +import androidx.activity.ComponentActivity +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -15,13 +20,16 @@ import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.style.LineBreak import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.TextUnit +import ua.acclorite.book_story.R import ua.acclorite.book_story.domain.model.FontWithName import ua.acclorite.book_story.domain.model.ReaderLine +import ua.acclorite.book_story.presentation.screens.reader.data.ReaderEvent /** * Reader Text Paragraph item. * * @param line Current line. + * @param context Context. * @param fontFamily Line's font family. * @param fontColor Line's font color. * @param lineHeight Line's line height. @@ -29,17 +37,25 @@ import ua.acclorite.book_story.domain.model.ReaderLine * @param fontSize Line's font size. * @param sidePadding Line's side padding. * @param paragraphIndentation Whether Paragraph Indentation is enabled for this line. + * @param doubleClickTranslationEnabled Whether Double Click Translation is enabled. + * @param toolbarHidden Whether selection toolBar is hidden. + * @param onEvent [ReaderEvent] callback. */ +@OptIn(ExperimentalFoundationApi::class) @Composable fun LazyItemScope.ReaderTextParagraph( line: ReaderLine, + context: Context, fontFamily: FontWithName, fontColor: Color, lineHeight: TextUnit, fontStyle: FontStyle, fontSize: TextUnit, sidePadding: Dp, - paragraphIndentation: Boolean + paragraphIndentation: Boolean, + doubleClickTranslationEnabled: Boolean, + toolbarHidden: Boolean, + onEvent: (ReaderEvent) -> Unit ) { Column( modifier = Modifier @@ -58,6 +74,39 @@ fun LazyItemScope.ReaderTextParagraph( append(line.line) }, + modifier = Modifier.then( + if ( + doubleClickTranslationEnabled && + toolbarHidden + ) { + Modifier.combinedClickable( + interactionSource = null, + indication = null, + onDoubleClick = { + onEvent( + ReaderEvent.OnOpenTranslator( + textToTranslate = line.line, + context = context as ComponentActivity, + noAppsFound = { + Toast.makeText( + context, + context.getString(R.string.error_no_translator), + Toast.LENGTH_SHORT + ).show() + } + ) + ) + }, + onClick = { + onEvent( + ReaderEvent.OnShowHideMenu(context = context as ComponentActivity) + ) + } + ) + } else { + Modifier + } + ), style = TextStyle( fontFamily = fontFamily.font, fontStyle = fontStyle, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/settings_bottom_sheet/ReaderSettingsBottomSheet.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/settings_bottom_sheet/ReaderSettingsBottomSheet.kt index 211953d8..3ae59952 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/settings_bottom_sheet/ReaderSettingsBottomSheet.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/reader/components/settings_bottom_sheet/ReaderSettingsBottomSheet.kt @@ -249,6 +249,34 @@ fun ReaderSettingsBottomSheet( ) } } + + item { + Spacer(modifier = Modifier.height(22.dp)) + } + item { + CategoryTitle( + title = stringResource(id = R.string.translator_reader_settings), + color = MaterialTheme.colorScheme.onSurface + ) + } + item { + Spacer(modifier = Modifier.height(8.dp)) + } + + item { + SwitchWithTitle( + selected = mainState.value.doubleClickTranslation!!, + title = stringResource(id = R.string.translator_double_click_to_translate_option), + description = stringResource(id = R.string.translator_double_click_to_translate_option_desc), + onClick = { + onMainEvent( + MainEvent.OnChangeDoubleClickTranslation( + !mainState.value.doubleClickTranslation!! + ) + ) + } + ) + } } if (page == 1) { diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/ReaderSettings.kt b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/ReaderSettings.kt index 9faadb65..c0771c9c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/ReaderSettings.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/screens/settings/nested/reader/ReaderSettings.kt @@ -238,6 +238,34 @@ private fun ReaderSettings( } } + item { + Spacer(modifier = Modifier.height(22.dp)) + } + item { + CategoryTitle( + title = stringResource(id = R.string.translator_reader_settings), + color = MaterialTheme.colorScheme.primary + ) + } + item { + Spacer(modifier = Modifier.height(8.dp)) + } + + item { + SwitchWithTitle( + selected = state.value.doubleClickTranslation!!, + title = stringResource(id = R.string.translator_double_click_to_translate_option), + description = stringResource(id = R.string.translator_double_click_to_translate_option_desc), + onClick = { + onMainEvent( + MainEvent.OnChangeDoubleClickTranslation( + !state.value.doubleClickTranslation!! + ) + ) + } + ) + } + item { Spacer(modifier = Modifier.height(48.dp)) } } } diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 70fee74e..89bd8781 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -184,7 +184,7 @@ Зовнішній вигляд Тема, кольори Читач - Перекладач, шрифт, текст + Шрифт, текст, перекладач Шрифт diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f2a609da..2008a05e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -202,7 +202,7 @@ Appearance Theme, colors Reader - Translator, font, text + Font, text, translator Font