Explorar el Código

Get selectedImageUri from ViewModel

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
sowjanyakch hace 5 meses
padre
commit
4dd22d6223

+ 8 - 10
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<Uri?>(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)

+ 9 - 4
app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationViewModel.kt

@@ -32,6 +32,10 @@ class ConversationCreationViewModel @Inject constructor(
     val selectedParticipants: StateFlow<List<AutocompleteUser>> = _selectedParticipants
     private val roomViewState = MutableStateFlow<RoomUIState>(RoomUIState.None)
 
+    private val selectedImageUri = MutableStateFlow<Uri?>(null)
+    val selectedImageUriState:StateFlow<Uri?> = 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<String> = _roomName
     private val _password = MutableStateFlow("")
@@ -66,7 +74,6 @@ class ConversationCreationViewModel @Inject constructor(
         roomType: String,
         conversationName: String,
         participants: Set<AutocompleteUser>,
-        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 ?: "")