Refactor temporary buttons

This commit is contained in:
Andrew 2024-06-06 11:22:36 +09:30
parent c489765a50
commit b571348a66
4 changed files with 54 additions and 31 deletions

View File

@ -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))
}
}
}

View File

@ -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 })
}

View File

@ -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))
}
}

View File

@ -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,