diff --git a/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationActivity.kt b/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationActivity.kt index 9708f13be..518c2e61e 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationActivity.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationActivity.kt @@ -138,14 +138,14 @@ fun ConversationCreationScreen( context: Context, pickImage: PickImage ) { - var selectedImageUri by remember { mutableStateOf(null) } + val selectedImageUri = conversationCreationViewModel.selectedImageUriState.collectAsState().value val imagePickerLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartActivityForResult() ) { result -> if (result.resultCode == Activity.RESULT_OK) { pickImage.onImagePickerResult(result.data) { uri -> - selectedImageUri = uri + conversationCreationViewModel.updateSelectedImageUri(uri) } } } @@ -205,18 +205,18 @@ fun ConversationCreationScreen( DefaultUserAvatar(selectedImageUri) UploadAvatar( pickImage = pickImage, - onImageSelected = { uri -> selectedImageUri = uri }, + onImageSelected = { uri -> conversationCreationViewModel.updateSelectedImageUri(uri) }, imagePickerLauncher = imagePickerLauncher, remoteFilePickerLauncher = remoteFilePickerLauncher, cameraLauncher = cameraLauncher, - onDeleteImage = { selectedImageUri = null }, + onDeleteImage = { conversationCreationViewModel.updateSelectedImageUri(null) }, selectedImageUri = selectedImageUri ) ConversationNameAndDescription(conversationCreationViewModel) AddParticipants(launcher, context, conversationCreationViewModel) RoomCreationOptions(conversationCreationViewModel) - CreateConversation(conversationCreationViewModel, context, selectedImageUri) + CreateConversation(conversationCreationViewModel, context) } } ) @@ -550,11 +550,11 @@ fun ConversationOptions( @Composable fun ShowPasswordDialog(onDismiss: () -> Unit, conversationCreationViewModel: ConversationCreationViewModel) { + var password by remember { mutableStateOf("") } AlertDialog( containerColor = colorResource(id = R.color.dialog_background), - onDismissRequest = onDismiss, confirmButton = { Button(onClick = { @@ -585,8 +585,7 @@ fun ShowPasswordDialog(onDismiss: () -> Unit, conversationCreationViewModel: Con @Composable fun CreateConversation( conversationCreationViewModel: ConversationCreationViewModel, - context: Context, - selectedImageUri: Uri? + context: Context ) { val selectedParticipants by conversationCreationViewModel.selectedParticipants.collectAsState() Box( @@ -600,8 +599,7 @@ fun CreateConversation( conversationCreationViewModel.createRoomAndAddParticipants( roomType = CompanionClass.ROOM_TYPE_GROUP, conversationName = conversationCreationViewModel.roomName.value, - participants = selectedParticipants.toSet(), - selectedImageUri = selectedImageUri + participants = selectedParticipants.toSet() ) { roomToken -> val bundle = Bundle() bundle.putString(BundleKeys.KEY_ROOM_TOKEN, roomToken) diff --git a/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationViewModel.kt b/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationViewModel.kt index 38586a6e3..99fa5ae67 100644 --- a/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationViewModel.kt @@ -32,6 +32,10 @@ class ConversationCreationViewModel @Inject constructor( val selectedParticipants: StateFlow> = _selectedParticipants private val roomViewState = MutableStateFlow(RoomUIState.None) + private val selectedImageUri = MutableStateFlow(null) + val selectedImageUriState:StateFlow = selectedImageUri + + private val _currentUser = userManager.currentUser.blockingGet() val currentUser: User = _currentUser @@ -39,6 +43,10 @@ class ConversationCreationViewModel @Inject constructor( _selectedParticipants.value = participants } + fun updateSelectedImageUri(uri:Uri?){ + selectedImageUri.value = uri + } + private val _roomName = MutableStateFlow("") val roomName: StateFlow = _roomName private val _password = MutableStateFlow("") @@ -66,7 +74,6 @@ class ConversationCreationViewModel @Inject constructor( roomType: String, conversationName: String, participants: Set, - selectedImageUri: Uri?, onRoomCreated: (String) -> Unit ) { val scope = when { @@ -109,9 +116,7 @@ class ConversationCreationViewModel @Inject constructor( repository.setPassword(token, _password.value) } repository.openConversation(token, scope) - if (selectedImageUri != null) { - repository.uploadConversationAvatar(selectedImageUri.toFile(), token) - } + selectedImageUri.value?.let { repository.uploadConversationAvatar(it.toFile(), token) } onRoomCreated(token) } catch (exception: Exception) { allowGuestsResult.value = AllowGuestsUiState.Error(exception.message ?: "")