diff --git a/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt b/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt index a1bb12a84b..3dfd93bea7 100644 --- a/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt +++ b/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt @@ -91,7 +91,8 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() { KnownUsersFragment::class.java, KnownUsersFragmentArgs( title = getString(R.string.fab_menu_create_chat), - menuResId = R.menu.vector_create_direct_room + menuResId = R.menu.vector_create_direct_room, + isCreatingRoom = true ) ) } diff --git a/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragment.kt b/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragment.kt index c832fe4833..17e619d990 100644 --- a/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragment.kt +++ b/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragment.kt @@ -91,6 +91,9 @@ class KnownUsersFragment @Inject constructor( val showMenuItem = it.pendingInvitees.isNotEmpty() menu.forEach { menuItem -> menuItem.isVisible = showMenuItem + if (args.isCreatingRoom) { + menuItem.setTitle(if (it.isThereAnExistingRoom) R.string.action_open else R.string.create_room_action_create) + } } } super.onPrepareOptionsMenu(menu) diff --git a/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragmentArgs.kt b/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragmentArgs.kt index 65fd6681bf..c20aedb803 100644 --- a/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragmentArgs.kt +++ b/vector/src/main/java/im/vector/app/features/userdirectory/KnownUsersFragmentArgs.kt @@ -23,5 +23,6 @@ import kotlinx.android.parcel.Parcelize data class KnownUsersFragmentArgs( val title: String, val menuResId: Int, - val excludedUserIds: Set? = null + val excludedUserIds: Set? = null, + val isCreatingRoom: Boolean = false ) : Parcelable diff --git a/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewModel.kt b/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewModel.kt index b8c42a0f08..a924280da3 100644 --- a/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewModel.kt @@ -87,14 +87,37 @@ class UserDirectoryViewModel @AssistedInject constructor(@Assisted private fun handleRemoveSelectedUser(action: UserDirectoryAction.RemovePendingInvitee) = withState { state -> val selectedUsers = state.pendingInvitees.minus(action.pendingInvitee) - setState { copy(pendingInvitees = selectedUsers) } + setState { + copy( + pendingInvitees = selectedUsers, + isThereAnExistingRoom = isThereAnExistingRoom(selectedUsers) + ) + } } private fun handleSelectUser(action: UserDirectoryAction.SelectPendingInvitee) = withState { state -> // Reset the filter asap directoryUsersSearch.accept("") val selectedUsers = state.pendingInvitees.toggle(action.pendingInvitee) - setState { copy(pendingInvitees = selectedUsers) } + setState { + copy( + pendingInvitees = selectedUsers, + isThereAnExistingRoom = isThereAnExistingRoom(selectedUsers) + ) + } + } + + private fun isThereAnExistingRoom(selectedUsers: Set): Boolean { + return selectedUsers + .takeIf { it.size == 1 } + ?.firstOrNull() + ?.let { invitee -> + return when (invitee) { + is PendingInvitee.UserPendingInvitee -> session.getExistingDirectRoomWithUser(invitee.user.userId) != null + is PendingInvitee.ThreePidPendingInvitee -> false + }.exhaustive + } + ?: false } private fun observeDirectoryUsers() = withState { state -> diff --git a/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewState.kt b/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewState.kt index 8bb555e0fa..3d2cd0c1b4 100644 --- a/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewState.kt +++ b/vector/src/main/java/im/vector/app/features/userdirectory/UserDirectoryViewState.kt @@ -30,7 +30,8 @@ data class UserDirectoryViewState( val pendingInvitees: Set = emptySet(), val createAndInviteState: Async = Uninitialized, val directorySearchTerm: String = "", - val filterKnownUsersValue: Option = Option.empty() + val filterKnownUsersValue: Option = Option.empty(), + val isThereAnExistingRoom: Boolean = false ) : MvRxState { constructor(args: KnownUsersFragmentArgs) : this(excludedUserIds = args.excludedUserIds)