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

View File

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