Centralize recipient lookup in RecipientRepository.

This commit is contained in:
jeffrey-signal
2025-11-13 10:47:04 -05:00
committed by Cody Henthorne
parent 2e1291b3c3
commit 0e46ab33e8
14 changed files with 216 additions and 200 deletions

View File

@@ -50,6 +50,7 @@ import org.thoughtcrime.securesms.conversation.NewConversationUiState.UserMessag
import org.thoughtcrime.securesms.groups.ui.creategroup.CreateGroupActivity
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.recipients.ui.RecipientLookupFailureMessage
import org.thoughtcrime.securesms.recipients.ui.RecipientPicker
import org.thoughtcrime.securesms.recipients.ui.RecipientPickerCallbacks
import org.thoughtcrime.securesms.recipients.ui.RecipientPickerScaffold
@@ -351,17 +352,12 @@ private fun UserMessagesHost(
onDismiss(userMessage)
}
is UserMessage.Info.NetworkError -> Dialogs.SimpleMessageDialog(
message = stringResource(R.string.NetworkFailure__network_error_check_your_connection_and_try_again),
dismiss = stringResource(android.R.string.ok),
onDismiss = { onDismiss(userMessage) }
)
is UserMessage.Info.RecipientNotSignalUser -> Dialogs.SimpleMessageDialog(
message = stringResource(R.string.NewConversationActivity__s_is_not_a_signal_user, userMessage.phone.displayText),
dismiss = stringResource(android.R.string.ok),
onDismiss = { onDismiss(userMessage) }
)
is UserMessage.Info.RecipientLookupFailed -> {
RecipientLookupFailureMessage(
failure = userMessage.failure,
onDismissed = { onDismiss(userMessage) }
)
}
is UserMessage.Info.UserAlreadyInAnotherCall -> LaunchedEffect(userMessage) {
snackbarHostState.showSnackbar(

View File

@@ -65,13 +65,11 @@ class NewConversationViewModel : ViewModel() {
viewModelScope.launch {
internalUiState.update { it.copy(isLookingUpRecipient = true) }
val lookupResult = withContext(Dispatchers.IO) {
RecipientRepository.lookupNewE164(inputE164 = phone.value)
}
when (val lookupResult = RecipientRepository.lookup(phone)) {
is RecipientRepository.PhoneLookupResult.Found -> {
internalUiState.update { it.copy(isLookingUpRecipient = false) }
when (lookupResult) {
is RecipientRepository.LookupResult.Success -> {
val recipient = Recipient.resolved(lookupResult.recipientId)
val recipient = lookupResult.recipient
internalUiState.update { it.copy(isLookingUpRecipient = false) }
if (recipient.isRegistered && recipient.hasServiceId) {
@@ -81,20 +79,11 @@ class NewConversationViewModel : ViewModel() {
}
}
is RecipientRepository.LookupResult.NotFound, is RecipientRepository.LookupResult.InvalidEntry -> {
is RecipientRepository.LookupResult.Failure -> {
internalUiState.update {
it.copy(
isLookingUpRecipient = false,
userMessage = Info.RecipientNotSignalUser(phone)
)
}
}
is RecipientRepository.LookupResult.NetworkError -> {
internalUiState.update {
it.copy(
isLookingUpRecipient = false,
userMessage = Info.NetworkError
userMessage = Info.RecipientLookupFailed(failure = lookupResult)
)
}
}
@@ -180,9 +169,8 @@ data class NewConversationUiState(
sealed interface Info : UserMessage {
data class RecipientRemoved(val recipient: Recipient) : Info
data class RecipientBlocked(val recipient: Recipient) : Info
data class RecipientNotSignalUser(val phone: PhoneNumber) : Info
data class RecipientLookupFailed(val failure: RecipientRepository.LookupResult.Failure) : Info
data object UserAlreadyInAnotherCall : Info
data object NetworkError : Info
}
sealed interface Prompt : UserMessage {