Skip to content

Commit 07e0695

Browse files
authored
Prompt the user when the invited MatrixId is not recognized (#8483)
1 parent 824f380 commit 07e0695

File tree

7 files changed

+39
-3
lines changed

7 files changed

+39
-3
lines changed

changelog.d/8468.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Prompt the user when the invited MatrixId is not recognized

library/ui-strings/src/main/res/values/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1729,6 +1729,8 @@
17291729
<string name="create_room_public_title">"Public"</string>
17301730
<string name="create_room_public_description">"Anyone will be able to join this room"</string>
17311731
<string name="create_room_federation_error">"The room has been created, but some invitations have not been sent for the following reason:\n\n%s"</string>
1732+
<string name="create_room_unknown_users_dialog_content">Unable to find profiles for the Matrix IDs listed below. Would you like to start a chat anyway?\n\n%s</string>
1733+
<string name="create_room_unknown_users_dialog_submit">Start chat anyway</string>
17321734

17331735
<string name="keys_backup_unable_to_get_trust_info">"An error occurred getting trust info"</string>
17341736
<string name="keys_backup_unable_to_get_keys_backup_data">"An error occurred getting keys backup data"</string>
@@ -2744,6 +2746,8 @@
27442746
<item quantity="other">Invitations sent to %1$s and %2$d more</item>
27452747
</plurals>
27462748
<string name="invite_users_to_room_failure">We could not invite users. Please check the users you want to invite and try again.</string>
2749+
<string name="invite_unknown_users_dialog_content">Unable to find profiles for the Matrix IDs listed below. Would you like to invite them anyway?\n\n%s</string>
2750+
<string name="invite_unknown_users_dialog_submit">Invite anyway</string>
27472751

27482752
<string name="user_code_scan">Scan a QR code</string>
27492753
<string name="user_code_share">Share my code</string>

vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ import im.vector.app.features.qrcode.QrCodeScannerEvents
4848
import im.vector.app.features.qrcode.QrCodeScannerFragment
4949
import im.vector.app.features.qrcode.QrCodeScannerViewModel
5050
import im.vector.app.features.qrcode.QrScannerArgs
51+
import im.vector.app.features.userdirectory.PendingSelection
5152
import im.vector.app.features.userdirectory.UserListFragment
5253
import im.vector.app.features.userdirectory.UserListFragmentArgs
5354
import im.vector.app.features.userdirectory.UserListSharedAction
@@ -160,7 +161,19 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() {
160161
}
161162

162163
private fun handleOnMenuItemSubmitClick(action: UserListSharedAction.OnMenuItemSubmitClick) {
163-
viewModel.handle(CreateDirectRoomAction.PrepareRoomWithSelectedUsers(action.selections))
164+
val unknownUsers = action.selections.filter { it is PendingSelection.UserPendingSelection && it.isUnknownUser }
165+
if (unknownUsers.isEmpty()) {
166+
viewModel.handle(CreateDirectRoomAction.PrepareRoomWithSelectedUsers(action.selections))
167+
} else {
168+
MaterialAlertDialogBuilder(this)
169+
.setTitle(R.string.dialog_title_confirmation)
170+
.setMessage(getString(R.string.create_room_unknown_users_dialog_content, unknownUsers.joinToString("\n", "") { it.getMxId() }))
171+
.setPositiveButton(R.string.create_room_unknown_users_dialog_submit) { _, _ ->
172+
viewModel.handle(CreateDirectRoomAction.PrepareRoomWithSelectedUsers(action.selections))
173+
}
174+
.setNegativeButton(R.string.action_cancel, null)
175+
.show()
176+
}
164177
}
165178

166179
private fun renderCreateAndInviteState(state: Async<String>) {

vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import im.vector.app.core.utils.onPermissionDeniedSnackbar
3737
import im.vector.app.core.utils.registerForPermissionsResult
3838
import im.vector.app.core.utils.toast
3939
import im.vector.app.features.contactsbook.ContactsBookFragment
40+
import im.vector.app.features.userdirectory.PendingSelection
4041
import im.vector.app.features.userdirectory.UserListFragment
4142
import im.vector.app.features.userdirectory.UserListFragmentArgs
4243
import im.vector.app.features.userdirectory.UserListSharedAction
@@ -94,7 +95,19 @@ class InviteUsersToRoomActivity : SimpleFragmentActivity() {
9495
}
9596

9697
private fun handleOnMenuItemSubmitClick(action: UserListSharedAction.OnMenuItemSubmitClick) {
97-
viewModel.handle(InviteUsersToRoomAction.InviteSelectedUsers(action.selections))
98+
val unknownUsers = action.selections.filter { it is PendingSelection.UserPendingSelection && it.isUnknownUser }
99+
if (unknownUsers.isEmpty()) {
100+
viewModel.handle(InviteUsersToRoomAction.InviteSelectedUsers(action.selections))
101+
} else {
102+
MaterialAlertDialogBuilder(this)
103+
.setTitle(R.string.dialog_title_confirmation)
104+
.setMessage(getString(R.string.invite_unknown_users_dialog_content, unknownUsers.joinToString("\n", "") { it.getMxId() }))
105+
.setPositiveButton(R.string.invite_unknown_users_dialog_submit) { _, _ ->
106+
viewModel.handle(InviteUsersToRoomAction.InviteSelectedUsers(action.selections))
107+
}
108+
.setNegativeButton(R.string.action_cancel, null)
109+
.show()
110+
}
98111
}
99112

100113
private fun openPhoneBook() {

vector/src/main/java/im/vector/app/features/userdirectory/PendingSelection.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import org.matrix.android.sdk.api.session.user.model.User
2222
import org.matrix.android.sdk.api.util.toMatrixItem
2323

2424
sealed class PendingSelection {
25-
data class UserPendingSelection(val user: User) : PendingSelection()
25+
data class UserPendingSelection(val user: User, var isUnknownUser: Boolean = false) : PendingSelection()
2626
data class ThreePidPendingSelection(val threePid: ThreePid) : PendingSelection()
2727

2828
fun getBestName(): String {

vector/src/main/java/im/vector/app/features/userdirectory/UserListViewModel.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ class UserListViewModel @AssistedInject constructor(
260260
.sortedBy { it.toMatrixItem().firstLetterOfDisplayName() }
261261
val userProfile = if (MatrixPatterns.isUserId(search)) {
262262
val user = tryOrNull { session.profileService().getProfileAsUser(search) }
263+
setState { copy(unknownUserId = search.takeIf { user == null }) }
263264
User(
264265
userId = search,
265266
displayName = user?.displayName,
@@ -284,6 +285,9 @@ class UserListViewModel @AssistedInject constructor(
284285
(action.pendingSelection is PendingSelection.UserPendingSelection &&
285286
state.pendingSelections.last() is PendingSelection.UserPendingSelection)
286287
if (canSelectUser) {
288+
if (action.pendingSelection is PendingSelection.UserPendingSelection) {
289+
action.pendingSelection.isUnknownUser = action.pendingSelection.getMxId() == state.unknownUserId
290+
}
287291
val selections = state.pendingSelections.toggle(action.pendingSelection, singleElement = state.singleSelection)
288292
setState { copy(pendingSelections = selections) }
289293
}

vector/src/main/java/im/vector/app/features/userdirectory/UserListViewState.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ data class UserListViewState(
3030
val matchingEmail: Async<ThreePidUser?> = Uninitialized,
3131
val filteredMappedContacts: List<MappedContact> = emptyList(),
3232
val pendingSelections: Set<PendingSelection> = emptySet(),
33+
val unknownUserId: String? = null,
3334
val searchTerm: String = "",
3435
val singleSelection: Boolean,
3536
val single3pidSelection: Boolean,

0 commit comments

Comments
 (0)