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 = {