From 4571151e3ce2280143caa34b6465e530a2b518dd Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Sat, 16 Jan 2021 18:42:48 -0500 Subject: [PATCH] Revert "Remove reset session button." This reverts commit f24020e7b79f43d39beae49e96d6e24433579b9b. --- .../conversation/ConversationActivity.java | 36 ++++++++++++++++++- app/src/main/res/menu/conversation_secure.xml | 5 +++ app/src/main/res/values/strings.xml | 2 ++ .../api/SignalServiceMessageSender.java | 14 ++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/menu/conversation_secure.xml diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java index cdfe6a2a73..19c539474a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/ConversationActivity.java @@ -236,6 +236,7 @@ import org.thoughtcrime.securesms.registration.RegistrationNavigationActivity; import org.thoughtcrime.securesms.service.KeyCachingService; import org.thoughtcrime.securesms.sms.MessageSender; import org.thoughtcrime.securesms.sms.OutgoingEncryptedMessage; +import org.thoughtcrime.securesms.sms.OutgoingEndSessionMessage; import org.thoughtcrime.securesms.sms.OutgoingTextMessage; import org.thoughtcrime.securesms.stickers.StickerKeyboardProvider; import org.thoughtcrime.securesms.stickers.StickerLocator; @@ -851,7 +852,9 @@ public class ConversationActivity extends PassphraseRequiredActivity inflater.inflate(R.menu.conversation, menu); - if (isSingleConversation() && !isSecureText) { + if (isSingleConversation() && isSecureText) { + inflater.inflate(R.menu.conversation_secure, menu); + } else if (isSingleConversation()) { inflater.inflate(R.menu.conversation_insecure, menu); } @@ -970,6 +973,7 @@ public class ConversationActivity extends PassphraseRequiredActivity case R.id.menu_add_shortcut: handleAddShortcut(); return true; case R.id.menu_search: handleSearch(); return true; case R.id.menu_add_to_contacts: handleAddToContacts(); return true; + case R.id.menu_reset_secure_session: handleResetSecureSession(); return true; case R.id.menu_group_recipients: handleDisplayGroupRecipients(); return true; case R.id.menu_distribution_broadcast: handleDistributionBroadcastEnabled(item); return true; case R.id.menu_distribution_conversation: handleDistributionConversationEnabled(item); return true; @@ -1186,6 +1190,36 @@ public class ConversationActivity extends PassphraseRequiredActivity } } + private void handleResetSecureSession() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.ConversationActivity_reset_secure_session_question); + builder.setIcon(R.drawable.ic_warning); + builder.setCancelable(true); + builder.setMessage(R.string.ConversationActivity_this_may_help_if_youre_having_encryption_problems); + builder.setPositiveButton(R.string.ConversationActivity_reset, (dialog, which) -> { + if (isSingleConversation()) { + final Context context = getApplicationContext(); + + OutgoingEndSessionMessage endSessionMessage = + new OutgoingEndSessionMessage(new OutgoingTextMessage(getRecipient(), "TERMINATE", 0, -1)); + + new AsyncTask() { + @Override + protected Long doInBackground(OutgoingEndSessionMessage... messages) { + return MessageSender.send(context, messages[0], threadId, false, null); + } + + @Override + protected void onPostExecute(Long result) { + sendComplete(result); + } + }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, endSessionMessage); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show(); + } + private void handleViewMedia() { startActivity(MediaOverviewActivity.forThread(this, threadId)); } diff --git a/app/src/main/res/menu/conversation_secure.xml b/app/src/main/res/menu/conversation_secure.xml new file mode 100644 index 0000000000..bec5124dff --- /dev/null +++ b/app/src/main/res/menu/conversation_secure.xml @@ -0,0 +1,5 @@ + + + + \ 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 04fe53b266..abcc8612ed 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -233,6 +233,8 @@ You deleted this message. + Reset secure session? + This may help if you\'re having encryption problems in this conversation. Your messages will be kept. Reset Add attachment Select contact info diff --git a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java index aa75704f30..e004ce03cc 100644 --- a/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java +++ b/libsignal/service/src/main/java/org/whispersystems/signalservice/api/SignalServiceMessageSender.java @@ -278,6 +278,20 @@ public class SignalServiceMessageSender { sendMessage(localAddress, Optional.absent(), timestamp, syncMessage, false, null); } + // TODO [greyson][session] Delete this when we delete the button + if (message.isEndSession()) { + if (recipient.getUuid().isPresent()) { + store.deleteAllSessions(recipient.getUuid().get().toString()); + } + if (recipient.getNumber().isPresent()) { + store.deleteAllSessions(recipient.getNumber().get()); + } + + if (eventListener.isPresent()) { + eventListener.get().onSecurityEvent(recipient); + } + } + return result; }