Browse Source

Resume action once persmission has been granted.

pull/1400/head
Benoit Marty 1 year ago
parent
commit
e4ca2484ba
  1. 10
      features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt
  2. 10
      features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenter.kt
  3. 9
      features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt

10
features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/configureroom/ConfigureRoomPresenter.kt

@ -18,6 +18,7 @@ package io.element.android.features.createroom.impl.configureroom @@ -18,6 +18,7 @@ package io.element.android.features.createroom.impl.configureroom
import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
@ -58,6 +59,7 @@ class ConfigureRoomPresenter @Inject constructor( @@ -58,6 +59,7 @@ class ConfigureRoomPresenter @Inject constructor(
) : Presenter<ConfigureRoomState> {
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
private var pendingPermissionRequest = false
@Composable
override fun present(): ConfigureRoomState {
@ -81,6 +83,13 @@ class ConfigureRoomPresenter @Inject constructor( @@ -81,6 +83,13 @@ class ConfigureRoomPresenter @Inject constructor(
}
}
LaunchedEffect(cameraPermissionState.permissionGranted) {
if (cameraPermissionState.permissionGranted && pendingPermissionRequest) {
pendingPermissionRequest = false
cameraPhotoPicker.launch()
}
}
val localCoroutineScope = rememberCoroutineScope()
val createRoomAction: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) }
@ -102,6 +111,7 @@ class ConfigureRoomPresenter @Inject constructor( @@ -102,6 +111,7 @@ class ConfigureRoomPresenter @Inject constructor(
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
cameraPhotoPicker.launch()
} else {
pendingPermissionRequest = true
cameraPermissionState.eventSink(PermissionsEvents.AskPermissionToUser)
}
AvatarAction.Remove -> dataStore.setAvatarUri(uri = null)

10
features/preferences/impl/src/main/kotlin/io/element/android/features/preferences/impl/user/editprofile/EditUserProfilePresenter.kt

@ -18,6 +18,7 @@ package io.element.android.features.preferences.impl.user.editprofile @@ -18,6 +18,7 @@ package io.element.android.features.preferences.impl.user.editprofile
import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
@ -55,6 +56,7 @@ class EditUserProfilePresenter @AssistedInject constructor( @@ -55,6 +56,7 @@ class EditUserProfilePresenter @AssistedInject constructor(
) : Presenter<EditUserProfileState> {
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
private var pendingPermissionRequest = false
@AssistedFactory
interface Factory {
@ -83,6 +85,13 @@ class EditUserProfilePresenter @AssistedInject constructor( @@ -83,6 +85,13 @@ class EditUserProfilePresenter @AssistedInject constructor(
}
}
LaunchedEffect(cameraPermissionState.permissionGranted) {
if (cameraPermissionState.permissionGranted && pendingPermissionRequest) {
pendingPermissionRequest = false
cameraPhotoPicker.launch()
}
}
val saveAction: MutableState<Async<Unit>> = remember { mutableStateOf(Async.Uninitialized) }
val localCoroutineScope = rememberCoroutineScope()
fun handleEvents(event: EditUserProfileEvents) {
@ -94,6 +103,7 @@ class EditUserProfilePresenter @AssistedInject constructor( @@ -94,6 +103,7 @@ class EditUserProfilePresenter @AssistedInject constructor(
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
cameraPhotoPicker.launch()
} else {
pendingPermissionRequest = true
cameraPermissionState.eventSink.invoke(PermissionsEvents.AskPermissionToUser)
}
AvatarAction.Remove -> userAvatarUri = null

9
features/roomdetails/impl/src/main/kotlin/io/element/android/features/roomdetails/impl/edit/RoomDetailsEditPresenter.kt

@ -55,6 +55,7 @@ class RoomDetailsEditPresenter @Inject constructor( @@ -55,6 +55,7 @@ class RoomDetailsEditPresenter @Inject constructor(
) : Presenter<RoomDetailsEditState> {
private val cameraPermissionPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
private var pendingPermissionRequest = false
@Composable
override fun present(): RoomDetailsEditState {
@ -98,6 +99,13 @@ class RoomDetailsEditPresenter @Inject constructor( @@ -98,6 +99,13 @@ class RoomDetailsEditPresenter @Inject constructor(
onResult = { uri -> if (uri != null) roomAvatarUri = uri }
)
LaunchedEffect(cameraPermissionState.permissionGranted) {
if (cameraPermissionState.permissionGranted && pendingPermissionRequest) {
pendingPermissionRequest = false
cameraPhotoPicker.launch()
}
}
val avatarActions by remember(roomAvatarUri) {
derivedStateOf {
listOfNotNull(
@ -119,6 +127,7 @@ class RoomDetailsEditPresenter @Inject constructor( @@ -119,6 +127,7 @@ class RoomDetailsEditPresenter @Inject constructor(
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
cameraPhotoPicker.launch()
} else {
pendingPermissionRequest = true
cameraPermissionState.eventSink(PermissionsEvents.AskPermissionToUser)
}
AvatarAction.Remove -> roomAvatarUri = null

Loading…
Cancel
Save