diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt index c3e46e0b20..e8ff5e4467 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/privacy/pnp/PhoneNumberPrivacySettingsFragment.kt @@ -6,6 +6,9 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SnackbarDuration +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -17,7 +20,9 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import kotlinx.coroutines.launch import org.signal.core.ui.Dividers import org.signal.core.ui.Rows import org.signal.core.ui.Scaffolds @@ -48,11 +53,16 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() { { findNavController().popBackStack() } } + val snackbarHostState = remember { SnackbarHostState() } + Scaffolds.Settings( title = stringResource(id = R.string.preferences_app_protection__phone_number), onNavigationClick = onNavigationClick, navigationIconPainter = painterResource(id = R.drawable.ic_arrow_left_24), navigationContentDescription = stringResource(id = R.string.Material3SearchToolbar__close), + snackbarHost = { + SnackbarHost(snackbarHostState) + }, modifier = Modifier.nestedScroll(statusBarNestedScrollConnection) ) { contentPadding -> Box(modifier = Modifier.padding(contentPadding)) { @@ -85,7 +95,7 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() { id = if (state.phoneNumberSharing) { R.string.PhoneNumberPrivacySettingsFragment__your_phone_number } else { - R.string.PhoneNumberPrivacySettingsFragment__nobody_will_see + R.string.PhoneNumberPrivacySettingsFragment__nobody_will_see_your } ), style = MaterialTheme.typography.bodyMedium, @@ -110,23 +120,38 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() { ) } - if (!state.phoneNumberSharing) { - item { - Rows.RadioRow( - selected = !state.discoverableByPhoneNumber, - text = stringResource(id = R.string.PhoneNumberPrivacy_nobody), - modifier = Modifier.clickable(onClick = viewModel::setNobodyCanFindMeByMyNumber) - ) + item { + val snackbarMessage = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment__to_change_this_setting) + val onClick: () -> Unit = remember(state.phoneNumberSharing) { + if (!state.phoneNumberSharing) { + { viewModel.setNobodyCanFindMeByMyNumber() } + } else { + { + lifecycleScope.launch { + snackbarHostState.showSnackbar( + message = snackbarMessage, + duration = SnackbarDuration.Short + ) + } + } + } } + + Rows.RadioRow( + enabled = !state.phoneNumberSharing, + selected = !state.discoverableByPhoneNumber, + text = stringResource(id = R.string.PhoneNumberPrivacy_nobody), + modifier = Modifier.clickable(onClick = onClick) + ) } item { Text( text = stringResource( id = if (state.discoverableByPhoneNumber) { - R.string.WhoCanSeeMyPhoneNumberFragment__anyone_who_has + R.string.PhoneNumberPrivacySettingsFragment__anyone_who_has } else { - R.string.WhoCanSeeMyPhoneNumberFragment__nobody_on_signal + R.string.PhoneNumberPrivacySettingsFragment__nobody_will_be_able_to_see } ), style = MaterialTheme.typography.bodyMedium, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 054654f9c0..f53e2c708e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -3767,11 +3767,17 @@ Who can see my number - Nobody will see your phone number on Signal + Nobody will see your phone number on Signal, even when messaging them. Who can find me by number Your phone number will be visible to people and groups you message. People who have your number in their phone contacts will also see it on Signal. + + Anyone who has your phone number will see you\'re on Signal and can start chats with you. + + Nobody will be able to see you\'re on Signal unless you message them or have an existing chat with them. + + To change this setting, set "Who can see my number" to "Nobody". Everyone Nobody Screen lock diff --git a/core-ui/src/main/java/org/signal/core/ui/Rows.kt b/core-ui/src/main/java/org/signal/core/ui/Rows.kt index 13a6d3c1e2..35fd45da4a 100644 --- a/core-ui/src/main/java/org/signal/core/ui/Rows.kt +++ b/core-ui/src/main/java/org/signal/core/ui/Rows.kt @@ -18,9 +18,9 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.dimensionResource @@ -40,21 +40,25 @@ object Rows { selected: Boolean, text: String, modifier: Modifier = Modifier, - label: String? = null + label: String? = null, + enabled: Boolean = true ) { Row( modifier = modifier .fillMaxWidth() .padding(defaultPadding()), - verticalAlignment = Alignment.CenterVertically + verticalAlignment = CenterVertically ) { RadioButton( + enabled = enabled, selected = selected, onClick = null, modifier = Modifier.padding(end = 24.dp) ) - Column { + Column( + modifier = Modifier.alpha(if (enabled) 1f else 0.4f) + ) { Text( text = text, style = MaterialTheme.typography.bodyLarge diff --git a/core-ui/src/main/java/org/signal/core/ui/Scaffolds.kt b/core-ui/src/main/java/org/signal/core/ui/Scaffolds.kt index fb723c85a3..d866e3bcb2 100644 --- a/core-ui/src/main/java/org/signal/core/ui/Scaffolds.kt +++ b/core-ui/src/main/java/org/signal/core/ui/Scaffolds.kt @@ -38,11 +38,13 @@ object Scaffolds { titleContent: @Composable (Float, String) -> Unit = { _, title -> Text(text = title, style = MaterialTheme.typography.titleLarge) }, + snackbarHost: @Composable () -> Unit = {}, content: @Composable (PaddingValues) -> Unit ) { val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() Scaffold( + snackbarHost = snackbarHost, topBar = { TopAppBar( title = {