diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java index 09f0b703e..52b4def7d 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java @@ -81,6 +81,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit public static final String CLEAR_NOTIFICATIONS = "clear_notifications"; public static final String ACCOUNT_ID_EXTRA = "account_id"; public static final String FROM_WELCOME = "from_welcome"; + public static final String WARN_CANNOT_ENCRYPT = "warn_cannot_encrypt"; private ConversationListFragment conversationListFragment; public TextView title; @@ -238,6 +239,11 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit AccountManager.getInstance().switchAccountAndStartActivity(this, accountId); } + String warnAddr = getIntent().getStringExtra(WARN_CANNOT_ENCRYPT); + if (!TextUtils.isEmpty(warnAddr)) { + DcHelper.showEncryptionRequiredDialog(this, warnAddr); + } + refreshAvatar(); refreshUnreadIndicator(); refreshTitle(); diff --git a/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java index 3ec60d656..cd3a507eb 100644 --- a/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/NewConversationActivity.java @@ -106,6 +106,8 @@ public class NewConversationActivity extends ContactSelectionActivity { int contactId = dcContext.lookupContactIdByAddr(addr); if (contactId!=0 && dcContext.getChatIdByContactId(contactId)!=0) { openConversation(dcContext.getChatIdByContactId(contactId)); + } else if (contactId == 0 && dcContext.isChatmail()) { + DcHelper.showEncryptionRequiredDialog(this, addr); } else { String nameNAddr = contactId == 0 ? addr : dcContext.getContact(contactId).getNameNAddr(); new AlertDialog.Builder(this) diff --git a/src/main/java/org/thoughtcrime/securesms/ShareActivity.java b/src/main/java/org/thoughtcrime/securesms/ShareActivity.java index f798f78ea..2c706b522 100644 --- a/src/main/java/org/thoughtcrime/securesms/ShareActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ShareActivity.java @@ -251,18 +251,26 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement } */ + String addr = null; if(chatId == -1 && extraEmail != null && extraEmail.length > 0) { - final String addr = extraEmail[0]; + addr = extraEmail[0]; int contactId = dcContext.lookupContactIdByAddr(addr); - if(contactId == 0) { - contactId = dcContext.createContact(null, addr); - } + if(contactId != 0 || !dcContext.isChatmail()) { + if(contactId == 0) { + contactId = dcContext.createContact(null, addr); + } - chatId = dcContext.createChatByContactId(contactId); + chatId = dcContext.createChatByContactId(contactId); + addr = null; + } } Intent composeIntent; - if (chatId != -1) { + if (addr != null) { + composeIntent = new Intent(this, ConversationListActivity.class); + composeIntent.putExtra(ConversationListActivity.WARN_CANNOT_ENCRYPT, addr); + startActivity(composeIntent); + } else if (chatId != -1) { composeIntent = getBaseShareIntent(ConversationActivity.class); composeIntent.putExtra(ConversationActivity.CHAT_ID_EXTRA, chatId); RelayUtil.setSharedUris(composeIntent, resolvedExtras); diff --git a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java index 74c49eb0b..b3317dd7a 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java @@ -483,6 +483,16 @@ public class DcHelper { .show(); } + public static void showEncryptionRequiredDialog(Context context, String addr) { + new AlertDialog.Builder(context) + .setMessage(context.getString(R.string.encryption_required_for_new_contact, addr)) + .setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#howtoe2ee")) + .setNegativeButton(R.string.qrscan_title, (d, w) -> context.startActivity(new Intent(context, QrActivity.class))) + .setPositiveButton(R.string.ok, null) + .setCancelable(true) + .show(); + } + public static void openHelp(Context context, String section) { Intent intent = new Intent(context, LocalHelpActivity.class); if (section != null) { intent.putExtra(LocalHelpActivity.SECTION_EXTRA, section); } diff --git a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java index 5801ac607..4108b0dbb 100644 --- a/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java +++ b/src/main/java/org/thoughtcrime/securesms/util/LongClickCopySpan.java @@ -58,14 +58,18 @@ public class LongClickCopySpan extends ClickableSpan { String addr = prepareUrl(url); Activity activity = (Activity) widget.getContext(); DcContext dcContext = DcHelper.getContext(activity); - DcContact contact = dcContext.getContact(dcContext.createContact(null, addr)); - if (contact.getId() != 0 && !contact.isBlocked() && dcContext.getChatIdByContactId(contact.getId()) != 0) { + int contactId = dcContext.lookupContactIdByAddr(addr); + DcContact contact = (contactId != 0)? dcContext.getContact(contactId) : null; + if (contact != null && !contact.isBlocked() && dcContext.getChatIdByContactId(contactId) != 0) { openChat(activity, contact); + } else if (contact == null && dcContext.isChatmail()) { + DcHelper.showEncryptionRequiredDialog(activity, addr); } else { + String nameNAddr = contact != null ? contact.getNameNAddr() : addr; new AlertDialog.Builder(activity) - .setMessage(activity.getString(R.string.ask_start_chat_with, contact.getNameNAddr())) + .setMessage(activity.getString(R.string.ask_start_chat_with, nameNAddr)) .setPositiveButton(android.R.string.ok, (dialog, which) -> { - openChat(activity, contact); + openChat(activity, contact == null? dcContext.getContact(dcContext.createContact(null, addr)) : contact); }) .setNegativeButton(R.string.cancel, null) .show(); diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 726a3c270..5b2fdca3c 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -921,6 +921,7 @@ End-to-end encryption cannot be guaranteed anymore, likely because %1$s reinstalled Delta Chat or sent a message from another device.\n\nYou may meet them in person and scan their QR code again to reestablish guaranteed end-to-end encryption. ⚠️ %1$s requires end-to-end encryption which is not setup for this chat yet. Tap to learn more. To establish end-to-end-encryption, you may meet contacts in person and scan their QR Code to introduce them. + End-to-end encryption is required but it is not setup for %1$s yet.\n\nYou may share your invite link with them or meet in person and scan their QR Code. Learn More You deleted the \"Saved messages\" chat.\n\nℹ️ To use the \"Saved messages\" feature again, create a new chat with yourself.