Remove beta labeling from Signal Secure Backups.

This commit is contained in:
Greyson Parrelli
2026-02-13 00:02:15 -05:00
committed by Alex Hart
parent c91275c5da
commit 786c2b888b
8 changed files with 23 additions and 182 deletions

View File

@@ -33,8 +33,6 @@ import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.SignalIcons
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.compose.BetaHeader
import org.thoughtcrime.securesms.components.compose.TextWithBetaLabel
import org.signal.core.ui.R as CoreUiR
/**
@@ -65,10 +63,6 @@ fun MessageBackupsEducationScreen(
.fillMaxWidth()
.weight(1f)
) {
item {
BetaHeader()
}
item {
Image(
painter = painterResource(id = R.drawable.image_signal_backups),
@@ -80,9 +74,9 @@ fun MessageBackupsEducationScreen(
}
item {
TextWithBetaLabel(
Text(
text = stringResource(id = R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.headlineMedium,
style = MaterialTheme.typography.headlineMedium,
modifier = Modifier.padding(top = 15.dp)
)
}

View File

@@ -1,136 +0,0 @@
package org.thoughtcrime.securesms.components.compose
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.SignalIcons
import org.signal.core.ui.compose.horizontalGutters
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
/**
* Adds a 'Beta' label next to [text] to indicate a feature is in development
*/
@OptIn(ExperimentalLayoutApi::class)
@Composable
fun TextWithBetaLabel(
text: String,
textStyle: TextStyle = TextStyle.Default,
enabled: Boolean = true,
modifier: Modifier = Modifier
) {
FlowRow(
verticalArrangement = Arrangement.Center,
horizontalArrangement = Arrangement.Center,
modifier = modifier
) {
Text(
text = text,
style = textStyle,
modifier = Modifier
.align(Alignment.CenterVertically)
.alpha(if (enabled) 1f else Rows.DISABLED_ALPHA)
)
Text(
text = stringResource(R.string.Beta__beta_title).uppercase(),
color = MaterialTheme.colorScheme.onPrimaryContainer,
style = MaterialTheme.typography.labelSmall,
modifier = Modifier
.padding(start = 6.dp)
.padding(vertical = 6.dp)
.background(color = MaterialTheme.colorScheme.surfaceVariant, shape = RoundedCornerShape(28.dp))
.padding(horizontal = 12.dp, vertical = 4.dp)
.alpha(if (enabled) 1f else Rows.DISABLED_ALPHA)
.align(Alignment.CenterVertically)
)
}
}
/**
* 'Beta' header to indicate a feature is currently in development
*/
@Composable
fun BetaHeader(modifier: Modifier = Modifier) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = modifier
.background(
color = SignalTheme.colors.colorSurface2,
shape = RoundedCornerShape(12.dp)
)
.padding(16.dp)
.fillMaxWidth()
) {
Icon(
imageVector = SignalIcons.Info.imageVector,
contentDescription = stringResource(id = R.string.Beta__info),
tint = MaterialTheme.colorScheme.onPrimaryContainer
)
Text(
text = stringResource(id = R.string.Beta__this_is_beta),
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(start = 12.dp)
)
}
}
@DayNightPreviews
@Composable
fun BetaLabelPreview() {
Previews.Preview {
TextWithBetaLabel("Signal Backups")
}
}
@DayNightPreviews
@Composable
fun BetaLabelDisabledPreview() {
Previews.Preview {
TextWithBetaLabel("Signal Backups", enabled = false)
}
}
@Preview(locale = "de")
@Composable
fun LongTextBetaLabelPreview() {
Previews.Preview {
Scaffold {
TextWithBetaLabel(
text = stringResource(id = R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.headlineMedium,
modifier = Modifier
.fillMaxWidth()
.horizontalGutters()
.padding(it)
)
}
}
}
@DayNightPreviews
@Composable
fun BetaHeaderPreview() {
Previews.Preview {
BetaHeader()
}
}

View File

@@ -68,7 +68,6 @@ import org.thoughtcrime.securesms.banner.banners.UnauthorizedBanner
import org.thoughtcrime.securesms.banner.ui.compose.Action
import org.thoughtcrime.securesms.banner.ui.compose.DefaultBanner
import org.thoughtcrime.securesms.banner.ui.compose.Importance
import org.thoughtcrime.securesms.components.compose.TextWithBetaLabel
import org.thoughtcrime.securesms.components.emoji.Emojifier
import org.thoughtcrime.securesms.components.settings.app.routes.AppSettingsRoute
import org.thoughtcrime.securesms.components.settings.app.routes.AppSettingsRouter
@@ -415,10 +414,9 @@ private fun AppSettingsContent(
item {
Rows.TextRow(
text = {
TextWithBetaLabel(
Text(
text = stringResource(R.string.preferences_chats__backups),
textStyle = MaterialTheme.typography.bodyLarge,
enabled = isRegisteredAndUpToDate
style = MaterialTheme.typography.bodyLarge
)
},
icon = {

View File

@@ -53,7 +53,6 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.backup.DeletionState
import org.thoughtcrime.securesms.backup.v2.MessageBackupTier
import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType
import org.thoughtcrime.securesms.components.compose.TextWithBetaLabel
import org.thoughtcrime.securesms.components.settings.app.subscription.MessageBackupsCheckoutLauncher.createBackupsCheckoutLauncher
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.payments.FiatMoneyUtil
@@ -285,9 +284,9 @@ private fun NeverEnabledBackupsRow(
},
text = {
Column {
TextWithBetaLabel(
Text(
text = stringResource(R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.bodyLarge
style = MaterialTheme.typography.bodyLarge
)
Text(
@@ -331,9 +330,9 @@ private fun InactiveBackupsRow(
Rows.TextRow(
text = {
Column {
TextWithBetaLabel(
Text(
text = stringResource(R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.bodyLarge
style = MaterialTheme.typography.bodyLarge
)
Text(
@@ -377,9 +376,9 @@ private fun NotFoundBackupRow(
},
text = {
Column {
TextWithBetaLabel(
Text(
text = stringResource(R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.bodyLarge
style = MaterialTheme.typography.bodyLarge
)
Text(
@@ -412,9 +411,9 @@ private fun PendingBackupRow(
},
text = {
Column {
TextWithBetaLabel(
Text(
text = stringResource(R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.bodyLarge
style = MaterialTheme.typography.bodyLarge
)
Text(
@@ -463,9 +462,9 @@ private fun LocalStoreBackupRow(
},
text = {
Column {
TextWithBetaLabel(
Text(
text = stringResource(R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.bodyLarge
style = MaterialTheme.typography.bodyLarge
)
val tierText = when (backupState.tier) {
@@ -508,9 +507,9 @@ private fun ActiveBackupsRow(
},
text = {
Column {
TextWithBetaLabel(
Text(
text = stringResource(R.string.RemoteBackupsSettingsFragment__signal_backups),
textStyle = MaterialTheme.typography.bodyLarge
style = MaterialTheme.typography.bodyLarge
)
when (val type = backupState.messageBackupsType) {

View File

@@ -101,7 +101,6 @@ import org.thoughtcrime.securesms.backup.v2.ui.status.BackupStatusRow
import org.thoughtcrime.securesms.backup.v2.ui.status.RestoreType
import org.thoughtcrime.securesms.backup.v2.ui.subscription.MessageBackupsType
import org.thoughtcrime.securesms.billing.launchManageBackupsSubscription
import org.thoughtcrime.securesms.components.compose.BetaHeader
import org.thoughtcrime.securesms.components.compose.BiometricsAuthentication
import org.thoughtcrime.securesms.components.compose.rememberBiometricsAuthentication
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
@@ -419,10 +418,6 @@ private fun RemoteBackupsSettingsContent(
modifier = Modifier
.padding(it)
) {
item {
BetaHeader(modifier = Modifier.padding(horizontal = 16.dp))
}
if (state.isOutOfStorageSpace) {
item {
OutOfStorageSpaceBlock(

View File

@@ -457,7 +457,7 @@ public final class Megaphones {
public static @NonNull Megaphone buildTurnOnSignalBackupsMegaphone() {
return new Megaphone.Builder(Event.TURN_ON_SIGNAL_BACKUPS, Megaphone.Style.BASIC)
.setImage(R.drawable.backups_megaphone_image)
.setTitle(R.string.TurnOnSignalBackups__title_beta)
.setTitle(R.string.TurnOnSignalBackups__title)
.setBody(R.string.TurnOnSignalBackups__body)
.setActionButton(R.string.TurnOnSignalBackups__turn_on, (megaphone, controller) -> {
Intent intent = AppSettingsActivity.remoteBackups(controller.getMegaphoneActivity());
@@ -580,7 +580,7 @@ public final class Megaphones {
}
private static boolean shouldShowTurnOnBackupsMegaphone(@NonNull Context context) {
if (!RemoteConfig.backupsBetaMegaphone()) {
if (!RemoteConfig.backupsMegaphone()) {
return false;
}

View File

@@ -1179,9 +1179,9 @@ object RemoteConfig {
)
@JvmStatic
@get:JvmName("backupsBetaMegaphone")
val backupsBetaMegaphone: Boolean by remoteBoolean(
key = "android.backupsBetaMegaphone.2",
@get:JvmName("backupsMegaphone")
val backupsMegaphone: Boolean by remoteBoolean(
key = "android.backupsMegaphone.3",
defaultValue = false,
hotSwappable = true
)