Merge remote-tracking branch 'upstream/main'

This commit is contained in:
adbenitez
2026-06-15 23:04:36 +02:00
12 changed files with 450 additions and 210 deletions
+2
View File
@@ -77,12 +77,14 @@ jobs:
- name: Upload APK
id: upload
if: github.event.pull_request.head.repo.full_name == github.repository
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: app-preview.apk
path: 'build/outputs/apk/foss/debug/*.apk'
- name: Add artifact links to PR
if: github.event.pull_request.head.repo.full_name == github.repository
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
ARTIFACT_URL: ${{ steps.upload.outputs.artifact-url }}
+5 -1
View File
@@ -3,6 +3,11 @@
## Unreleased
* Use message style notifications for longer message previews
* Remove notification after audio playback ends
* Fix: do not allow blocked contacts to use our invite links
* Fix sending mini-app that was used/prepared before sending
* Some more small fixes and updated translations
* Update to core 2.53.0
## v2.52.0
2026-06
@@ -12,7 +17,6 @@
* Fix: Audio files in draft showing total time from wrong file
* Fix: Update the channel title after joining if the QR code had an outdated title
* Voice recording will be automatically saved as draft when interrupted
* Remove notification after audio playback ends
* Update to core 2.52.0
## v2.51.0
@@ -302,7 +302,10 @@ public class ApplicationContext extends MultiDexApplication {
Log.i(
"DeltaChat",
"++++++++++++++++++ NetworkCallback.onAvailable() #" + debugOnAvailableCount++);
getDcAccounts().maybeNetwork();
// onBlockedStatusChanged is only available on API 29+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
getDcAccounts().maybeNetwork();
}
}
@Override
@@ -310,8 +313,13 @@ public class ApplicationContext extends MultiDexApplication {
@NonNull android.net.Network network, boolean blocked) {
Log.i(
"DeltaChat",
"++++++++++++++++++ NetworkCallback.onBlockedStatusChanged() #"
"++++++++++++++++++ NetworkCallback.onBlockedStatusChanged("
+ blocked
+ ") #"
+ debugOnBlockedStatusChangedCount++);
if (!blocked) {
getDcAccounts().maybeNetwork();
}
}
@Override
@@ -260,12 +260,11 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity
final String addr = extraEmail[0];
int contactId = dcContext.lookupContactIdByAddr(addr);
if (contactId == 0) {
contactId = dcContext.createContact(null, addr);
if (contactId != 0 || dcContext.getConfigInt(DcHelper.CONFIG_FORCE_ENCRYPTION) == 0) {
if (contactId == 0) contactId = dcContext.createContact(null, addr);
chatId = dcContext.createChatByContactId(contactId);
accId = dcContext.getAccountId();
}
chatId = dcContext.createChatByContactId(contactId);
accId = dcContext.getAccountId();
}
Intent composeIntent;
if (accId != -1 && chatId > 0) {
@@ -528,16 +528,20 @@ public class DcHelper {
.show();
}
public static void showInvalidUnencryptedDialog(Context context) {
new AlertDialog.Builder(context)
public static AlertDialog.Builder prepareInvalidUnencryptedDialog(
Context context, AlertDialog.Builder builder) {
return builder
.setMessage(context.getString(R.string.invalid_unencrypted_explanation))
.setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#howtoe2ee"))
.setNegativeButton(
R.string.qrscan_title,
(d, w) -> context.startActivity(new Intent(context, QrActivity.class)))
.setPositiveButton(R.string.ok, null)
.setCancelable(true)
.show();
.setCancelable(true);
}
public static void showInvalidUnencryptedDialog(Context context) {
prepareInvalidUnencryptedDialog(context, new AlertDialog.Builder(context)).show();
}
public static void openHelp(Context context, String section) {
@@ -314,6 +314,12 @@ public class QrCodeHandler {
private void showFingerprintOrQrSuccess(
AlertDialog.Builder builder, DcLot qrParsed, String name) {
if (qrParsed.getState() == DcContext.DC_QR_ADDR
&& dcContext.getConfigInt(DcHelper.CONFIG_FORCE_ENCRYPTION) == 1) {
DcHelper.prepareInvalidUnencryptedDialog(activity, builder);
return;
}
@StringRes
int resId =
qrParsed.getState() == DcContext.DC_QR_ADDR
@@ -57,22 +57,26 @@ public class LongClickCopySpan extends ClickableSpan {
DcContext dcContext = DcHelper.getContext(activity);
int contactId = dcContext.lookupContactIdByAddr(addr);
if (contactId == 0 && dcContext.mayBeValidAddr(addr)) {
contactId = dcContext.createContact(null, addr);
}
DcContact contact = dcContext.getContact(contactId);
if (contact.getId() != 0
DcContact contact = (contactId != 0) ? dcContext.getContact(contactId) : null;
if (contact != null
&& !contact.isBlocked()
&& dcContext.getChatIdByContactId(contact.getId()) != 0) {
openChat(activity, contact);
} else if (contact == null
&& dcContext.getConfigInt(DcHelper.CONFIG_FORCE_ENCRYPTION) == 1) {
DcHelper.showInvalidUnencryptedDialog(activity);
} else {
String name = contact != null ? contact.getDisplayName() : addr;
new AlertDialog.Builder(activity)
.setMessage(
activity.getString(R.string.ask_start_chat_with, contact.getDisplayName()))
.setMessage(activity.getString(R.string.ask_start_chat_with, name))
.setPositiveButton(
android.R.string.ok,
(dialog, which) -> {
openChat(activity, contact);
openChat(
activity,
contact == null
? dcContext.getContact(dcContext.createContact(null, addr))
: contact);
})
.setNegativeButton(R.string.cancel, null)
.show();
+1 -1
View File
@@ -272,7 +272,7 @@
<!-- consider keeping the term "channel" as in WhatsApp or Telegram -->
<string name="channels">Canals</string>
<!-- consider keeping the term "channel" as in WhatsApp or Telegram -->
<string name="new_channel">Nou Canal</string>
<string name="new_channel">Canal nou</string>
<!-- consider keeping the term "channel" as in WhatsApp or Telegram -->
<string name="channel_name">Nom del Canal</string>
<!-- The number of times a message is shown in channels. Use what other messengers are using here, smth. as "N-times seen" or "1 Aufruf" (german) work as well, where "1 impression" or "1 hit" may sound too formal and may be more marketing slang. -->
+1 -1
View File
@@ -673,7 +673,7 @@
<string name="welcome_chat_over_email">Sicherer dezentraler Chat</string>
<string name="scan_invitation_code">Einladungscode scannen</string>
<string name="login_title">Login</string>
<string name="login_advanced_hint">Für fortgeschrittene Benutzer:\n\nVerwende keine Adresse, die du bereits in einer anderen App nutzt.</string>
<string name="login_advanced_hint">Für fortgeschrittene Benutzer.\n\nVerwende keine Adresse, die du bereits in einer anderen App nutzt.</string>
<string name="login_inbox">Posteingang</string>
<string name="login_imap_login">IMAP-Anmeldename</string>
<string name="login_imap_server">IMAP-Server</string>
File diff suppressed because it is too large Load Diff
+3
View File
@@ -450,6 +450,7 @@
<string name="call_answered_elsewhere">Chiamata risposta su un altro dispositivo</string>
<string name="call_requires_camera_permission">Per le videochiamate è necessaria l\'autorizzazione per l\'utilizzo della fotocamera.</string>
<string name="call_requires_mic_permission">Per le chiamate è necessaria l\'autorizzazione per l\'utilizzo del microfono.</string>
<string name="call_requires_connection">Impossibile avviare la chiamata. Assicurati che il tuo dispositivo disponga di una connessione a Internet e riprova.</string>
<!-- Used e.g. in a notifications to describe an ongoing call. "Call" is a noun here, in the meaning of "This is the call with ..." where the placeholder is replaced by the name of the contact. -->
<string name="call_with">Chiama con %1$s</string>
<!-- Use e.g. in a notifications during ringing. Placeholder is relaced by the name of the contact being called. -->
@@ -690,6 +691,7 @@
<string name="welcome_chat_over_email">Chat Decentralizzata Sicura</string>
<string name="scan_invitation_code">Scansiona Codice Invito</string>
<string name="login_title">Accedi</string>
<string name="login_advanced_hint">Questo login è riservato agli utenti avanzati.\n\nNon utilizzare un indirizzo che stai già usando in un\'altra app.</string>
<string name="login_inbox">In Arrivo</string>
<string name="login_imap_login">Nome Accesso IMAP</string>
<string name="login_imap_server">Server IMAP</string>
@@ -724,6 +726,7 @@
<string name="used_for_sending">Utilizzato per l\'invio</string>
<string name="hide_from_contacts">Nascondi dai Contatti</string>
<string name="hidden_from_contacts">Nascosto dai contatti</string>
<string name="enforce_e2ee">Applica Crittografia a Tutti i Ripetitori</string>
<!-- Hint for the list of relays -->
<string name="transport_list_hint">I messaggi vengono ricevuti su tutti i ripetitori.\n\n⚠️ Se modifichi qualcosa qui, assicurati che tutti i tuoi dispositivi abbiano almeno la versione 2.47.0. Altrimenti i dispositivi più vecchi potrebbero non ricevere i messaggi.</string>
<!-- shown if a QR code was scanned that can be used as a relay -->