mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-05-23 08:40:14 +01:00
Update regV5 permissions screen to use RegistrationScaffold.
This commit is contained in:
+80
-145
@@ -10,7 +10,6 @@ package org.signal.registration.screens.permissions
|
||||
import android.Manifest
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Arrangement.SpaceAround
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
@@ -27,7 +26,6 @@ import androidx.compose.material3.Surface
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.platform.testTag
|
||||
@@ -36,14 +34,12 @@ import androidx.compose.ui.res.vectorResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.google.accompanist.permissions.ExperimentalPermissionsApi
|
||||
import com.google.accompanist.permissions.MultiplePermissionsState
|
||||
import org.signal.core.ui.WindowBreakpoint
|
||||
import org.signal.core.ui.compose.AllDevicePreviews
|
||||
import org.signal.core.ui.compose.Buttons
|
||||
import org.signal.core.ui.compose.Previews
|
||||
import org.signal.core.ui.compose.horizontalGutters
|
||||
import org.signal.core.ui.rememberWindowBreakpoint
|
||||
import org.signal.registration.R
|
||||
import org.signal.registration.screens.RegistrationScaffold
|
||||
import org.signal.registration.screens.TwoPaneRegistrationScaffold
|
||||
import org.signal.registration.screens.util.MockMultiplePermissionsState
|
||||
import org.signal.registration.screens.util.MockPermissionsState
|
||||
import org.signal.registration.test.TestTags
|
||||
@@ -59,55 +55,43 @@ import org.signal.registration.test.TestTags
|
||||
@Composable
|
||||
fun PermissionsScreen(
|
||||
permissionsState: MultiplePermissionsState,
|
||||
onProceed: () -> Unit = {},
|
||||
modifier: Modifier = Modifier
|
||||
modifier: Modifier = Modifier,
|
||||
onProceed: () -> Unit = {}
|
||||
) {
|
||||
val windowBreakpoint = rememberWindowBreakpoint()
|
||||
val layoutParams = RegistrationScaffold.rememberLayoutParams()
|
||||
val permissions = permissionsState.permissions.map { it.permission }
|
||||
|
||||
when (windowBreakpoint) {
|
||||
WindowBreakpoint.SMALL -> {
|
||||
Surface(modifier = modifier.testTag(TestTags.PERMISSIONS_SCREEN)) {
|
||||
CompactLayout(
|
||||
permissionsState = permissionsState,
|
||||
permissions = permissions,
|
||||
onProceed = onProceed,
|
||||
modifier = modifier
|
||||
)
|
||||
}
|
||||
}
|
||||
Surface(modifier = modifier.testTag(TestTags.PERMISSIONS_SCREEN)) {
|
||||
when (layoutParams) {
|
||||
is RegistrationScaffold.Params.OnePane -> OnePaneLayout(
|
||||
params = layoutParams,
|
||||
permissionsState = permissionsState,
|
||||
permissions = permissions,
|
||||
onProceed = onProceed,
|
||||
modifier = modifier
|
||||
)
|
||||
|
||||
WindowBreakpoint.MEDIUM -> {
|
||||
Surface(modifier = modifier.testTag(TestTags.PERMISSIONS_SCREEN)) {
|
||||
MediumLayout(
|
||||
permissionsState = permissionsState,
|
||||
permissions = permissions,
|
||||
onProceed = onProceed,
|
||||
modifier = modifier
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
WindowBreakpoint.LARGE_WIDTH, WindowBreakpoint.LARGE_HEIGHT -> {
|
||||
Surface(modifier = modifier.testTag(TestTags.PERMISSIONS_SCREEN)) {
|
||||
LargeLayout(
|
||||
permissionsState = permissionsState,
|
||||
permissions = permissions,
|
||||
onProceed = onProceed,
|
||||
modifier = modifier
|
||||
)
|
||||
}
|
||||
is RegistrationScaffold.Params.TwoPane -> TwoPaneLayout(
|
||||
params = layoutParams,
|
||||
permissionsState = permissionsState,
|
||||
permissions = permissions,
|
||||
onProceed = onProceed,
|
||||
modifier = modifier
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun CompactLayout(
|
||||
private fun OnePaneLayout(
|
||||
params: RegistrationScaffold.Params.OnePane,
|
||||
modifier: Modifier,
|
||||
permissions: List<String>,
|
||||
permissionsState: MultiplePermissionsState,
|
||||
onProceed: () -> Unit
|
||||
) {
|
||||
val scrollState = rememberScrollState()
|
||||
|
||||
RegistrationScaffold(
|
||||
modifier = modifier.fillMaxSize(),
|
||||
content = {
|
||||
@@ -115,17 +99,12 @@ private fun CompactLayout(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.fillMaxHeight()
|
||||
.padding(top = 24.dp),
|
||||
contentAlignment = Alignment.BottomCenter
|
||||
) {
|
||||
val scrollState = rememberScrollState()
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(scrollState)
|
||||
.padding(top = 16.dp)
|
||||
.horizontalGutters()
|
||||
.padding(params.panePadding)
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.GrantPermissionsFragment__allow_permissions),
|
||||
@@ -141,118 +120,72 @@ private fun CompactLayout(
|
||||
)
|
||||
|
||||
PermissionList(permissions)
|
||||
|
||||
Spacer(modifier = Modifier.padding(48.dp))
|
||||
}
|
||||
|
||||
PermissionButtons(onProceed, permissionsState, scrollState.canScrollForward)
|
||||
}
|
||||
},
|
||||
footer = {
|
||||
PermissionButtons(
|
||||
onProceed = onProceed,
|
||||
permissionsState = permissionsState,
|
||||
showElevation = scrollState.canScrollForward,
|
||||
modifier = Modifier.padding(params.bottomInset)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun MediumLayout(
|
||||
modifier: Modifier,
|
||||
private fun TwoPaneLayout(
|
||||
params: RegistrationScaffold.Params.TwoPane,
|
||||
modifier: Modifier = Modifier,
|
||||
permissions: List<String>,
|
||||
permissionsState: MultiplePermissionsState,
|
||||
onProceed: () -> Unit
|
||||
) {
|
||||
val scrollState = rememberScrollState()
|
||||
|
||||
RegistrationScaffold(
|
||||
TwoPaneRegistrationScaffold(
|
||||
modifier = modifier.fillMaxSize(),
|
||||
content = {
|
||||
Row(
|
||||
horizontalArrangement = SpaceAround,
|
||||
modifier = Modifier.padding(top = 56.dp)
|
||||
params = params,
|
||||
firstPane = { paddingValues ->
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.fillMaxHeight()
|
||||
.padding(paddingValues)
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(horizontal = 24.dp)
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.GrantPermissionsFragment__allow_permissions),
|
||||
style = MaterialTheme.typography.headlineMedium,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
Text(
|
||||
text = stringResource(id = R.string.GrantPermissionsFragment__allow_permissions),
|
||||
style = MaterialTheme.typography.headlineMedium,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.GrantPermissionsFragment__to_help_you_message_people_you_know),
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(top = 16.dp)
|
||||
)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(scrollState)
|
||||
.padding(horizontal = 24.dp)
|
||||
) {
|
||||
PermissionList(permissions)
|
||||
Spacer(modifier = Modifier.padding(48.dp))
|
||||
}
|
||||
Text(
|
||||
text = stringResource(id = R.string.GrantPermissionsFragment__to_help_you_message_people_you_know),
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(top = 16.dp)
|
||||
)
|
||||
}
|
||||
},
|
||||
secondPane = { paddingValues ->
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(scrollState)
|
||||
.padding(paddingValues)
|
||||
) {
|
||||
PermissionList(permissions)
|
||||
}
|
||||
},
|
||||
footer = {
|
||||
PermissionButtons(onProceed, permissionsState, scrollState.canScrollForward)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun LargeLayout(
|
||||
modifier: Modifier,
|
||||
permissions: List<String>,
|
||||
permissionsState: MultiplePermissionsState,
|
||||
onProceed: () -> Unit
|
||||
) {
|
||||
val scrollState = rememberScrollState()
|
||||
|
||||
RegistrationScaffold(
|
||||
modifier = modifier.fillMaxSize(),
|
||||
content = {
|
||||
Row(
|
||||
horizontalArrangement = SpaceAround,
|
||||
modifier = Modifier.padding(top = 76.dp)
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.padding(horizontal = 24.dp)
|
||||
) {
|
||||
Text(
|
||||
text = stringResource(id = R.string.GrantPermissionsFragment__allow_permissions),
|
||||
style = MaterialTheme.typography.headlineMedium,
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
)
|
||||
|
||||
Text(
|
||||
text = stringResource(id = R.string.GrantPermissionsFragment__to_help_you_message_people_you_know),
|
||||
style = MaterialTheme.typography.bodyLarge,
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
modifier = Modifier.padding(top = 16.dp)
|
||||
)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.weight(1f)
|
||||
.fillMaxHeight()
|
||||
.verticalScroll(scrollState)
|
||||
.padding(horizontal = 24.dp)
|
||||
) {
|
||||
PermissionList(permissions)
|
||||
Spacer(modifier = Modifier.padding(48.dp))
|
||||
}
|
||||
}
|
||||
},
|
||||
footer = {
|
||||
PermissionButtons(onProceed, permissionsState, scrollState.canScrollForward)
|
||||
PermissionButtons(
|
||||
onProceed = onProceed,
|
||||
permissionsState = permissionsState,
|
||||
showElevation = scrollState.canScrollForward,
|
||||
modifier = Modifier.padding(params.bottomInset)
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -331,17 +264,19 @@ private fun PermissionRow(
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun PermissionButtons(onProceed: () -> Unit, permissionsState: MultiplePermissionsState, showElevation: Boolean) {
|
||||
private fun PermissionButtons(
|
||||
onProceed: () -> Unit,
|
||||
permissionsState: MultiplePermissionsState,
|
||||
showElevation: Boolean,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
shadowElevation = if (showElevation) 8.dp else 0.dp
|
||||
) {
|
||||
Row(
|
||||
horizontalArrangement = Arrangement.Absolute.Right,
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(vertical = 16.dp)
|
||||
.horizontalGutters()
|
||||
horizontalArrangement = Arrangement.End,
|
||||
modifier = modifier.fillMaxWidth()
|
||||
) {
|
||||
TextButton(
|
||||
modifier = Modifier
|
||||
|
||||
Reference in New Issue
Block a user