From bae998f81132c0f775e1178f3c3e6946d2efca92 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Thu, 8 Jan 2026 17:34:22 +0100 Subject: [PATCH 01/28] truncate file names in the middle that way, the end is always visible, which contains important information more often than the middle. this is common knowledge since the 90's or so however, as quite some previously stable ux patterns, lost on the way. (cmp. Scott Jensen, https://www.youtube.com/watch?v=1fZTOjd_bOQ ) --- CHANGELOG.md | 1 + src/main/res/layout/document_view.xml | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 948b5394d..18618f60e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * Don't notify notification-to-all from in-chat apps if the chat is muted * Allow to see inbox quota for all relays in connectivity screen +* Truncate file names in the middle, not at the end; important information are more often at the end * Update to core 2.36.0 ## v2.35.0 diff --git a/src/main/res/layout/document_view.xml b/src/main/res/layout/document_view.xml index 053c26560..17dcffd67 100644 --- a/src/main/res/layout/document_view.xml +++ b/src/main/res/layout/document_view.xml @@ -37,9 +37,8 @@ android:layout_height="wrap_content" style="@style/Signal.Text.Body" android:singleLine="true" - android:maxLines="1" android:clickable="false" - android:ellipsize="end" + android:ellipsize="middle" android:textColor="@color/document_icon_text" tools:text="The-Anarchist-Tension-by-Alfredo-Bonanno.pdf"/> From b0e5c1c6347da0f91debb3f5d19ac7fed7904a6c Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 13 Jan 2026 20:23:41 +0100 Subject: [PATCH 02/28] remove FROM_WELCOME in CreateProfileActivity --- .../securesms/CreateProfileActivity.java | 22 ++----------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/CreateProfileActivity.java b/src/main/java/org/thoughtcrime/securesms/CreateProfileActivity.java index 991d0bb61..5d71acf45 100644 --- a/src/main/java/org/thoughtcrime/securesms/CreateProfileActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/CreateProfileActivity.java @@ -49,8 +49,6 @@ public class CreateProfileActivity extends BaseActionBarActivity { private static final String TAG = CreateProfileActivity.class.getSimpleName(); - public static final String FROM_WELCOME = "from_welcome"; - private static final int REQUEST_CODE_AVATAR = 1; private InputAwareLayout container; @@ -58,7 +56,6 @@ public class CreateProfileActivity extends BaseActionBarActivity { private EditText name; private EditText statusView; - private boolean fromWelcome; private boolean avatarChanged; private boolean imageLoaded; @@ -69,12 +66,11 @@ public class CreateProfileActivity extends BaseActionBarActivity { @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); - this.fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false); setContentView(R.layout.profile_create_activity); getSupportActionBar().setTitle(R.string.pref_profile_info_headline); - getSupportActionBar().setDisplayHomeAsUpEnabled(!this.fromWelcome); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); attachmentManager = new AttachmentManager(this, () -> {}); @@ -110,8 +106,6 @@ public class CreateProfileActivity extends BaseActionBarActivity { public void onBackPressed() { if (container.isInputOpen()) { container.hideCurrentInput(name); - } else if (fromWelcome) { - updateProfile(); } else { super.onBackPressed(); } @@ -184,14 +178,7 @@ public class CreateProfileActivity extends BaseActionBarActivity { // add padding to avoid content hidden behind system bars ViewUtil.applyWindowInsets(container); - if (fromWelcome) { - String addr = DcHelper.get(this, "addr"); - loginSuccessText.setText(R.string.set_name_and_avatar_explain); - ViewUtil.findById(this, R.id.status_text_layout).setVisibility(View.GONE); - ViewUtil.findById(this, R.id.information_label).setVisibility(View.GONE); - } else { - loginSuccessText.setVisibility(View.GONE); - } + loginSuccessText.setVisibility(View.GONE); } private void initializeProfileName() { @@ -258,11 +245,6 @@ public class CreateProfileActivity extends BaseActionBarActivity { if (result) { attachmentManager.cleanup(); - if (fromWelcome) { - Intent intent = new Intent(getApplicationContext(), ConversationListActivity.class); - intent.putExtra(ConversationListActivity.FROM_WELCOME, true); - startActivity(intent); - } finish(); } else { Toast.makeText(CreateProfileActivity.this, R.string.error, Toast.LENGTH_LONG).show(); From 2efaf1df93e6b1157bbaf19d11b22926c1817931 Mon Sep 17 00:00:00 2001 From: wch423 Date: Wed, 14 Jan 2026 14:55:59 +0100 Subject: [PATCH 03/28] Remove email address from profile --- .../org/thoughtcrime/securesms/ProfileAdapter.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java index 41eb6eec8..4149ad2c4 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java @@ -39,7 +39,6 @@ public class ProfileAdapter extends RecyclerView.Adapter public static final int ITEM_SEND_MESSAGE_BUTTON = 35; public static final int ITEM_LAST_SEEN = 40; public static final int ITEM_INTRODUCED_BY = 45; - public static final int ITEM_ADDRESS = 50; public static final int ITEM_HEADER = 53; public static final int ITEM_MEMBERS = 55; public static final int ITEM_SHARED_CHATS = 60; @@ -140,7 +139,7 @@ public class ProfileAdapter extends RecyclerView.Adapter } else if (viewType == ITEM_ALL_MEDIA_BUTTON || viewType == ITEM_SEND_MESSAGE_BUTTON) { final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_button, parent, false); return new ViewHolder(item); - } else if (viewType == ITEM_LAST_SEEN || viewType == ITEM_INTRODUCED_BY || viewType == ITEM_ADDRESS) { + } else if (viewType == ITEM_LAST_SEEN || viewType == ITEM_INTRODUCED_BY) { final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_small, parent, false); return new ViewHolder(item); } else { @@ -208,12 +207,9 @@ public class ProfileAdapter extends RecyclerView.Adapter item.setOnClickListener(view -> clickListener.onSettingsClicked(data.viewType)); boolean tintIcon = data.viewType != ITEM_INTRODUCED_BY; item.set(data.label, data.icon, tintIcon); - if (data.viewType == ITEM_LAST_SEEN || data.viewType == ITEM_ADDRESS) { + if (data.viewType == ITEM_LAST_SEEN) { int padding = (int)((float)context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding) * 1.2); item.setPadding(item.getPaddingLeft(), item.getPaddingTop(), item.getPaddingRight(), padding); - if (data.viewType == ITEM_ADDRESS) { - fragment.registerForContextMenu(item); - } } else if (data.viewType == ITEM_INTRODUCED_BY) { int padding = context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding); item.setPadding(item.getPaddingLeft(), padding, item.getPaddingRight(), item.getPaddingBottom()); @@ -342,10 +338,6 @@ public class ProfileAdapter extends RecyclerView.Adapter String introducedBy = context.getString(R.string.verified_by_unknown); itemData.add(new ItemData(ITEM_INTRODUCED_BY, introducedBy, R.drawable.ic_verified)); } - - if (dcContact != null) { - itemData.add(new ItemData(ITEM_ADDRESS, dcContact.getAddr(), 0)); - } } notifyDataSetChanged(); From 79c7419b71c044f1249db6896107667092c9cfba Mon Sep 17 00:00:00 2001 From: wch423 Date: Wed, 14 Jan 2026 16:16:55 +0100 Subject: [PATCH 04/28] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18618f60e..1600e789d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ * Don't notify notification-to-all from in-chat apps if the chat is muted * Allow to see inbox quota for all relays in connectivity screen * Truncate file names in the middle, not at the end; important information are more often at the end +* Remove email address from user profile * Update to core 2.36.0 ## v2.35.0 From e59655c456771e2d8dce206abc69d9fd0a0179dc Mon Sep 17 00:00:00 2001 From: wch423 Date: Wed, 14 Jan 2026 18:29:36 +0100 Subject: [PATCH 05/28] Fix dialogs not showing when pasted QR codes are not valid --- CHANGELOG.md | 1 + .../java/org/thoughtcrime/securesms/qr/QrCodeHandler.java | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1600e789d..42ebbb45a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Allow to see inbox quota for all relays in connectivity screen * Truncate file names in the middle, not at the end; important information are more often at the end * Remove email address from user profile +* Fix: Show dialog if pasted QR codes are invalid * Update to core 2.36.0 ## v2.35.0 diff --git a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java index 8e5900386..bd1f9c841 100644 --- a/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java +++ b/src/main/java/org/thoughtcrime/securesms/qr/QrCodeHandler.java @@ -58,7 +58,9 @@ public class QrCodeHandler { public void handleOnlySecureJoinQr(String rawString, SecurejoinSource source, SecurejoinUiPath uiPath) { final DcLot qrParsed = dcContext.checkQr(rawString); if (!handleSecureJoinQr(qrParsed, rawString, source, uiPath)) { - handleDefault(new AlertDialog.Builder(activity), rawString, qrParsed); + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + handleDefault(builder, rawString, qrParsed); + builder.create().show(); } } @@ -122,7 +124,9 @@ public class QrCodeHandler { public void handleOnlyAddRelayQr(String rawString) { final DcLot qrParsed = dcContext.checkQr(rawString); if (!handleAddRelayQr(qrParsed, rawString)) { - handleDefault(new AlertDialog.Builder(activity), rawString, qrParsed); + AlertDialog.Builder builder = new AlertDialog.Builder(activity); + handleDefault(builder, rawString, qrParsed); + builder.create().show(); } } From ab0d33b3c0b61b53e8b5d2cd6f1375e12c9416a7 Mon Sep 17 00:00:00 2001 From: wch423 Date: Thu, 15 Jan 2026 14:07:07 +0100 Subject: [PATCH 06/28] Ask for Notification Permission when adding second device --- .../securesms/WelcomeActivity.java | 26 +++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java index 53e4a1961..c70ae2119 100644 --- a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java @@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.qr.QrCodeHandler; import org.thoughtcrime.securesms.qr.RegistrationQrActivity; import org.thoughtcrime.securesms.service.GenericForegroundService; import org.thoughtcrime.securesms.service.NotificationController; +import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.StreamUtil; import org.thoughtcrime.securesms.util.Util; @@ -76,8 +77,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen .setNegativeButton(R.string.cancel, null) .create(); view.findViewById(R.id.add_as_second_device_button).setOnClickListener((v) -> { - startAddAsSecondDeviceActivity(); - signInDialog.dismiss(); + showSignInDialogWithPermission(signInDialog); }); view.findViewById(R.id.backup_button).setOnClickListener((v) -> { startImportBackup(); @@ -93,6 +93,28 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen DcHelper.maybeShowMigrationError(this); } + private void showSignInDialogWithPermission(AlertDialog signInDialog) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU + && !Prefs.getBooleanPreference(this, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, false)) { + Prefs.setBooleanPreference(this, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, true); + Permissions.with(this) + .request(Manifest.permission.POST_NOTIFICATIONS) + .ifNecessary() + .onAllGranted(() -> { + startAddAsSecondDeviceActivity(); + signInDialog.dismiss(); + }) + .onAnyDenied(() -> { + startAddAsSecondDeviceActivity(); + signInDialog.dismiss(); + }) + .execute(); + } else { + startAddAsSecondDeviceActivity(); + signInDialog.dismiss(); + } + } + protected void initializeActionBar() { ActionBar supportActionBar = getSupportActionBar(); if (supportActionBar == null) throw new AssertionError(); From 32ee198128b07e449a311af24d9864a4e75657ef Mon Sep 17 00:00:00 2001 From: wch423 Date: Thu, 15 Jan 2026 16:48:13 +0100 Subject: [PATCH 07/28] Add util methods to handle RTL/LTR text concatenations; Add markers to external links --- src/main/assets/help/help.css | 4 ++++ .../securesms/InstantOnboardingActivity.java | 12 ++++++++-- .../securesms/LocalHelpActivity.java | 23 +++++++++++++++++++ .../thoughtcrime/securesms/util/TextUtil.java | 16 +++++++++++++ 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/thoughtcrime/securesms/util/TextUtil.java diff --git a/src/main/assets/help/help.css b/src/main/assets/help/help.css index b2770e33c..5feee6c5a 100644 --- a/src/main/assets/help/help.css +++ b/src/main/assets/help/help.css @@ -6,6 +6,10 @@ a { text-decoration: none; } +a[href^='http']::after { + content: " ↗"; +} + h2, h3, h4 { margin-top: 2rem; } diff --git a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java index 614a997aa..c2e8607a3 100644 --- a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java @@ -54,6 +54,7 @@ import org.thoughtcrime.securesms.relay.RelayListActivity; import org.thoughtcrime.securesms.scribbles.ScribbleActivity; import org.thoughtcrime.securesms.util.IntentUtils; import org.thoughtcrime.securesms.util.Prefs; +import org.thoughtcrime.securesms.util.TextUtil; import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.views.ProgressDialog; @@ -345,6 +346,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements private void showOtherOptionsDialog() { View view = View.inflate(this, R.layout.signup_options_view, null); + Button otherServerButton = view.findViewById(R.id.use_other_server); + if (otherServerButton != null) { + otherServerButton.setText( + TextUtil.markAsExternal(getString(R.string.instant_onboarding_other_server))); + } AlertDialog signUpDialog = new AlertDialog.Builder(this) .setView(view) .setTitle(R.string.instant_onboarding_show_more_instances) @@ -376,9 +382,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements signUpBtn.setText(R.string.instant_onboarding_create); privacyPolicyBtn.setTextColor(getResources().getColor(R.color.delta_accent)); if (DEFAULT_CHATMAIL_HOST.equals(providerHost)) { - privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_default2, providerHost)); + privacyPolicyBtn.setText(TextUtil.markAsExternal( + getString(R.string.instant_onboarding_agree_default2, providerHost))); } else { - privacyPolicyBtn.setText(getString(R.string.instant_onboarding_agree_instance, providerHost)); + privacyPolicyBtn.setText(TextUtil.markAsExternal( + getString(R.string.instant_onboarding_agree_instance, providerHost))); } } } diff --git a/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java b/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java index f05cbc3cd..241a0f089 100644 --- a/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/LocalHelpActivity.java @@ -5,6 +5,7 @@ import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; +import org.thoughtcrime.securesms.util.TextUtil; import org.thoughtcrime.securesms.util.Util; import java.io.InputStream; @@ -51,6 +52,28 @@ public class LocalHelpActivity extends WebViewActivity public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); this.getMenuInflater().inflate(R.menu.local_help, menu); + + // Append " ↗" to external link buttons + MenuItem item = menu.findItem(R.id.learn_more); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.delta_chat_homepage))); + } + + item = menu.findItem(R.id.privacy_policy); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.privacy_policy))); + } + + item = menu.findItem(R.id.contribute); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.contribute))); + } + + item = menu.findItem(R.id.report_issue); + if (item != null) { + item.setTitle(TextUtil.markAsExternal(getString(R.string.global_menu_help_report_desktop))); + } + return true; } diff --git a/src/main/java/org/thoughtcrime/securesms/util/TextUtil.java b/src/main/java/org/thoughtcrime/securesms/util/TextUtil.java new file mode 100644 index 000000000..914734011 --- /dev/null +++ b/src/main/java/org/thoughtcrime/securesms/util/TextUtil.java @@ -0,0 +1,16 @@ +package org.thoughtcrime.securesms.util; + +import androidx.annotation.NonNull; +import androidx.core.text.BidiFormatter; + +public class TextUtil { + @NonNull + public static String bidiAppend(String text, String suffix) { + return BidiFormatter.getInstance().unicodeWrap(text) + suffix; + } + + @NonNull + public static String markAsExternal(String text) { + return bidiAppend(text, " ↗"); + } +} From e4993bd30253951245004c3439021b7829cf6478 Mon Sep 17 00:00:00 2001 From: wch423 Date: Thu, 15 Jan 2026 16:58:52 +0100 Subject: [PATCH 08/28] Add CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42ebbb45a..d44ead353 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Allow to see inbox quota for all relays in connectivity screen * Truncate file names in the middle, not at the end; important information are more often at the end * Remove email address from user profile +* Mark external links with " ↗" to make them clear * Fix: Show dialog if pasted QR codes are invalid * Update to core 2.36.0 From 7643ecd90af04ca9750a0a7dafba2e8d7453b464 Mon Sep 17 00:00:00 2001 From: wch423 Date: Thu, 15 Jan 2026 18:11:52 +0100 Subject: [PATCH 09/28] Use new generation method so the QR code is larger --- CHANGELOG.md | 1 + jni/dc_wrapper.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42ebbb45a..e9f992a33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Allow to see inbox quota for all relays in connectivity screen * Truncate file names in the middle, not at the end; important information are more often at the end * Remove email address from user profile +* Make QR code larger on "Add Second Device" screen * Fix: Show dialog if pasted QR codes are invalid * Update to core 2.36.0 diff --git a/jni/dc_wrapper.c b/jni/dc_wrapper.c index e83891946..b51257bdb 100644 --- a/jni/dc_wrapper.c +++ b/jni/dc_wrapper.c @@ -1927,7 +1927,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcBackupProvider_getQr(JNIEnv *env, jo JNIEXPORT jstring Java_com_b44t_messenger_DcBackupProvider_getQrSvg(JNIEnv *env, jobject obj) { - char* temp = dc_backup_provider_get_qr_svg(get_dc_backup_provider(env, obj)); + char* temp = dc_create_qr_svg(dc_backup_provider_get_qr(get_dc_backup_provider(env, obj))); jstring ret = JSTRING_NEW(temp); dc_str_unref(temp); return ret; From 8a0fe892f46aa85481666aa310da51a888a3bb4f Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 15 Jan 2026 23:33:57 +0100 Subject: [PATCH 10/28] refresh chatlist when going back from chat --- .../org/thoughtcrime/securesms/ConversationActivity.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java index e4b1f9f89..dbcc0e113 100644 --- a/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/ConversationActivity.java @@ -193,6 +193,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private boolean isSecurityInitialized = false; private boolean successfulForwardingAttempt = false; private boolean isEditing = false; + private boolean switchedProfile = false; @Override protected void onCreate(Bundle state, boolean ready) { @@ -607,6 +608,11 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity } private void handleReturnToConversationList(@Nullable Bundle extras) { + if (switchedProfile) { // force refreshing of chatlist + if (extras == null) extras = new Bundle(); + extras.putInt(ConversationListFragment.RELOAD_LIST, 1); + } + boolean archived = getIntent().getBooleanExtra(FROM_ARCHIVED_CHATS_EXTRA, false); Intent intent = new Intent(this, (archived ? ConversationListArchiveActivity.class : ConversationListActivity.class)); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); @@ -954,6 +960,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity private void initializeResources() { int accountId = getIntent().getIntExtra(ACCOUNT_ID_EXTRA, dcContext.getAccountId()); if (accountId != dcContext.getAccountId()) { + switchedProfile = true; AccountManager.getInstance().switchAccount(context, accountId); fragment.dcContext = dcContext = context.getDcContext(); initializeBackground(); From 2067122d2ceb5d69caa64ec8789818aed79d595b Mon Sep 17 00:00:00 2001 From: adbenitez Date: Thu, 15 Jan 2026 23:41:41 +0100 Subject: [PATCH 11/28] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e72924a0..8191306f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * Mark external links with " ↗" to make them clear * Make QR code larger on "Add Second Device" screen * Fix: Show dialog if pasted QR codes are invalid +* Fix: Refresh chat list when returning from conversation if selected profile changed * Update to core 2.36.0 ## v2.35.0 From 6a5a75131eb0f675251d1786d9cc5d1807df3bd0 Mon Sep 17 00:00:00 2001 From: wch423 Date: Fri, 16 Jan 2026 17:44:34 +0100 Subject: [PATCH 12/28] Add indication for blocked contacts in user profile --- CHANGELOG.md | 1 + .../org/thoughtcrime/securesms/ProfileAdapter.java | 11 ++++++++--- src/main/res/drawable/contact_blocked_24.xml | 5 +++++ src/main/res/values/strings.xml | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 src/main/res/drawable/contact_blocked_24.xml diff --git a/CHANGELOG.md b/CHANGELOG.md index 8191306f1..3293e4ae2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Remove email address from user profile * Mark external links with " ↗" to make them clear * Make QR code larger on "Add Second Device" screen +* Add indication for blocked contacts in user profile * Fix: Show dialog if pasted QR codes are invalid * Fix: Refresh chat list when returning from conversation if selected profile changed * Update to core 2.36.0 diff --git a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java index 4149ad2c4..c3d956e46 100644 --- a/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java +++ b/src/main/java/org/thoughtcrime/securesms/ProfileAdapter.java @@ -38,6 +38,7 @@ public class ProfileAdapter extends RecyclerView.Adapter public static final int ITEM_ALL_MEDIA_BUTTON = 30; public static final int ITEM_SEND_MESSAGE_BUTTON = 35; public static final int ITEM_LAST_SEEN = 40; + public static final int ITEM_BLOCKED = 43; public static final int ITEM_INTRODUCED_BY = 45; public static final int ITEM_HEADER = 53; public static final int ITEM_MEMBERS = 55; @@ -139,7 +140,7 @@ public class ProfileAdapter extends RecyclerView.Adapter } else if (viewType == ITEM_ALL_MEDIA_BUTTON || viewType == ITEM_SEND_MESSAGE_BUTTON) { final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_button, parent, false); return new ViewHolder(item); - } else if (viewType == ITEM_LAST_SEEN || viewType == ITEM_INTRODUCED_BY) { + } else if (viewType == ITEM_LAST_SEEN || viewType == ITEM_INTRODUCED_BY || viewType == ITEM_BLOCKED) { final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_small, parent, false); return new ViewHolder(item); } else { @@ -205,9 +206,9 @@ public class ProfileAdapter extends RecyclerView.Adapter else if(holder.itemView instanceof ProfileTextItem) { ProfileTextItem item = (ProfileTextItem) holder.itemView; item.setOnClickListener(view -> clickListener.onSettingsClicked(data.viewType)); - boolean tintIcon = data.viewType != ITEM_INTRODUCED_BY; + boolean tintIcon = data.viewType != ITEM_INTRODUCED_BY && data.viewType != ITEM_BLOCKED; item.set(data.label, data.icon, tintIcon); - if (data.viewType == ITEM_LAST_SEEN) { + if (data.viewType == ITEM_BLOCKED) { int padding = (int)((float)context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding) * 1.2); item.setPadding(item.getPaddingLeft(), item.getPaddingTop(), item.getPaddingRight(), padding); } else if (data.viewType == ITEM_INTRODUCED_BY) { @@ -302,6 +303,10 @@ public class ProfileAdapter extends RecyclerView.Adapter itemData.add(new ItemData(ITEM_LAST_SEEN, lastSeenTxt, 0)); } + if (dcContact != null && !isDeviceTalk && !isSelfTalk && dcContact.isBlocked()) { + itemData.add(new ItemData(ITEM_BLOCKED, context.getString(R.string.contact_blocked), R.drawable.contact_blocked_24)); + } + if (memberList!=null && !isInBroadcast && !isMailingList) { itemData.add(new ItemData(ITEM_DIVIDER, null, 0)); if (dcChat != null) { diff --git a/src/main/res/drawable/contact_blocked_24.xml b/src/main/res/drawable/contact_blocked_24.xml new file mode 100644 index 000000000..3368f8111 --- /dev/null +++ b/src/main/res/drawable/contact_blocked_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index fbc458b02..9f8b69db8 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1002,6 +1002,7 @@ %1$s replied, waiting for being added to the group… Establishing connection, please wait… %1$s introduced. + This contact is blocked Introduced by %1$s Introduced by me From db956d93cf87b232fabf6bf7f50ac933e82073b1 Mon Sep 17 00:00:00 2001 From: wch423 Date: Fri, 16 Jan 2026 19:50:29 +0100 Subject: [PATCH 13/28] Do not launch WelcomeActivity as singleTask --- src/main/AndroidManifest.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 5daa74438..88921724e 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -221,7 +221,7 @@ android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/> From ee3886285b807c96a25af8fd5b088984c0d3487b Mon Sep 17 00:00:00 2001 From: wch423 Date: Mon, 19 Jan 2026 15:46:00 +0100 Subject: [PATCH 14/28] Show "No results found for" during Contact search if results are empty --- CHANGELOG.md | 1 + .../securesms/ContactSelectionListFragment.java | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3293e4ae2..1ad674463 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * Mark external links with " ↗" to make them clear * Make QR code larger on "Add Second Device" screen * Add indication for blocked contacts in user profile +* Show hint for empty contact search results * Fix: Show dialog if pasted QR codes are invalid * Fix: Refresh chat list when returning from conversation if selected profile changed * Update to core 2.36.0 diff --git a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index e7918ca01..e23979b28 100644 --- a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -29,6 +29,7 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; @@ -84,6 +85,7 @@ public class ContactSelectionListFragment extends Fragment private OnContactSelectedListener onContactSelectedListener; private String cursorFilter; private RecyclerView recyclerView; + private TextView emptyView; private ActionMode actionMode; private ActionMode.Callback actionModeCallback; @@ -113,6 +115,7 @@ public class ContactSelectionListFragment extends Fragment View view = inflater.inflate(R.layout.contact_selection_list_fragment, container, false); recyclerView = ViewUtil.findById(view, R.id.recycler_view); + emptyView = ViewUtil.findById(view, android.R.id.empty); // add padding to avoid content hidden behind system bars ViewUtil.applyWindowInsets(recyclerView, true, false, true, true); @@ -266,7 +269,17 @@ public class ContactSelectionListFragment extends Fragment @Override public void onLoadFinished(Loader loader, DcContactsLoader.Ret data) { - ((ContactSelectionListAdapter) recyclerView.getAdapter()).changeData(data); + ContactSelectionListAdapter adapter = (ContactSelectionListAdapter) recyclerView.getAdapter(); + adapter.changeData(data); + if (emptyView != null) { + if (adapter.getItemCount() > 0) { + emptyView.setVisibility(View.GONE); + emptyView.setText(""); + } else { + emptyView.setVisibility(View.VISIBLE); + emptyView.setText(getString(R.string.search_no_result_for_x, cursorFilter)); + } + } } @Override From d4d15eee7c512ddb5aed465cc98595598d64e690 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 19 Jan 2026 17:39:26 +0100 Subject: [PATCH 15/28] avoid showing "no results for null" if search term is empty --- .../securesms/ContactSelectionListFragment.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index e23979b28..6d1362c48 100644 --- a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -22,6 +22,7 @@ import static org.thoughtcrime.securesms.util.ShareUtil.isRelayingMessageContent import android.app.Activity; import android.content.Intent; import android.os.Bundle; +import android.text.TextUtils; import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.Menu; @@ -272,12 +273,11 @@ public class ContactSelectionListFragment extends Fragment ContactSelectionListAdapter adapter = (ContactSelectionListAdapter) recyclerView.getAdapter(); adapter.changeData(data); if (emptyView != null) { - if (adapter.getItemCount() > 0) { + if (adapter.getItemCount() > 0 || TextUtils.isEmpty(cursorFilter)) { emptyView.setVisibility(View.GONE); - emptyView.setText(""); } else { - emptyView.setVisibility(View.VISIBLE); emptyView.setText(getString(R.string.search_no_result_for_x, cursorFilter)); + emptyView.setVisibility(View.VISIBLE); } } } From 13c34d948038e8d0c90a7165d4ac29d559767064 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Mon, 19 Jan 2026 16:09:32 +0100 Subject: [PATCH 16/28] make clear, the blockage comes from user action --- src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 9f8b69db8..2f31a6eaa 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1002,7 +1002,7 @@ %1$s replied, waiting for being added to the group… Establishing connection, please wait… %1$s introduced. - This contact is blocked + You blocked the contact Introduced by %1$s Introduced by me From 0b9bb9ff764224185885bf190ff6d2b8e0fe4104 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 19 Jan 2026 19:18:41 +0100 Subject: [PATCH 17/28] fix: properly update menu and other actionMode state in ContactSelectionListFragment --- .../ContactSelectionListFragment.java | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java index 6d1362c48..4c6f11bb0 100644 --- a/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java +++ b/src/main/java/org/thoughtcrime/securesms/ContactSelectionListFragment.java @@ -127,8 +127,7 @@ public class ContactSelectionListFragment extends Fragment public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { MenuInflater inflater = getActivity().getMenuInflater(); inflater.inflate(R.menu.contact_list, menu); - setCorrectMenuVisibility(menu); - actionMode.setTitle("1"); + updateActionModeState(actionMode); return true; } @@ -165,19 +164,16 @@ public class ContactSelectionListFragment extends Fragment private void handleSelectAll() { getContactSelectionListAdapter().selectAll(); - updateActionModeTitle(); + updateActionModeState(actionMode); } - private void updateActionModeTitle() { - actionMode.setTitle(String.valueOf(getContactSelectionListAdapter().getActionModeSelection().size())); - } - - private void setCorrectMenuVisibility(Menu menu) { - ContactSelectionListAdapter adapter = getContactSelectionListAdapter(); - if (adapter.getActionModeSelection().size() > 1) { - menu.findItem(R.id.menu_view_profile).setVisible(false); + private void updateActionModeState(ActionMode actionMode) { + int size = getContactSelectionListAdapter().getActionModeSelection().size(); + if (size == 0) { + actionMode.finish(); } else { - menu.findItem(R.id.menu_view_profile).setVisible(true); + actionMode.getMenu().findItem(R.id.menu_view_profile).setVisible(size == 1); + actionMode.setTitle(String.valueOf(size)); } } @@ -293,10 +289,7 @@ public class ContactSelectionListFragment extends Fragment { if (handleActionMode) { if (actionMode != null) { - Menu menu = actionMode.getMenu(); - setCorrectMenuVisibility(menu); - updateActionModeTitle(); - finishActionModeIfSelectionIsEmpty(); + updateActionModeState(actionMode); } return; } @@ -334,17 +327,11 @@ public class ContactSelectionListFragment extends Fragment if (actionMode == null) { actionMode = ((AppCompatActivity)getActivity()).startSupportActionMode(actionModeCallback); } else { - finishActionModeIfSelectionIsEmpty(); + updateActionModeState(actionMode); } } } - private void finishActionModeIfSelectionIsEmpty() { - if (getContactSelectionListAdapter().getActionModeSelection().size() == 0) { - actionMode.finish(); - } - } - public void setOnContactSelectedListener(OnContactSelectedListener onContactSelectedListener) { this.onContactSelectedListener = onContactSelectedListener; } From a22baa7fc37814259f65316d1d6f1ca37f5fed25 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 19 Jan 2026 19:29:12 +0100 Subject: [PATCH 18/28] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ad674463..25af4dbb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * Show hint for empty contact search results * Fix: Show dialog if pasted QR codes are invalid * Fix: Refresh chat list when returning from conversation if selected profile changed +* Fix: Update menu when using "select all" in contact selection * Update to core 2.36.0 ## v2.35.0 From 616b4954264b761acd11da3f5c036a5e92906c08 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 19 Jan 2026 22:13:47 +0100 Subject: [PATCH 19/28] only create a new account if the selected one is already configured --- .../securesms/connect/AccountManager.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java index 5763089d6..d005c18dc 100644 --- a/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java +++ b/src/main/java/org/thoughtcrime/securesms/connect/AccountManager.java @@ -5,7 +5,6 @@ import android.content.Context; import android.content.Intent; import android.util.Log; -import androidx.annotation.Nullable; import androidx.fragment.app.FragmentActivity; import androidx.preference.PreferenceManager; @@ -14,7 +13,6 @@ import com.b44t.messenger.DcContext; import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.ConversationListActivity; -import org.thoughtcrime.securesms.InstantOnboardingActivity; import org.thoughtcrime.securesms.WelcomeActivity; import org.thoughtcrime.securesms.accounts.AccountSelectionListFragment; @@ -123,10 +121,6 @@ public class AccountManager { } public void switchAccountAndStartActivity(Activity activity, int destAccountId) { - switchAccountAndStartActivity(activity, destAccountId, null); - } - - private void switchAccountAndStartActivity(Activity activity, int destAccountId, @Nullable String backupQr) { if (destAccountId==0) { beginAccountCreation(activity); } else { @@ -134,12 +128,8 @@ public class AccountManager { } activity.finishAffinity(); - if (destAccountId==0) { - Intent intent = new Intent(activity, WelcomeActivity.class); - if (backupQr != null) { - intent.putExtra(WelcomeActivity.BACKUP_QR_EXTRA, backupQr); - } - activity.startActivity(intent); + if (destAccountId == 0) { + activity.startActivity(new Intent(activity, WelcomeActivity.class)); } else { activity.startActivity(new Intent(activity.getApplicationContext(), ConversationListActivity.class)); } @@ -153,6 +143,15 @@ public class AccountManager { } public void addAccountFromSecondDevice(Activity activity, String backupQr) { - switchAccountAndStartActivity(activity, 0, backupQr); + DcAccounts accounts = DcHelper.getAccounts(activity); + if (accounts.getSelectedAccount().isConfigured() == 1) { + // the selected account is already configured, create a new one + beginAccountCreation(activity); + } + + activity.finishAffinity(); + Intent intent = new Intent(activity, WelcomeActivity.class); + intent.putExtra(WelcomeActivity.BACKUP_QR_EXTRA, backupQr); + activity.startActivity(intent); } } From f8c2403e6138cb7f62a3593990d8457603896081 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Mon, 19 Jan 2026 22:26:35 +0100 Subject: [PATCH 20/28] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ad674463..8e049fbdc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ * Show hint for empty contact search results * Fix: Show dialog if pasted QR codes are invalid * Fix: Refresh chat list when returning from conversation if selected profile changed +* Fix: Avoid empty profiles after using "add as second device" from welcome screen * Update to core 2.36.0 ## v2.35.0 From 44a1ce42f0227914a0f248139177b0371b40aab4 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Tue, 20 Jan 2026 20:01:40 +0100 Subject: [PATCH 21/28] avoid account rollback in InstantOnboardingActivity --- .../securesms/InstantOnboardingActivity.java | 25 +++---------------- .../securesms/WelcomeActivity.java | 8 +----- 2 files changed, 5 insertions(+), 28 deletions(-) diff --git a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java index c2e8607a3..59aaed3a8 100644 --- a/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/InstantOnboardingActivity.java @@ -23,7 +23,6 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -import androidx.activity.OnBackPressedCallback; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; @@ -39,7 +38,6 @@ import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; import org.thoughtcrime.securesms.components.AvatarSelector; -import org.thoughtcrime.securesms.connect.AccountManager; import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.contacts.avatars.ResourceContactPhoto; @@ -75,7 +73,6 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements private static final String INSTANCES_URL = "https://chatmail.at/relays"; private static final String DEFAULT_CHATMAIL_HOST = "nine.testrun.org"; - public static final String FROM_WELCOME = "from_welcome"; private static final int REQUEST_CODE_AVATAR = 1; private ImageView avatar; @@ -106,9 +103,9 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.onboarding_create_instant_account); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - boolean fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false); + boolean configured = DcHelper.getContext(this).isConfigured() == 1; - if (DcHelper.getContext(this).isConfigured() == 1) { + if (configured) { // if account is configured it means we didn't come from Welcome screen nor from QR scanner, // instead, user clicked a dcaccount:// URI directly, so we need to just offer to add a new relay Uri uri = getIntent().getData(); @@ -116,25 +113,11 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements Intent intent = new Intent(this, RelayListActivity.class); intent.putExtra(RelayListActivity.EXTRA_QR_DATA, uri.toString()); startActivity(intent); - finish(); - return; } - // if URI is unexpectedly null, then fallback to new profile creation - AccountManager.getInstance().beginAccountCreation(this); + finish(); + return; } - getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(!fromWelcome) { - @Override - public void handleOnBackPressed() { - AccountManager accountManager = AccountManager.getInstance(); - if (accountManager.canRollbackAccountCreation(InstantOnboardingActivity.this)) { - accountManager.rollbackAccountCreation(InstantOnboardingActivity.this); - } else { - finish(); - } - } - }); - isDcLogin = false; providerHost = DEFAULT_CHATMAIL_HOST; providerQrData = DCACCOUNT + ":" + providerHost; diff --git a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java index c70ae2119..a48a1f22e 100644 --- a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java @@ -84,7 +84,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen signInDialog.dismiss(); }); - signUpButton.setOnClickListener((v) -> startInstantOnboardingActivity()); + signUpButton.setOnClickListener((v) -> startActivity(new Intent(this, InstantOnboardingActivity.class))); signInButton.setOnClickListener((v) -> signInDialog.show()); registerForEvents(); @@ -169,12 +169,6 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen Permissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults); } - private void startInstantOnboardingActivity() { - Intent intent = new Intent(this, InstantOnboardingActivity.class); - intent.putExtra(InstantOnboardingActivity.FROM_WELCOME, true); - startActivity(intent); - } - private void startAddAsSecondDeviceActivity() { new IntentIntegrator(this).setCaptureActivity(RegistrationQrActivity.class) .addExtra(RegistrationQrActivity.ADD_AS_SECOND_DEVICE_EXTRA, true) From 947887f33566de7f4a32417b5f98db00d2d216d9 Mon Sep 17 00:00:00 2001 From: wch423 Date: Tue, 20 Jan 2026 14:20:05 +0100 Subject: [PATCH 22/28] Migrate deprecated `onBackPressed` calls --- src/main/AndroidManifest.xml | 1 - .../securesms/ContactSelectionActivity.java | 5 +-- .../securesms/ConversationActivity.java | 21 +++++++----- .../securesms/ConversationListActivity.java | 30 ++++++++++------- .../ConversationListArchiveActivity.java | 33 ++++++++++--------- .../securesms/CreateProfileActivity.java | 24 ++++++++------ .../securesms/LocalHelpActivity.java | 23 ++++++++----- .../securesms/WelcomeActivity.java | 26 ++++++++------- .../securesms/qr/BackupTransferActivity.java | 19 +++++++---- .../securesms/scribbles/ScribbleActivity.java | 7 ---- .../scribbles/StickerSelectActivity.java | 2 +- 11 files changed, 109 insertions(+), 82 deletions(-) diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index 88921724e..70645bbf7 100644 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -55,7 +55,6 @@ android:requestLegacyExternalStorage="true" tools:targetApi="TIRAMISU" android:hasFragileUserData="true" - android:enableOnBackInvokedCallback="false" > Kontaktiere mich auf Delta Chat:\n%1$s @@ -1002,6 +1002,7 @@ %1$s antwortet. Warte, zur Gruppe hinzugefügt zu werden… Verbindungsaufbau, bitte warten… %1$s eingeführt. + Du hast den Kontakt blockiert Eingeführt von %1$s Durch mich eingeführt diff --git a/src/main/res/values-et/strings.xml b/src/main/res/values-et/strings.xml index d0825ec4e..bc01d713a 100644 --- a/src/main/res/values-et/strings.xml +++ b/src/main/res/values-et/strings.xml @@ -813,6 +813,9 @@ Lülita IMAP IDLE välja Ära kasuta IMAP IDLE meetodit, seda isegi siis, kui server seda toetab. Sisselülitamisel tekib sõnumite laadimisel viivitusi. Kasuta seda vaid testimiseks. Saada statistikat Delta Chati kasutajatele + Kas sa tahad aidata Delta Chati paremaks muuta? Siis luba rakendusel kord nädalas saata anonüümset statistikat kasutuse kohta.\n\n👉 Klõpsa siia… 👈 + Kas sa tahad aidata Delta Chati paremaks muuta? Siis luba rakendusel kord nädalas saata anonüümset statistikat kasutuse kohta. + Suur tänu! Soovi korral võid saatmise siit välja lülitada: „Seadistused“ → „Täiendavad seadistused“.\n\nKas sul on ka 5 minuti jagu aega osalemaks Delta Chati turvalisust käsitlevas teaduslikus uuringus? Statistika saatmine on juba kasutusel\n\nKas sa tahaksid ta välja lülitada? Lülita välja Jätka saatmist @@ -999,6 +1002,7 @@ %1$s vastas, ootan gruppi lisamist… Panen aluse läbivale krüptimisele… %1$s lisas vestlusesse. + Sina blokeerisid selle kontakti %1$s lisas kontakti vestlusesse Mina lisasin kontakti vestlusesse diff --git a/src/main/res/values-fr/strings.xml b/src/main/res/values-fr/strings.xml index cc237d1c4..f73b0fb2c 100644 --- a/src/main/res/values-fr/strings.xml +++ b/src/main/res/values-fr/strings.xml @@ -267,6 +267,9 @@ Ajouter des destinataires Nom du canal + Courriel + + Nouveau courriel Sujet Envoyer @@ -463,6 +466,7 @@ Message Archivé Invitation + Inclure les messages d\'invitations dans les compteurs et notifications Aucun message. Messages envoyés à moi-même Les discussions archivées apparaîtront ici. @@ -816,6 +820,12 @@ Désactiver IMAP IDLE N\'utilisez pas d\'extension IMAP IDLE, même si elle est prise en charge par votre serveur, car elle provoque des retards dans la récupération des messages. Activez cette option uniquement pour effectuer des tests. Envoyer les statistiques aux développeurs Delta Chat + Voulez-vous aider à améliorer Delta Chat et soutenir notre recherche en envoyant des statistiques d\'utilisation hebdomadaires ?\n\n👉 Touchez ici... 👈 + Voulez-vous aider à améliorer Delta Chat et soutenir notre recherche en envoyant des statistiques d\'utilisation hebdomadaires ? + Merci ! Vous pouvez toujours désactiver l\'envoi dans \"Paramètres -> Avancé\".\n\nAvez-vous en plus 5 minutes pour participer à une étude scientifique sur la sécurité de Delta Chat ? + L\'envoi de statistiques est déjà activé.\n\nSouhaitez-vous le désactiver ? + Désactiver + Continuer l\'envoi La pièce jointe contient des statistiques d\'usage anonymisés, qui nous aide à améliorer Delta Chat. Merci ! @@ -986,7 +996,7 @@ Scanner pour discuter avec %1$s Pas de connexion Internet, ne peut pas effectuer la configuration du QR code. Créer une nouvelle adresse de courriel sur « %1$s » et se connecter ici ? - Choisissez un nom que vos contacts reconnaîtrons. Vous pouvez également définir une image pour votre profile. + Choisissez un nom que vos contacts reconnaîtrons. Vous pouvez également définir une image pour votre profil. Veuillez saisir un nom. Le code QR scanné ne peut pas être utilisé pour ouvrir un nouveau compte. @@ -999,6 +1009,7 @@ %1$s a répondu, en attente d’être ajouté au groupe… Chiffrement de bout en bout en cours d\'établissement, merci de patienter... %1$s connu. + Vous avez bloqué le contact Connu par %1$s Connu par vous diff --git a/src/main/res/values-kab/strings.xml b/src/main/res/values-kab/strings.xml index 87d20e0f2..46417d150 100644 --- a/src/main/res/values-kab/strings.xml +++ b/src/main/res/values-kab/strings.xml @@ -176,7 +176,7 @@ Tamenṭaḍt Rnu ɣer tegrumma n tamenṭaḍt - Akken ad ternuḍ tamenṭaḍt, sit ɣef \" ldi akaram n tmenṭaḍt \", snulfu-d akaram anaddaw i ukemmus-ik-im n tmenṭaḍt, zuɣer tugna akked ifuyla n tmenṭaḍt din + Akken ad ternuḍ tamenṭaḍt, sit ɣef \" ldi akaram n tmenṭaḍt \", snulfu-d akaram anaddaw i ukemmus-ik·im n tmenṭaḍt, zuɣer tugna akked ifuyla n tmenṭaḍt din Ldi akaran n tmenṭaḍt Tugniwin Ameslaw @@ -282,7 +282,7 @@ Talɣut n yizen Nɣel ɣer tecfawt Bḍu aseɣwen n tinnubga - Yal yiwen s useɣwen-a yezmer ad iwali amaɣnu-ik-im daɣen ad yebdu adiwenni yid-k-m. Bḍu-t kan d wid i tettamneḍ. + Yal yiwen s useɣwen-a yezmer ad iwali amaɣnu-ik·im daɣen ad yebdu adiwenni yid-k·m. Bḍu-t kan d wid i tettamneḍ. Snubeg imeddukal Nermes-iyi-d deg Delta:\n%1$s @@ -341,7 +341,7 @@ Bḍu adeg akked iɛeggalen n ugraw meṛṛa Iznan n yibenk Slalen-d iznan seg yidis adigan - Iznan n udiwenni-a ttlalen-d deg yibenk-ik-im kken ad d-mlen ileqman akked wuguren n usnas deg useqdec. + Iznan n udiwenni-a ttlalen-d deg yibenk-ik·im kken ad d-mlen ileqman akked wuguren n usnas deg useqdec. Ẓreg anermis Senteḍ adiwenni @@ -357,7 +357,7 @@ Rnu ɣer ugdil agejdan Mudd tawsa - ❤️ Yettban-iyi-d dakken aql-ik-im tḥemmled Delta Chat!\n\nMa ulac aɣilif, mudd-d tawsa akken ad tḍemneḍ d akken Delta Chat ad yeqqim baṭel i yal yiwen.\n\nMa d Delta Chat baṭel i useqdec d uɣbalu yeldin, taneflit tesqam-d idrimen. Mudd-aɣ-d afus ad neḥrez Delta Chat d ilelli u ad t-nerr d imgerrez ugar ɣer zdat.\n\nhttps://delta.chat/donate + ❤️ Yettban-iyi-d dakken aql-ik·im tḥemmled Delta Chat!\n\nMa ulac aɣilif, mudd-d tawsa akken ad tḍemneḍ d akken Delta Chat ad yeqqim baṭel i yal yiwen.\n\nMa d Delta Chat baṭel i useqdec d uɣbalu yeldin, taneflit tesqam-d idrimen. Mudd-aɣ-d afus ad neḥrez Delta Chat d ilelli u ad t-nerr d imgerrez ugar ɣer zdat.\n\nhttps://delta.chat/donate Sgugem i 1 usrag Sgugem i 8 yisragen @@ -394,15 +394,23 @@ Tetḥeqqeḍ tebɣiḍ ad truḥeḍ? + + Kkes %d n udiwenni? + Kkes %d n tdiwenniyin? + + Kkes adiwenni \"%1$s\"? + Kkes izen-a? Kkes %d n yizen? Kkes %d n yiznan? Welleh iznan ɣer %1$s? Welleh iznan ɣer %1$d n yidiwenniyen? - Asifeḍ n imeddayen ad yeǧǧ isnasen-nniḍen deg yibenk-ik-im ad kecmen ɣur-sen.\n\nad tkemmleḍ? + Asifeḍ n imeddayen ad yeǧǧ isnasen-nniḍen deg yibenk-ik·im ad kecmen ɣur-sen.\n\nad tkemmleḍ? Sewḥel anermis-agi?\n\nUr d-ttbanen ara yiznan usriden neɣ igrawen i d-yettwaxelqen s yinermisen iweḥlen.\n\nIgrawen-nniḍen yesεan inermisen iweḥlen mazal ad d-sseknen iznan-nsen. Kkes asewḥel i unermis-a + Kkes inermisen?\n\nInermisen s udiwenni i d-iteddun ulamek ara ttwakksen i lebda. + Kkes anermis %1$s?\n\nInermisen s udiwenni i d-iteddun ulamek ara ttwakksen i lebda. Qeṣṣir d %1$s? Kkes %1$s seg unagraw? @@ -436,7 +444,7 @@ Azen izen i %1$s. - Ibuda d afecku seg waṭas nniḍen i usiweḍ n yiznan-ik-im. + Ibuda d afecku seg waṭas nniḍen i usiweḍ n yiznan-ik·im. Wiyaḍ ad walin kan agraw-agi ticki tuzneḍ izen amezwaru. Zuɣer akken ad tesfesxeḍ Sit u ṭṭef akken ad teskelseḍ izen n taɣect, serreḥ i tuzna @@ -476,7 +484,7 @@ Azen izen i... Isnasen n wakud ilaw - Rmed tuqqna n walud tilawt i yisnasen icudden ɣer idiwenniyen. Ma yella yermed, imttekkiyen n udiwenni zemren ad d-afen tansa-ik-im IP ticki tebdiḍ asnas. + Rmed tuqqna n walud tilawt i yisnasen icudden ɣer idiwenniyen. Ma yella yermed, imttekkiyen n udiwenni zemren ad d-afen tansa-ik·im IP ticki tebdiḍ asnas. Sken-d imeḍqan deg ukatar n wakud @@ -544,7 +552,7 @@ Rnu ibenk wis sin Wali ma yella sin n yibenkan-a deg yiwen n uzeṭṭa Wi-Fi neɣ deg yiwen n uẓeṭṭa Aya ad yernu tangalt QR i yezmer ad yeḍumm ibenk wis sin akken ad yenɣel amaɣnu.\n\nḍmen d akken ula d yiwen n umnadi neɣ n tkamra ur yezmer ad iwali agdil-a. - Sebded delta Chat ɣef yibenk-ik-im nniḍen (https://get.delta.chat) + Sebded delta Chat ɣef yibenk-ik·im nniḍen (https://get.delta.chat) Bdu Delta Chat, sit “Sεiɣ yakan amaɣnu / Rnu am yibenk wis sin” sakin ḍumm tangalt i d-yettwaseknen dagi @@ -555,7 +563,7 @@ Amaɣnu i tebɣiḍ ad d-tketreḍ seg lqem amaynut n Delta Chat.\n\nAkken ad tkemleḍ asebded n yibenk wis sin, ma ulac aɣilif leqqem ibenk-agi ɣer lqem aneggaru n Delta Chat. Sefsex asbadu n yibenk wis sin? Aya ad yili d arameɣtu i tangalt QR i d-yettwanɣelen ɣer tecfawt. - ℹ️ Amaɣnu yettusiweḍ ɣer yibenk-ik wis sin. + ℹ️ Amaɣnu yettusiweḍ ɣer yibenk-ik·im wis sin. Aheggi n umaɣnu... @@ -580,7 +588,7 @@ Yettwaqqen Tuzna... Izen aneggaru yettwazen akken iwata. - ur yettusefrak ara ɣer usaǧǧaw-ik-im. + ur yettusefrak ara ɣer usaǧǧaw-ik·im. Iznan @@ -592,8 +600,10 @@ Rnu amaɣnu amaynut Ɣur-i yakan amaɣnu + + Seqdec imayl aklasiki am Umsiweḍ - Amaɣnu-ik-im + Amaɣnu-ik·im Tsertit tabaḍnit i %1$s @@ -615,6 +625,7 @@ Adiwenni Aɣelsan Aruslemmas Ḍumm tangalt n tinnubga Kcem + Tuqqna-agi i yiseqdacen leqqayen:\n\n• Ur sseqdac ara tansa i tseqdaceḍ deg usnas nniḍen.\n\n• Aqeddac n yimayl aklasik yesirig anekcum war awgelhen seg yixef ɣer yixef yettwacerḍen s tignit n yimayl. Tanaka n urmas Isem n tuqqna IMAP. Aqeddac IMAP @@ -637,10 +648,21 @@ Kkes apṛuksi Tebɣiḍ ad tekkseḍ \"%1$s\"? Tebɣiḍ ad tesqedceḍ apṛuksi \"%1$s\"? - Imeddukal-ik zemren ad rnun apṛuksi-a s uḍumm n tengalt QR. + Imeddukal-ik·im zemren ad rnun apṛuksi-a s uḍumm n tengalt QR. Bḍu aseɣwen Apṛuksi yermed - Aql-ik-im tesseqdaced apṛuksi. Ma tesɛiḍ ugur deg tuqqna, ɛreḍ apṛuksi-nniḍen. + Aql-ik·im tesseqdaced apṛuksi. Ma tesɛiḍ ugur deg tuqqna, ɛreḍ apṛuksi-nniḍen. + + Imsawaḍen + Rnu amsiweḍ + Kkes amsiweḍ + Ẓreg amsiweḍ + + Rnu amsiweḍ-agi? + Tangalt QR ittusemḍen ur tesɛi ara amsiweḍ ameɣtu + + Kkes amsiweḍ \"%1$s\"?\n\nInermisen-ik·im ur zmiren ara ad k·im-id-awḍen ala ma tnermseḍ-ten yakan s umsiweḍ-nniḍen.\n\nMa yella ccekk, kkes amsiweḍ ticki. + Asenqed n uselkin Ma ulac aɣilif, sekcem tansa imayl tameɣtut Ma ulac aɣilif, sekcem aqeddac ameɣtu / tansa IP. @@ -658,11 +680,11 @@ Tabzimt n umaɣnu eg. Axeddim, Tawacult - Sbadu tabzimt i d-yettbanen kan i kečč-kemm ; mudd-d afus ad temgirrdeḍ gar imeɣna-ik-im. + Sbadu tabzimt i d-yettbanen kan i kečč·kemm ; mudd-d afus ad temgirrdeḍ gar imeɣna-ik·im. Ddu d asawen Kkes amaɣnu - Tebɣiḍ ad tekkseḍ isefka n umaɣnu-inek-inem? + Tebɣiḍ ad tekkseḍ isefka n umaɣnu-inek·inem? Akk isefka n umaɣnu n \"%s\" ɣef yibenk-a ad ttwakksen, ula d asebded n uwgelhen seg yixef ɣer yixef, Inermisen, idiwenniyin, iznan akked umidya. Tigawt-a ur tezmir ara ad tuɣal ar deffir. Amaɣnu ur yettwaswel ara Ldi amaɣnu akken ad t-tesweleḍ @@ -685,12 +707,12 @@ Aseqdec asagen: %s Aseqdec amezwer: %s - Amaɣnu-inek-inem + Amaɣnu-inek·inem Tugna n umaɣnu Inermisen yettusweḥlen Inermisen yettusweḥlen ad d-banen dagi. - Tugna-ik-im n umaɣnu, isem-ik-im akked tmeddurt ad ttwaznen akked iznan-ik-im ticki ttemseɣwalent akked iseqdacen-nniḍen. - Isem-ik-im + Tugna-ik·im n umaɣnu, isem-ik·im akked tmeddurt ad ttwaznen akked iznan-ik·im ticki ttemseɣwalent akked iseqdacen-nniḍen. + Isem-ik·im Tameddurt Kcem tisura i umazan @@ -705,7 +727,7 @@ Akken ad tesneseḍ tawila n tɣellist n ugdil, ales asenker n usnas. Ilɣa Tibdarin - Deg igrawen igugmen, iznan n telɣut rzuḍ ɣer-k-m, am tririyin neɣ tiririyin n tigawt + Deg igrawen igugmen, iznan n telɣut rzuḍ ɣer-k·m, am tririyin neɣ tiririyin n tigawt Sken Tazwart Rmed ilɣa n unagraw i yiznan imaynuten @@ -742,7 +764,7 @@ Wayeḍ Aḥraz Aḥraz n idiwenniyen ɣer tkatut tazɣarayt - Aḥraz ad ak-d-imudd afus ad tesbeddeḍ asebded amaynut ɣef wagi neɣ ɣef yibenk nniḍen.\n\nAḥraz ad yegber akk iznan, inermisen akked idiwenniyen akked usebded awurman n uwgelhen si tazwara ar tagara. Ḥrez afaylu n uḥrez deg umḍiq aɣelsan neɣ kkes-it s zreb. + Aḥraz ad ak·m-d-imudd afus ad tesbeddeḍ asebded amaynut ɣef wagi neɣ ɣef yibenk nniḍen.\n\nAḥraz ad yegber akk iznan, inermisen akked idiwenniyen akked usebded awurman n uwgelhen si tazwara ar tagara. Ḥrez afaylu n uḥrez deg umḍiq aɣelsan neɣ kkes-it s zreb. Sifeḍ amaɣnu-agi Sifeḍ akk %1$d Imuɣna @@ -752,11 +774,11 @@ Tugniwin n ugilal Seqdec tugna tamezwert Fren seg timidelt - Ma tbeddleḍ aɣewwaṛ-a, senqed aqeddac-ik-im d yimsaɣen-ik-im-nniḍen ad ttuswelen akken iwata.\n\nMa ulac, yezmer lḥal ur tteddunt ara akk tɣawsiwin. + Ma tbeddleḍ aɣewwaṛ-a, senqed aqeddac-ik·im d yimsaɣen-ik·im-nniḍen ad ttuswelen akken iwata.\n\nMa ulac, yezmer lḥal ur tteddunt ara akk tɣawsiwin. Askar n tugett n yibenk - Mtawi iznan-ik akked ibenkan-nniḍen. Irmed s wudem awurman deg tmerna n yibenk wis sin - Askar aget-ibenk yessefk ad yettwarmed mi ara tesqedceḍ yiwen n umaɣnu deg ddeqs n yibenkan. Sens kan aɣewwaṛ-agi ma yella tekkseḍ amaɣnu-yagi seg yibenkan-ik-im nniḍen.\n\nAsens n usakar n waget-ibenk mi ara tesqedceḍ amaɣnu ɣef ddeqs n yibenkan ad d-yeglu s yiznan yettwazeglen akked wuguren-nniḍen. + Mtawi iznan-ik·im akked ibenkan-nniḍen. Irmed s wudem awurman deg tmerna n yibenk wis sin + Askar aget-ibenk yessefk ad yettwarmed mi ara tesqedceḍ yiwen n umaɣnu deg ddeqs n yibenkan. Sens kan aɣewwaṛ-agi ma yella tekkseḍ amaɣnu-yagi seg yibenkan-ik·im nniḍen.\n\nAsens n usakar n waget-ibenk mi ara tesqedceḍ amaɣnu ɣef ddeqs n yibenkan ad d-yeglu s yiznan yettwazeglen akked wuguren-nniḍen. Ddu s wudem awurman ɣer ukaram n DeltaChat Awi-d kan seg akaram n DeltaChat Sken imaylen iklasanen @@ -764,6 +786,7 @@ I yinermisen yettwaqeblen Akk Timahilin tirmitanin + Timahilin-agi zemrent ad ilint ur rkident ara, daɣen zemrent ad ttwabeddlent neɣ ad ttwakksent Seddu asuddem deg wadig s usuter Tugna tamezwert Ini amezwer @@ -782,13 +805,21 @@ Sader-d afellay i yellan alamma d %1$s Fren amaɣnu Fren tugna n umaɣnu - Fren tugna-ik-im tamaynut n umaɣnu + Fren tugna-ik·im tamaynut n umaɣnu Kkes tugna n umaɣnu Sken Tignit n ufaggag n waddad Ẓreg amaɣnu Sens IMAP IDLE Ur seqdac ara asiɣzef IMAP IDLE xas yella uqeddac isefrak-it. Asireg uɣewwaṛ-agi ad yerr izen iɛeṭṭel akken ad d-yuɣal, rmed-it kan i usekyed. Azen tidaddanin i yineflayen n DeltaChat + Tebɣiḍ ad tεawneḍ deg usnerni n Delta Chat u ad tεawneḍ anadi s tuzna n tesnaddadin n useqdec udrigen?\n\n👉 Tekki da... 👈 + Tebɣiḍ ad tεawneḍ deg usnerni n Delta Chat u ad tεawneḍ anadi s tuzna n tesnaddadin n useqdec udrigen? + Tanemmirt! Tzemreḍ dima ad tessenseḍ tuzna deg \"Iɣewwaṛen -> Talqayt\".\n\nƔur-k·m ugar n 5 n tesdatin akken ad ttekkiḍ deg yiwet n tezrawt tussnant ɣef tɣellist n Delta Chat? + Tuzzna n tdaddanin termed yakan.\n\nTebɣiḍ ad t-tessexsiḍ? + Sens + Eǧǧ tuzna + Afaylu amedday yegber tiddadanin tudrigin, i ɣ-iεawnen ad nesnerni Delta Chat. Wali https://delta.chat/help#statssending i wugar n telɣut. Tanemmirt-ik·im! + Igmaḍ n unadi Ulac imujit @@ -853,6 +884,8 @@ Tekkseḍ aɛeggal %1$s Aɛeggal %1$s yettwakkes sɣur %2$s. + + Aεeggal %1$s yettwakkes. Teffɣeḍ seg ugraw. @@ -907,15 +940,17 @@ Amkud n yiznan ur nettdum ara yettwasbed ar %1$s n yimalas sɣur %2$s. Iznan deg udiwenni-a sseqdacen imayl aklasiki, ur ttwawgelhen ara seg yixef ɣer yixef. Iznan ttwawgelhen seg yixef ɣer yixef. Sit akken ad tissineḍ ugar. - Iznan akk yellan deg udiwenni-a ttwawgelhen seg yixef ɣer yixef.\n\nAwgelhen n yixef ɣer yixef yettaǧǧa iznan d usligen gar-ak-am d yecriken n udiwenni. Ula d iqeddacen, isaǧǧawen neɣ isawaḍen ur zemren ad ten-ɣren. + Iznan akk yellan deg udiwenni-a ttwawgelhen seg yixef ɣer yixef.\n\nAwgelhen n yixef ɣer yixef yettaǧǧa iznan d usligen gar-ak·am d yecriken n udiwenni. Ula d iqeddacen, isaǧǧawen neɣ imsawaḍen ur zemren ad ten-ɣren. ⚠️%1$s Yesra awgelhen n yixef ɣer yixef ur nelli ara yakan i udiwenni-a. Sit akken ad tissineḍ ugar. Akken ad tesbeddeḍ awgelhen n yixef ɣer yixef, tzemreḍ ad temlileḍ inermisen s timmad-nsen u ad ḍummeḍ tangalt-nsen QR akken ad ten-id-tesmendeḍ. Issin ugar - Tekkseḍ adiwenni n \" iznan yettwakelsen \".\n\nℹ️ Akken ad tesqedceḍ tamahilt \" iznan yettwakelsen \", rnu adiwenni amaynut akked yiman-ik-im. + Tekkseḍ adiwenni n \" iznan yettwakelsen \".\n\nℹ️ Akken ad tesqedceḍ tamahilt \" iznan yettwakelsen \", rnu adiwenni amaynut akked yiman-ik·im. + + ⚠️Asaǧǧaw-ik·im n usekles qrib ad yaččar: %1$s%% yettwaseqdec yakan.\n\nAhat ur tezmireḍ ara ad d-remseḍ iznan ma yella asekles yeččur.\n\n 👉 Ttxil-k·m senqed ma yella tzemreḍ ad tekkseḍ isefka iqburen deg ugrudem n web n isaǧǧawen syin rmed \"Iɣewwaṛen / Idiwenniyen / Kkes iznan iqbuṛen\". Tzemreḍ ad tesneqdeḍ aseqdec n usekles-inek·inem amiran deg \"Iɣewwaṛen / tuqqna\". - ⚠️ Azemz neɣ akud deg yibenk-ik-im yettban-d ur iṣeḥḥa ara (%1$s).\n\nṢeggem tamasragt-nnek ⏰🔧Akken ad neḍmen d akken iznan-ik-im ad ttwaremsen akken iwata. - ⚠️Yezmer lḥal alqem-ik-im n Delta Chat d aqbur.\n\nAya yezmer ad d-yeglu s wuguren acku imendiden-ik-im n udiwenni sseqdacen ileqman imaynuten - yerna txuṣṣeḍ timahilin tineggura 😳\nTtxil-k-m, ssefqed https://get.delta.chat neɣ taḥanut-nnek-nnem n usnas i uleqqem. + ⚠️ Azemz neɣ akud deg yibenk-ik·im yettban-d ur iṣeḥḥa ara (%1$s).\n\nṢeggem tamasragt-ik·im ⏰🔧Akken ad neḍmen d akken iznan-ik·im ad ttwaremsen akken iwata. + ⚠️Yezmer lḥal alqem-ik·im n Delta Chat d aqbur.\n\nAya yezmer ad d-yeglu s wuguren acku imendiden-ik·im n udiwenni sseqdacen ileqman imaynuten - yerna txuṣṣeḍ timahilin tineggura 😳\nTtxil-k·m, ssefqed https://get.delta.chat neɣ taḥanut-nnek·nnem n usnas i uleqqem. Kkes assekeṛ akken ad tkemmleḍ @@ -924,7 +959,7 @@ Tangalt QR Sali tangalt QR am tugna Ḍumm Tangalt QR - Ṭṭef takamra-nnek-nnem nnig n tangalt QR + Ṭṭef takamra-nnek·nnem nnig n tangalt QR Awi tangalt QR ɣer tkamiṛat Tangalt QR ur tezmir ara ad ttwakestengel Tebɣiḍ ad tettekkiḍ deg ugraw \"%1$s\"? @@ -934,7 +969,7 @@ Aḍris n tengalt QR yettwaḍummen:\n\n%1$s URL n tangalt QR yettwaḍummen:\n\n%1$s Adsil umḍin - Tangalt-a QR tezmer ad tt-id-ḍummen wiyaḍ akken ad k-id-nermsen.\n\nTzemreḍ ad talseḍ awennez, akken tangalt QR yellan neɣ aseɣwen n uεraḍ ur iteddu ara. + Tangalt-a QR tezmer ad tt-id-ḍummen wiyaḍ akken ad k·m-id-nermsen.\n\nTzemreḍ ad talseḍ awennez, akken tangalt QR yellan neɣ aseɣwen n uεraḍ ur iteddu ara. Tangalt-a QR tezmer ad tt-id-ḍummen wiyaḍ akken ad kecmen ɣer ugraw \"%1$s\".\n\nTzemreḍ ad talseḍ awennez, akken tangalt QR yellan neɣ aseɣwen n uεraḍ ur iteddu ara. Tangalt-a QR tezmer ad tt-id-ḍummen wiyaḍ akken ad ddun ɣer ubadu \"%1$s\".\n\nTzemreḍ ad talseḍ awennez, akken tangalt QR yellan neɣ aseɣwen n uεraḍ ur iteddu ara. Ales Awennez n Tangalt QR @@ -953,16 +988,18 @@ Ḍumm iwakken ad tmeslayeḍ d %1$s Ulac tuqqna internet, ur izmir ara ad isebded tangalt QR. Rnu amaɣnu amaynut di \"%1$s\" sakin tkecmeḍ dinna? - Sbadu isem ara ɛeqlen inermisen-ik. Tzemreḍ daɣen ad tesbaduḍ tugna n umaɣnu. + Sbadu isem ara ɛeqlen inermisen-ik·im. Tzemreḍ daɣen ad tesbaduḍ tugna n umaɣnu. Ma ulac aɣilif, sekcem isem. Tangalt QR tettwaḍummen ur tezmir ara ad tettwaseqdec i usebded n umaɣnu amaynut. Kcem ɣer \"%1$s\"? - %1$s yeɛreḍ-ik-im-id ad d-ternud ɣer ugraw-a.\n\nRǧu ibenk n %2$s ad d-yerr... + %1$s yeɛreḍ-ik·im-id ad d-ternud ɣer ugraw-a.\n\nRǧu ibenk n %2$s ad d-yerr... + + %1$s inced-ik·m-id ad tkecmeḍ ɣer ubadu-a.\n\nAṛǧu n yibenk n %2$s akken ad d-yerr tiririt... %1$s yerra-d, rǧu i tmerna-as ɣer ugraw... - Asbeddi n tuqqna, ttxil-k-m rǧu... + Asbeddi n tuqqna, ttxil-k·m rǧu... %1$s ittwasenked. Yettwasenked sɣur %1$s @@ -1091,7 +1128,7 @@ Ldi iɣewwaṛen Kter inermisen n yibenk - Iwakken ad tmeslayeḍ akked inermisen seg yibenk-ik-im, ldi Iɣewwaṛen sakkin rmed \"Iinermisen\". + Iwakken ad tmeslayeḍ akked inermisen seg yibenk-ik·im, ldi Iɣewwaṛen sakkin rmed \"Iinermisen\". Ittwasens deg Delta Chat Ittwasens deg iɣewwaren n unagraw @@ -1112,26 +1149,26 @@ Rnu ɣer uwiǧet - Delta Chat yesseqdac takamrat-ik-im akken ad d-yeṭṭfeḍ tiwlafin d tvidyutin yerna ad i uḍummu tingalin QR. - Delta Chat isra ad tebḍuḍ ideg-inek-inem ɣef wakud i tesremdeḍ ad tebḍuḍ ideg. - Delta Chat yesra tasiregt akken ad yebḍu adig-inek-inem deg wakud i tremdeḍ buṭṭu n wadig. + Delta Chat yesseqdac takamrat-ik·im akken ad d-yeṭṭfeḍ tiwlafin d tvidyutin yerna ad i uḍummu tingalin QR. + Delta Chat isra ad tebḍuḍ ideg-inek·inem ɣef wakud i tesremdeḍ ad tebḍuḍ ideg. + Delta Chat yesra tasiregt akken ad yebḍu adig-inek·inem deg wakud i tremdeḍ buṭṭu n wadig. Delta Chat yesseqdac amikrufun-ik·im i usekles d tuzna n yiznan n taɣect akked d tvidyutin s imesli. - Delta Chat ad k-yeǧǧ ad tferneḍ anwa tiwlafin seg temkarḍit-ik-im ara tazneḍ. - Delta Chat yebɣa ad yessekles tugniwin ɣer temkarḍit-ik-im n tewlafin. - Delta cat yezmer ad iseqdec ID n wudem i ummesten n umaɣnu-ik-im adigan, asnulfu n uḥraz akked usebded n yibenk wis sin. + Delta Chat ad k-yeǧǧ ad tferneḍ anwa tiwlafin seg temkarḍit-ik·im ara tazneḍ. + Delta Chat yebɣa ad yessekles tugniwin ɣer temkarḍit-ik·im n tewlafin. + Delta cat yezmer ad iseqdec ID n wudem i ummesten n umaɣnu-ik·im adigan, asnulfu n uḥraz akked usebded n yibenk wis sin. asiweḍ dindin Seqdec tuqqna n ugilal - Yesra ad yettwazgel useggem n tbatrit, seqdec ma yella ilɣa ur d-ttawḍen ara di lawan. + Yesra ad yettwazgel useggem n udɣaɣ, seqdec ma yella ilɣa ur d-ttawḍen ara di lawan. Ḥettem tuqqna n ugilal ad d-yeglu s telɣut timezgit - Akken ad tḥerzeḍ tuqqna daɣen ad d-remseḍ iznan deg ugilal, zgel aseggem n tbatrit deg usurif ay d-itteddun.\n\nDelṭa Chat yesseqdac kra n teɣbula udiɣ ur ttḥewwil ara akken ad yečč aṭas deg tbatrit. + Akken ad tḥerzeḍ tuqqna daɣen ad d-remseḍ iznan deg ugilal, zgel aseggem n tbatrit deg usurif ay d-itteddun.\n\nDelṭa Chat yesseqdac kra n teɣbula udiɣ ur ttḥewwil ara akken ad yečč aṭas deg udɣaɣ-ik.im. Sit dagi akken ad tremseḍ iznan ticki Delta Chat yella deg ugilal. - Tsirgeḍ yakan Delta Chat i wakken ad d-remseḍ iznan deg ugilal.\n\nMa yella iznan ur d-ttawḍen ara deg ugilal, ttxil-k-m senqed daɣen iɣewwaṛen n unagraw. + Tsirgeḍ yakan Delta Chat i wakken ad d-remseḍ iznan deg ugilal.\n\nMa yella iznan ur d-ttawḍen ara deg ugilal, ttxil-k·m senqed daɣen iɣewwaṛen n unagraw. - D acu i d amaynut?\n\n💯Awgelhen n yixef ɣer yixef d ayen iɣef ara tettekleḍ u i lebda. Inekcaman 🔒 ruḥen!\n\n✉️ Imayl aklasik war awgelhen yettwacreḍ s usekkil azamulan.\n\n 😻 Agdil amaynut yettwasneflin n umaɣnu i akk inermisen-ik-im\n\n🔲 Taqeffalt tamaynutt i unekcum uzrib ɣer yisnasen yettwasqedcen deg udiwenni usrid\n\n❤️ Ma ulac aɣilif mudd-aɣ-d afus akken ad neqqim d imunanen, daɣen ad nkemmel ad d-nawi asnerni: %1$s + D acu i d amaynut?\n\n💯Awgelhen n yixef ɣer yixef d ayen iɣef ara tettekleḍ u i lebda. Inekcaman 🔒 ruḥen!\n\n✉️ Imayl aklasik war awgelhen yettwacreḍ s usekkil azamulan.\n\n 😻 Agdil amaynut yettwasneflin n umaɣnu i akk inermisen-ik·im\n\n🔲 Taqeffalt tamaynutt i unekcum uzrib ɣer yisnasen yettwasqedcen deg udiwenni usrid\n\n❤️ Ma ulac aɣilif mudd-aɣ-d afus akken ad neqqim d imunanen, daɣen ad nkemmel ad d-nawi asnerni: %1$s diff --git a/src/main/res/values-nl/strings.xml b/src/main/res/values-nl/strings.xml index c6dec57ef..c472438c7 100644 --- a/src/main/res/values-nl/strings.xml +++ b/src/main/res/values-nl/strings.xml @@ -1002,6 +1002,7 @@ %1$s heeft geantwoord en wacht op toelating tot de groep… Bezig met opzetten van eind-tot-eindversleuteling… %1$s is goedgekeurd. + Je hebt deze contactpersoon geblokkeerd Geïntroduceerd door %1$s Geïntroduceerd door mij diff --git a/src/main/res/values-pl/strings.xml b/src/main/res/values-pl/strings.xml index 0d7857a30..9496acdf7 100644 --- a/src/main/res/values-pl/strings.xml +++ b/src/main/res/values-pl/strings.xml @@ -364,7 +364,7 @@ Komunikaty urządzenia Wiadomości generowane lokalnie Wiadomości w tym czacie są generowane lokalnie przez twoją aplikację Delta Chat. Twórcy używają go do informowania o aktualizacjach aplikacji i problemach podczas użytkowania. - Skontaktuj się!\n\n🙌 Dotknij „Kod QR” na ekranie głównym obu urządzeń. Wybierz opcję „Zeskanuj kod QR” na jednym urządzeniu i skieruj go na drugie\n\n🌍 Jeśli nie znajdujesz się w tym samym pomieszczeniu, zeskanuj kod podczas rozmowy wideo lub udostępnij link z zaproszeniem w sekcji „Zeskanuj kod QR”\n\nNastępnie: korzystaj z komunikatora za pośrednictwem największej zdecentralizowanej sieci, jaka kiedykolwiek istniała: e-mail. W przeciwieństwie do innych popularnych aplikacji bez centralnej kontroli, śledzenia lub sprzedawania Ciebie, znajomych, współpracowników lub rodziny dużym organizacjom. + Skontaktuj się!\n\n🙌 Dotknij „Kod QR” na ekranie głównym obu urządzeń. Wybierz opcję „Zeskanuj kod QR” na jednym urządzeniu i skieruj go na drugie\n\n🌍 Jeśli nie znajdujesz się w tym samym pomieszczeniu, zeskanuj kod podczas rozmowy wideo lub udostępnij link z zaproszeniem w sekcji „Zeskanuj kod QR”\n\nNastępnie: korzystaj ze zdecentralizowanego komunikatora. W przeciwieństwie do innych popularnych aplikacji bez centralnej kontroli, śledzenia lub sprzedawania Ciebie, znajomych, współpracowników lub rodziny dużym organizacjom. Edytuj kontakt Przypnij czat @@ -420,26 +420,26 @@ Na pewno chcesz opuścić? - Usunąć %d czat ze wszystkich urządzeń? - Usunąć %d czaty ze wszystkich urządzeń? - Usunąć %d czatów ze wszystkich urządzeń? - Usunąć %d czatu ze wszystkich urządzeń? + Usunąć %d czat? + Usunąć %d czaty? + Usunąć %d czatów? + Usunąć %d czatu? - Usunąć czat „%1$s” ze wszystkich urządzeń? - Usunąć tę wiadomość ze wszystkich urządzeń? + Usunąć czat „%1$s”? + Usunąć tę wiadomość? - Usunąć %d wiadomość ze wszystkich urządzeń? - Usunąć %d wiadomości ze wszystkich urządzeń? - Usunąć %d wiadomości ze wszystkich urządzeń? - Usunąć %d wiadomości ze wszystkich urządzeń? + Usunąć %d wiadomość? + Usunąć %d wiadomości? + Usunąć %d wiadomości? + Usunąć %d wiadomości? Przekazać wiadomości do użytkownika %1$s? Przekazać wiadomości do %1$d czatów? Eksportować załącznik? Eksportowanie załączników umożliwi dostęp do nich wszystkim aplikacjom na urządzeniu.\n\nKontynuować? Zablokować ten kontakt? Nie będziesz już odbierać wiadomości od tego kontaktu. Odblokować ten kontakt? Ponownie będzie można odbierać wiadomości od tego kontaktu. - Usunąć kontakty? Spowoduje to trwałe usunięcie wybranych kontaktów.\n\nKontaktów z trwającymi rozmowami i kontaktów z książki adresowej systemu nie można trwale usunąć. - Usunąć trwale kontakt %1$s?\n\nKontaktów z trwającymi czatami i kontaktów z książki adresowej systemu nie można trwale usunąć. + Usunąć kontakty?\n\nKontaktów z trwającymi rozmowami nie można trwale usunąć. + Usunąć kontakt %1$s?\n\nKontaktów z trwającymi czatami nie można trwale usunąć. Rozpocząć czat z %1$s? Usunąć %1$s z grupy? @@ -593,7 +593,7 @@ Zeskanuj, aby skonfigurować kolejne urządzenie dla %1$s Dodaj jako kolejne urządzenie - Na pierwszym urządzeniu przejdź do „Ustawienia » Dodaj kolejne urządzenie” i zeskanuj wyświetlony tam kod + Na pierwszym urządzeniu uruchom Delta Chat, przejdź do „Ustawienia » Dodaj kolejne urządzenie” i zeskanuj wyświetlony tam kod Skopiować konto z innego urządzenia na to urządzenie? Profil, który chcesz zaimportować, pochodzi z nowszej wersji aplikacji Delta Chat.\n\nAby kontynuować konfigurowanie drugiego urządzenia, zaktualizuj to urządzenie do najnowszej wersji aplikacji Delta Chat. Przerwać konfigurowanie kolejnego urządzenia? @@ -636,7 +636,7 @@ Mam już profil - Transport przez klasyczny e-mail + Użyj klasycznego e-maila jako przekaźnika Twój profil @@ -653,14 +653,14 @@ Tworzy profil, aby rozmawiać z „%1$s”. - Chcesz utworzyć nowy profil i rozpocząć rozmowę z %1$s? + Utworzyć nowy profil i rozpocząć rozmowę z %1$s? - Chcesz utworzyć nowy profil i dołączyć do grupy „%1$s”? + Utworzyć nowy profil i dołączyć do grupy „%1$s”? Bezpieczny zdecentralizowany czat Zeskanuj kod zaproszenia Zaloguj się - To logowanie jest przeznaczone dla zaawansowanych użytkowników:\n\n• Nie używaj konta, z którego korzystasz w innej aplikacji.\n\n• Klasyczny serwer pocztowy umożliwia rozmowy bez szyfrowania end-to-end, oznaczone ikoną poczty. + To logowanie jest przeznaczone dla zaawansowanych użytkowników:\n\n• Nie używaj adresu, z którego korzystasz w innej aplikacji.\n\n• Klasyczny serwer pocztowy umożliwia rozmowy bez szyfrowania end-to-end, oznaczone ikoną poczty. Skrzynka odbiorcza Nazwa użytkownika IMAP Serwer IMAP @@ -688,15 +688,15 @@ Włączone proxy Używasz serwera proxy. Jeśli masz problemy z połączeniem, spróbuj użyć innego serwera proxy. - Serwery transportowe - Dodaj serwer transportowy - Usuń serwer transportowy - Edytuj serwer transportowy + Serwery przekaźnikowe + Dodaj serwer przekaźnikowy + Usuń serwer przekaźnikowy + Edytuj serwer przekaźnikowy - Dodać ten serwer transportowy? - Zeskanowany kod QR zawiera nieprawidłowy serwer transportowy. + Dodać ten serwer przekaźnikowy? + Zeskanowany kod QR zawiera nieprawidłowy serwer przekaźnikowy. - Usunąć serwer transportowy „%1$s”?\n\nTwoje kontakty mogą się z tobą skontaktować tylko wtedy, gdy kontaktowałeś się z nimi wcześniej za pośrednictwem innego serwera transportowego.\n\nW razie wątpliwości usuń ten serwer transportowy. + Usunąć serwer przekaźnikowy „%1$s”?\n\nTwoje kontakty mogą się z tobą skontaktować tylko wtedy, gdy kontaktowałeś się z nimi wcześniej za pośrednictwem innego serwera przekaźnikowego.\n\nW razie wątpliwości usuń ten serwer przekaźnikowy. Sprawdzanie certyfikatów Podaj ważny adres e-mail @@ -821,6 +821,7 @@ Dla zaakceptowanych kontaktów Wszystkie Funkcje eksperymentalne + Te funkcje mogą być niestabilne i mogą zostać zmienione lub usunięte Przesyłanie strumieniowe lokalizacji na żądanie Domyślne tło Domyślny kolor @@ -846,6 +847,14 @@ Wyłącz IMAP IDLE Nie używaj rozszerzenia IMAP IDLE, nawet jeśli serwer je obsługuje. Włączenie tej opcji opóźni pobieranie wiadomości, włącz ją tylko na testy. Wyślij statystyki do programistów Delta Chat + Chcesz pomóc w ulepszeniu Delta Chat i wesprzeć badania, wysyłając co tydzień anonimowe statystyki użytkowania?\n\n👉 Kliknij tutaj… 👈 + Chcesz pomóc w ulepszeniu Delta Chat i wesprzeć badania, wysyłając co tydzień anonimowe statystyki użytkowania? + Dziękujemy! Zawsze możesz wyłączyć wysyłanie w „Ustawienia » Zaawansowane”.\n\nCzy masz dodatkowo 5 minut na udział w badaniu naukowym dotyczącym bezpieczeństwa Delta Chat? + Wysyłanie statystyk jest już włączone.\n\nChcesz je wyłączyć? + Wyłącz + Kontynuuj wysyłanie + Załącznik zawiera anonimowe statystyki użytkowania, które pomagają nam ulepszać Delta Chat. Więcej informacji można znaleźć na: https://delta.chat/help#statssending. Dziękujemy! + Wyniki wyszukiwania Nie znaleziono emoji @@ -911,7 +920,7 @@ Użytkownik %2$s usunął członka %1$s. - Usunięto członka %1$s + Usunięto członka %1$s. Opuszczono grupę @@ -973,7 +982,7 @@ Usunięto czat „Zapisane wiadomości”.\n\nℹ️ Aby ponownie użyć funkcji „Zapisane wiadomości”, utwórz nowy czat ze sobą. - ⚠️ Limit pamięci u twojego dostawcy wkrótce zostanie przekroczony, wykorzystano już %1$s%%.\n\nMożesz nie być w stanie otrzymywać wiadomości, gdy pamięć jest pełna.\n\n👉 Sprawdzić, czy możesz usunąć stare dane w interfejsie internetowym dostawcy i rozważyć włączenie opcji \"Ustawienia » Czaty i media » Usuwanie starych wiadomości\". W dowolnym momencie możesz sprawdzić swoje bieżące wykorzystanie pamięci w \"Ustawienia » Łączność\". + ⚠️ Limit pamięci u twojego dostawcy wkrótce zostanie przekroczony, wykorzystano już %1$s%%.\n\nMożesz nie być w stanie otrzymywać wiadomości, gdy pamięć jest pełna.\n\n👉 Sprawdzić, czy możesz usunąć stare dane w interfejsie internetowym dostawcy i rozważyć włączenie opcji \"Ustawienia » Czaty » Usuwanie starych wiadomości\". W dowolnym momencie możesz sprawdzić swoje bieżące wykorzystanie pamięci w \"Ustawienia » Łączność\". ⚠️ Data lub godzina urządzenia wydaje się być niedokładna (%1$s).\n\nDostosuj zegar ⏰🔧, aby upewnić się, że wiadomości są prawidłowo odbierane. ⚠️ Twoja wersja Delta Chat może być nieaktualna.\n\nMoże to powodować problemy, ponieważ Twoi partnerzy czatu korzystają z nowszych wersji, a Ty nie masz najnowszych funkcji 😳\nSprawdź aktualizacje na stronie https://get.delta.chat lub w sklepie z aplikacjami. diff --git a/src/main/res/values-ru/strings.xml b/src/main/res/values-ru/strings.xml index d4f2a98de..1421cc35c 100644 --- a/src/main/res/values-ru/strings.xml +++ b/src/main/res/values-ru/strings.xml @@ -1036,6 +1036,7 @@ %1$s ответил(а), ожидаем добавления в группу… Устанавливается соединение, пожалуйста, подождите… %1$s подтверждён. + Вы заблокировали контакт Подтверждён: %1$s Подтверждён: Лично diff --git a/src/main/res/values-sq/strings.xml b/src/main/res/values-sq/strings.xml index 8015f5c29..662c1a9a3 100644 --- a/src/main/res/values-sq/strings.xml +++ b/src/main/res/values-sq/strings.xml @@ -996,6 +996,7 @@ %1$s u përgjigj, po pritet që të shtohet te grupi… Po vendoset fshehtëzim skaj-më-skaj, ju lutemi, pritni… %1$s u soll. + E bllokuat kontaktin Sjellë nga %1$s Sjellë nga unë diff --git a/src/main/res/values-tr/strings.xml b/src/main/res/values-tr/strings.xml index 0f015fba3..962f1b988 100644 --- a/src/main/res/values-tr/strings.xml +++ b/src/main/res/values-tr/strings.xml @@ -1002,6 +1002,7 @@ %1$s yanıtladı; gruba eklenmesi bekleniyor… Bağlantı kuruluyor, lütfen bekleyin… %1$s tanıtıldı. + Kişiyi engellediniz %1$s tarafından tanıtıldı Benim tarafımdan tanıtıldı diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 74c31f75f..03cedca9c 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -985,6 +985,7 @@ %1$s 已回复,等待被加入群组… 正在建立连接,请稍候… %1$s 已验证。 + 您已屏蔽该联系人 验证人 %1$s 由您验证 From 620d86c903ef4cf4eefd9516a84026f28ed45256 Mon Sep 17 00:00:00 2001 From: adbenitez Date: Fri, 23 Jan 2026 17:41:25 +0100 Subject: [PATCH 26/28] update RPC bindings --- src/main/java/chat/delta/rpc/Rpc.java | 43 ++++++++++++++++--- .../java/chat/delta/rpc/types/BasicChat.java | 2 +- .../java/chat/delta/rpc/types/Contact.java | 2 +- .../java/chat/delta/rpc/types/EventType.java | 4 +- .../java/chat/delta/rpc/types/FullChat.java | 1 - .../java/chat/delta/rpc/types/Message.java | 1 + .../delta/rpc/types/MessageLoadResult.java | 1 + 7 files changed, 43 insertions(+), 11 deletions(-) diff --git a/src/main/java/chat/delta/rpc/Rpc.java b/src/main/java/chat/delta/rpc/Rpc.java index e36451085..4cccc26ce 100644 --- a/src/main/java/chat/delta/rpc/Rpc.java +++ b/src/main/java/chat/delta/rpc/Rpc.java @@ -211,11 +211,11 @@ public class Rpc { } /** - * Set configuration values from a QR code. (technically from the URI that is stored in the qrcode) - * Before this function is called, `checkQr()` should confirm the type of the - * QR code is `account` or `webrtcInstance`. + * Set configuration values from a QR code (technically from the URI stored in it). + * Before this function is called, `check_qr()` should be used to get the QR code type. *

