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