Align pnp privacy settings screens with figma.
This commit is contained in:
parent
ddcc06c6b7
commit
dd527ce33c
4 changed files with 52 additions and 15 deletions
|
@ -6,6 +6,9 @@ import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.material3.MaterialTheme
|
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.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.getValue
|
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.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.fragment.app.viewModels
|
import androidx.fragment.app.viewModels
|
||||||
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import org.signal.core.ui.Dividers
|
import org.signal.core.ui.Dividers
|
||||||
import org.signal.core.ui.Rows
|
import org.signal.core.ui.Rows
|
||||||
import org.signal.core.ui.Scaffolds
|
import org.signal.core.ui.Scaffolds
|
||||||
|
@ -48,11 +53,16 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() {
|
||||||
{ findNavController().popBackStack() }
|
{ findNavController().popBackStack() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val snackbarHostState = remember { SnackbarHostState() }
|
||||||
|
|
||||||
Scaffolds.Settings(
|
Scaffolds.Settings(
|
||||||
title = stringResource(id = R.string.preferences_app_protection__phone_number),
|
title = stringResource(id = R.string.preferences_app_protection__phone_number),
|
||||||
onNavigationClick = onNavigationClick,
|
onNavigationClick = onNavigationClick,
|
||||||
navigationIconPainter = painterResource(id = R.drawable.ic_arrow_left_24),
|
navigationIconPainter = painterResource(id = R.drawable.ic_arrow_left_24),
|
||||||
navigationContentDescription = stringResource(id = R.string.Material3SearchToolbar__close),
|
navigationContentDescription = stringResource(id = R.string.Material3SearchToolbar__close),
|
||||||
|
snackbarHost = {
|
||||||
|
SnackbarHost(snackbarHostState)
|
||||||
|
},
|
||||||
modifier = Modifier.nestedScroll(statusBarNestedScrollConnection)
|
modifier = Modifier.nestedScroll(statusBarNestedScrollConnection)
|
||||||
) { contentPadding ->
|
) { contentPadding ->
|
||||||
Box(modifier = Modifier.padding(contentPadding)) {
|
Box(modifier = Modifier.padding(contentPadding)) {
|
||||||
|
@ -85,7 +95,7 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() {
|
||||||
id = if (state.phoneNumberSharing) {
|
id = if (state.phoneNumberSharing) {
|
||||||
R.string.PhoneNumberPrivacySettingsFragment__your_phone_number
|
R.string.PhoneNumberPrivacySettingsFragment__your_phone_number
|
||||||
} else {
|
} else {
|
||||||
R.string.PhoneNumberPrivacySettingsFragment__nobody_will_see
|
R.string.PhoneNumberPrivacySettingsFragment__nobody_will_see_your
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
@ -110,23 +120,38 @@ class PhoneNumberPrivacySettingsFragment : ComposeFragment() {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!state.phoneNumberSharing) {
|
item {
|
||||||
item {
|
val snackbarMessage = stringResource(id = R.string.PhoneNumberPrivacySettingsFragment__to_change_this_setting)
|
||||||
Rows.RadioRow(
|
val onClick: () -> Unit = remember(state.phoneNumberSharing) {
|
||||||
selected = !state.discoverableByPhoneNumber,
|
if (!state.phoneNumberSharing) {
|
||||||
text = stringResource(id = R.string.PhoneNumberPrivacy_nobody),
|
{ viewModel.setNobodyCanFindMeByMyNumber() }
|
||||||
modifier = Modifier.clickable(onClick = 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 {
|
item {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(
|
text = stringResource(
|
||||||
id = if (state.discoverableByPhoneNumber) {
|
id = if (state.discoverableByPhoneNumber) {
|
||||||
R.string.WhoCanSeeMyPhoneNumberFragment__anyone_who_has
|
R.string.PhoneNumberPrivacySettingsFragment__anyone_who_has
|
||||||
} else {
|
} else {
|
||||||
R.string.WhoCanSeeMyPhoneNumberFragment__nobody_on_signal
|
R.string.PhoneNumberPrivacySettingsFragment__nobody_will_be_able_to_see
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
style = MaterialTheme.typography.bodyMedium,
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
|
|
@ -3767,11 +3767,17 @@
|
||||||
<!-- Section title above two radio buttons for enabling and disabling phone number display -->
|
<!-- 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>
|
<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 -->
|
<!-- 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 -->
|
<!-- 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>
|
<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 -->
|
<!-- 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>
|
<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_everyone">Everyone</string>
|
||||||
<string name="PhoneNumberPrivacy_nobody">Nobody</string>
|
<string name="PhoneNumberPrivacy_nobody">Nobody</string>
|
||||||
<string name="preferences_app_protection__screen_lock">Screen lock</string>
|
<string name="preferences_app_protection__screen_lock">Screen lock</string>
|
||||||
|
|
|
@ -18,9 +18,9 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Alignment.Companion.CenterVertically
|
import androidx.compose.ui.Alignment.Companion.CenterVertically
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.alpha
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import androidx.compose.ui.res.dimensionResource
|
import androidx.compose.ui.res.dimensionResource
|
||||||
|
@ -40,21 +40,25 @@ object Rows {
|
||||||
selected: Boolean,
|
selected: Boolean,
|
||||||
text: String,
|
text: String,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
label: String? = null
|
label: String? = null,
|
||||||
|
enabled: Boolean = true
|
||||||
) {
|
) {
|
||||||
Row(
|
Row(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(defaultPadding()),
|
.padding(defaultPadding()),
|
||||||
verticalAlignment = Alignment.CenterVertically
|
verticalAlignment = CenterVertically
|
||||||
) {
|
) {
|
||||||
RadioButton(
|
RadioButton(
|
||||||
|
enabled = enabled,
|
||||||
selected = selected,
|
selected = selected,
|
||||||
onClick = null,
|
onClick = null,
|
||||||
modifier = Modifier.padding(end = 24.dp)
|
modifier = Modifier.padding(end = 24.dp)
|
||||||
)
|
)
|
||||||
|
|
||||||
Column {
|
Column(
|
||||||
|
modifier = Modifier.alpha(if (enabled) 1f else 0.4f)
|
||||||
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = text,
|
text = text,
|
||||||
style = MaterialTheme.typography.bodyLarge
|
style = MaterialTheme.typography.bodyLarge
|
||||||
|
|
|
@ -38,11 +38,13 @@ object Scaffolds {
|
||||||
titleContent: @Composable (Float, String) -> Unit = { _, title ->
|
titleContent: @Composable (Float, String) -> Unit = { _, title ->
|
||||||
Text(text = title, style = MaterialTheme.typography.titleLarge)
|
Text(text = title, style = MaterialTheme.typography.titleLarge)
|
||||||
},
|
},
|
||||||
|
snackbarHost: @Composable () -> Unit = {},
|
||||||
content: @Composable (PaddingValues) -> Unit
|
content: @Composable (PaddingValues) -> Unit
|
||||||
) {
|
) {
|
||||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
|
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
|
snackbarHost = snackbarHost,
|
||||||
topBar = {
|
topBar = {
|
||||||
TopAppBar(
|
TopAppBar(
|
||||||
title = {
|
title = {
|
||||||
|
|
Loading…
Add table
Reference in a new issue