Align pnp privacy settings screens with figma.

This commit is contained in:
Alex Hart 2024-01-16 14:10:29 -04:00 committed by Greyson Parrelli
parent ddcc06c6b7
commit dd527ce33c
4 changed files with 52 additions and 15 deletions

View file

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

View file

@ -3767,11 +3767,17 @@
<!-- 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">Nobody will see your phone number on Signal</string>
<string name="PhoneNumberPrivacySettingsFragment__nobody_will_see_your">Nobody will see your phone number on Signal, even when messaging them.</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">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.</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>
<!-- 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>
<!-- 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>
<string name="PhoneNumberPrivacy_nobody">Nobody</string>
<string name="preferences_app_protection__screen_lock">Screen lock</string>

View file

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

View file

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