Browse Source

Add Change Password dialogue

Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
sowjanyakch 8 months ago
parent
commit
381804c892

+ 89 - 4
app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationActivity.kt

@@ -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))

+ 7 - 0
app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationViewModel.kt

@@ -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 {

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -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>