From 966d8784f3a3cc96d2acf1b6684f5389bacdc9cc Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 24 Jun 2025 17:46:51 +0200 Subject: [PATCH 01/16] adapt to new PGP-contacts --- jni/dc_wrapper.c | 6 ++ jni/deltachat-core-rust | 2 +- src/main/java/com/b44t/messenger/DcChat.java | 1 + src/main/java/com/b44t/messenger/rpc/Rpc.java | 4 ++ .../securesms/ConversationListActivity.java | 2 + .../securesms/ProfileSettingsAdapter.java | 2 +- .../securesms/ProfileSettingsFragment.java | 2 +- .../securesms/WelcomeActivity.java | 2 + .../components/ConversationItemFooter.java | 8 +-- .../securesms/connect/DcHelper.java | 60 ++++++++++++++++++ .../securesms/qr/BackupReceiverFragment.java | 1 + src/main/res/drawable-hdpi/msg_encr_out.png | Bin 374 -> 0 bytes src/main/res/drawable-mdpi/msg_encr_out.png | Bin 298 -> 0 bytes src/main/res/drawable-xhdpi/msg_encr_out.png | Bin 429 -> 0 bytes src/main/res/drawable-xxhdpi/msg_encr_out.png | Bin 604 -> 0 bytes src/main/res/drawable/ic_outline_email.xml | 11 ++++ .../res/layout/conversation_item_footer.xml | 4 +- 17 files changed, 96 insertions(+), 9 deletions(-) delete mode 100644 src/main/res/drawable-hdpi/msg_encr_out.png delete mode 100644 src/main/res/drawable-mdpi/msg_encr_out.png delete mode 100644 src/main/res/drawable-xhdpi/msg_encr_out.png delete mode 100644 src/main/res/drawable-xxhdpi/msg_encr_out.png create mode 100644 src/main/res/drawable/ic_outline_email.xml diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c index d21404fab..78b4fd432 100644 --- a/jni/dc_wrapper.c +++ b/jni/dc_wrapper.c @@ -1237,6 +1237,12 @@ JNIEXPORT jint Java_com_b44t_messenger_DcChat_getColor(JNIEnv *env, jobject obj) } +JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isEncrypted(JNIEnv *env, jobject obj) +{ + return dc_chat_is_encrypted(get_dc_chat(env, obj))!=0; +} + + JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isUnpromoted(JNIEnv *env, jobject obj) { return dc_chat_is_unpromoted(get_dc_chat(env, obj))!=0; diff --git a/jni/deltachat-core-rust b/jni/deltachat-core-rust index 47b9bfc8b..c0cf4e7e9 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit 47b9bfc8bf807ad099d2211a59d6ba80290b0c95 +Subproject commit c0cf4e7e9b70c9d2201a1e30e5a0e782859ab95b diff --git a/src/main/java/com/b44t/messenger/DcChat.java b/src/main/java/com/b44t/messenger/DcChat.java index fa40117aa..7dee839b8 100644 --- a/src/main/java/com/b44t/messenger/DcChat.java +++ b/src/main/java/com/b44t/messenger/DcChat.java @@ -38,6 +38,7 @@ public class DcChat { public native String getMailinglistAddr(); public native String getProfileImage (); public native int getColor (); + public native boolean isEncrypted (); public native boolean isUnpromoted (); public native boolean isSelfTalk (); public native boolean isDeviceTalk (); diff --git a/src/main/java/com/b44t/messenger/rpc/Rpc.java b/src/main/java/com/b44t/messenger/rpc/Rpc.java index 3eb340889..77e4615e9 100644 --- a/src/main/java/com/b44t/messenger/rpc/Rpc.java +++ b/src/main/java/com/b44t/messenger/rpc/Rpc.java @@ -173,6 +173,10 @@ public class Rpc { } } + public String getMigrationError(int accountId) throws RpcException { + return gson.fromJson(getResult("get_migration_error", accountId), String.class); + } + private static class Response { public final int id; public final JsonElement result; diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java index a659dca12..b588406cf 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationListActivity.java @@ -194,6 +194,8 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit refresh(); if (BuildConfig.DEBUG) checkNdkArchitecture(); + + DcHelper.maybeShowMigrationError(this); } /** diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileSettingsAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileSettingsAdapter.java index dd04ba374..90827157b 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileSettingsAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileSettingsAdapter.java @@ -292,7 +292,7 @@ public class ProfileSettingsAdapter extends RecyclerView.Adapter if (dcChat.isMailingList()) { isMailingList = true; - } else if (dcChat.canSend()) { + } else if (dcChat.canSend() && dcChat.isEncrypted()) { itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_ADD_MEMBER, 0)); if (!isBroadcast) { itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_QR_INVITE, 0)); diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileSettingsFragment.java b/src/main/java/org/thoughtcrime/securesms/ProfileSettingsFragment.java index 649a6e2e0..b5e77e79e 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileSettingsFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileSettingsFragment.java @@ -166,7 +166,7 @@ public class ProfileSettingsFragment extends Fragment if (contactId>DcContact.DC_CONTACT_ID_LAST_SPECIAL || contactId==DcContact.DC_CONTACT_ID_SELF) { if (actionMode==null) { DcChat dcChat = dcContext.getChat(chatId); - if (dcChat.canSend()) { + if (dcChat.canSend() && dcChat.isEncrypted()) { adapter.toggleMemberSelection(contactId); actionMode = ((AppCompatActivity) requireActivity()).startSupportActionMode(actionModeCallback); } diff --git a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java index 073ebe58b..54760723b 100644 --- a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java @@ -96,6 +96,8 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen intent.setAction(DC_REQUEST_ACCOUNT_DATA); sendBroadcast(intent); } + + DcHelper.maybeShowMigrationError(this); } protected void initializeActionBar() { diff --git a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index 9b354fb53..246a7e9b8 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -22,7 +22,7 @@ public class ConversationItemFooter extends LinearLayout { private TextView dateView; private TextView editedView; private ImageView bookmarkIndicatorView; - private ImageView secureIndicatorView; + private ImageView emailIndicatorView; private ImageView locationIndicatorView; private DeliveryStatusView deliveryStatusView; private Integer textColor = null; @@ -48,7 +48,7 @@ public class ConversationItemFooter extends LinearLayout { dateView = findViewById(R.id.footer_date); editedView = findViewById(R.id.footer_edited); bookmarkIndicatorView = findViewById(R.id.footer_bookmark_indicator); - secureIndicatorView = findViewById(R.id.footer_secure_indicator); + emailIndicatorView = findViewById(R.id.footer_email_indicator); locationIndicatorView = findViewById(R.id.footer_location_indicator); deliveryStatusView = new DeliveryStatusView(findViewById(R.id.delivery_indicator)); @@ -65,7 +65,7 @@ public class ConversationItemFooter extends LinearLayout { boolean bookmark = messageRecord.getOriginalMsgId() != 0 || messageRecord.getSavedMsgId() != 0; bookmarkIndicatorView.setVisibility(bookmark ? View.VISIBLE : View.GONE); editedView.setVisibility(messageRecord.isEdited() ? View.VISIBLE : View.GONE); - secureIndicatorView.setVisibility(messageRecord.isSecure() ? View.VISIBLE : View.GONE); + emailIndicatorView.setVisibility(messageRecord.isSecure() ? View.GONE : View.VISIBLE); locationIndicatorView.setVisibility(messageRecord.hasLocation() ? View.VISIBLE : View.GONE); presentDeliveryStatus(messageRecord); } @@ -74,7 +74,7 @@ public class ConversationItemFooter extends LinearLayout { dateView.setTextColor(color); editedView.setTextColor(color); bookmarkIndicatorView.setColorFilter(color); - secureIndicatorView.setColorFilter(color); + emailIndicatorView.setColorFilter(color); locationIndicatorView.setColorFilter(color); deliveryStatusView.setTint(color); } diff --git a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java index f4dec06d1..9dd51a522 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/DcHelper.java @@ -23,6 +23,7 @@ import com.b44t.messenger.DcContext; import com.b44t.messenger.DcLot; import com.b44t.messenger.DcMsg; import com.b44t.messenger.rpc.Rpc; +import com.b44t.messenger.rpc.RpcException; import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.BuildConfig; @@ -36,6 +37,7 @@ import org.thoughtcrime.securesms.qr.QrActivity; import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.util.FileUtils; import org.thoughtcrime.securesms.util.MediaUtil; +import org.thoughtcrime.securesms.util.Util; import java.io.File; import java.util.Date; @@ -495,4 +497,62 @@ public class DcHelper { if (section != null) { intent.putExtra(LocalHelpActivity.SECTION_EXTRA, section); } context.startActivity(intent); } + + /** + * For the PGP-Contacts migration, things can go wrong. + * The migration happens when the account is setup, at which point no events can be sent yet. + * So, instead, if something goes wrong, it's returned by getLastError(). + * This function shows the error message to the user. + *

+ * A few releases after the PGP-contacts migration (which happened in 2025-05), + * we can remove this function again. + */ + public static void maybeShowMigrationError(Context context) { + try { + String lastError = DcHelper.getRpc(context).getMigrationError(DcHelper.getContext(context).getAccountId()); + + if (lastError != null && !lastError.isEmpty()) { + Log.w(TAG, "Opening account failed, trying to share error: " + lastError); + + String subject = "Delta Chat failed to update"; + String email = "delta@merlinux.eu"; + + new AlertDialog.Builder(context) + .setMessage(context.getString(R.string.error_x, lastError)) + .setNeutralButton(R.string.global_menu_edit_copy_desktop, (d, which) -> { + Util.writeTextToClipboard(context, lastError); + }) + .setPositiveButton(R.string.menu_send, (d, which) -> { + Intent sharingIntent = new Intent( + Intent.ACTION_SENDTO, Uri.fromParts( + "mailto", email, null + ) + ); + sharingIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{email}); + sharingIntent.putExtra(Intent.EXTRA_SUBJECT, subject); + sharingIntent.putExtra(Intent.EXTRA_TEXT, lastError); + + if (sharingIntent.resolveActivity(context.getPackageManager()) == null) { + Log.w(TAG, "No email client found to send crash report"); + sharingIntent = new Intent(Intent.ACTION_SEND); + sharingIntent.setType("text/plain"); + sharingIntent.putExtra(Intent.EXTRA_SUBJECT, subject); + sharingIntent.putExtra(Intent.EXTRA_TEXT, lastError); + sharingIntent.putExtra(Intent.EXTRA_EMAIL, email); + } + + Intent chooser = + Intent.createChooser(sharingIntent, "Send using..."); + chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + chooser.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); + + context.startActivity(chooser); + }) + .setCancelable(false) + .show(); + } + } catch (RpcException e) { + e.printStackTrace(); + } + } } diff --git a/src/main/java/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java b/src/main/java/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java index 1dfb677b4..9dc659633 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/BackupReceiverFragment.java @@ -80,6 +80,7 @@ public class BackupReceiverFragment extends Fragment implements DcEventCenter.Dc Log.i(TAG,"DC_EVENT_IMEX_PROGRESS, " + permille); if (permille == 0) { + DcHelper.maybeShowMigrationError(getTransferActivity()); getTransferActivity().setTransferError("Receiving Error"); } else if (permille < 1000) { percent = permille/10; diff --git a/src/main/res/drawable-hdpi/msg_encr_out.png b/src/main/res/drawable-hdpi/msg_encr_out.png deleted file mode 100644 index af0aeee917a989f1875c815dad8b05c81b9b677a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|mSQK*5Dp-y;YjHK@;M7UB8wRq zcuGN-QMY0Wkij5X;u=vBoS#-wo>-L1P+nfHmzkGcoSayYs+V7sKKq@G6j0G;PZ!4! zi{7^rHhM7!inyGw&DqfF63zYpsGFlWx8P={9FVt|7w P(EALYu6{1-oD!M<8DW$Y diff --git a/src/main/res/drawable-mdpi/msg_encr_out.png b/src/main/res/drawable-mdpi/msg_encr_out.png deleted file mode 100644 index 760538192c05118f3071ee42766a7afb877fa6fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&kmSQK*5Dp-y;YjHK@;M7UB8wRq zIQ&4EvB!|%4Ny?B#5JNMI6tkVJh3R1p}f3YFEcN@I61K(RWH9NefB#WDWIa|o-U3d z8WWQfBm^#OxZk)maX&M+nWb7uW0UVj-S_q4nJ z2+RRtMzyn6CO|>S64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<_&wLD!M zLp(a)PTJ^oI6$Or|Kyfqu7WXM(X8y#o8B+bPhj<2eojpM;zEwO>o)T}THycSQqv6e z3*`kRBCah?S3NV|7kaujclL$|ytS8o_rG}Ge>L%Azdlb&Y(6Hjd~-!8!;GCVJ4}z= zn8{uuP%^Vi}ugYK!% z!XkG67uX<@d~>c3!-8LCoU7wS)~Yeq{SoeE{Le7qkB{rDCLg}dE)O$Pdh6!KF&g%J V&9shqkN^x?22WQ%mvv4FO#tO3000>30lzO5M*si-8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H10oh4JK~z|U?Uk`>6hRcme{c4VTu!`bNQf4ef}|4!3kw4(34#Oz z27(sa99SHljbOKbfarmhX%w{xUJ*nI78W)ZhCotSYNd!Enh?wxyxV;?n=lBuo!j$F ziutO2kN3^@+nw26@bdEV+FePv3se@a4F^&42tX9%Kixn7@Y{a}3d7K>9se)`+yG8k z>nN}!spxJcR;$z>H_p1|I0LB$qgMI(?&Ra;oo2uM-h2)G+73}2-Dx&65UPV#^}XF_eYze2 zt6Oy}X6T;-sfc~v)Wx!OA*l0N?dUDD + + + + \ No newline at end of file diff --git a/src/main/res/layout/conversation_item_footer.xml b/src/main/res/layout/conversation_item_footer.xml index 43ed98cb0..291493707 100644 --- a/src/main/res/layout/conversation_item_footer.xml +++ b/src/main/res/layout/conversation_item_footer.xml @@ -19,10 +19,10 @@ /> Date: Tue, 24 Jun 2025 18:01:52 +0200 Subject: [PATCH 02/16] don't show email icon on pending downloads --- .../securesms/components/ConversationItemFooter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java index 246a7e9b8..8caa030f8 100644 --- a/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java +++ b/src/main/java/org/thoughtcrime/securesms/components/ConversationItemFooter.java @@ -65,7 +65,14 @@ public class ConversationItemFooter extends LinearLayout { boolean bookmark = messageRecord.getOriginalMsgId() != 0 || messageRecord.getSavedMsgId() != 0; bookmarkIndicatorView.setVisibility(bookmark ? View.VISIBLE : View.GONE); editedView.setVisibility(messageRecord.isEdited() ? View.VISIBLE : View.GONE); - emailIndicatorView.setVisibility(messageRecord.isSecure() ? View.GONE : View.VISIBLE); + + int downloadState = messageRecord.getDownloadState(); + if (messageRecord.isSecure() || downloadState == DcMsg.DC_DOWNLOAD_AVAILABLE || downloadState == DcMsg.DC_DOWNLOAD_FAILURE || downloadState == DcMsg.DC_DOWNLOAD_IN_PROGRESS) { + emailIndicatorView.setVisibility(View.GONE); + } else { + emailIndicatorView.setVisibility(View.VISIBLE); + } + locationIndicatorView.setVisibility(messageRecord.hasLocation() ? View.VISIBLE : View.GONE); presentDeliveryStatus(messageRecord); } From b5e7f13819aa4c5176597a914ab9827a7ff3250b Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 24 Jun 2025 20:05:18 +0200 Subject: [PATCH 03/16] don't allow to edit or clone email threads --- .../java/org/thoughtcrime/securesms/ProfileActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java b/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java index 50a3ddf11..c4fb85f7f 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java @@ -142,7 +142,8 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity boolean canReceive = true; if (chatId != 0) { - menu.findItem(R.id.menu_clone).setVisible(chatIsMultiUser && !chatIsMailingList); + DcChat dcChat = dcContext.getChat(chatId); + menu.findItem(R.id.menu_clone).setVisible(chatIsMultiUser && !chatIsMailingList && dcChat.isEncrypted()); if (chatIsDeviceTalk) { menu.findItem(R.id.edit_name).setVisible(false); menu.findItem(R.id.show_encr_info).setVisible(false); @@ -151,8 +152,7 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity if (chatIsBroadcast) { canReceive = false; } else { - DcChat dcChat = dcContext.getChat(chatId); - if (!chatIsMailingList && !dcChat.canSend()) { + if (!dcChat.canSend() || !dcChat.isEncrypted()) { menu.findItem(R.id.edit_name).setVisible(false); } } From f0d62f41c9be825b00e35aa6c1a6b14cfe737b14 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 24 Jun 2025 20:12:37 +0200 Subject: [PATCH 04/16] show email address for email contacts --- .../java/org/thoughtcrime/securesms/ConversationTitleView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationTitleView.java b/src/main/java/org/thoughtcrime/securesms/ConversationTitleView.java index 5fb2f14b9..9d2cc8051 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationTitleView.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationTitleView.java @@ -106,7 +106,7 @@ public class ConversationTitleView extends RelativeLayout { DcContact dcContact = dcContext.getContact(chatContacts[0]); if (!profileView && dcContact.isBot()) { subtitleStr = context.getString(R.string.bot); - } else if (profileView) { + } else if (profileView || !dcChat.isEncrypted()) { subtitleStr = dcContact.getAddr(); } isOnline = dcContact.wasSeenRecently(); From 825ee6a79ef607a218fe321c7c873a7f8b16296b Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 25 Jun 2025 14:45:05 +0200 Subject: [PATCH 05/16] don't allow to leave email threads --- .../org/thoughtcrime/securesms/ConversationActivity.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index cdd31e0a8..4544064de 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -446,7 +446,10 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } if (isMultiUser()) { - if (dcChat.canSend() && !dcChat.isBroadcast() && !dcChat.isMailingList()) { + if (dcChat.isEncrypted() + && dcChat.canSend() + && !dcChat.isBroadcast() + && !dcChat.isMailingList()) { menu.findItem(R.id.menu_leave).setVisible(true); } } From ae2c15238231314be507ef1385cf057a3369fc06 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 25 Jun 2025 14:45:22 +0200 Subject: [PATCH 06/16] don't allow to edit mailinglist name it will get reset on next incoming message anyways --- src/main/java/org/thoughtcrime/securesms/ProfileActivity.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java b/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java index c4fb85f7f..1ac092903 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileActivity.java @@ -152,7 +152,9 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity if (chatIsBroadcast) { canReceive = false; } else { - if (!dcChat.canSend() || !dcChat.isEncrypted()) { + if (!dcChat.isEncrypted() + || !dcChat.canSend() + || chatIsMailingList) { menu.findItem(R.id.edit_name).setVisible(false); } } From 0f694876f590ff3dff48e716f4781d2fadc692bd Mon Sep 17 00:00:00 2001 From: adbenitez Date: Fri, 27 Jun 2025 00:39:10 +0200 Subject: [PATCH 07/16] update core submodule --- jni/deltachat-core-rust | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jni/deltachat-core-rust b/jni/deltachat-core-rust index c0cf4e7e9..416131b4a 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit c0cf4e7e9b70c9d2201a1e30e5a0e782859ab95b +Subproject commit 416131b4a25d7fb308439e2ef12c03633e6e459f From bd8698c3f326f166417759ba6488e9e7982fad87 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 30 Jun 2025 18:58:28 +0200 Subject: [PATCH 08/16] add DcContact.isKeyContact() --- jni/dc_wrapper.c | 6 ++++++ src/main/java/com/b44t/messenger/DcContact.java | 1 + .../securesms/contacts/ContactSelectionListItem.java | 2 +- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c index 78b4fd432..8764132f3 100644 --- a/jni/dc_wrapper.c +++ b/jni/dc_wrapper.c @@ -1832,6 +1832,12 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isVerified(JNIEnv *env, job } +JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isKeyContact(JNIEnv *env, jobject obj) +{ + return dc_contact_is_key_contact(get_dc_contact(env, obj))==1; +} + + JNIEXPORT jint Java_com_b44t_messenger_DcContact_getVerifierId(JNIEnv *env, jobject obj) { return dc_contact_get_verifier_id(get_dc_contact(env, obj)); diff --git a/src/main/java/com/b44t/messenger/DcContact.java b/src/main/java/com/b44t/messenger/DcContact.java index 13f55f993..e21b32406 100644 --- a/src/main/java/com/b44t/messenger/DcContact.java +++ b/src/main/java/com/b44t/messenger/DcContact.java @@ -57,6 +57,7 @@ public class DcContact { public native boolean wasSeenRecently(); public native boolean isBlocked (); public native boolean isVerified (); + public native boolean isKeyContact (); public native int getVerifierId (); public native boolean isBot (); diff --git a/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java index 0c0a86424..83959ecad 100644 --- a/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java @@ -109,7 +109,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM this.nameView.setEnabled(true); this.nameView.setText(name==null? "#" : name); - if (contact != null && contact.isVerified()) { + if (contact != null && contact.isKeyContact()) { number = null; } From 0ee08fee4273243a7e394fd5a72c7db1c30826f2 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 30 Jun 2025 20:49:50 +0200 Subject: [PATCH 09/16] update core --- jni/deltachat-core-rust | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jni/deltachat-core-rust b/jni/deltachat-core-rust index 416131b4a..2ee3675ba 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit 416131b4a25d7fb308439e2ef12c03633e6e459f +Subproject commit 2ee3675ba208a99a340751dd585c853ba251a62d From e6415abda2cbc09ab06d1de596827b1eee836ede Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 7 Jul 2025 17:42:16 +0200 Subject: [PATCH 10/16] modify QR icon --- .../contacts/ContactSelectionListItem.java | 2 +- src/main/res/drawable/baseline_qr_code_24.xml | 15 --------------- src/main/res/drawable/ic_qr_code_24.xml | 3 +++ src/main/res/menu/text_secure_normal.xml | 2 +- 4 files changed, 5 insertions(+), 17 deletions(-) delete mode 100644 src/main/res/drawable/baseline_qr_code_24.xml create mode 100644 src/main/res/drawable/ic_qr_code_24.xml diff --git a/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java index 9f675e654..a5fa2c4ec 100644 --- a/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java +++ b/src/main/java/org/thoughtcrime/securesms/contacts/ContactSelectionListItem.java @@ -79,7 +79,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM this.nameView.setTypeface(null, Typeface.NORMAL); } if (specialId == DcContact.DC_CONTACT_ID_QR_INVITE) { - this.avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.baseline_qr_code_24).asDrawable(getContext(), ThemeUtil.getDummyContactColor(getContext()))); + this.avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.ic_qr_code_24).asDrawable(getContext(), ThemeUtil.getDummyContactColor(getContext()))); } else { this.avatar.setAvatar(glideRequests, recipient, false); } diff --git a/src/main/res/drawable/baseline_qr_code_24.xml b/src/main/res/drawable/baseline_qr_code_24.xml deleted file mode 100644 index e7edb465f..000000000 --- a/src/main/res/drawable/baseline_qr_code_24.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - diff --git a/src/main/res/drawable/ic_qr_code_24.xml b/src/main/res/drawable/ic_qr_code_24.xml new file mode 100644 index 000000000..f95c18d61 --- /dev/null +++ b/src/main/res/drawable/ic_qr_code_24.xml @@ -0,0 +1,3 @@ + + + diff --git a/src/main/res/menu/text_secure_normal.xml b/src/main/res/menu/text_secure_normal.xml index 05d26d1a1..8a942ede3 100644 --- a/src/main/res/menu/text_secure_normal.xml +++ b/src/main/res/menu/text_secure_normal.xml @@ -4,7 +4,7 @@ Date: Mon, 7 Jul 2025 18:39:51 +0200 Subject: [PATCH 11/16] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc57f3942..3e6400b6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * New icon for the in-chat apps button * Improve hint for app drafts * Add Text-To-Speech (TTS) support for in-chat apps +* New icon for the QR icon ## v1.58.4 2025-05 From 7f982e6302c35a35d15bb700af3c343a9e46fb88 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 8 Jul 2025 23:24:01 +0200 Subject: [PATCH 12/16] update core --- jni/deltachat-core-rust | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jni/deltachat-core-rust b/jni/deltachat-core-rust index 2ee3675ba..3f66ae91c 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit 2ee3675ba208a99a340751dd585c853ba251a62d +Subproject commit 3f66ae91cd2d63fe7a316b75578f724fdf959e4a From 0d50af1aa5bf4484b995cde4ac34cc6a1130b49c Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Wed, 9 Jul 2025 17:14:42 +0200 Subject: [PATCH 13/16] mailinglist profile: addr in subtitle, no members this is follow up for #3792 and does the same as before - showing no members for mailinglists and showing its address in the subtitle --- .../java/org/thoughtcrime/securesms/ProfileAdapter.java | 7 ++----- .../java/org/thoughtcrime/securesms/ProfileAvatarItem.java | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java index 02135bb50..fc3612016 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java @@ -277,7 +277,6 @@ public class ProfileAdapter extends RecyclerView.Adapter itemDataStatusText = ""; isBroadcast = dcChat != null && dcChat.isBroadcast(); boolean isMailingList = dcChat != null && dcChat.isMailingList(); - boolean isGroup = dcChat != null && dcChat.getType() == DcChat.DC_CHAT_TYPE_GROUP; boolean isSelfTalk = dcChat != null && dcChat.isSelfTalk(); boolean isDeviceTalk = dcChat != null && dcChat.isDeviceTalk(); memberCount = memberList!=null ? memberList.length : 0; @@ -309,10 +308,10 @@ public class ProfileAdapter extends RecyclerView.Adapter itemData.add(new ItemData(ITEM_LAST_SEEN, lastSeenTxt, 0)); } - if (memberList!=null) { + if (memberList!=null && !isMailingList) { itemData.add(new ItemData(ITEM_DIVIDER, null, 0)); if (dcChat != null) { - if (!isMailingList && dcChat.canSend()) { + if (dcChat.canSend()) { itemData.add(new ItemData(ITEM_MEMBERS, DcContact.DC_CONTACT_ID_ADD_MEMBER, 0)); if (!isBroadcast) { itemData.add(new ItemData(ITEM_MEMBERS, DcContact.DC_CONTACT_ID_QR_INVITE, 0)); @@ -345,8 +344,6 @@ public class ProfileAdapter extends RecyclerView.Adapter if (dcContact != null) { itemData.add(new ItemData(ITEM_ADDRESS, dcContact.getAddr(), 0)); - } else if (isMailingList) { - itemData.add(new ItemData(ITEM_ADDRESS, dcChat.getMailinglistAddr(), 0)); } } diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileAvatarItem.java b/src/main/java/org/thoughtcrime/securesms/ProfileAvatarItem.java index 301c25fdd..4c70f81fc 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileAvatarItem.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileAvatarItem.java @@ -58,7 +58,7 @@ public class ProfileAvatarItem extends LinearLayout implements RecipientModified greenCheckmark = dcChat.isProtected(); if (dcChat.isMailingList()) { - subtitle = getContext().getString(R.string.contacts_headline); + subtitle = dcChat.getMailinglistAddr(); } else if (dcChat.isBroadcast()) { subtitle = getContext().getResources().getQuantityString(R.plurals.n_recipients, memberCount, memberCount); } else if (dcChat.getType() == DcChat.DC_CHAT_TYPE_GROUP) { From ab641df8f94948b689eb4cb75c982bcf4c4c876f Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 9 Jul 2025 22:13:08 +0200 Subject: [PATCH 14/16] update core to 2.0.0 --- jni/deltachat-core-rust | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jni/deltachat-core-rust b/jni/deltachat-core-rust index 3f66ae91c..192a6a2b9 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit 3f66ae91cd2d63fe7a316b75578f724fdf959e4a +Subproject commit 192a6a2b9dd9413eb175e1c3e88b93a6b59d515a From fa6fad5787f1a731101c1d5bab5b48982ab18221 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Wed, 9 Jul 2025 22:20:49 +0200 Subject: [PATCH 15/16] update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e6400b6a..ffc67f2b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,10 @@ * Improve hint for app drafts * Add Text-To-Speech (TTS) support for in-chat apps * New icon for the QR icon +* Improved separation between unencryted chats/contacts and encrypted ones, avoiding mixing of encrypted and unencrypted messages in the same chat +* Removed padlocks, as encrypted is the default "normal" state, instead, unencryted email is marked as such +* Classic email chats/threads now have an email letter icon making it easy to recognize +* Update to core 2.0.0 ## v1.58.4 2025-05 From b699451c2a4cc100ca1e9265d3ea901460eff60f Mon Sep 17 00:00:00 2001 From: adb Date: Wed, 9 Jul 2025 20:34:53 +0000 Subject: [PATCH 16/16] Update CHANGELOG.md Co-authored-by: Hocuri --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ffc67f2b6..ac01a7a04 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,8 +11,8 @@ * Add Text-To-Speech (TTS) support for in-chat apps * New icon for the QR icon * Improved separation between unencryted chats/contacts and encrypted ones, avoiding mixing of encrypted and unencrypted messages in the same chat -* Removed padlocks, as encrypted is the default "normal" state, instead, unencryted email is marked as such -* Classic email chats/threads now have an email letter icon making it easy to recognize +* Removed padlocks, as encrypted is the default "normal" state. Instead, unencrypted email is marked with a small email / letter (✉️) icon +* Classic email chats/threads get a big email / letter icon making it easy to recognize * Update to core 2.0.0 ## v1.58.4