- * Internally, the function will call dc_set_config() with the appropriate keys, + * "DCACCOUNT:" and "DCLOGIN:" QR codes configure the account, but I/O mustn't be started for + * such QR codes, consider using [`Self::add_transport_from_qr`] which also restarts I/O. */ public void setConfigFromQr(Integer accountId, String qrContent) throws RpcException { transport.call("set_config_from_qr", mapper.valueToTree(accountId), mapper.valueToTree(qrContent)); @@ -234,6 +234,11 @@ public class Rpc { return transport.callForResult(new TypeReference>(){}, "batch_get_config", mapper.valueToTree(accountId), mapper.valueToTree(keys)); } + /** Returns all `ui.*` config keys that were set by the UI. */ + public java.util.List getAllUiConfigKeys(Integer accountId) throws RpcException { + return transport.callForResult(new TypeReference>(){}, "get_all_ui_config_keys", mapper.valueToTree(accountId)); + } + public void setStockStrings(java.util.Map strings) throws RpcException { transport.call("set_stock_strings", mapper.valueToTree(strings)); } @@ -449,11 +454,11 @@ public class Rpc { * Delete a chat. *

* Messages are deleted from the device and the chat database entry is deleted. - * After that, the event #DC_EVENT_MSGS_CHANGED is posted. + * After that, a `MsgsChanged` event is emitted. + * Messages are deleted from the server in background. *

