Update strings and previews for pnp settings.

This commit is contained in:
Greyson Parrelli
2024-02-07 11:38:04 -05:00
parent bc930345b9
commit 0630a6910a
2 changed files with 171 additions and 105 deletions
@@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.components.settings.app.privacy.pnp
import android.content.res.Configuration
import android.os.Bundle
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
@@ -18,6 +19,7 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.res.dimensionResource
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
@@ -27,6 +29,7 @@ import org.signal.core.ui.Dividers
import org.signal.core.ui.Rows
import org.signal.core.ui.Scaffolds
import org.signal.core.ui.Texts
import org.signal.core.ui.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.StatusBarColorNestedScrollConnection
@@ -49,118 +52,179 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() {
@Composable
override fun FragmentContent() {
val state: PhoneNumberPrivacySettingsState by viewModel.state
val onNavigationClick: () -> Unit = remember {
{ findNavController().popBackStack() }
}
val snackbarHostState = remember { SnackbarHostState() }
val snackbarMessage = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment__to_change_this_setting)
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)) {
LazyColumn {
item {
Texts.SectionHeader(
text = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment__who_can_see_my_number)
Screen(
state = state,
snackbarHostState = snackbarHostState,
onNavigationClick = { findNavController().popBackStack() },
statusBarNestedScrollConnection = statusBarNestedScrollConnection,
onEveryoneCanSeeMyNumberClicked = viewModel::setEveryoneCanSeeMyNumber,
onNobodyCanSeeMyNumberClicked = viewModel::setNobodyCanSeeMyNumber,
onEveryoneCanFindMeByNumberClicked = viewModel::setEveryoneCanFindMeByMyNumber,
onNobodyCanFindMeByNumberClicked = {
if (!state.phoneNumberSharing) {
viewModel.setNobodyCanFindMeByMyNumber()
} else {
lifecycleScope.launch {
snackbarHostState.showSnackbar(
message = snackbarMessage,
duration = SnackbarDuration.Short
)
}
}
}
)
}
}
item {
Rows.RadioRow(
selected = state.phoneNumberSharing,
text = stringResource(id = R.string.PhoneNumberPrivacy_everyone),
modifier = Modifier.clickable(onClick = viewModel::setEveryoneCanSeeMyNumber)
)
}
@Composable
private fun Screen(
state: PhoneNumberPrivacySettingsState,
snackbarHostState: SnackbarHostState = SnackbarHostState(),
onNavigationClick: () -> Unit = {},
statusBarNestedScrollConnection: StatusBarColorNestedScrollConnection? = null,
onEveryoneCanSeeMyNumberClicked: () -> Unit = {},
onNobodyCanSeeMyNumberClicked: () -> Unit = {},
onEveryoneCanFindMeByNumberClicked: () -> Unit = {},
onNobodyCanFindMeByNumberClicked: () -> Unit = {}
) {
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 = statusBarNestedScrollConnection?.let { Modifier.nestedScroll(it) } ?: Modifier
) { contentPadding ->
Box(modifier = Modifier.padding(contentPadding)) {
LazyColumn {
item {
Texts.SectionHeader(
text = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment_who_can_see_my_number_heading)
)
}
item {
Rows.RadioRow(
selected = !state.phoneNumberSharing,
text = stringResource(id = R.string.PhoneNumberPrivacy_nobody),
modifier = Modifier.clickable(onClick = viewModel::setNobodyCanSeeMyNumber)
)
}
item {
Rows.RadioRow(
selected = state.phoneNumberSharing,
text = stringResource(id = R.string.PhoneNumberPrivacy_everyone),
modifier = Modifier.clickable(onClick = onEveryoneCanSeeMyNumberClicked)
)
}
item {
Text(
text = stringResource(
id = if (state.phoneNumberSharing) {
R.string.PhoneNumberPrivacySettingsFragment__your_phone_number_will_be
} else {
R.string.PhoneNumberPrivacySettingsFragment__nobody_will_see_your
}
),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter), vertical = 16.dp)
)
}
item {
Rows.RadioRow(
selected = !state.phoneNumberSharing,
text = stringResource(id = R.string.PhoneNumberPrivacy_nobody),
modifier = Modifier.clickable(onClick = onNobodyCanSeeMyNumberClicked)
)
}
item {
Dividers.Default()
}
item {
Texts.SectionHeader(text = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment__who_can_find_me_by_number))
}
item {
Rows.RadioRow(
selected = state.discoverableByPhoneNumber,
text = stringResource(id = R.string.PhoneNumberPrivacy_everyone),
modifier = Modifier.clickable(onClick = viewModel::setEveryoneCanFindMeByMyNumber)
)
}
item {
val snackbarMessage = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment__to_change_this_setting)
val onClick: () -> Unit = remember(state.phoneNumberSharing) {
if (!state.phoneNumberSharing) {
{ viewModel.setNobodyCanFindMeByMyNumber() }
item {
Text(
text = stringResource(
id = if (state.phoneNumberSharing) {
R.string.PhoneNumberPrivacySettingsFragment_sharing_on_description
} else {
{
lifecycleScope.launch {
snackbarHostState.showSnackbar(
message = snackbarMessage,
duration = SnackbarDuration.Short
)
}
if (state.discoverableByPhoneNumber) {
R.string.PhoneNumberPrivacySettingsFragment_sharing_off_discovery_on_description
} else {
R.string.PhoneNumberPrivacySettingsFragment_sharing_off_discovery_off_description
}
}
}
),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter), vertical = 16.dp)
)
}
Rows.RadioRow(
enabled = !state.phoneNumberSharing,
selected = !state.discoverableByPhoneNumber,
text = stringResource(id = R.string.PhoneNumberPrivacy_nobody),
modifier = Modifier.clickable(onClick = onClick)
)
}
item {
Dividers.Default()
}
item {
Text(
text = stringResource(
id = if (state.discoverableByPhoneNumber) {
R.string.PhoneNumberPrivacySettingsFragment__anyone_who_has
} else {
R.string.PhoneNumberPrivacySettingsFragment__nobody_will_be_able_to_see
}
),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter), vertical = 16.dp)
)
}
item {
Texts.SectionHeader(text = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment_who_can_find_me_by_number_heading))
}
item {
Rows.RadioRow(
selected = state.discoverableByPhoneNumber,
text = stringResource(id = R.string.PhoneNumberPrivacy_everyone),
modifier = Modifier.clickable(onClick = onEveryoneCanFindMeByNumberClicked)
)
}
item {
Rows.RadioRow(
enabled = !state.phoneNumberSharing,
selected = !state.discoverableByPhoneNumber,
text = stringResource(id = R.string.PhoneNumberPrivacy_nobody),
modifier = Modifier.clickable(onClick = onNobodyCanFindMeByNumberClicked)
)
}
item {
Text(
text = stringResource(
id = if (state.discoverableByPhoneNumber) {
R.string.PhoneNumberPrivacySettingsFragment_discovery_on_description
} else {
R.string.PhoneNumberPrivacySettingsFragment_discovery_off_description
}
),
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
modifier = Modifier.padding(horizontal = dimensionResource(id = R.dimen.core_ui__gutter), vertical = 16.dp)
)
}
}
}
}
}
@Preview(name = "Light Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_NO)
@Preview(name = "Dark Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewSharingAndDiscoverable() {
SignalTheme {
Screen(
state = PhoneNumberPrivacySettingsState(
phoneNumberSharing = true,
discoverableByPhoneNumber = true
)
)
}
}
@Preview(name = "Light Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_NO)
@Preview(name = "Dark Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewNotSharingDiscoverable() {
SignalTheme {
Screen(
state = PhoneNumberPrivacySettingsState(
phoneNumberSharing = false,
discoverableByPhoneNumber = true
)
)
}
}
@Preview(name = "Light Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_NO)
@Preview(name = "Dark Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewNotSharingNotDiscoverable() {
SignalTheme {
Screen(
state = PhoneNumberPrivacySettingsState(
phoneNumberSharing = false,
discoverableByPhoneNumber = false
)
)
}
}
+10 -8
View File
@@ -3799,17 +3799,19 @@
<!-- Subtext below option to launch into phone number privacy settings screen -->
<string name="preferences_app_protection__choose_who_can_see">Choose who can see your phone number and who can contact you on Signal with it.</string>
<!-- Section title above two radio buttons for enabling and disabling phone number display -->
<string name="PhoneNumberPrivacySettingsFragment__who_can_see_my_number">Who can see my number</string>
<!-- Subtext below radio buttons when who can see my number is set to nobody -->
<string name="PhoneNumberPrivacySettingsFragment__nobody_will_see_your">Nobody will see your phone number on Signal, even when messaging them.</string>
<string name="PhoneNumberPrivacySettingsFragment_who_can_see_my_number_heading">Who can see my number</string>
<!-- Subtext below radio buttons when who can see my number is set to everybody -->
<string name="PhoneNumberPrivacySettingsFragment_sharing_on_description">Your phone number will be visible to people and groups you message.</string>
<!-- Subtext below radio buttons when who can see my number is set to nobody and who can find me by number is set to everybody -->
<string name="PhoneNumberPrivacySettingsFragment_sharing_off_discovery_on_description">Your phone number will not be visible to anyone unless they have it saved in their phone\'s contacts.</string>
<!-- Subtext below radio buttons when who can see my number is set to nobody and who can find me by number is set to nobody -->
<string name="PhoneNumberPrivacySettingsFragment_sharing_off_discovery_off_description">Your phone number will not be visible to anyone.</string>
<!-- Section title above two radio buttons for enabling and disabling whether users can find me by my phone number -->
<string name="PhoneNumberPrivacySettingsFragment__who_can_find_me_by_number">Who can find me by number</string>
<!-- Subtext below radio buttons when who can see my number is set to everyone -->
<string name="PhoneNumberPrivacySettingsFragment__your_phone_number_will_be">Your phone number will be visible to people and groups you message.</string>
<string name="PhoneNumberPrivacySettingsFragment_who_can_find_me_by_number_heading">Who can find me by number</string>
<!-- Subtext below radio buttons when who can find me by number is set to everyone -->
<string name="PhoneNumberPrivacySettingsFragment__anyone_who_has">Anyone who has your phone number will see you\'re on Signal and can start chats with you.</string>
<string name="PhoneNumberPrivacySettingsFragment_discovery_on_description">Anyone who has your phone number will see you\'re on Signal and can start chats with you.</string>
<!-- Subtext below radio buttons when who can find me by number is set to nobody -->
<string name="PhoneNumberPrivacySettingsFragment__nobody_will_be_able_to_see">Nobody will be able to see you\'re on Signal unless you message them or have an existing chat with them.</string>
<string name="PhoneNumberPrivacySettingsFragment_discovery_off_description">Nobody will be able to see you\'re on Signal unless you message them or have an existing chat with them.</string>
<!-- Snackbar text when pressing invalid radio item -->
<string name="PhoneNumberPrivacySettingsFragment__to_change_this_setting">To change this setting, set "Who can see my number" to "Nobody".</string>
<string name="PhoneNumberPrivacy_everyone">Everyone</string>