Add Change Password dialogue

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
This commit is contained in:
sowjanyakch 2024-09-20 15:41:02 +02:00 committed by Marcel Hibbe
parent 454c829313
commit 381804c892
No known key found for this signature in database
GPG Key ID: C793F8B59F43CE7B
3 changed files with 99 additions and 4 deletions

View File

@ -20,6 +20,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
@ -28,17 +29,21 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Button
import androidx.compose.material3.Card
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
@ -48,6 +53,7 @@ import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Switch
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.TextField
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
@ -56,6 +62,7 @@ import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -70,6 +77,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Dialog
import androidx.core.view.WindowCompat
import androidx.lifecycle.ViewModelProvider
import autodagger.AutoInjector
@ -436,6 +444,9 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
.isConversationAvailableForRegisteredUsers.value
val isOpenForGuestAppUsers = conversationCreationViewModel.openForGuestAppUsers.value
val isPasswordSet = conversationCreationViewModel.isPasswordEnabled.value
val isPasswordChanged = conversationCreationViewModel.isPasswordChanged.value
Text(
text = stringResource(id = R.string.nc_new_conversation_visibility).uppercase(),
fontSize = 14.sp,
@ -456,7 +467,7 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
conversationCreationViewModel = conversationCreationViewModel
)
if (isGuestsAllowed) {
if (isGuestsAllowed && !isPasswordSet) {
ConversationOptions(
icon = R.drawable.ic_lock_grey600_24px,
text = R.string.nc_set_password,
@ -465,6 +476,15 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
)
}
if (isGuestsAllowed && isPasswordSet) {
ConversationOptions(
icon = R.drawable.ic_lock_grey600_24px,
text = R.string.nc_change_password,
showDialog = false,
conversationCreationViewModel = conversationCreationViewModel
)
}
ConversationOptions(
icon = R.drawable.baseline_format_list_bulleted_24,
text = R.string.nc_open_conversation_to_registered_users,
@ -505,7 +525,7 @@ fun ConversationOptions(
showDialog: Boolean,
conversationCreationViewModel: ConversationCreationViewModel
) {
var showPasswordDialog by remember { mutableStateOf(false) }
var showPasswordDialog by rememberSaveable { mutableStateOf(false) }
Row(
modifier = Modifier
.fillMaxWidth()
@ -545,19 +565,84 @@ fun ConversationOptions(
conversationCreationViewModel = conversationCreationViewModel
)
}
if (conversationCreationViewModel.isPasswordChanged.value) {
ShowChangePassword(
onDismiss = {
},
conversationCreationViewModel = conversationCreationViewModel
)
}
}
}
@Composable
fun ShowChangePassword(onDismiss: () -> Unit, conversationCreationViewModel: ConversationCreationViewModel) {
var changedPassword by rememberSaveable { mutableStateOf("") }
Dialog(onDismissRequest = { }) {
Card(
modifier = Modifier
.fillMaxWidth()
.height(375.dp)
.padding(16.dp)
.background(color = colorResource(id = R.color.appbar))
.clickable {
if (conversationCreationViewModel.isPasswordEnabled.value) {
}
},
shape = RoundedCornerShape(16.dp)
) {
Column(
modifier = Modifier
.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = stringResource(id = R.string.nc_change_password))
OutlinedTextField(
value = changedPassword,
onValueChange = {
changedPassword = it
},
label = { Text(text = stringResource(id = R.string.nc_set_new_password)) },
singleLine = true
)
TextButton(
onClick = { },
modifier = Modifier.padding(8.dp)
) {
Text(text = stringResource(id = R.string.nc_change_password))
}
TextButton(
onClick = { },
modifier = Modifier.padding(8.dp)
) {
Text(text = stringResource(id = R.string.nc_remove_password))
}
TextButton(
onClick = { },
modifier = Modifier.padding(8.dp)
) {
Text(text = stringResource(id = R.string.nc_cancel))
}
}
}
}
}
@Composable
fun ShowPasswordDialog(onDismiss: () -> Unit, conversationCreationViewModel: ConversationCreationViewModel) {
var password by remember { mutableStateOf("") }
var password by rememberSaveable { mutableStateOf("") }
AlertDialog(
containerColor = colorResource(id = R.color.dialog_background),
onDismissRequest = onDismiss,
confirmButton = {
Button(onClick = {
conversationCreationViewModel.updatePassword(password)
if (password.isNotEmpty()) {
conversationCreationViewModel.updatePassword(password)
conversationCreationViewModel.isPasswordEnabled(true)
}
onDismiss()
}) {
Text(text = stringResource(id = R.string.save))

View File

@ -38,6 +38,12 @@ class ConversationCreationViewModel @Inject constructor(
private val _currentUser = userManager.currentUser.blockingGet()
val currentUser: User = _currentUser
private val _isPasswordEnabled = mutableStateOf(false)
val isPasswordEnabled = _isPasswordEnabled
private val _isPasswordChanged = mutableStateOf(false)
val isPasswordChanged = _isPasswordChanged
fun updateSelectedParticipants(participants: List<AutocompleteUser>) {
_selectedParticipants.value = participants
}
@ -73,6 +79,7 @@ class ConversationCreationViewModel @Inject constructor(
roomType: String,
conversationName: String,
participants: Set<AutocompleteUser>,
selectedImageUri: Uri?,
onRoomCreated: (String) -> Unit
) {
val scope = when {

View File

@ -434,6 +434,9 @@ How to translate with transifex:
<string name="nc_guest_access_allow_summary">Allow guests to share a public link to join this conversation.</string>
<string name="nc_guest_access_allow_failed">Cannot enable/disable guest access.</string>
<string name="nc_set_password">Set Password</string>
<string name="nc_change_password">Change Password</string>
<string name="nc_remove_password">Remove Password</string>
<string name="nc_set_new_password">Set a new password</string>
<string name="nc_guest_access_password_title">Password protection</string>
<string name="nc_guest_access_password_summary">Set a password to restrict who can use the public link.</string>
<string name="nc_guest_access_password_dialog_title">Guest access password</string>