Skip to content

Commit 394122e

Browse files
committed
copy password
Signed-off-by: sowjanyakch <sowjanya.kch@gmail.com>
1 parent b63f8a3 commit 394122e

5 files changed

Lines changed: 329 additions & 132 deletions

File tree

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

Lines changed: 91 additions & 51 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
@@ -567,73 +569,97 @@ fun RoomCreationOptions(conversationCreationViewModel: ConversationCreationViewM
567569
color = MaterialTheme.colorScheme.primary,
568570
modifier = Modifier.padding(top = 24.dp, start = 16.dp, end = 16.dp)
569571
)
570-
ConversationOption(
571-
icon = R.drawable.ic_avatar_link,
572-
text = R.string.nc_guest_access_allow_title,
573-
switch = {
574-
Switch(
575-
checked = isGuestsAllowed,
576-
onCheckedChange = {
577-
conversationCreationViewModel.isGuestsAllowed.value = it
578-
}
579-
)
580-
},
581-
conversationCreationViewModel = conversationCreationViewModel
582-
)
583572

584-
if (isGuestsAllowed && !isPasswordSet) {
585-
ConversationOption(
586-
icon = R.drawable.baseline_lock_open_24,
587-
text = R.string.nc_set_password,
588-
conversationCreationViewModel = conversationCreationViewModel
573+
Column {
574+
ConversationOptions(
575+
icon = R.drawable.ic_avatar_link,
576+
text = R.string.nc_guest_access_allow_title,
577+
switch = {
578+
Switch(
579+
checked = isGuestsAllowed,
580+
onCheckedChange = {
581+
conversationCreationViewModel.isGuestsAllowed.value = it
582+
}
583+
)
584+
},
585+
conversationCreationViewModel = conversationCreationViewModel,
586+
isPasswordSetOrChange = false,
587+
copyPassword = false
589588
)
590-
}
591589

592-
if (isGuestsAllowed && isPasswordSet) {
593-
ConversationOption(
594-
icon = R.drawable.ic_lock_grey600_24px,
595-
text = R.string.nc_change_password,
596-
conversationCreationViewModel = conversationCreationViewModel
597-
)
598-
}
590+
if (isGuestsAllowed && !isPasswordSet) {
591+
ConversationOptions(
592+
icon = R.drawable.baseline_lock_open_24,
593+
text = R.string.nc_set_password,
594+
conversationCreationViewModel = conversationCreationViewModel,
595+
isPasswordSetOrChange = true,
596+
copyPassword = false
597+
)
598+
}
599599

600-
ConversationOption(
601-
icon = R.drawable.baseline_format_list_bulleted_24,
602-
text = R.string.nc_open_conversation_to_registered_users,
603-
switch = {
604-
Switch(
605-
checked = isConversationAvailableForRegisteredUsers,
606-
onCheckedChange = {
607-
conversationCreationViewModel.isConversationAvailableForRegisteredUsers.value = it
608-
}
600+
if (isGuestsAllowed && isPasswordSet) {
601+
ConversationOptions(
602+
icon = R.drawable.ic_lock_grey600_24px,
603+
text = R.string.nc_change_password,
604+
conversationCreationViewModel = conversationCreationViewModel,
605+
isPasswordSetOrChange = true,
606+
copyPassword = false
609607
)
610-
},
611-
conversationCreationViewModel = conversationCreationViewModel
612-
)
608+
}
609+
if (isGuestsAllowed && isPasswordSet) {
610+
ConversationOptions(
611+
icon = R.drawable.ic_content_copy,
612+
text = R.string.nc_copy_password,
613+
conversationCreationViewModel = conversationCreationViewModel,
614+
isPasswordSetOrChange = false,
615+
copyPassword = true
616+
)
617+
}
613618

614-
if (isConversationAvailableForRegisteredUsers) {
615-
ConversationOption(
616-
text = R.string.nc_open_to_guest_app_users,
619+
ConversationOptions(
620+
icon = R.drawable.baseline_format_list_bulleted_24,
621+
text = R.string.nc_open_conversation_to_registered_users,
617622
switch = {
618623
Switch(
619-
checked = isOpenForGuestAppUsers,
624+
checked = isConversationAvailableForRegisteredUsers,
620625
onCheckedChange = {
621-
conversationCreationViewModel.openForGuestAppUsers.value = it
626+
conversationCreationViewModel.isConversationAvailableForRegisteredUsers.value = it
622627
}
623628
)
624629
},
625-
conversationCreationViewModel = conversationCreationViewModel
630+
conversationCreationViewModel = conversationCreationViewModel,
631+
isPasswordSetOrChange = false,
632+
copyPassword = false
626633
)
634+
if (isConversationAvailableForRegisteredUsers) {
635+
ConversationOptions(
636+
text = R.string.nc_open_to_guest_app_users,
637+
switch = {
638+
Switch(
639+
checked = isOpenForGuestAppUsers,
640+
onCheckedChange = {
641+
conversationCreationViewModel.openForGuestAppUsers.value = it
642+
}
643+
)
644+
},
645+
conversationCreationViewModel = conversationCreationViewModel,
646+
isPasswordSetOrChange = false,
647+
copyPassword = false
648+
)
649+
}
627650
}
628651
}
629652

630653
@Composable
631-
fun ConversationOption(
654+
fun ConversationOptions(
632655
icon: Int? = null,
633656
text: Int,
634657
switch: @Composable (() -> Unit)? = null,
635-
conversationCreationViewModel: ConversationCreationViewModel
658+
conversationCreationViewModel: ConversationCreationViewModel,
659+
isPasswordSetOrChange: Boolean,
660+
copyPassword: Boolean
636661
) {
662+
val context = LocalContext.current
637663
var showPasswordDialog by rememberSaveable { mutableStateOf(false) }
638664
var showPasswordChangeDialog by rememberSaveable { mutableStateOf(false) }
639665
val passwordValidationState by conversationCreationViewModel.validPasswordViewState.collectAsStateWithLifecycle()
@@ -642,19 +668,29 @@ fun ConversationOption(
642668
.fillMaxWidth()
643669
.padding(start = 16.dp, end = 16.dp, bottom = 8.dp)
644670
.then(
645-
if (!conversationCreationViewModel.isPasswordEnabled.value) {
671+
if (!conversationCreationViewModel.isPasswordEnabled.value && isPasswordSetOrChange) {
646672
Modifier.clickable {
647673
showPasswordDialog = true
648674
}
649-
} else if (conversationCreationViewModel.isPasswordEnabled.value) {
675+
} else if (conversationCreationViewModel.isPasswordEnabled.value && isPasswordSetOrChange) {
650676
Modifier.clickable {
651677
showPasswordChangeDialog = true
652678
}
679+
} else if (copyPassword) {
680+
Modifier.clickable {
681+
val clipboardManager =
682+
context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
683+
val clip = ClipData.newPlainText(
684+
context.getString(R.string.nc_app_product_name),
685+
conversationCreationViewModel.password.value
686+
)
687+
clipboardManager.setPrimaryClip(clip)
688+
}
653689
} else {
654690
Modifier
655691
}
656692
),
657-
horizontalArrangement = Arrangement.SpaceBetween,
693+
horizontalArrangement = Arrangement.SpaceEvenly,
658694
verticalAlignment = Alignment.CenterVertically
659695
) {
660696
if (icon != null) {
@@ -856,19 +892,23 @@ fun PasswordValidationMessage(passwordValidationState: ValidPasswordUiState) {
856892
is ValidPasswordUiState.Success -> Text(
857893
text = passwordValidationState.result.reason
858894
?: stringResource(R.string.nc_password_secure),
859-
color = if ((passwordValidationState as ValidPasswordUiState.Success).result.passed == false) {
895+
color = if ((passwordValidationState).result.passed == false) {
860896
colorResource(
861897
id = R.color
862898
.nc_darkRed
863899
)
864900
} else {
865901
colorResource(id = R.color.nc_darkGreen)
866902
},
903+
style = MaterialTheme.typography.bodySmall,
867904
modifier = Modifier.fillMaxWidth()
868905
)
869906

870907
is ValidPasswordUiState.Error -> {
871-
Text(text = passwordValidationState.message)
908+
Text(
909+
text = passwordValidationState.message,
910+
style = MaterialTheme.typography.bodySmall
911+
)
872912
}
873913

874914
else -> {

0 commit comments

Comments
 (0)