From 6c94be70dc22715d1052b5ec344b946ad5264510 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 13 Jan 2021 09:50:32 -0500 Subject: [PATCH] Update safety number UI. --- .../securesms/BindableConversationItem.java | 1 + .../conversation/ConversationFragment.java | 30 ++++++++++++++++ .../conversation/ConversationUpdateItem.java | 8 +++++ .../drawable/safety_number_change_banner.xml | 36 +++++++++++++++++++ ...afety_number_changed_learn_more_dialog.xml | 36 +++++++++++++++++++ app/src/main/res/values/strings.xml | 4 +++ 6 files changed, 115 insertions(+) create mode 100644 app/src/main/res/drawable/safety_number_change_banner.xml create mode 100644 app/src/main/res/layout/safety_number_changed_learn_more_dialog.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java index 9b133322db..78bee7f823 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/BindableConversationItem.java @@ -62,6 +62,7 @@ public interface BindableConversationItem extends Unbindable { void onVoiceNoteSeekTo(@NonNull Uri uri, double position); void onGroupMigrationLearnMoreClicked(@NonNull GroupMigrationMembershipChange membershipChange); void onDecryptionFailedLearnMoreClicked(); + void onSafetyNumberLearnMoreClicked(@NonNull Recipient recipient); void onJoinGroupCallClicked(); void onInviteFriendsToGroupClicked(@NonNull GroupId.V2 groupId); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java index 1b9a7f82c5..01ea93e92d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationFragment.java @@ -22,6 +22,7 @@ import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.AsyncTask; @@ -70,6 +71,7 @@ import org.thoughtcrime.securesms.ApplicationPreferencesActivity; import org.thoughtcrime.securesms.LoggingFragment; import org.thoughtcrime.securesms.PassphraseRequiredActivity; import org.thoughtcrime.securesms.R; +import org.thoughtcrime.securesms.VerifyIdentityActivity; import org.thoughtcrime.securesms.attachments.Attachment; import org.thoughtcrime.securesms.components.ConversationScrollToView; import org.thoughtcrime.securesms.components.ConversationTypingView; @@ -148,6 +150,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.Objects; import java.util.Set; @SuppressLint("StaticFieldLeak") @@ -1433,6 +1436,33 @@ public class ConversationFragment extends LoggingFragment { .show(); } + @Override + public void onSafetyNumberLearnMoreClicked(@NonNull Recipient recipient) { + AlertDialog dialog = new AlertDialog.Builder(requireContext()) + .setView(R.layout.safety_number_changed_learn_more_dialog) + .setPositiveButton(R.string.ConversationFragment_verify, (d, w) -> { + SimpleTask.run(getLifecycle(), () -> { + return DatabaseFactory.getIdentityDatabase(requireContext()).getIdentity(recipient.getId()); + }, identityRecord -> { + if (identityRecord.isPresent()) { + startActivity(VerifyIdentityActivity.newIntent(requireContext(), identityRecord.get())); + }}); + d.dismiss(); + }) + .setNegativeButton(R.string.ConversationFragment_not_now, (d, w) -> { + d.dismiss(); + }) + .create(); + dialog.setOnShowListener(d -> { + TextView title = Objects.requireNonNull(dialog.findViewById(R.id.safety_number_learn_more_title)); + TextView body = Objects.requireNonNull(dialog.findViewById(R.id.safety_number_learn_more_body)); + + title.setText(getString(R.string.ConversationFragment_your_safety_number_with_s_changed, recipient.getDisplayName(requireContext()))); + body.setText(getString(R.string.ConversationFragment_your_safety_number_with_s_changed_likey_because_they_reinstalled_signal, recipient.getDisplayName(requireContext()))); + }); + + dialog.show(); + } @Override public void onJoinGroupCallClicked() { CommunicationActions.startVideoCall(requireActivity(), recipient.get()); diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java index 1bdd3a5f0f..e65e89c043 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationUpdateItem.java @@ -216,6 +216,14 @@ public final class ConversationUpdateItem extends LinearLayout eventListener.onDecryptionFailedLearnMoreClicked(); } }); + } else if (conversationMessage.getMessageRecord().isIdentityUpdate()) { + actionButton.setText(R.string.ConversationUpdateItem_learn_more); + actionButton.setVisibility(VISIBLE); + actionButton.setOnClickListener(v -> { + if (batchSelected.isEmpty() && eventListener != null) { + eventListener.onSafetyNumberLearnMoreClicked(conversationRecipient); + } + }); } else if (conversationMessage.getMessageRecord().isGroupCall()) { UpdateDescription updateDescription = MessageRecord.getGroupCallUpdateDescription(getContext(), conversationMessage.getMessageRecord().getBody(), true); Collection uuids = updateDescription.getMentioned(); diff --git a/app/src/main/res/drawable/safety_number_change_banner.xml b/app/src/main/res/drawable/safety_number_change_banner.xml new file mode 100644 index 0000000000..15a144f342 --- /dev/null +++ b/app/src/main/res/drawable/safety_number_change_banner.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + diff --git a/app/src/main/res/layout/safety_number_changed_learn_more_dialog.xml b/app/src/main/res/layout/safety_number_changed_learn_more_dialog.xml new file mode 100644 index 0000000000..08b7fb1315 --- /dev/null +++ b/app/src/main/res/layout/safety_number_changed_learn_more_dialog.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9ca5ff9800..4b7f38eb49 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -355,6 +355,10 @@ Review requests carefully Signal found another contact with the same name. Contact us + Verify + Not now + Your safety number with %s changed + Your Safety Number with %s changed, likely because they reinstalled Signal or changed devices. Tap Verify to confirm the new safety number. This is optional. There is no browser installed on your device.