mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-05-14 12:10:36 +01:00
Ask for permissions on the same screen.
This commit is contained in:
committed by
jeffrey-signal
parent
b21a72153a
commit
ce582249ec
+9
-7
@@ -171,7 +171,6 @@ fun RegistrationNavHost(
|
||||
)
|
||||
|
||||
val registrationState by viewModel.state.collectAsStateWithLifecycle()
|
||||
val permissions: MultiplePermissionsState = permissionsState ?: rememberMultiplePermissionsState(viewModel.getRequiredPermissions())
|
||||
|
||||
if (registrationState.isRestoringNavigationState) {
|
||||
Box(modifier = modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
|
||||
@@ -184,7 +183,7 @@ fun RegistrationNavHost(
|
||||
navigationEntries(
|
||||
registrationRepository = registrationRepository,
|
||||
registrationViewModel = viewModel,
|
||||
permissionsState = permissions,
|
||||
permissionsState = permissionsState,
|
||||
onRegistrationComplete = onRegistrationComplete
|
||||
)
|
||||
}
|
||||
@@ -238,7 +237,7 @@ fun RegistrationNavHost(
|
||||
private fun EntryProviderScope<NavKey>.navigationEntries(
|
||||
registrationRepository: RegistrationRepository,
|
||||
registrationViewModel: RegistrationViewModel,
|
||||
permissionsState: MultiplePermissionsState,
|
||||
permissionsState: MultiplePermissionsState?,
|
||||
onRegistrationComplete: () -> Unit
|
||||
) {
|
||||
val parentEventEmitter: (RegistrationFlowEvent) -> Unit = registrationViewModel::onEvent
|
||||
@@ -259,11 +258,14 @@ private fun EntryProviderScope<NavKey>.navigationEntries(
|
||||
|
||||
// --- Permissions Screen
|
||||
entry<RegistrationRoute.Permissions> { key ->
|
||||
val onProceed = { parentEventEmitter.navigateTo(key.nextRoute) }
|
||||
val localPermissionsState = permissionsState ?: rememberMultiplePermissionsState(
|
||||
permissions = registrationViewModel.getRequiredPermissions(),
|
||||
onPermissionsResult = { onProceed() }
|
||||
)
|
||||
PermissionsScreen(
|
||||
permissionsState = permissionsState,
|
||||
onProceed = {
|
||||
parentEventEmitter.navigateTo(key.nextRoute)
|
||||
}
|
||||
permissionsState = localPermissionsState,
|
||||
onProceed = onProceed
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+5
-2
@@ -377,8 +377,11 @@ private fun PermissionButtons(onProceed: () -> Unit, permissionsState: MultipleP
|
||||
Buttons.LargeTonal(
|
||||
modifier = Modifier.testTag(TestTags.PERMISSIONS_NEXT_BUTTON),
|
||||
onClick = {
|
||||
permissionsState.launchMultiplePermissionRequest()
|
||||
onProceed()
|
||||
if (permissionsState.allPermissionsGranted) {
|
||||
onProceed()
|
||||
} else {
|
||||
permissionsState.launchMultiplePermissionRequest()
|
||||
}
|
||||
}
|
||||
) {
|
||||
Text(
|
||||
|
||||
+4
-3
@@ -105,9 +105,9 @@ class RegistrationNavigationTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `clicking Next on Permissions navigates to PhoneNumber`() {
|
||||
fun `clicking Next on Permissions when they are all granted navigates to PhoneNumber`() {
|
||||
// Given
|
||||
val permissionsState = createMockPermissionsState()
|
||||
val permissionsState = createMockPermissionsState(allPermissionsGranted = true)
|
||||
|
||||
composeTestRule.setContent {
|
||||
SignalTheme {
|
||||
@@ -216,8 +216,9 @@ class RegistrationNavigationTest {
|
||||
* Creates a mock permissions state for testing.
|
||||
* Since we're in JUnit tests, we can't use the real rememberMultiplePermissionsState.
|
||||
*/
|
||||
private fun createMockPermissionsState(): MockMultiplePermissionsState {
|
||||
private fun createMockPermissionsState(allPermissionsGranted: Boolean = false): MockMultiplePermissionsState {
|
||||
return MockMultiplePermissionsState(
|
||||
allPermissionsGranted = allPermissionsGranted,
|
||||
permissions = viewModel.getRequiredPermissions().map { MockPermissionsState(it) }
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user