Resume action once persmission has been granted.
This commit is contained in:
parent
6d41542bd0
commit
f91ca07a5e
3 changed files with 29 additions and 0 deletions
|
|
@ -18,6 +18,7 @@ package io.element.android.features.createroom.impl.configureroom
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
|
|
@ -58,6 +59,7 @@ class ConfigureRoomPresenter @Inject constructor(
|
||||||
) : Presenter<ConfigureRoomState> {
|
) : Presenter<ConfigureRoomState> {
|
||||||
|
|
||||||
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
||||||
|
private var pendingPermissionRequest = false
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): ConfigureRoomState {
|
override fun present(): ConfigureRoomState {
|
||||||
|
|
@ -81,6 +83,13 @@ class ConfigureRoomPresenter @Inject constructor(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LaunchedEffect(cameraPermissionState.permissionGranted) {
|
||||||
|
if (cameraPermissionState.permissionGranted && pendingPermissionRequest) {
|
||||||
|
pendingPermissionRequest = false
|
||||||
|
cameraPhotoPicker.launch()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val localCoroutineScope = rememberCoroutineScope()
|
val localCoroutineScope = rememberCoroutineScope()
|
||||||
val createRoomAction: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) }
|
val createRoomAction: MutableState<Async<RoomId>> = remember { mutableStateOf(Async.Uninitialized) }
|
||||||
|
|
||||||
|
|
@ -102,6 +111,7 @@ class ConfigureRoomPresenter @Inject constructor(
|
||||||
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
|
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
|
||||||
cameraPhotoPicker.launch()
|
cameraPhotoPicker.launch()
|
||||||
} else {
|
} else {
|
||||||
|
pendingPermissionRequest = true
|
||||||
cameraPermissionState.eventSink(PermissionsEvents.AskPermissionToUser)
|
cameraPermissionState.eventSink(PermissionsEvents.AskPermissionToUser)
|
||||||
}
|
}
|
||||||
AvatarAction.Remove -> dataStore.setAvatarUri(uri = null)
|
AvatarAction.Remove -> dataStore.setAvatarUri(uri = null)
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ package io.element.android.features.preferences.impl.user.editprofile
|
||||||
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.MutableState
|
import androidx.compose.runtime.MutableState
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
|
@ -55,6 +56,7 @@ class EditUserProfilePresenter @AssistedInject constructor(
|
||||||
) : Presenter<EditUserProfileState> {
|
) : Presenter<EditUserProfileState> {
|
||||||
|
|
||||||
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
private val cameraPermissionPresenter: PermissionsPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
||||||
|
private var pendingPermissionRequest = false
|
||||||
|
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
|
|
@ -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 saveAction: MutableState<Async<Unit>> = remember { mutableStateOf(Async.Uninitialized) }
|
||||||
val localCoroutineScope = rememberCoroutineScope()
|
val localCoroutineScope = rememberCoroutineScope()
|
||||||
fun handleEvents(event: EditUserProfileEvents) {
|
fun handleEvents(event: EditUserProfileEvents) {
|
||||||
|
|
@ -94,6 +103,7 @@ class EditUserProfilePresenter @AssistedInject constructor(
|
||||||
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
|
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
|
||||||
cameraPhotoPicker.launch()
|
cameraPhotoPicker.launch()
|
||||||
} else {
|
} else {
|
||||||
|
pendingPermissionRequest = true
|
||||||
cameraPermissionState.eventSink.invoke(PermissionsEvents.AskPermissionToUser)
|
cameraPermissionState.eventSink.invoke(PermissionsEvents.AskPermissionToUser)
|
||||||
}
|
}
|
||||||
AvatarAction.Remove -> userAvatarUri = null
|
AvatarAction.Remove -> userAvatarUri = null
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,7 @@ class RoomDetailsEditPresenter @Inject constructor(
|
||||||
) : Presenter<RoomDetailsEditState> {
|
) : Presenter<RoomDetailsEditState> {
|
||||||
|
|
||||||
private val cameraPermissionPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
private val cameraPermissionPresenter = permissionsPresenterFactory.create(android.Manifest.permission.CAMERA)
|
||||||
|
private var pendingPermissionRequest = false
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): RoomDetailsEditState {
|
override fun present(): RoomDetailsEditState {
|
||||||
|
|
@ -98,6 +99,13 @@ class RoomDetailsEditPresenter @Inject constructor(
|
||||||
onResult = { uri -> if (uri != null) roomAvatarUri = uri }
|
onResult = { uri -> if (uri != null) roomAvatarUri = uri }
|
||||||
)
|
)
|
||||||
|
|
||||||
|
LaunchedEffect(cameraPermissionState.permissionGranted) {
|
||||||
|
if (cameraPermissionState.permissionGranted && pendingPermissionRequest) {
|
||||||
|
pendingPermissionRequest = false
|
||||||
|
cameraPhotoPicker.launch()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val avatarActions by remember(roomAvatarUri) {
|
val avatarActions by remember(roomAvatarUri) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
listOfNotNull(
|
listOfNotNull(
|
||||||
|
|
@ -119,6 +127,7 @@ class RoomDetailsEditPresenter @Inject constructor(
|
||||||
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
|
AvatarAction.TakePhoto -> if (cameraPermissionState.permissionGranted) {
|
||||||
cameraPhotoPicker.launch()
|
cameraPhotoPicker.launch()
|
||||||
} else {
|
} else {
|
||||||
|
pendingPermissionRequest = true
|
||||||
cameraPermissionState.eventSink(PermissionsEvents.AskPermissionToUser)
|
cameraPermissionState.eventSink(PermissionsEvents.AskPermissionToUser)
|
||||||
}
|
}
|
||||||
AvatarAction.Remove -> roomAvatarUri = null
|
AvatarAction.Remove -> roomAvatarUri = null
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue