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

@@ -41,6 +41,7 @@ import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.calls.new.NewCallUiState.CallType
import org.thoughtcrime.securesms.calls.new.NewCallUiState.UserMessage
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
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
@@ -218,19 +219,14 @@ private fun UserMessagesHost(
when (userMessage) {
null -> {}
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.RecipientLookupFailed -> {
RecipientLookupFailureMessage(
failure = userMessage.failure,
onDismissed = { 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.UserAlreadyInAnotherCall -> LaunchedEffect(userMessage) {
is UserMessage.UserAlreadyInAnotherCall -> LaunchedEffect(userMessage) {
snackbarHostState.showSnackbar(
message = context.getString(R.string.CommunicationActions__you_are_already_in_a_call)
)

View File

@@ -16,7 +16,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.calls.new.NewCallUiState.CallType
import org.thoughtcrime.securesms.calls.new.NewCallUiState.UserMessage.Info
import org.thoughtcrime.securesms.calls.new.NewCallUiState.UserMessage
import org.thoughtcrime.securesms.contacts.sync.ContactDiscovery
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.keyvalue.SignalStore
@@ -65,33 +65,17 @@ class NewCallViewModel : ViewModel() {
}
internalUiState.update { it.copy(isLookingUpRecipient = true) }
val lookupResult = withContext(Dispatchers.IO) {
RecipientRepository.lookupNewE164(inputE164 = phone.value)
}
when (lookupResult) {
is RecipientRepository.LookupResult.Success -> {
val recipient = withContext(Dispatchers.IO) {
Recipient.resolved(lookupResult.recipientId)
}
when (val lookupResult = RecipientRepository.lookup(phone)) {
is RecipientRepository.PhoneLookupResult.Found -> {
internalUiState.update { it.copy(isLookingUpRecipient = false) }
openCall(recipient)
openCall(recipient = lookupResult.recipient)
}
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 = UserMessage.RecipientLookupFailed(failure = lookupResult)
)
}
}
@@ -120,7 +104,7 @@ class NewCallViewModel : ViewModel() {
}
fun showUserAlreadyInACall() {
internalUiState.update { it.copy(userMessage = Info.UserAlreadyInAnotherCall) }
internalUiState.update { it.copy(userMessage = UserMessage.UserAlreadyInAnotherCall) }
}
fun refresh() {
@@ -153,11 +137,8 @@ data class NewCallUiState(
val userMessage: UserMessage? = null
) {
sealed interface UserMessage {
sealed interface Info : UserMessage {
data class RecipientNotSignalUser(val phone: PhoneNumber) : Info
data object UserAlreadyInAnotherCall : Info
data object NetworkError : Info
}
data object UserAlreadyInAnotherCall : UserMessage
data class RecipientLookupFailed(val failure: RecipientRepository.LookupResult.Failure) : UserMessage
}
sealed interface CallType {