From b571348a6693b8b4d755682d2019d3c9a390d6c6 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 6 Jun 2024 11:22:36 +0930 Subject: [PATCH] Refactor temporary buttons --- .../start/InviteFriendFragment.kt | 21 +++++++-------- .../RecoveryPasswordActivity.kt | 18 ++++++------- .../securesms/preferences/SettingsActivity.kt | 19 +++++++------ .../securesms/ui/components/Button.kt | 27 +++++++++++++++++++ 4 files changed, 54 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/start/InviteFriendFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/start/InviteFriendFragment.kt index 01508debfa..eb063f4ae4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/start/InviteFriendFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/start/InviteFriendFragment.kt @@ -37,6 +37,7 @@ import org.thoughtcrime.securesms.ui.classicDarkColors import org.thoughtcrime.securesms.ui.components.AppBar import org.thoughtcrime.securesms.ui.components.OnPrimaryButtons import org.thoughtcrime.securesms.ui.components.OutlineButton +import org.thoughtcrime.securesms.ui.components.OutlineTemporaryStateButton import org.thoughtcrime.securesms.ui.components.SmallButtons import org.thoughtcrime.securesms.ui.components.TemporaryStateButton import org.thoughtcrime.securesms.ui.contentDescription @@ -96,23 +97,21 @@ class InviteFriendFragment : Fragment() { SmallButtons { Row(horizontalArrangement = spacedBy(20.dp)) { OutlineButton( - modifier = Modifier.weight(1f) + modifier = Modifier + .weight(1f) .contentDescription("Share button"), onClick = { requireContext().sendInvitation() } ) { Text(stringResource(R.string.share)) } - TemporaryStateButton { source, isTemporary -> - OutlineButton( - modifier = Modifier.weight(1f) - .contentDescription("Copy button"), - interactionSource = source, - onClick = { requireContext().copyPublicKey() }, - ) { - AnimatedVisibility(isTemporary) { Text(stringResource(R.string.copied)) } - AnimatedVisibility(!isTemporary) { Text(stringResource(R.string.copy)) } - } + OutlineTemporaryStateButton( + Modifier + .weight(1f) + .contentDescription("Copy button"), + onClick = { requireContext().copyPublicKey() } + ) { isTemporary -> + Text(stringResource(if (isTemporary) R.string.copied else R.string.copy)) } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt index a454cfe5c5..58684fa4ec 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/onboarding/recoverypassword/RecoveryPasswordActivity.kt @@ -43,6 +43,7 @@ import org.thoughtcrime.securesms.ui.ThemeResPreviewParameterProvider import org.thoughtcrime.securesms.ui.classicDarkColors import org.thoughtcrime.securesms.ui.components.DestructiveButtons import org.thoughtcrime.securesms.ui.components.OutlineButton +import org.thoughtcrime.securesms.ui.components.OutlineTemporaryStateButton import org.thoughtcrime.securesms.ui.components.QrImage import org.thoughtcrime.securesms.ui.components.SmallButtons import org.thoughtcrime.securesms.ui.components.TemporaryStateButton @@ -172,16 +173,13 @@ fun RecoveryPasswordCell(seed: String, copySeed:() -> Unit = {}) { AnimatedVisibility(!showQr) { Row(horizontalArrangement = Arrangement.spacedBy(32.dp)) { - TemporaryStateButton { source, isTemporary -> - OutlineButton( - modifier = Modifier.weight(1f) - .contentDescription(R.string.AccessibilityId_copy_button), - interactionSource = source, - onClick = copySeed, - ) { - AnimatedVisibility(isTemporary) { Text(stringResource(R.string.copied)) } - AnimatedVisibility(!isTemporary) { Text(stringResource(R.string.copy)) } - } + OutlineTemporaryStateButton( + Modifier + .weight(1f) + .contentDescription(R.string.AccessibilityId_copy_button), + onClick = copySeed + ) { isTemporary -> + Text(stringResource( if (isTemporary) R.string.copied else R.string.copy)) } OutlineButton(textId = R.string.qrView, modifier = Modifier.weight(1f), onClick = { showQr = !showQr }) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt index 4013fbd735..496a67733a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt @@ -81,6 +81,7 @@ import org.thoughtcrime.securesms.ui.Divider import org.thoughtcrime.securesms.ui.ItemButton import org.thoughtcrime.securesms.ui.ItemButtonWithDrawable import org.thoughtcrime.securesms.ui.components.OutlineButton +import org.thoughtcrime.securesms.ui.components.OutlineTemporaryStateButton import org.thoughtcrime.securesms.ui.components.TemporaryStateButton import org.thoughtcrime.securesms.ui.destructiveButtonColors import org.thoughtcrime.securesms.util.BitmapDecodingException @@ -388,7 +389,9 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { fun Buttons() { Column { Row( - modifier = Modifier.padding(horizontal = 24.dp).padding(top = 8.dp), + modifier = Modifier + .padding(horizontal = 24.dp) + .padding(top = 8.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), ) { OutlineButton( @@ -398,15 +401,11 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { Text(stringResource(R.string.share)) } - TemporaryStateButton { source, temporary -> - OutlineButton( - modifier = Modifier.weight(1f), - interactionSource = source, - onClick = { copyPublicKey() }, - ) { - AnimatedVisibility(temporary) { Text(stringResource(R.string.copied)) } - AnimatedVisibility(!temporary) { Text(stringResource(R.string.copy)) } - } + OutlineTemporaryStateButton( + modifier = Modifier.weight(1f), + onClick = { copyPublicKey() }, + ) { isTemporary -> + Text(stringResource(if (isTemporary) R.string.copied else R.string.copy)) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt index c186e2ba95..29ad429d6b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt @@ -1,6 +1,13 @@ package org.thoughtcrime.securesms.ui.components import androidx.annotation.StringRes +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.slideIn +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.PressInteraction @@ -32,6 +39,8 @@ import androidx.compose.ui.unit.dp import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.filter +import network.loki.messenger.R +import org.thoughtcrime.securesms.preferences.copyPublicKey import org.thoughtcrime.securesms.ui.GetString import org.thoughtcrime.securesms.ui.LaunchedEffectAsync import org.thoughtcrime.securesms.ui.LocalButtonColor @@ -80,6 +89,24 @@ fun OutlineButton( } } +@Composable +fun OutlineTemporaryStateButton( + modifier: Modifier = Modifier, + onClick: () -> Unit = {}, + content: @Composable (Boolean) -> Unit, +) { + TemporaryStateButton { source, isTemporary -> + OutlineButton( + modifier = modifier, + interactionSource = source, + onClick = onClick, + ) { + AnimatedVisibility(isTemporary) { content(true) } + AnimatedVisibility(!isTemporary) { content(false) } + } + } +} + @Composable fun TemporaryStateButton( content: @Composable (MutableInteractionSource, Boolean) -> Unit,