* Things that are _not done_ implicitly: *

- * - Messages are **not deleted from the server**. * - The chat or the contact is **not blocked**, so new messages from the user/the group may appear as a contact request * and the user may create the chat again. * - **Groups are not left** - this would @@ -733,11 +738,26 @@ public class Rpc { return transport.callForResult(new TypeReference(){}, "add_device_message", mapper.valueToTree(accountId), mapper.valueToTree(label), mapper.valueToTree(msg)); } + /** + * Mark all messages in all chats as _noticed_. + * Skips messages from blocked contacts, but does not skip messages in muted chats. + *

+ * _Noticed_ messages are no longer _fresh_ and do not count as being unseen + * but are still waiting for being marked as "seen" using markseen_msgs() + * (read receipts aren't sent for noticed messages). + *

+ * Calling this function usually results in the event #DC_EVENT_MSGS_NOTICED. + * See also markseen_msgs(). + */ + public void marknoticedAllChats(Integer accountId) throws RpcException { + transport.call("marknoticed_all_chats", mapper.valueToTree(accountId)); + } + /** * Mark all messages in a chat as _noticed_. * _Noticed_ messages are no longer _fresh_ and do not count as being unseen * but are still waiting for being marked as "seen" using markseen_msgs() - * (IMAP/MDNs is not done for noticed messages). + * (read receipts aren't sent for noticed messages). *

* Calling this function usually results in the event #DC_EVENT_MSGS_NOTICED. * See also markseen_msgs(). @@ -893,6 +913,15 @@ public class Rpc { return transport.callForResult(new TypeReference(){}, "get_message_info_object", mapper.valueToTree(accountId), mapper.valueToTree(messageId)); } + /** + * Returns count of read receipts on message. + *

+ * This view count is meant as a feedback measure for the channel owner only. + */ + public Integer getMessageReadReceiptCount(Integer accountId, Integer messageId) throws RpcException { + return transport.callForResult(new TypeReference(){}, "get_message_read_receipt_count", mapper.valueToTree(accountId), mapper.valueToTree(messageId)); + } + /** Returns contacts that sent read receipts and the time of reading. */ public java.util.List getMessageReadReceipts(Integer accountId, Integer messageId) throws RpcException { return transport.callForResult(new TypeReference>(){}, "get_message_read_receipts", mapper.valueToTree(accountId), mapper.valueToTree(messageId)); diff --git a/src/main/java/chat/delta/rpc/types/BasicChat.java b/src/main/java/chat/delta/rpc/types/BasicChat.java index 5ca3526fe..e470a2e55 100644 --- a/src/main/java/chat/delta/rpc/types/BasicChat.java +++ b/src/main/java/chat/delta/rpc/types/BasicChat.java @@ -2,7 +2,7 @@ package chat.delta.rpc.types; /** - * cheaper version of fullchat, omits: - contacts - contact_ids - fresh_message_counter - ephemeral_timer - self_in_group - was_seen_recently - can_send + * cheaper version of fullchat, omits: - contact_ids - fresh_message_counter - ephemeral_timer - self_in_group - was_seen_recently - can_send *

* used when you only need the basic metadata of a chat like type, name, profile picture */ diff --git a/src/main/java/chat/delta/rpc/types/Contact.java b/src/main/java/chat/delta/rpc/types/Contact.java index 667f12646..6d6f3e064 100644 --- a/src/main/java/chat/delta/rpc/types/Contact.java +++ b/src/main/java/chat/delta/rpc/types/Contact.java @@ -38,7 +38,7 @@ public class Contact { *

* UI should display the information in the contact's profile as follows: *

- * - If `verifierId` != 0, display text "Introduced by ..." with the name and address of the contact formatted by `name_and_addr`/`nameAndAddr`. Prefix the text by a green checkmark. + * - If `verifierId` != 0, display text "Introduced by ..." with the name of the contact. Prefix the text by a green checkmark. *

* - If `verifierId` == 0 and `isVerified` != 0, display "Introduced" prefixed by a green checkmark. *

diff --git a/src/main/java/chat/delta/rpc/types/EventType.java b/src/main/java/chat/delta/rpc/types/EventType.java index 985bb45de..a77bae4a6 100644 --- a/src/main/java/chat/delta/rpc/types/EventType.java +++ b/src/main/java/chat/delta/rpc/types/EventType.java @@ -412,7 +412,9 @@ public abstract class EventType { /** * One or more transports has changed. *

- * This event is used for tests to detect when transport synchronization messages arrives. UIs don't need to use it, it is unlikely that user modifies transports on multiple devices simultaneously. + * UI should update the list. + *

+ * This event is emitted when transport synchronization messages arrives, but not when the UI modifies the transport list by itself. */ public static class TransportsModified extends EventType { } diff --git a/src/main/java/chat/delta/rpc/types/FullChat.java b/src/main/java/chat/delta/rpc/types/FullChat.java index a1b4f46a7..c8b424d6a 100644 --- a/src/main/java/chat/delta/rpc/types/FullChat.java +++ b/src/main/java/chat/delta/rpc/types/FullChat.java @@ -7,7 +7,6 @@ public class FullChat { public ChatType chatType; public String color; public java.util.List contactIds; - public java.util.List contacts; public Integer ephemeralTimer; public Integer freshMessageCounter; public Integer id; diff --git a/src/main/java/chat/delta/rpc/types/Message.java b/src/main/java/chat/delta/rpc/types/Message.java index fcf4351a0..2087e6e0d 100644 --- a/src/main/java/chat/delta/rpc/types/Message.java +++ b/src/main/java/chat/delta/rpc/types/Message.java @@ -12,6 +12,7 @@ public class Message { public String error; @com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET) public String file; + /** The size of the file in bytes, if applicable. If message is a pre-message, then this is the size of the file to be downloaded. */ public Integer fileBytes; @com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET) public String fileMime; diff --git a/src/main/java/chat/delta/rpc/types/MessageLoadResult.java b/src/main/java/chat/delta/rpc/types/MessageLoadResult.java index 0d7838675..80fb198b2 100644 --- a/src/main/java/chat/delta/rpc/types/MessageLoadResult.java +++ b/src/main/java/chat/delta/rpc/types/MessageLoadResult.java @@ -22,6 +22,7 @@ public abstract class MessageLoadResult { public String error; @com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET) public String file; + /** The size of the file in bytes, if applicable. If message is a pre-message, then this is the size of the file to be downloaded. */ public Integer fileBytes; @com.fasterxml.jackson.annotation.JsonSetter(nulls = com.fasterxml.jackson.annotation.Nulls.SET) public String fileMime; From b349a7e601bb8231befe206bcf9ebfaeafc5568a Mon Sep 17 00:00:00 2001 From: adbenitez Date: Sat, 24 Jan 2026 00:31:58 +0100 Subject: [PATCH 27/28] update deltachat-core-rust to 'chore(release): prepare for 2.39.0' of 'v2.39.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 008e6c4af..baeb31b5f 160000 --- a/jni/deltachat-core-rust +++ b/jni/deltachat-core-rust @@ -1 +1 @@ -Subproject commit 008e6c4af34ef66a620eb3007cabd543b71edb23 +Subproject commit baeb31b5faa28d9cfc35ed5bb27a974d980dad6d From 6d09a6f318501c04297a34e986a6dedd7345720d Mon Sep 17 00:00:00 2001 From: adbenitez Date: Sat, 24 Jan 2026 00:34:18 +0100 Subject: [PATCH 28/28] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7bcaa3808..7dd07ad0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ * Fix: Update menu when using "select all" in contact selection * Fix: Avoid empty profiles after using "add as second device" from welcome screen * Fix multi-device seen messages synchronization when using multiple relays -* Update to core 2.38.0 +* Update to core 2.39.0 ## v2.35.0 2026-01