@@ -11,6 +11,8 @@ package com.nextcloud.talk.conversationcreation
1111
1212import android.annotation.SuppressLint
1313import android.app.Activity
14+ import android.content.ClipData
15+ import android.content.ClipboardManager
1416import android.content.Context
1517import android.content.Intent
1618import 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