diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java index d43978802..df073b653 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeDialog.java @@ -7,6 +7,7 @@ import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; import androidx.annotation.NonNull; import androidx.annotation.Nullable; @@ -156,13 +157,19 @@ public final class SafetyNumberChangeDialog extends DialogFragment implements Sa builder.setTitle(R.string.safety_number_change_dialog__safety_number_changes) .setView(dialogView) - .setCancelable(false) .setPositiveButton(continueText, this::handleSendAnyway) .setNegativeButton(cancelText, this::handleCancel); setCancelable(false); - return builder.create(); + AlertDialog dialog = builder.create(); + dialog.setOnShowListener(d -> { + Button positive = dialog.getButton(DialogInterface.BUTTON_POSITIVE); + positive.setEnabled(false); + viewModel.getTrustOrVerifyReady().observe(getViewLifecycleOwner(), positive::setEnabled); + }); + + return dialog; } @Override diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeViewModel.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeViewModel.java index 5151acea5..d6df0a914 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeViewModel.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ui/error/SafetyNumberChangeViewModel.java @@ -22,6 +22,8 @@ public final class SafetyNumberChangeViewModel extends ViewModel { private final SafetyNumberChangeRepository safetyNumberChangeRepository; private final MutableLiveData> recipientIds; private final LiveData safetyNumberChangeState; + private final LiveData> changedRecipients; + private final LiveData trustOrVerifyReady; private SafetyNumberChangeViewModel(@NonNull List recipientIds, @Nullable Long messageId, @@ -31,10 +33,16 @@ public final class SafetyNumberChangeViewModel extends ViewModel { this.safetyNumberChangeRepository = safetyNumberChangeRepository; this.recipientIds = new MutableLiveData<>(recipientIds); this.safetyNumberChangeState = LiveDataUtil.mapAsync(this.recipientIds, ids -> this.safetyNumberChangeRepository.getSafetyNumberChangeState(ids, messageId, messageType)); + this.changedRecipients = Transformations.map(safetyNumberChangeState, SafetyNumberChangeState::getChangedRecipients); + this.trustOrVerifyReady = Transformations.map(safetyNumberChangeState, Objects::nonNull); } @NonNull LiveData> getChangedRecipients() { - return Transformations.map(safetyNumberChangeState, SafetyNumberChangeState::getChangedRecipients); + return changedRecipients; + } + + @NonNull LiveData getTrustOrVerifyReady() { + return trustOrVerifyReady; } @NonNull LiveData trustOrVerifyChangedRecipients() {