From f6c9a0281fa0baaed3f4cb2a4538c0234a6cbd64 Mon Sep 17 00:00:00 2001 From: Sven Jacobs Date: Sun, 5 Jun 2022 16:50:27 +0200 Subject: [PATCH] Add "copy to clipboard" functionality --- app/build.gradle.kts | 4 ++-- .../app/leon/ui/screens/home/HomeScreen.kt | 18 ++++++++++++++++- .../app/leon/ui/screens/main/MainScreen.kt | 19 ++++++++++++++---- .../main/play/release-notes/de-DE/default.txt | 3 ++- .../main/play/release-notes/en-US/default.txt | 3 ++- app/src/main/res/values-de/strings.xml | 20 +++++++++++++++++++ app/src/main/res/values/strings.xml | 20 +++++++++++++++++++ 7 files changed, 78 insertions(+), 9 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 61731ac6..ad89a532 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -38,8 +38,8 @@ android { applicationId = "com.svenjacobs.app.leon" minSdk = 21 targetSdk = 32 - versionCode = 231 - versionName = "0.8.0" + versionCode = 232 + versionName = "0.9.0" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/home/HomeScreen.kt b/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/home/HomeScreen.kt index fb354654..ca9ce8c1 100644 --- a/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/home/HomeScreen.kt +++ b/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/home/HomeScreen.kt @@ -39,6 +39,7 @@ import com.svenjacobs.app.leon.ui.theme.AppTheme fun HomeScreen( result: CleaningResult, onShareButtonClick: (CleaningResult.Success) -> Unit, + onCopyToClipboardClick: (CleaningResult.Success) -> Unit, onVerifyButtonClick: (CleaningResult.Success) -> Unit, ) { Column( @@ -67,6 +68,7 @@ fun HomeScreen( result = res, onShareButtonClick = onShareButtonClick, onVerifyButtonClick = onVerifyButtonClick, + onCopyToClipboardClick = onCopyToClipboardClick, ) is CleaningResult.Failure -> FailureBody() } @@ -92,6 +94,7 @@ private fun Statistics(result: CleaningResult.Success) { private fun SuccessBody( result: CleaningResult.Success, onShareButtonClick: (CleaningResult.Success) -> Unit, + onCopyToClipboardClick: (CleaningResult.Success) -> Unit, onVerifyButtonClick: (CleaningResult.Success) -> Unit, ) { Column { @@ -121,11 +124,23 @@ private fun SuccessBody( text = stringResource(R.string.share), ) } + + TextButton( + modifier = Modifier + .weight(1f) + .padding(8.dp), + onClick = { onCopyToClipboardClick(result) }, + ) { + Text( + text = stringResource(R.string.copy), + ) + } + TextButton( modifier = Modifier .weight(1f) .padding(8.dp), - onClick = { onVerifyButtonClick(result) } + onClick = { onVerifyButtonClick(result) }, ) { Text( text = stringResource(R.string.verify), @@ -184,6 +199,7 @@ private fun SuccessBodyPreview() { ), onShareButtonClick = {}, onVerifyButtonClick = {}, + onCopyToClipboardClick = {}, ) } } diff --git a/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/main/MainScreen.kt b/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/main/MainScreen.kt index 1712faf7..04448023 100644 --- a/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/main/MainScreen.kt +++ b/app/src/main/kotlin/com/svenjacobs/app/leon/ui/screens/main/MainScreen.kt @@ -25,14 +25,14 @@ import androidx.compose.foundation.layout.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.* -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue +import androidx.compose.runtime.* import androidx.compose.ui.Modifier import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalClipboardManager import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.style.TextOverflow import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.NavController @@ -52,6 +52,7 @@ import com.svenjacobs.app.leon.ui.screens.main.model.Screen import com.svenjacobs.app.leon.ui.screens.settings.SettingsParametersScreen import com.svenjacobs.app.leon.ui.screens.settings.SettingsScreen import com.svenjacobs.app.leon.ui.theme.AppTheme +import kotlinx.coroutines.launch @Composable @OptIn(ExperimentalMaterial3Api::class) @@ -71,13 +72,17 @@ fun MainScreen( intent.launchUrl(context, Uri.parse(result.urls.first())) } - val navController = rememberNavController() val isBackVisible by viewModel.isBackVisible.collectAsState() + val navController = rememberNavController() + val snackbarHostState = remember { SnackbarHostState() } + val coroutineScope = rememberCoroutineScope() + val clipboard = LocalClipboardManager.current AppTheme { Scaffold( topBar = { MyTopAppBar(isBackVisible, navController) }, bottomBar = { MyBottomBar(navController) }, + snackbarHost = { SnackbarHost(hostState = snackbarHostState) }, content = { padding -> Box( modifier = Modifier.padding( @@ -98,6 +103,12 @@ fun MainScreen( HomeScreen( result = result, onShareButtonClick = ::onShareButtonClick, + onCopyToClipboardClick = { result -> + clipboard.setText(AnnotatedString(result.cleanedText)) + coroutineScope.launch { + snackbarHostState.showSnackbar(context.getString(R.string.clipboard_message)) + } + }, onVerifyButtonClick = ::onVerifyButtonClick, ) } diff --git a/app/src/main/play/release-notes/de-DE/default.txt b/app/src/main/play/release-notes/de-DE/default.txt index d9f3083d..d2dc3c10 100644 --- a/app/src/main/play/release-notes/de-DE/default.txt +++ b/app/src/main/play/release-notes/de-DE/default.txt @@ -1 +1,2 @@ -Reiniger für Flipkart hinzugefügt +- "In Zwischenablage kopieren" Funktion hinzugefügt +- Material You Design diff --git a/app/src/main/play/release-notes/en-US/default.txt b/app/src/main/play/release-notes/en-US/default.txt index 11c87098..acd938fc 100644 --- a/app/src/main/play/release-notes/en-US/default.txt +++ b/app/src/main/play/release-notes/en-US/default.txt @@ -1 +1,2 @@ -Add sanitizer for Flipkart +- Add "copy to clipboard" functionality +- Material You design diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 97b6835c..2df33a75 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -1,9 +1,29 @@ + + Start Einstellungen Léon – Der URL Cleaner (Beta) Teilen Überprüfen + Kopieren + Link in Zwischenablage kopiert Anleitung Wähle die App \"URL Cleaner\" beim Teilen von Text aus. Klicke anschließend in dieser App auf \"Teilen\", um den Text an die Ziel-App zu schicken. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a82b2285..e1dcbc2a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,21 @@ + + URL Cleaner Home @@ -5,6 +23,8 @@ Léon – The URL Cleaner (Beta) Share Verify + Copy + Link copied to clipboard How-to When sharing text, choose \"URL Cleaner\". Then click on \"Share\" in this app to send text to target app.