make conversation available for registered users and guest app users

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
This commit is contained in:
sowjanyakch 2024-08-29 18:02:09 +02:00 committed by Marcel Hibbe
parent 1187b41e51
commit 5f3d73efce
No known key found for this signature in database
GPG key ID: C793F8B59F43CE7B
6 changed files with 74 additions and 12 deletions

View file

@ -60,6 +60,14 @@ interface NcApiCoroutines {
@Field("roomName") roomName: String?
): GenericOverall
@FormUrlEncoded
@PUT
suspend fun openConversation(
@Header("Authorization") authorization: String?,
@Url url: String,
@Field("scope") scope: Int
): GenericOverall
@FormUrlEncoded
@PUT
suspend fun setConversationDescription(

View file

@ -351,14 +351,16 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
}
)
},
showDialog = false
showDialog = false,
conversationCreationViewModel = conversationCreationViewModel
)
if (isGuestsAllowed) {
ConversationOptions(
icon = R.drawable.ic_lock_grey600_24px,
text = R.string.nc_set_password,
showDialog = true
showDialog = true,
conversationCreationViewModel = conversationCreationViewModel
)
}
@ -373,7 +375,8 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
}
)
},
showDialog = false
showDialog = false,
conversationCreationViewModel = conversationCreationViewModel
)
if (isConversationAvailableForRegisteredUsers) {
@ -387,13 +390,21 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
}
)
},
showDialog = false
showDialog = false,
conversationCreationViewModel = conversationCreationViewModel
)
}
}
@Composable
fun ConversationOptions(icon: Int? = null, text: Int, switch: @Composable (() -> Unit)? = null, showDialog: Boolean) {
fun ConversationOptions(
icon: Int? = null,
text: Int,
switch: @Composable (() -> Unit)? = null,
showDialog: Boolean,
conversationCreationViewModel: ConversationCreationViewModel
) {
var showPasswordDialog by remember { mutableStateOf(false) }
Row(
modifier = Modifier
.fillMaxWidth()
@ -401,6 +412,7 @@ fun ConversationOptions(icon: Int? = null, text: Int, switch: @Composable (() ->
.then(
if (showDialog) {
Modifier.clickable {
showPasswordDialog = true
}
} else {
Modifier
@ -426,29 +438,41 @@ fun ConversationOptions(icon: Int? = null, text: Int, switch: @Composable (() ->
if (switch != null) {
switch()
}
if (showPasswordDialog) {
ShowPasswordDialog(
onDismiss = { showPasswordDialog = false },
conversationCreationViewModel = conversationCreationViewModel
)
}
}
}
@Composable
fun ShowPasswordDialog() {
fun ShowPasswordDialog(onDismiss: () -> Unit, conversationCreationViewModel: ConversationCreationViewModel) {
var password by remember { mutableStateOf("") }
AlertDialog(
onDismissRequest = { /*TODO*/ },
onDismissRequest = onDismiss,
confirmButton = {
Button(onClick = {
conversationCreationViewModel.updatePassword(password)
onDismiss()
}) {
Text(text = stringResource(id = R.string.nc_cancel))
Text(text = "Save")
}
},
title = { Text(text = "Set Password") },
text = {
TextField(value = password, onValueChange = {
TextField(
value = password,
onValueChange = {
password = it
})
},
label = { Text(text = "Enter a password") }
)
},
dismissButton = {
Button(onClick = { /* Handle cancel */ }) {
Button(onClick = { onDismiss() }) {
Text(text = stringResource(id = R.string.nc_cancel))
}
}

View file

@ -16,6 +16,7 @@ interface ConversationCreationRepository {
suspend fun allowGuests(token: String, allow: Boolean): GenericOverall
suspend fun renameConversation(roomToken: String, roomNameNew: String?): GenericOverall
suspend fun setConversationDescription(roomToken: String, description: String?): GenericOverall
suspend fun openConversation(roomToken: String, scope: Int): GenericOverall
suspend fun addParticipants(conversationToken: String?, userId: String, sourceType: String): AddParticipantOverall
suspend fun createRoom(roomType: String, conversationName: String?): RoomOverall
fun getImageUri(avatarId: String, requestBigSize: Boolean): String

View file

@ -51,6 +51,18 @@ class ConversationCreationRepositoryImpl(
)
}
override suspend fun openConversation(roomToken: String, scope: Int): GenericOverall {
return ncApiCoroutines.openConversation(
credentials,
ApiUtils.getUrlForOpeningConversations(
apiVersion,
_currentUser.baseUrl,
roomToken
),
scope
)
}
override suspend fun addParticipants(
conversationToken: String?,
userId: String,

View file

@ -8,6 +8,7 @@
package com.nextcloud.talk.conversationcreation
import android.util.Log
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
@ -41,6 +42,7 @@ class ConversationCreationViewModel @Inject constructor(
var isGuestsAllowed = mutableStateOf(false)
var isConversationAvailableForRegisteredUsers = mutableStateOf(false)
var openForGuestAppUsers = mutableStateOf(false)
private val scope: MutableState<Int?> = mutableStateOf(null)
private val addParticipantsViewState = MutableStateFlow<AddParticipantsUiState>(AddParticipantsUiState.None)
val addParticipantsUiState: StateFlow<AddParticipantsUiState> = addParticipantsViewState
@ -111,6 +113,11 @@ class ConversationCreationViewModel @Inject constructor(
participants: Set<AutocompleteUser>,
onRoomCreated: (String) -> Unit
) {
val scope = when {
isConversationAvailableForRegisteredUsers.value && !openForGuestAppUsers.value -> 1
isConversationAvailableForRegisteredUsers.value && openForGuestAppUsers.value -> 2
else -> 0
}
viewModelScope.launch {
_roomViewState.value = RoomUIState.None
try {
@ -121,6 +128,10 @@ class ConversationCreationViewModel @Inject constructor(
val token = conversation.token
if (token != null) {
try {
val conversationDescription = repository.setConversationDescription(
token,
_conversationDescription.value
)
val allowGuestsResult = repository.allowGuests(token, isGuestsAllowed.value)
val statusCode: GenericMeta? = allowGuestsResult.ocs?.meta
val result = (statusCode?.statusCode == STATUS_CODE_OK)
@ -138,6 +149,8 @@ class ConversationCreationViewModel @Inject constructor(
}
}
}
val passwordResult = repository.setPassword(token, _password.value)
repository.openConversation(token, scope)
onRoomCreated(token)
} catch (exception: Exception) {
_allowGuestsResult.value = AllowGuestsUiState.Error(exception.message ?: "")

View file

@ -539,6 +539,10 @@ object ApiUtils {
return getUrlForRoom(version, baseUrl, token) + "/description"
}
fun getUrlForOpeningConversations(version: Int, baseUrl: String?, token: String): String {
return getUrlForRoom(version, baseUrl, token) + "/listable"
}
fun getUrlForTranslation(baseUrl: String): String {
return "$baseUrl$OCS_API_VERSION/translation/translate"
}