Skip to content

Commit 697db16

Browse files
committed
copy password
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
1 parent d36ab7d commit 697db16

5 files changed

Lines changed: 326 additions & 129 deletions

File tree

app/src/main/java/com/nextcloud/talk/conversationcreation/ConversationCreationActivity.kt

Lines changed: 88 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ package com.nextcloud.talk.conversationcreation
1111

1212
import android.annotation.SuppressLint
1313
import android.app.Activity
14+
import android.content.ClipData
15+
import android.content.ClipboardManager
1416
import android.content.Context
1517
import android.content.Intent
1618
import android.net.Uri
@@ -471,63 +473,84 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
471473
color = MaterialTheme.colorScheme.primary,
472474
modifier = Modifier.padding(top = 24.dp, start = 16.dp, end = 16.dp)
473475
)
474-
ConversationOptions(
475-
icon = R.drawable.ic_avatar_link,
476-
text = R.string.nc_guest_access_allow_title,
477-
switch = {
478-
Switch(
479-
checked = isGuestsAllowed,
480-
onCheckedChange = {
481-
conversationCreationViewModel.isGuestsAllowed.value = it
482-
}
483-
)
484-
},
485-
conversationCreationViewModel = conversationCreationViewModel
486-
)
487476

488-
if (isGuestsAllowed && !isPasswordSet) {
477+
Column {
489478
ConversationOptions(
490-
icon = R.drawable.baseline_lock_open_24,
491-
text = R.string.nc_set_password,
492-
conversationCreationViewModel = conversationCreationViewModel
479+
icon = R.drawable.ic_avatar_link,
480+
text = R.string.nc_guest_access_allow_title,
481+
switch = {
482+
Switch(
483+
checked = isGuestsAllowed,
484+
onCheckedChange = {
485+
conversationCreationViewModel.isGuestsAllowed.value = it
486+
}
487+
)
488+
},
489+
conversationCreationViewModel = conversationCreationViewModel,
490+
isPasswordSetOrChange = false,
491+
copyPassword = false
493492
)
494-
}
495493

496-
if (isGuestsAllowed && isPasswordSet) {
497-
ConversationOptions(
498-
icon = R.drawable.ic_lock_grey600_24px,
499-
text = R.string.nc_change_password,
500-
conversationCreationViewModel = conversationCreationViewModel
501-
)
502-
}
494+
if (isGuestsAllowed && !isPasswordSet) {
495+
ConversationOptions(
496+
icon = R.drawable.baseline_lock_open_24,
497+
text = R.string.nc_set_password,
498+
conversationCreationViewModel = conversationCreationViewModel,
499+
isPasswordSetOrChange = true,
500+
copyPassword = false
501+
)
502+
}
503503

504-
ConversationOptions(
505-
icon = R.drawable.baseline_format_list_bulleted_24,
506-
text = R.string.nc_open_conversation_to_registered_users,
507-
switch = {
508-
Switch(
509-
checked = isConversationAvailableForRegisteredUsers,
510-
onCheckedChange = {
511-
conversationCreationViewModel.isConversationAvailableForRegisteredUsers.value = it
512-
}
504+
if (isGuestsAllowed && isPasswordSet) {
505+
ConversationOptions(
506+
icon = R.drawable.ic_lock_grey600_24px,
507+
text = R.string.nc_change_password,
508+
conversationCreationViewModel = conversationCreationViewModel,
509+
isPasswordSetOrChange = true,
510+
copyPassword = false
513511
)
514-
},
515-
conversationCreationViewModel = conversationCreationViewModel
516-
)
512+
}
513+
if (isGuestsAllowed && isPasswordSet) {
514+
ConversationOptions(
515+
icon = R.drawable.ic_content_copy,
516+
text = R.string.nc_copy_password,
517+
conversationCreationViewModel = conversationCreationViewModel,
518+
isPasswordSetOrChange = false,
519+
copyPassword = true
520+
)
521+
}
517522

518-
if (isConversationAvailableForRegisteredUsers) {
519523
ConversationOptions(
520-
text = R.string.nc_open_to_guest_app_users,
524+
icon = R.drawable.baseline_format_list_bulleted_24,
525+
text = R.string.nc_open_conversation_to_registered_users,
521526
switch = {
522527
Switch(
523-
checked = isOpenForGuestAppUsers,
528+
checked = isConversationAvailableForRegisteredUsers,
524529
onCheckedChange = {
525-
conversationCreationViewModel.openForGuestAppUsers.value = it
530+
conversationCreationViewModel.isConversationAvailableForRegisteredUsers.value = it
526531
}
527532
)
528533
},
529-
conversationCreationViewModel = conversationCreationViewModel
534+
conversationCreationViewModel = conversationCreationViewModel,
535+
isPasswordSetOrChange = false,
536+
copyPassword = false
530537
)
538+
if (isConversationAvailableForRegisteredUsers) {
539+
ConversationOptions(
540+
text = R.string.nc_open_to_guest_app_users,
541+
switch = {
542+
Switch(
543+
checked = isOpenForGuestAppUsers,
544+
onCheckedChange = {
545+
conversationCreationViewModel.openForGuestAppUsers.value = it
546+
}
547+
)
548+
},
549+
conversationCreationViewModel = conversationCreationViewModel,
550+
isPasswordSetOrChange = false,
551+
copyPassword = false
552+
)
553+
}
531554
}
532555
}
533556

@@ -536,8 +559,11 @@ fun ConversationOptions(
536559
icon: Int? = null,
537560
text: Int,
538561
switch: @Composable (() -> Unit)? = null,
539-
conversationCreationViewModel: ConversationCreationViewModel
562+
conversationCreationViewModel: ConversationCreationViewModel,
563+
isPasswordSetOrChange: Boolean,
564+
copyPassword: Boolean
540565
) {
566+
val context = LocalContext.current
541567
var showPasswordDialog by rememberSaveable { mutableStateOf(false) }
542568
var showPasswordChangeDialog by rememberSaveable { mutableStateOf(false) }
543569
val passwordValidationState by conversationCreationViewModel.validPasswordViewState.collectAsStateWithLifecycle()
@@ -546,19 +572,29 @@ fun ConversationOptions(
546572
.fillMaxWidth()
547573
.padding(start = 16.dp, end = 16.dp, bottom = 8.dp)
548574
.then(
549-
if (!conversationCreationViewModel.isPasswordEnabled.value) {
575+
if (!conversationCreationViewModel.isPasswordEnabled.value && isPasswordSetOrChange) {
550576
Modifier.clickable {
551577
showPasswordDialog = true
552578
}
553-
} else if (conversationCreationViewModel.isPasswordEnabled.value) {
579+
} else if (conversationCreationViewModel.isPasswordEnabled.value && isPasswordSetOrChange) {
554580
Modifier.clickable {
555581
showPasswordChangeDialog = true
556582
}
583+
} else if (copyPassword) {
584+
Modifier.clickable {
585+
val clipboardManager =
586+
context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
587+
val clip = ClipData.newPlainText(
588+
context.getString(R.string.nc_app_product_name),
589+
conversationCreationViewModel.password.value
590+
)
591+
clipboardManager.setPrimaryClip(clip)
592+
}
557593
} else {
558594
Modifier
559595
}
560596
),
561-
horizontalArrangement = Arrangement.SpaceBetween,
597+
horizontalArrangement = Arrangement.SpaceEvenly,
562598
verticalAlignment = Alignment.CenterVertically
563599
) {
564600
if (icon != null) {
@@ -760,19 +796,23 @@ fun PasswordValidationMessage(passwordValidationState: ValidPasswordUiState) {
760796
is ValidPasswordUiState.Success -> Text(
761797
text = passwordValidationState.result.reason
762798
?: stringResource(R.string.nc_password_secure),
763-
color = if ((passwordValidationState as ValidPasswordUiState.Success).result.passed == false) {
799+
color = if ((passwordValidationState).result.passed == false) {
764800
colorResource(
765801
id = R.color
766802
.nc_darkRed
767803
)
768804
} else {
769805
colorResource(id = R.color.nc_darkGreen)
770806
},
807+
style = MaterialTheme.typography.bodySmall,
771808
modifier = Modifier.fillMaxWidth()
772809
)
773810

774811
is ValidPasswordUiState.Error -> {
775-
Text(text = passwordValidationState.message)
812+
Text(
813+
text = passwordValidationState.message,
814+
style = MaterialTheme.typography.bodySmall
815+
)
776816
}
777817

778818
else -> {

0 commit comments

Comments
 (0)