From 1ca62629f68b90569a46a9903a0ca53d8b6c3c5a Mon Sep 17 00:00:00 2001 From: AL-Session <160798022+AL-Session@users.noreply.github.com> Date: Tue, 16 Jul 2024 11:28:50 +1000 Subject: [PATCH 1/3] SS-40 - MMS Notification Strings (#1541) * Feature implemented * Removed stray quotation mark * Cleanup WIP * Cleanup * Addressed PR feedback * Addressed further PR feedback --------- Co-authored-by: alansley --- app/build.gradle | 1 + .../v2/utilities/MentionUtilities.kt | 4 - .../securesms/database/MmsDatabase.kt | 95 ++++++--------- .../model/NotificationMmsMessageRecord.java | 113 ------------------ .../model/NotificationMmsMessageRecord.kt | 71 +++++++++++ .../messagerequests/MessageRequestView.kt | 8 +- .../org/thoughtcrime/securesms/mms/Slide.java | 58 ++++----- .../thoughtcrime/securesms/mms/SlideDeck.java | 5 +- .../notifications/DefaultMessageNotifier.java | 54 ++++++--- .../DeleteNotificationReceiver.java | 2 - app/src/main/res/values-ar-rSA/strings.xml | 3 - app/src/main/res/values-ar/strings.xml | 3 - app/src/main/res/values-az-rAZ/strings.xml | 3 - app/src/main/res/values-az/strings.xml | 3 - app/src/main/res/values-bal-rBA/strings.xml | 3 - app/src/main/res/values-bal/strings.xml | 3 - app/src/main/res/values-bg-rBG/strings.xml | 3 - app/src/main/res/values-bg/strings.xml | 3 - app/src/main/res/values-ca-rES/strings.xml | 3 - app/src/main/res/values-ca/strings.xml | 3 - app/src/main/res/values-cs-rCZ/strings.xml | 3 - app/src/main/res/values-cs/strings.xml | 3 - app/src/main/res/values-cy-rGB/strings.xml | 3 - app/src/main/res/values-cy/strings.xml | 3 - app/src/main/res/values-da-rDK/strings.xml | 3 - app/src/main/res/values-da/strings.xml | 3 - app/src/main/res/values-de-rDE/strings.xml | 3 - app/src/main/res/values-de/strings.xml | 3 - app/src/main/res/values-el-rGR/strings.xml | 3 - app/src/main/res/values-el/strings.xml | 3 - app/src/main/res/values-eo-rUY/strings.xml | 3 - app/src/main/res/values-eo/strings.xml | 3 - app/src/main/res/values-es-rES/strings.xml | 3 - app/src/main/res/values-es/strings.xml | 3 - app/src/main/res/values-et-rEE/strings.xml | 3 - app/src/main/res/values-et/strings.xml | 3 - app/src/main/res/values-fa-rIR/strings.xml | 3 - app/src/main/res/values-fa/strings.xml | 3 - app/src/main/res/values-fi-rFI/strings.xml | 3 - app/src/main/res/values-fi/strings.xml | 3 - app/src/main/res/values-fr-rFR/strings.xml | 3 - app/src/main/res/values-fr/strings.xml | 3 - app/src/main/res/values-gl-rES/strings.xml | 3 - app/src/main/res/values-gl/strings.xml | 3 - app/src/main/res/values-ha-rHG/strings.xml | 3 - app/src/main/res/values-ha/strings.xml | 3 - app/src/main/res/values-hi-rIN/strings.xml | 3 - app/src/main/res/values-hi/strings.xml | 3 - app/src/main/res/values-hu-rHU/strings.xml | 3 - app/src/main/res/values-hu/strings.xml | 3 - app/src/main/res/values-hy-rAM/strings.xml | 3 - app/src/main/res/values-hy/strings.xml | 3 - app/src/main/res/values-in-rID/strings.xml | 3 - app/src/main/res/values-in/strings.xml | 3 - app/src/main/res/values-it-rIT/strings.xml | 3 - app/src/main/res/values-it/strings.xml | 3 - app/src/main/res/values-iw-rIL/strings.xml | 3 - app/src/main/res/values-iw/strings.xml | 3 - app/src/main/res/values-ja-rJP/strings.xml | 3 - app/src/main/res/values-ja/strings.xml | 3 - app/src/main/res/values-km-rKH/strings.xml | 3 - app/src/main/res/values-km/strings.xml | 3 - app/src/main/res/values-kn-rIN/strings.xml | 1 - app/src/main/res/values-kn/strings.xml | 1 - app/src/main/res/values-ko-rKR/strings.xml | 3 - app/src/main/res/values-ko/strings.xml | 3 - app/src/main/res/values-lt-rLT/strings.xml | 3 - app/src/main/res/values-lt/strings.xml | 3 - app/src/main/res/values-mk-rMK/strings.xml | 3 - app/src/main/res/values-mk/strings.xml | 3 - app/src/main/res/values-nb-rNO/strings.xml | 3 - app/src/main/res/values-nb/strings.xml | 3 - app/src/main/res/values-nl-rNL/strings.xml | 3 - app/src/main/res/values-nl/strings.xml | 3 - app/src/main/res/values-nn-rNO/strings.xml | 3 - app/src/main/res/values-nn/strings.xml | 3 - app/src/main/res/values-ny-rMW/strings.xml | 3 - app/src/main/res/values-ny/strings.xml | 3 - app/src/main/res/values-pl-rPL/strings.xml | 3 - app/src/main/res/values-pl/strings.xml | 3 - app/src/main/res/values-pt-rBR/strings.xml | 3 - app/src/main/res/values-pt-rPT/strings.xml | 3 - app/src/main/res/values-pt/strings.xml | 3 - app/src/main/res/values-ro-rRO/strings.xml | 3 - app/src/main/res/values-ro/strings.xml | 3 - app/src/main/res/values-ru-rRU/strings.xml | 3 - app/src/main/res/values-ru/strings.xml | 3 - app/src/main/res/values-si-rLK/strings.xml | 2 - app/src/main/res/values-si/strings.xml | 2 - app/src/main/res/values-sk-rSK/strings.xml | 3 - app/src/main/res/values-sk/strings.xml | 3 - app/src/main/res/values-sq-rAL/strings.xml | 3 - app/src/main/res/values-sq/strings.xml | 3 - app/src/main/res/values-sr-rSP/strings.xml | 3 - app/src/main/res/values-sr/strings.xml | 3 - app/src/main/res/values-sv-rSE/strings.xml | 3 - app/src/main/res/values-sv/strings.xml | 3 - app/src/main/res/values-sw-rKE/strings.xml | 3 - app/src/main/res/values-sw/strings.xml | 3 - app/src/main/res/values-te-rIN/strings.xml | 3 - app/src/main/res/values-te/strings.xml | 3 - app/src/main/res/values-th-rTH/strings.xml | 3 - app/src/main/res/values-th/strings.xml | 3 - app/src/main/res/values-tr-rTR/strings.xml | 3 - app/src/main/res/values-tr/strings.xml | 3 - app/src/main/res/values-uk-rUA/strings.xml | 3 - app/src/main/res/values-uk/strings.xml | 3 - app/src/main/res/values-ur-rIN/strings.xml | 2 - app/src/main/res/values-ur/strings.xml | 2 - app/src/main/res/values-vi-rVN/strings.xml | 2 - app/src/main/res/values-vi/strings.xml | 2 - app/src/main/res/values-xh-rZA/strings.xml | 1 - app/src/main/res/values-xh/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 3 - app/src/main/res/values-zh-rTW/strings.xml | 3 - app/src/main/res/values-zh/strings.xml | 3 - app/src/main/res/values/strings.xml | 3 - gradle.properties | 1 + libsession-util/libsession-util | 2 +- .../jobs/RetrieveProfileAvatarJob.kt | 2 +- .../libsession/utilities/StringSubKeys.kt | 29 +++++ libsession/src/main/res/values/strings.xml | 3 + 122 files changed, 215 insertions(+), 540 deletions(-) delete mode 100644 app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java create mode 100644 app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.kt create mode 100644 libsession/src/main/java/org/session/libsession/utilities/StringSubKeys.kt diff --git a/app/build.gradle b/app/build.gradle index 23bbecd217..ba17830c1e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -322,6 +322,7 @@ dependencies { implementation "com.google.protobuf:protobuf-java:$protobufVersion" implementation "com.fasterxml.jackson.core:jackson-databind:$jacksonDatabindVersion" implementation "com.squareup.okhttp3:okhttp:$okhttpVersion" + implementation "com.squareup.phrase:phrase:$phraseVersion" implementation 'app.cash.copper:copper-flow:1.0.0' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinesVersion" diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/MentionUtilities.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/MentionUtilities.kt index 3a4bfd6816..1c8aa6774a 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/MentionUtilities.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/utilities/MentionUtilities.kt @@ -1,15 +1,12 @@ package org.thoughtcrime.securesms.conversation.v2.utilities import android.content.Context -import android.graphics.Color import android.graphics.Typeface import android.text.Spannable import android.text.SpannableString -import android.text.style.BackgroundColorSpan import android.text.style.ForegroundColorSpan import android.text.style.StyleSpan import android.util.Range -import androidx.core.content.res.ResourcesCompat import network.loki.messenger.R import nl.komponents.kovenant.combine.Tuple2 import org.session.libsession.messaging.contacts.Contact @@ -22,7 +19,6 @@ import org.session.libsession.utilities.truncateIdForDisplay import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.util.RoundedBackgroundSpan import org.thoughtcrime.securesms.util.getAccentColor -import org.thoughtcrime.securesms.util.toPx import java.util.regex.Pattern object MentionUtilities { diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt index 23a1af7ceb..9d3a6c9c18 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/MmsDatabase.kt @@ -1242,73 +1242,50 @@ class MmsDatabase(context: Context, databaseHelper: SQLCipherOpenHelper) : Messa } private fun getNotificationMmsMessageRecord(cursor: Cursor): NotificationMmsMessageRecord { - val id = cursor.getLong(cursor.getColumnIndexOrThrow(ID)) - val dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_SENT)) - val dateReceived = cursor.getLong( - cursor.getColumnIndexOrThrow( - NORMALIZED_DATE_RECEIVED - ) - ) - val threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID)) - val mailbox = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_BOX)) - val address = cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)) - val addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(ADDRESS_DEVICE_ID)) - val recipient = getRecipientFor(address) - val contentLocation = cursor.getString(cursor.getColumnIndexOrThrow(CONTENT_LOCATION)) - val transactionId = cursor.getString(cursor.getColumnIndexOrThrow(TRANSACTION_ID)) - val messageSize = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_SIZE)) - val expiry = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRY)) - val status = cursor.getInt(cursor.getColumnIndexOrThrow(STATUS)) - val deliveryReceiptCount = cursor.getInt( - cursor.getColumnIndexOrThrow( - DELIVERY_RECEIPT_COUNT - ) - ) - val readReceiptCount = if (isReadReceiptsEnabled(context)) cursor.getInt(cursor.getColumnIndexOrThrow(READ_RECEIPT_COUNT)) else 0 - val hasMention = (cursor.getInt(cursor.getColumnIndexOrThrow(HAS_MENTION)) == 1) - val contentLocationBytes: ByteArray? = contentLocation?.takeUnless { it.isEmpty() }?.let(::toIsoBytes) - val transactionIdBytes: ByteArray? = transactionId?.takeUnless { it.isEmpty() }?.let(::toIsoBytes) - val slideDeck = SlideDeck(context, MmsNotificationAttachment(status, messageSize)) + // Note: Additional details such as ADDRESS_DEVICE_ID, CONTENT_LOCATION, and TRANSACTION_ID are available if required. + val id = cursor.getLong(cursor.getColumnIndexOrThrow(ID)) + val dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_SENT)) + val dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_RECEIVED)) + val threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID)) + val mailbox = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_BOX)) + val address = cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)) + val recipient = getRecipientFor(address) + val messageSize = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_SIZE)) + val expiry = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRY)) + val status = cursor.getInt(cursor.getColumnIndexOrThrow(STATUS)) + val deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(DELIVERY_RECEIPT_COUNT)) + val readReceiptCount = if (isReadReceiptsEnabled(context)) cursor.getInt(cursor.getColumnIndexOrThrow(READ_RECEIPT_COUNT)) else 0 + val hasMention = (cursor.getInt(cursor.getColumnIndexOrThrow(HAS_MENTION)) == 1) + val slideDeck = SlideDeck(context, MmsNotificationAttachment(status, messageSize)) + return NotificationMmsMessageRecord( id, recipient, recipient, dateSent, dateReceived, deliveryReceiptCount, threadId, - contentLocationBytes, messageSize, expiry, status, - transactionIdBytes, mailbox, slideDeck, + messageSize, expiry, status, mailbox, slideDeck, readReceiptCount, hasMention ) } private fun getMediaMmsMessageRecord(cursor: Cursor, getQuote: Boolean): MediaMmsMessageRecord { - val id = cursor.getLong(cursor.getColumnIndexOrThrow(ID)) - val dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_SENT)) - val dateReceived = cursor.getLong( - cursor.getColumnIndexOrThrow( - NORMALIZED_DATE_RECEIVED - ) - ) - val box = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_BOX)) - val threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID)) - val address = cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)) - val addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(ADDRESS_DEVICE_ID)) - val deliveryReceiptCount = cursor.getInt( - cursor.getColumnIndexOrThrow( - DELIVERY_RECEIPT_COUNT - ) - ) - var readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(READ_RECEIPT_COUNT)) - val body = cursor.getString(cursor.getColumnIndexOrThrow(BODY)) - val partCount = cursor.getInt(cursor.getColumnIndexOrThrow(PART_COUNT)) - val mismatchDocument = cursor.getString( - cursor.getColumnIndexOrThrow( - MISMATCHED_IDENTITIES - ) - ) - val networkDocument = cursor.getString(cursor.getColumnIndexOrThrow(NETWORK_FAILURE)) - val subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(SUBSCRIPTION_ID)) - val expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRES_IN)) - val expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRE_STARTED)) - val unidentified = cursor.getInt(cursor.getColumnIndexOrThrow(UNIDENTIFIED)) == 1 - val hasMention = cursor.getInt(cursor.getColumnIndexOrThrow(HAS_MENTION)) == 1 + val id = cursor.getLong(cursor.getColumnIndexOrThrow(ID)) + val dateSent = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_SENT)) + val dateReceived = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_RECEIVED)) + val box = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_BOX)) + val threadId = cursor.getLong(cursor.getColumnIndexOrThrow(THREAD_ID)) + val address = cursor.getString(cursor.getColumnIndexOrThrow(ADDRESS)) + val addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(ADDRESS_DEVICE_ID)) + val deliveryReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(DELIVERY_RECEIPT_COUNT)) + var readReceiptCount = cursor.getInt(cursor.getColumnIndexOrThrow(READ_RECEIPT_COUNT)) + val body = cursor.getString(cursor.getColumnIndexOrThrow(BODY)) + val partCount = cursor.getInt(cursor.getColumnIndexOrThrow(PART_COUNT)) + val mismatchDocument = cursor.getString(cursor.getColumnIndexOrThrow(MISMATCHED_IDENTITIES)) + val networkDocument = cursor.getString(cursor.getColumnIndexOrThrow(NETWORK_FAILURE)) + val subscriptionId = cursor.getInt(cursor.getColumnIndexOrThrow(SUBSCRIPTION_ID)) + val expiresIn = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRES_IN)) + val expireStarted = cursor.getLong(cursor.getColumnIndexOrThrow(EXPIRE_STARTED)) + val unidentified = cursor.getInt(cursor.getColumnIndexOrThrow(UNIDENTIFIED)) == 1 + val hasMention = cursor.getInt(cursor.getColumnIndexOrThrow(HAS_MENTION)) == 1 + if (!isReadReceiptsEnabled(context)) { readReceiptCount = 0 } diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java deleted file mode 100644 index 9fb4047879..0000000000 --- a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright (C) 2012 Moxie Marlinspike - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package org.thoughtcrime.securesms.database.model; - -import static java.util.Collections.emptyList; - -import android.content.Context; -import android.text.SpannableString; - -import androidx.annotation.NonNull; - -import org.session.libsession.utilities.recipients.Recipient; -import org.thoughtcrime.securesms.database.MmsDatabase; -import org.thoughtcrime.securesms.database.SmsDatabase.Status; -import org.thoughtcrime.securesms.mms.SlideDeck; - -import network.loki.messenger.R; - -/** - * Represents the message record model for MMS messages that are - * notifications (ie: they're pointers to undownloaded media). - * - * @author Moxie Marlinspike - * - */ - -public class NotificationMmsMessageRecord extends MmsMessageRecord { - private final byte[] contentLocation; - private final long messageSize; - private final long expiry; - private final int status; - private final byte[] transactionId; - - public NotificationMmsMessageRecord(long id, Recipient conversationRecipient, - Recipient individualRecipient, - long dateSent, long dateReceived, int deliveryReceiptCount, - long threadId, byte[] contentLocation, long messageSize, - long expiry, int status, byte[] transactionId, long mailbox, - SlideDeck slideDeck, int readReceiptCount, boolean hasMention) - { - super(id, "", conversationRecipient, individualRecipient, - dateSent, dateReceived, threadId, Status.STATUS_NONE, deliveryReceiptCount, mailbox, - emptyList(), emptyList(), - 0, 0, slideDeck, readReceiptCount, null, emptyList(), emptyList(), false, emptyList(), hasMention); - - this.contentLocation = contentLocation; - this.messageSize = messageSize; - this.expiry = expiry; - this.status = status; - this.transactionId = transactionId; - } - - public byte[] getTransactionId() { - return transactionId; - } - public int getStatus() { - return this.status; - } - public byte[] getContentLocation() { - return contentLocation; - } - public long getMessageSize() { - return (messageSize + 1023) / 1024; - } - public long getExpiration() { - return expiry * 1000; - } - - @Override - public boolean isOutgoing() { - return false; - } - - @Override - public boolean isPending() { - return false; - } - - @Override - public boolean isMmsNotification() { - return true; - } - - @Override - public boolean isMediaPending() { - return true; - } - - @Override - public SpannableString getDisplayBody(@NonNull Context context) { - if (status == MmsDatabase.Status.DOWNLOAD_INITIALIZED) { - return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_multimedia_message)); - } else if (status == MmsDatabase.Status.DOWNLOAD_CONNECTING) { - return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_downloading_mms_message)); - } else { - return emphasisAdded(context.getString(R.string.NotificationMmsMessageRecord_error_downloading_mms_message)); - } - } -} diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.kt b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.kt new file mode 100644 index 0000000000..eb742cd6b1 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/database/model/NotificationMmsMessageRecord.kt @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2012 Moxie Marlinspike + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.thoughtcrime.securesms.database.model + +import org.session.libsession.utilities.recipients.Recipient +import org.thoughtcrime.securesms.database.SmsDatabase +import org.thoughtcrime.securesms.mms.SlideDeck + +/** + * Represents the message record model for MMS messages that are + * notifications (ie: they're pointers to undownloaded media). + * + * @author Moxie Marlinspike + */ +class NotificationMmsMessageRecord( + id: Long, conversationRecipient: Recipient?, + individualRecipient: Recipient?, + dateSent: Long, + dateReceived: Long, + deliveryReceiptCount: Int, + threadId: Long, + private val messageSize: Long, + private val expiry: Long, + val status: Int, + mailbox: Long, + slideDeck: SlideDeck?, + readReceiptCount: Int, + hasMention: Boolean +) : MmsMessageRecord( + id, "", conversationRecipient, individualRecipient, + dateSent, dateReceived, threadId, SmsDatabase.Status.STATUS_NONE, deliveryReceiptCount, mailbox, + emptyList(), emptyList(), + 0, 0, slideDeck!!, readReceiptCount, null, emptyList(), emptyList(), false, emptyList(), hasMention +) { + fun getMessageSize(): Long { + return (messageSize + 1023) / 1024 + } + + val expiration: Long + get() = expiry * 1000 + + override fun isOutgoing(): Boolean { + return false + } + + override fun isPending(): Boolean { + return false + } + + override fun isMmsNotification(): Boolean { + return true + } + + override fun isMediaPending(): Boolean { + return true + } +} diff --git a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestView.kt b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestView.kt index a916d8e4d6..6584f4e519 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/messagerequests/MessageRequestView.kt @@ -34,13 +34,13 @@ class MessageRequestView : LinearLayout { // region Updating fun bind(thread: ThreadRecord, glide: GlideRequests) { this.thread = thread - val senderDisplayName = getUserDisplayName(thread.recipient) - ?: thread.recipient.address.toString() + + val senderDisplayName = getUserDisplayName(thread.recipient) ?: thread.recipient.address.toString() + binding.displayNameTextView.text = senderDisplayName binding.timestampTextView.text = DateUtils.getDisplayFormattedTimeSpanString(context, Locale.getDefault(), thread.date) - val rawSnippet = thread.getDisplayBody(context) val snippet = highlightMentions( - text = rawSnippet, + text = thread.getDisplayBody(context), formatOnly = true, // no styling here, only text formatting threadID = thread.threadId, context = context diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java index f322d17091..2c92121cf2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/Slide.java @@ -16,24 +16,23 @@ */ package org.thoughtcrime.securesms.mms; +import static org.session.libsession.utilities.StringSubstitutionConstants.EMOJI_KEY; + import android.content.Context; import android.content.res.Resources.Theme; import android.net.Uri; import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; import androidx.annotation.Nullable; - -import org.session.libsession.messaging.sending_receiving.attachments.AttachmentTransferProgress; -import org.thoughtcrime.securesms.util.MediaUtil; -import org.session.libsignal.utilities.guava.Optional; - +import com.squareup.phrase.Phrase; +import java.security.SecureRandom; +import network.loki.messenger.R; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; +import org.session.libsession.messaging.sending_receiving.attachments.AttachmentTransferProgress; import org.session.libsession.messaging.sending_receiving.attachments.UriAttachment; import org.session.libsession.utilities.Util; - -import java.security.SecureRandom; - -import network.loki.messenger.R; +import org.session.libsignal.utilities.guava.Optional; +import org.thoughtcrime.securesms.util.MediaUtil; public abstract class Slide { @@ -72,20 +71,23 @@ public abstract class Slide { return Optional.fromNullable("🎤 " + attachmentString); } } - return Optional.fromNullable(emojiForMimeType() + attachmentString); + String txt = Phrase.from(context, R.string.attachmentsNotification) + .put(EMOJI_KEY, emojiForMimeType()) + .format().toString(); + return Optional.fromNullable(txt); } private String emojiForMimeType() { if (MediaUtil.isImage(attachment)) { - return "📷 "; + return "📷"; } else if (MediaUtil.isVideo(attachment)) { - return "🎥 "; + return "🎥"; } else if (MediaUtil.isAudio(attachment)) { - return "🎧 "; + return "🎧"; } else if (MediaUtil.isFile(attachment)) { - return "📎 "; + return "📎"; } else { - return "🎡 "; + return "🎡"; // `isGif` } } @@ -155,20 +157,20 @@ public abstract class Slide { return false; } - protected static Attachment constructAttachmentFromUri(@NonNull Context context, - @NonNull Uri uri, - @NonNull String defaultMime, - long size, - int width, - int height, - boolean hasThumbnail, - @Nullable String fileName, - @Nullable String caption, - boolean voiceNote, - boolean quote) + protected static Attachment constructAttachmentFromUri(@NonNull Context context, + @NonNull Uri uri, + @NonNull String defaultMime, + long size, + int width, + int height, + boolean hasThumbnail, + @Nullable String fileName, + @Nullable String caption, + boolean voiceNote, + boolean quote) { - String resolvedType = Optional.fromNullable(MediaUtil.getMimeType(context, uri)).or(defaultMime); - String fastPreflightId = String.valueOf(new SecureRandom().nextLong()); + String resolvedType = Optional.fromNullable(MediaUtil.getMimeType(context, uri)).or(defaultMime); + String fastPreflightId = String.valueOf(new SecureRandom().nextLong()); return new UriAttachment(uri, hasThumbnail ? uri : null, resolvedType, diff --git a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java index 6db38e6bc5..ffe91704df 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java +++ b/app/src/main/java/org/thoughtcrime/securesms/mms/SlideDeck.java @@ -24,6 +24,7 @@ import androidx.annotation.Nullable; import com.annimon.stream.Stream; import org.session.libsession.messaging.sending_receiving.attachments.Attachment; +import org.session.libsignal.utilities.Log; import org.session.libsignal.utilities.guava.Optional; import org.thoughtcrime.securesms.util.MediaUtil; @@ -47,8 +48,7 @@ public class SlideDeck { if (slide != null) slides.add(slide); } - public SlideDeck() { - } + public SlideDeck() { } public void clear() { slides.clear(); @@ -65,7 +65,6 @@ public class SlideDeck { body = slideBody.get(); } } - return body; } diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java index 8a891fb9b9..9b0ff9d85c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/DefaultMessageNotifier.java @@ -29,6 +29,7 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Build; import android.service.notification.StatusBarNotification; +import android.text.SpannableString; import android.text.TextUtils; import androidx.annotation.NonNull; @@ -145,9 +146,8 @@ public class DefaultMessageNotifier implements MessageNotifier { } public void notifyMessagesPending(Context context) { - if (!TextSecurePreferences.isNotificationsEnabled(context)) { - return; - } + + if (!TextSecurePreferences.isNotificationsEnabled(context)) { return; } PendingMessageNotificationBuilder builder = new PendingMessageNotificationBuilder(context, TextSecurePreferences.getNotificationPrivacy(context)); ServiceUtil.getNotificationManager(context).notify(PENDING_MESSAGES_ID, builder.build()); @@ -185,9 +185,9 @@ public class DefaultMessageNotifier implements MessageNotifier { for (StatusBarNotification notification : activeNotifications) { boolean validNotification = false; - if (notification.getId() != SUMMARY_NOTIFICATION_ID && - notification.getId() != KeyCachingService.SERVICE_RUNNING_ID && - notification.getId() != FOREGROUND_ID && + if (notification.getId() != SUMMARY_NOTIFICATION_ID && + notification.getId() != KeyCachingService.SERVICE_RUNNING_ID && + notification.getId() != FOREGROUND_ID && notification.getId() != PENDING_MESSAGES_ID) { for (NotificationItem item : notificationState.getNotifications()) { @@ -197,9 +197,7 @@ public class DefaultMessageNotifier implements MessageNotifier { } } - if (!validNotification) { - notifications.cancel(notification.getId()); - } + if (!validNotification) { notifications.cancel(notification.getId()); } } } } catch (Throwable e) { @@ -231,7 +229,7 @@ public class DefaultMessageNotifier implements MessageNotifier { @Override public void updateNotification(@NonNull Context context, long threadId, boolean signal) { - boolean isVisible = visibleThread == threadId; + boolean isVisible = visibleThread == threadId; ThreadDatabase threads = DatabaseComponent.get(context).threadDatabase(); Recipient recipient = threads.getRecipientForThreadId(threadId); @@ -348,14 +346,19 @@ public class DefaultMessageNotifier implements MessageNotifier { builder.setThread(notifications.get(0).getRecipient()); builder.setMessageCount(notificationState.getMessageCount()); - // TODO: Removing highlighting mentions in the notification because this context is the libsession one which - // TODO: doesn't have access to the `R.attr.message_sent_text_color` and `R.attr.message_received_text_color` - // TODO: attributes to perform the colour lookup. Also, it makes little sense to highlight the mentions using - // TODO: the app theme as it may result in insufficient contrast with the notification background which will - // TODO: be using the SYSTEM theme. - builder.setPrimaryMessageBody(recipient, notifications.get(0).getIndividualRecipient(), - //MentionUtilities.highlightMentions(text == null ? "" : text, notifications.get(0).getThreadId(), context), // Removing hightlighting mentions -ACL - text == null ? "" : text, + CharSequence builderCS = text == null ? "" : text; + SpannableString ss = MentionUtilities.highlightMentions( + builderCS, + false, + false, + true, + bundled ? notifications.get(0).getThreadId() : 0, + context + ); + + builder.setPrimaryMessageBody(recipient, + notifications.get(0).getIndividualRecipient(), + ss, notifications.get(0).getSlideDeck()); builder.setContentIntent(notifications.get(0).getPendingIntent(context)); @@ -505,24 +508,39 @@ public class DefaultMessageNotifier implements MessageNotifier { continue; } } + + // If this is a message request from an unknown user.. if (messageRequest) { body = SpanUtil.italic(context.getString(R.string.message_requests_notification)); + + // If we received some manner of notification but Session is locked.. } else if (KeyCachingService.isLocked(context)) { body = SpanUtil.italic(context.getString(R.string.MessageNotifier_locked_message)); + + // ----- All further cases assume we know the contact and that Session isn't locked ----- + + // If this is a notification about a multimedia message from a contact we know about.. } else if (record.isMms() && !((MmsMessageRecord) record).getSharedContacts().isEmpty()) { Contact contact = ((MmsMessageRecord) record).getSharedContacts().get(0); body = ContactUtil.getStringSummary(context, contact); + + // If this is a notification about a multimedia message which contains no text but DOES contain a slide deck with at least one slide.. } else if (record.isMms() && TextUtils.isEmpty(body) && !((MmsMessageRecord) record).getSlideDeck().getSlides().isEmpty()) { slideDeck = ((MediaMmsMessageRecord)record).getSlideDeck(); body = SpanUtil.italic(slideDeck.getBody()); + + // If this is a notification about a multimedia message, but it's not ITSELF a multimedia notification AND it contains a slide deck with at least one slide.. } else if (record.isMms() && !record.isMmsNotification() && !((MmsMessageRecord) record).getSlideDeck().getSlides().isEmpty()) { slideDeck = ((MediaMmsMessageRecord)record).getSlideDeck(); String message = slideDeck.getBody() + ": " + record.getBody(); int italicLength = message.length() - body.length(); body = SpanUtil.italic(message, italicLength); + + // If this is a notification about an invitation to a community.. } else if (record.isOpenGroupInvitation()) { body = SpanUtil.italic(context.getString(R.string.ThreadRecord_open_group_invitation)); } + String userPublicKey = TextSecurePreferences.getLocalNumber(context); String blindedPublicKey = cache.get(threadId); if (blindedPublicKey == null) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/DeleteNotificationReceiver.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/DeleteNotificationReceiver.java index 4d32a8cda5..8db5f810b4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/notifications/DeleteNotificationReceiver.java +++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/DeleteNotificationReceiver.java @@ -1,11 +1,9 @@ package org.thoughtcrime.securesms.notifications; - import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.AsyncTask; - import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.dependencies.DatabaseComponent; diff --git a/app/src/main/res/values-ar-rSA/strings.xml b/app/src/main/res/values-ar-rSA/strings.xml index b1dbe91ee6..0e11ce4603 100644 --- a/app/src/main/res/values-ar-rSA/strings.xml +++ b/app/src/main/res/values-ar-rSA/strings.xml @@ -186,9 +186,6 @@ أختر الكل جارٍ جمع المرفقات... - رسالة وسائط متعددة - تنزيل رسالة الوسائط المتعددة - خطأ في تنزيل رسالة الوسائط المتعددة، انقر لاعادة المحاولة إرسال إلى %s diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index b1dbe91ee6..0e11ce4603 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -186,9 +186,6 @@ أختر الكل جارٍ جمع المرفقات... - رسالة وسائط متعددة - تنزيل رسالة الوسائط المتعددة - خطأ في تنزيل رسالة الوسائط المتعددة، انقر لاعادة المحاولة إرسال إلى %s diff --git a/app/src/main/res/values-az-rAZ/strings.xml b/app/src/main/res/values-az-rAZ/strings.xml index 35f7167ac9..2f33cdbc67 100644 --- a/app/src/main/res/values-az-rAZ/strings.xml +++ b/app/src/main/res/values-az-rAZ/strings.xml @@ -150,9 +150,6 @@ Hamısını seç Qoşmalar yığılır... - Multimedia mesajı - MMS mesaj endirilir - MMS mesajı endirmə xətası, yenidən sınamaq üçün toxunun %s - göndər diff --git a/app/src/main/res/values-az/strings.xml b/app/src/main/res/values-az/strings.xml index 35f7167ac9..2f33cdbc67 100644 --- a/app/src/main/res/values-az/strings.xml +++ b/app/src/main/res/values-az/strings.xml @@ -150,9 +150,6 @@ Hamısını seç Qoşmalar yığılır... - Multimedia mesajı - MMS mesaj endirilir - MMS mesajı endirmə xətası, yenidən sınamaq üçün toxunun %s - göndər diff --git a/app/src/main/res/values-bal-rBA/strings.xml b/app/src/main/res/values-bal-rBA/strings.xml index 36f8ac55b7..040da442f3 100644 --- a/app/src/main/res/values-bal-rBA/strings.xml +++ b/app/src/main/res/values-bal-rBA/strings.xml @@ -96,9 +96,6 @@ Pilih semua Mengumpulkan lampiran... - Pesan multimedia - Mengunduh pesan MMS. - Gagal saat mengunduh pesan MMS, ketuk untuk mencoba lagi Kirim ke %s diff --git a/app/src/main/res/values-bal/strings.xml b/app/src/main/res/values-bal/strings.xml index 36f8ac55b7..040da442f3 100644 --- a/app/src/main/res/values-bal/strings.xml +++ b/app/src/main/res/values-bal/strings.xml @@ -96,9 +96,6 @@ Pilih semua Mengumpulkan lampiran... - Pesan multimedia - Mengunduh pesan MMS. - Gagal saat mengunduh pesan MMS, ketuk untuk mencoba lagi Kirim ke %s diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index fc23778210..f984a7d857 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -142,9 +142,6 @@ Избери всичко Събиране на прикачени файлове... - Мултимедийно съобщение - Изтегляне на MMS съобщение - Грешка при изтегляне на MMS съобщение, натиснете за да опитате повторно Изпрати на %s diff --git a/app/src/main/res/values-bg/strings.xml b/app/src/main/res/values-bg/strings.xml index fc23778210..f984a7d857 100644 --- a/app/src/main/res/values-bg/strings.xml +++ b/app/src/main/res/values-bg/strings.xml @@ -142,9 +142,6 @@ Избери всичко Събиране на прикачени файлове... - Мултимедийно съобщение - Изтегляне на MMS съобщение - Грешка при изтегляне на MMS съобщение, натиснете за да опитате повторно Изпрати на %s diff --git a/app/src/main/res/values-ca-rES/strings.xml b/app/src/main/res/values-ca-rES/strings.xml index 9e2928bc38..ff7a30c74f 100644 --- a/app/src/main/res/values-ca-rES/strings.xml +++ b/app/src/main/res/values-ca-rES/strings.xml @@ -147,9 +147,6 @@ Selecciona-ho tot S\'estan adjuntant els fitxers... - Missatge multimèdia - S\'està baixant el missatge MMS - S\'ha produït un error en baixar el missatge MMS. Toqueu per tornar a intentar-ho Envia-ho a %s diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 9e2928bc38..ff7a30c74f 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -147,9 +147,6 @@ Selecciona-ho tot S\'estan adjuntant els fitxers... - Missatge multimèdia - S\'està baixant el missatge MMS - S\'ha produït un error en baixar el missatge MMS. Toqueu per tornar a intentar-ho Envia-ho a %s diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index d022499e04..ff36cc691a 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -168,9 +168,6 @@ Označit vše Shromažďuji přílohy... - Multimediální zpráva - Stahuji MMS zprávu - Chyba při stahování MMS zprávy, ťukněte pro opakování Poslat %s diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index d022499e04..ff36cc691a 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -168,9 +168,6 @@ Označit vše Shromažďuji přílohy... - Multimediální zpráva - Stahuji MMS zprávu - Chyba při stahování MMS zprávy, ťukněte pro opakování Poslat %s diff --git a/app/src/main/res/values-cy-rGB/strings.xml b/app/src/main/res/values-cy-rGB/strings.xml index b481439583..6c3b42cfdb 100644 --- a/app/src/main/res/values-cy-rGB/strings.xml +++ b/app/src/main/res/values-cy-rGB/strings.xml @@ -172,9 +172,6 @@ Dewis popeth Casglu atodiadau... - Neges amlgyfrwng - Llwytho i lawr neges MMS - Gwall wrth lawrlwytho neges MMS, tapio i geisio eto Anfon i %s diff --git a/app/src/main/res/values-cy/strings.xml b/app/src/main/res/values-cy/strings.xml index b481439583..6c3b42cfdb 100644 --- a/app/src/main/res/values-cy/strings.xml +++ b/app/src/main/res/values-cy/strings.xml @@ -172,9 +172,6 @@ Dewis popeth Casglu atodiadau... - Neges amlgyfrwng - Llwytho i lawr neges MMS - Gwall wrth lawrlwytho neges MMS, tapio i geisio eto Anfon i %s diff --git a/app/src/main/res/values-da-rDK/strings.xml b/app/src/main/res/values-da-rDK/strings.xml index 604e214231..ca9600171c 100644 --- a/app/src/main/res/values-da-rDK/strings.xml +++ b/app/src/main/res/values-da-rDK/strings.xml @@ -150,9 +150,6 @@ Vælg alle Samler vedhæftninger... - Multimedie besked - Downloader MMS... - MMS besked kunne ikke downloades, tap for at prøve igen Send til %s diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 604e214231..ca9600171c 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -150,9 +150,6 @@ Vælg alle Samler vedhæftninger... - Multimedie besked - Downloader MMS... - MMS besked kunne ikke downloades, tap for at prøve igen Send til %s diff --git a/app/src/main/res/values-de-rDE/strings.xml b/app/src/main/res/values-de-rDE/strings.xml index e08da18a31..0b645e0317 100644 --- a/app/src/main/res/values-de-rDE/strings.xml +++ b/app/src/main/res/values-de-rDE/strings.xml @@ -150,9 +150,6 @@ Alle auswählen Anhänge werden gesammelt … - MMS - MMS wird heruntergeladen … - Fehler beim Herunterladen der MMS. Für erneuten Versuch antippen. An %s senden diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index e08da18a31..0b645e0317 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -150,9 +150,6 @@ Alle auswählen Anhänge werden gesammelt … - MMS - MMS wird heruntergeladen … - Fehler beim Herunterladen der MMS. Für erneuten Versuch antippen. An %s senden diff --git a/app/src/main/res/values-el-rGR/strings.xml b/app/src/main/res/values-el-rGR/strings.xml index 5e7b292c25..2a5026673f 100644 --- a/app/src/main/res/values-el-rGR/strings.xml +++ b/app/src/main/res/values-el-rGR/strings.xml @@ -150,9 +150,6 @@ Επιλογή όλων Τα συνημμένα συλλέγονται... - Μήνυμα πολυμέσων - Το μήνυμα MMS λαμβάνεται - Πρόβλημα κατά τη λήψη μηνύματος MMS, πατήστε για να ξαναδοκιμάσουμε Αποστολή σε %s diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 5e7b292c25..2a5026673f 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -150,9 +150,6 @@ Επιλογή όλων Τα συνημμένα συλλέγονται... - Μήνυμα πολυμέσων - Το μήνυμα MMS λαμβάνεται - Πρόβλημα κατά τη λήψη μηνύματος MMS, πατήστε για να ξαναδοκιμάσουμε Αποστολή σε %s diff --git a/app/src/main/res/values-eo-rUY/strings.xml b/app/src/main/res/values-eo-rUY/strings.xml index eedb13a448..0601369b4d 100644 --- a/app/src/main/res/values-eo-rUY/strings.xml +++ b/app/src/main/res/values-eo-rUY/strings.xml @@ -150,9 +150,6 @@ Elekti ĉiujn Kolekto de kunsendaĵoj... - Aŭdvida mesaĝo - Elŝutante MMS-mesaĝon - Eraro dum elŝuto de MMS-mesaĝo, tuŝetu por reprovi Sendi al %s diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index eedb13a448..0601369b4d 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -150,9 +150,6 @@ Elekti ĉiujn Kolekto de kunsendaĵoj... - Aŭdvida mesaĝo - Elŝutante MMS-mesaĝon - Eraro dum elŝuto de MMS-mesaĝo, tuŝetu por reprovi Sendi al %s diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index f3df44aee4..61bad0e88f 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -150,9 +150,6 @@ Seleccionar todo Recopilando adjuntos ... - Mensaje multimedia - Descargando mensaje MMS - Fallo al descargar mensaje MMS, toca para reintentar Enviar a %s diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f3df44aee4..61bad0e88f 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -150,9 +150,6 @@ Seleccionar todo Recopilando adjuntos ... - Mensaje multimedia - Descargando mensaje MMS - Fallo al descargar mensaje MMS, toca para reintentar Enviar a %s diff --git a/app/src/main/res/values-et-rEE/strings.xml b/app/src/main/res/values-et-rEE/strings.xml index eedb1e79d6..0fda309718 100644 --- a/app/src/main/res/values-et-rEE/strings.xml +++ b/app/src/main/res/values-et-rEE/strings.xml @@ -134,9 +134,6 @@ Vali kõik Kogun manuseid... - Multimeediasõnum - Laadin alla MMS-sõnumit - MMS-sõnumi allalaadimisel tekkis viga, koputa uuesti proovimiseks Saada kohta %s diff --git a/app/src/main/res/values-et/strings.xml b/app/src/main/res/values-et/strings.xml index eedb1e79d6..0fda309718 100644 --- a/app/src/main/res/values-et/strings.xml +++ b/app/src/main/res/values-et/strings.xml @@ -134,9 +134,6 @@ Vali kõik Kogun manuseid... - Multimeediasõnum - Laadin alla MMS-sõnumit - MMS-sõnumi allalaadimisel tekkis viga, koputa uuesti proovimiseks Saada kohta %s diff --git a/app/src/main/res/values-fa-rIR/strings.xml b/app/src/main/res/values-fa-rIR/strings.xml index 4b16ccd655..89b2c3ec56 100644 --- a/app/src/main/res/values-fa-rIR/strings.xml +++ b/app/src/main/res/values-fa-rIR/strings.xml @@ -156,9 +156,6 @@ انتخاب همه در حال جمع‌آوری پیوست‌ها... - پیام های چند رسانه ای - در حال بارگیری پیام چندرسانه‌ای... - بروز مشکل در دانلود پیام MMS، جهت تلاش دوباره تپ کنید ارسال به %s diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index d9d26e6625..e1cbc949f4 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -150,9 +150,6 @@ انتخاب همه در حال جمع‌آوری پیوست‌ها... - پیام های چند رسانه ای - در حال بارگیری پیام چندرسانه‌ای... - بروز مشکل در دانلود پیام MMS، جهت تلاش دوباره تپ کنید ارسال به %s diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 3a7bf07fe1..09e662af45 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -150,9 +150,6 @@ Valitse kaikki Kerätään liitetiedostoja... - Multimediaviesti - Ladataan MMS-viestiä - Virhe ladattaessa MMS-viestiä. Yritä uudelleen napauttamalla. Lähetä yhteystiedolle %s diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 3a7bf07fe1..09e662af45 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -150,9 +150,6 @@ Valitse kaikki Kerätään liitetiedostoja... - Multimediaviesti - Ladataan MMS-viestiä - Virhe ladattaessa MMS-viestiä. Yritä uudelleen napauttamalla. Lähetä yhteystiedolle %s diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 4d76fa8e5e..d0562eb614 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -157,9 +157,6 @@ Tout sélectionner Récupération des pièces jointes… - Message multimédia - Téléchargement du message multimédia - Erreur de téléchargement du message multimédia. Touchez pour ressayer Envoyer à %s diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 4d76fa8e5e..d0562eb614 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -157,9 +157,6 @@ Tout sélectionner Récupération des pièces jointes… - Message multimédia - Téléchargement du message multimédia - Erreur de téléchargement du message multimédia. Touchez pour ressayer Envoyer à %s diff --git a/app/src/main/res/values-gl-rES/strings.xml b/app/src/main/res/values-gl-rES/strings.xml index 7ab41a7274..e95c5d05e0 100644 --- a/app/src/main/res/values-gl-rES/strings.xml +++ b/app/src/main/res/values-gl-rES/strings.xml @@ -149,9 +149,6 @@ Seleccionar todo Recompilando anexos... - Mensaxe multimedia - Descargando mensaxe MMS - Erro ao descargar a mensaxe MMS, toca para volver tentar Enviar a %s diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 7ab41a7274..e95c5d05e0 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -149,9 +149,6 @@ Seleccionar todo Recompilando anexos... - Mensaxe multimedia - Descargando mensaxe MMS - Erro ao descargar a mensaxe MMS, toca para volver tentar Enviar a %s diff --git a/app/src/main/res/values-ha-rHG/strings.xml b/app/src/main/res/values-ha-rHG/strings.xml index 9bdf7796bc..574699ae38 100644 --- a/app/src/main/res/values-ha-rHG/strings.xml +++ b/app/src/main/res/values-ha-rHG/strings.xml @@ -134,9 +134,6 @@ Gişan bibijêre ...Servehî tên berhevkirin - Peyama multîmedyayê - Peyama MMS tê daxistin - Peyama MMSê nehate daxistin, ji bo dîsa hewldanê bitepîne Ji %s re bişîne diff --git a/app/src/main/res/values-ha/strings.xml b/app/src/main/res/values-ha/strings.xml index 9bdf7796bc..574699ae38 100644 --- a/app/src/main/res/values-ha/strings.xml +++ b/app/src/main/res/values-ha/strings.xml @@ -134,9 +134,6 @@ Gişan bibijêre ...Servehî tên berhevkirin - Peyama multîmedyayê - Peyama MMS tê daxistin - Peyama MMSê nehate daxistin, ji bo dîsa hewldanê bitepîne Ji %s re bişîne diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 9a4a5c7309..4ade82a2c8 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -150,9 +150,6 @@ सभी को चुन लो स` अटैचमेंट्स इकट्ठे कर रहे हैं... - मल्टीमीडिया संदेश - एमएमएस संदेश डाउनलोड किया जा रहा है - एमएमएस संदेश डाउनलोड करने में त्रुटि, पुनः प्रयास करने के लिए टैप करें %s को भेजें diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index 9a4a5c7309..4ade82a2c8 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -150,9 +150,6 @@ सभी को चुन लो स` अटैचमेंट्स इकट्ठे कर रहे हैं... - मल्टीमीडिया संदेश - एमएमएस संदेश डाउनलोड किया जा रहा है - एमएमएस संदेश डाउनलोड करने में त्रुटि, पुनः प्रयास करने के लिए टैप करें %s को भेजें diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 517efa5604..cbb3fc8c8b 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -151,9 +151,6 @@ Összes kiválasztása Mellékletek összegyűjtése... - Multimédia üzenet - MMS üzenet letöltése - Hiba történt az MMS üzenet letöltése során, koppints az újrapróbálkozáshoz Küldés neki: %s diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 517efa5604..cbb3fc8c8b 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -151,9 +151,6 @@ Összes kiválasztása Mellékletek összegyűjtése... - Multimédia üzenet - MMS üzenet letöltése - Hiba történt az MMS üzenet letöltése során, koppints az újrapróbálkozáshoz Küldés neki: %s diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml index 994d95e164..85b9a03779 100644 --- a/app/src/main/res/values-hy-rAM/strings.xml +++ b/app/src/main/res/values-hy-rAM/strings.xml @@ -155,9 +155,6 @@ Ընտրել բոլորը Կցորդների հավաքում... - Մուլտիմեդիա հաղորդագրություններ - Ներբեռնում է MMS հաղորդագրությունը - Խնդիր առաջացավ MMS հաղորդագրությունը ներբեռնելիս, սեղմեք կրկին փորձելու համար Ուղարկել %s֊ին diff --git a/app/src/main/res/values-hy/strings.xml b/app/src/main/res/values-hy/strings.xml index 994d95e164..85b9a03779 100644 --- a/app/src/main/res/values-hy/strings.xml +++ b/app/src/main/res/values-hy/strings.xml @@ -155,9 +155,6 @@ Ընտրել բոլորը Կցորդների հավաքում... - Մուլտիմեդիա հաղորդագրություններ - Ներբեռնում է MMS հաղորդագրությունը - Խնդիր առաջացավ MMS հաղորդագրությունը ներբեռնելիս, սեղմեք կրկին փորձելու համար Ուղարկել %s֊ին diff --git a/app/src/main/res/values-in-rID/strings.xml b/app/src/main/res/values-in-rID/strings.xml index 25b13ebbb6..05c5513e44 100644 --- a/app/src/main/res/values-in-rID/strings.xml +++ b/app/src/main/res/values-in-rID/strings.xml @@ -126,9 +126,6 @@ Pilih semua Mengumpulkan semua lampiran... - Pesan Multimedia - Mengunduh pesan MMS - Gagal mengunduh pesan MMS, sentuh untuk coba kembali Kirim ke %s diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index 25b13ebbb6..05c5513e44 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -126,9 +126,6 @@ Pilih semua Mengumpulkan semua lampiran... - Pesan Multimedia - Mengunduh pesan MMS - Gagal mengunduh pesan MMS, sentuh untuk coba kembali Kirim ke %s diff --git a/app/src/main/res/values-it-rIT/strings.xml b/app/src/main/res/values-it-rIT/strings.xml index 113eaf994d..1babc03de5 100644 --- a/app/src/main/res/values-it-rIT/strings.xml +++ b/app/src/main/res/values-it-rIT/strings.xml @@ -151,9 +151,6 @@ Seleziona tutto Recupero allegati... - Messaggio multimediale - Scarico MMS - Errore nello scaricare MMS, premi per riprovare Invia a %s diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 113eaf994d..1babc03de5 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -151,9 +151,6 @@ Seleziona tutto Recupero allegati... - Messaggio multimediale - Scarico MMS - Errore nello scaricare MMS, premi per riprovare Invia a %s diff --git a/app/src/main/res/values-iw-rIL/strings.xml b/app/src/main/res/values-iw-rIL/strings.xml index 3b5bd5dc3a..8227c8684d 100644 --- a/app/src/main/res/values-iw-rIL/strings.xml +++ b/app/src/main/res/values-iw-rIL/strings.xml @@ -166,9 +166,6 @@ בחר הכל אוסף צרופות... - הודעת מולטימדיה - מוריד הודעת MMS - שגיאה בהורדת הודעת MMS, הקש כדי לנסות שוב שלח אל %s diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 3b5bd5dc3a..8227c8684d 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -166,9 +166,6 @@ בחר הכל אוסף צרופות... - הודעת מולטימדיה - מוריד הודעת MMS - שגיאה בהורדת הודעת MMS, הקש כדי לנסות שוב שלח אל %s diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 3e86ad1800..2c540ccc93 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -140,9 +140,6 @@ すべて選択 添付ファイルを集めています... - マルチメディアメッセージ - MMSメッセージをダウンロード中 - MMSメッセージのダウンロード中にエラーが発生しました。タップして再試行してください。 %sに送信 diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 3e86ad1800..2c540ccc93 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -140,9 +140,6 @@ すべて選択 添付ファイルを集めています... - マルチメディアメッセージ - MMSメッセージをダウンロード中 - MMSメッセージのダウンロード中にエラーが発生しました。タップして再試行してください。 %sに送信 diff --git a/app/src/main/res/values-km-rKH/strings.xml b/app/src/main/res/values-km-rKH/strings.xml index de0e3b6fab..6397c24266 100644 --- a/app/src/main/res/values-km-rKH/strings.xml +++ b/app/src/main/res/values-km-rKH/strings.xml @@ -127,9 +127,6 @@ ជ្រើសរើសទាំងអស់ កំពុងប្រមូលឯកសារភ្ជាប់... - សារចម្រុះ - កំពុងទាញយកសារ MMS - មានបញ្ហាទាញយកសារMMS សូមចុច ដើម្បីព្យាយាមម្តងទៀត ផ្ញើទៅកាន់ %s diff --git a/app/src/main/res/values-km/strings.xml b/app/src/main/res/values-km/strings.xml index de0e3b6fab..6397c24266 100644 --- a/app/src/main/res/values-km/strings.xml +++ b/app/src/main/res/values-km/strings.xml @@ -127,9 +127,6 @@ ជ្រើសរើសទាំងអស់ កំពុងប្រមូលឯកសារភ្ជាប់... - សារចម្រុះ - កំពុងទាញយកសារ MMS - មានបញ្ហាទាញយកសារMMS សូមចុច ដើម្បីព្យាយាមម្តងទៀត ផ្ញើទៅកាន់ %s diff --git a/app/src/main/res/values-kn-rIN/strings.xml b/app/src/main/res/values-kn-rIN/strings.xml index 086fe16e3b..3fddf94bc5 100644 --- a/app/src/main/res/values-kn-rIN/strings.xml +++ b/app/src/main/res/values-kn-rIN/strings.xml @@ -75,7 +75,6 @@ ದಾಖಲೆಗಳು ಎಲ್ಲ ಆಯ್ದುಕೊಳ್ಳಿ - ಮಲ್ಟಿಮೀಡಿಯಾ ಸಂದೇಶ diff --git a/app/src/main/res/values-kn/strings.xml b/app/src/main/res/values-kn/strings.xml index 086fe16e3b..3fddf94bc5 100644 --- a/app/src/main/res/values-kn/strings.xml +++ b/app/src/main/res/values-kn/strings.xml @@ -75,7 +75,6 @@ ದಾಖಲೆಗಳು ಎಲ್ಲ ಆಯ್ದುಕೊಳ್ಳಿ - ಮಲ್ಟಿಮೀಡಿಯಾ ಸಂದೇಶ diff --git a/app/src/main/res/values-ko-rKR/strings.xml b/app/src/main/res/values-ko-rKR/strings.xml index a96220650e..9bca01ef9b 100644 --- a/app/src/main/res/values-ko-rKR/strings.xml +++ b/app/src/main/res/values-ko-rKR/strings.xml @@ -136,9 +136,6 @@ 모두 선택 첨부파일 저장 준비 중… - 멀티미디어 메시지 - MMS 메시지 내려 받는 중 - MMS 내려 받기 오류, 다시 보내려면 다시 시도를 눌러주세요. %s에게 전송 diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index a96220650e..9bca01ef9b 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -136,9 +136,6 @@ 모두 선택 첨부파일 저장 준비 중… - 멀티미디어 메시지 - MMS 메시지 내려 받는 중 - MMS 내려 받기 오류, 다시 보내려면 다시 시도를 눌러주세요. %s에게 전송 diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index 0500157345..cbeb344469 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -166,9 +166,6 @@ Žymėti visus Renkami priedai... - Multimedijos žinutė - Atsiunčiama MMS žinutė - Klaida, atsiunčiant MMS žinutę, bakstelėkite, norėdami bandyti dar kartą Siųsti adresatui %s diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml index 0500157345..cbeb344469 100644 --- a/app/src/main/res/values-lt/strings.xml +++ b/app/src/main/res/values-lt/strings.xml @@ -166,9 +166,6 @@ Žymėti visus Renkami priedai... - Multimedijos žinutė - Atsiunčiama MMS žinutė - Klaida, atsiunčiant MMS žinutę, bakstelėkite, norėdami bandyti dar kartą Siųsti adresatui %s diff --git a/app/src/main/res/values-mk-rMK/strings.xml b/app/src/main/res/values-mk-rMK/strings.xml index ceafb0d0be..49715b2e5a 100644 --- a/app/src/main/res/values-mk-rMK/strings.xml +++ b/app/src/main/res/values-mk-rMK/strings.xml @@ -87,9 +87,6 @@ အားလုံးကို ရွေးပါ ပူးတွဲဖိုင်များကို စုစည်းနေသည် - ရုပ်၊သံပါ အချက်အလက်များ - MMS များအား ဒေါင်းလုပ်ဆွဲမည် - MMS များအားဒေါင်းလုပ်ဆွဲနေစဉ် ရပ်တန့်သွားသည်၊ ပြန်စရန် နှိပ်ပါ diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index ceafb0d0be..49715b2e5a 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -87,9 +87,6 @@ အားလုံးကို ရွေးပါ ပူးတွဲဖိုင်များကို စုစည်းနေသည် - ရုပ်၊သံပါ အချက်အလက်များ - MMS များအား ဒေါင်းလုပ်ဆွဲမည် - MMS များအားဒေါင်းလုပ်ဆွဲနေစဉ် ရပ်တန့်သွားသည်၊ ပြန်စရန် နှိပ်ပါ diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index 4ebaa04284..7a946799ec 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -150,9 +150,6 @@ Velg alle Henter vedlegg … - Multimediemelding - Laster ned MMS-melding - Feil under nedlasting av MMS-melding. Trykk for å prøve igjen Send til %s diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 4ebaa04284..7a946799ec 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -150,9 +150,6 @@ Velg alle Henter vedlegg … - Multimediemelding - Laster ned MMS-melding - Feil under nedlasting av MMS-melding. Trykk for å prøve igjen Send til %s diff --git a/app/src/main/res/values-nl-rNL/strings.xml b/app/src/main/res/values-nl-rNL/strings.xml index 50e2fec37b..599945761f 100644 --- a/app/src/main/res/values-nl-rNL/strings.xml +++ b/app/src/main/res/values-nl-rNL/strings.xml @@ -150,9 +150,6 @@ Alles selecteren Bijlagen aan het verzamelen… - Multimediabericht - Mms-bericht aan het downloaden - Fout bij downloaden van mms-bericht, tik om opnieuw te proberen Verzenden naar %s diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 50e2fec37b..599945761f 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -150,9 +150,6 @@ Alles selecteren Bijlagen aan het verzamelen… - Multimediabericht - Mms-bericht aan het downloaden - Fout bij downloaden van mms-bericht, tik om opnieuw te proberen Verzenden naar %s diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml index d5f869b152..1c38aae5d0 100644 --- a/app/src/main/res/values-nn-rNO/strings.xml +++ b/app/src/main/res/values-nn-rNO/strings.xml @@ -132,9 +132,6 @@ Vel alle Hentar vedlegg … - Multimediemelding - Lastar ned MMS-melding - Klarte ikkje lasta ned MMS-melding, trykk for å prøva igjen Send til %s diff --git a/app/src/main/res/values-nn/strings.xml b/app/src/main/res/values-nn/strings.xml index d5f869b152..1c38aae5d0 100644 --- a/app/src/main/res/values-nn/strings.xml +++ b/app/src/main/res/values-nn/strings.xml @@ -132,9 +132,6 @@ Vel alle Hentar vedlegg … - Multimediemelding - Lastar ned MMS-melding - Klarte ikkje lasta ned MMS-melding, trykk for å prøva igjen Send til %s diff --git a/app/src/main/res/values-ny-rMW/strings.xml b/app/src/main/res/values-ny-rMW/strings.xml index 44ad2e5ccf..02e8224159 100644 --- a/app/src/main/res/values-ny-rMW/strings.xml +++ b/app/src/main/res/values-ny-rMW/strings.xml @@ -125,9 +125,6 @@ Pankakuna Tukuyta akllana - Multimedia chaski - MMS chaskita uryakuchikun - MMS chaski mana uryakurkachu, kutinlla rurapay diff --git a/app/src/main/res/values-ny/strings.xml b/app/src/main/res/values-ny/strings.xml index 44ad2e5ccf..02e8224159 100644 --- a/app/src/main/res/values-ny/strings.xml +++ b/app/src/main/res/values-ny/strings.xml @@ -125,9 +125,6 @@ Pankakuna Tukuyta akllana - Multimedia chaski - MMS chaskita uryakuchikun - MMS chaski mana uryakurkachu, kutinlla rurapay diff --git a/app/src/main/res/values-pl-rPL/strings.xml b/app/src/main/res/values-pl-rPL/strings.xml index 6f9ca55e75..47214236d1 100644 --- a/app/src/main/res/values-pl-rPL/strings.xml +++ b/app/src/main/res/values-pl-rPL/strings.xml @@ -168,9 +168,6 @@ Zaznacz wszystko Zbieranie załączników... - Wiadomość multimedialna - Pobieranie wiadomości MMS - Błąd podczas pobierania wiadomości MMS. Dotknij, aby spróbować ponownie. Wyślij do %s diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 6f9ca55e75..47214236d1 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -168,9 +168,6 @@ Zaznacz wszystko Zbieranie załączników... - Wiadomość multimedialna - Pobieranie wiadomości MMS - Błąd podczas pobierania wiadomości MMS. Dotknij, aby spróbować ponownie. Wyślij do %s diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 6c5540e375..fa12b8b43b 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -150,9 +150,6 @@ Selecionar todos Coletando anexos... - Mensagem multimídia - Fazendo download de mensagem MMS - Erro fazendo download de mensagem MMS, toque para retentar Enviar para %s diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 05fd1e0436..1ffe4347bf 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -150,9 +150,6 @@ Seleccionar tudo A recolher anexos... - Mensagem multimédia - A descarregar MMS - Erro ao descarregar a mensagem MMS, toque para repetir Enviar para %s diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 6c5540e375..fa12b8b43b 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -150,9 +150,6 @@ Selecionar todos Coletando anexos... - Mensagem multimídia - Fazendo download de mensagem MMS - Erro fazendo download de mensagem MMS, toque para retentar Enviar para %s diff --git a/app/src/main/res/values-ro-rRO/strings.xml b/app/src/main/res/values-ro-rRO/strings.xml index 8f2c5f6ed0..fa5189d217 100644 --- a/app/src/main/res/values-ro-rRO/strings.xml +++ b/app/src/main/res/values-ro-rRO/strings.xml @@ -160,9 +160,6 @@ Selectează tot Se colectează atașamentele... - Mesaj multimedia - Se descarcă mesajul MMS - Eroare la descărcarea mesajului MMS, apasă pentru reîncercare Trimiteți la %s diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 8f2c5f6ed0..fa5189d217 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -160,9 +160,6 @@ Selectează tot Se colectează atașamentele... - Mesaj multimedia - Se descarcă mesajul MMS - Eroare la descărcarea mesajului MMS, apasă pentru reîncercare Trimiteți la %s diff --git a/app/src/main/res/values-ru-rRU/strings.xml b/app/src/main/res/values-ru-rRU/strings.xml index 6b907ee40e..82d6c0a332 100644 --- a/app/src/main/res/values-ru-rRU/strings.xml +++ b/app/src/main/res/values-ru-rRU/strings.xml @@ -168,9 +168,6 @@ Выбрать все Сбор вложений... - MMS-сообщение - Загрузка MMS-сообщения - Ошибка при скачивании MMS-сообщения; нажмите для повтора Отправить пользователю %s diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 6b907ee40e..82d6c0a332 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -168,9 +168,6 @@ Выбрать все Сбор вложений... - MMS-сообщение - Загрузка MMS-сообщения - Ошибка при скачивании MMS-сообщения; нажмите для повтора Отправить пользователю %s diff --git a/app/src/main/res/values-si-rLK/strings.xml b/app/src/main/res/values-si-rLK/strings.xml index aab98bd37f..7f17f00a71 100644 --- a/app/src/main/res/values-si-rLK/strings.xml +++ b/app/src/main/res/values-si-rLK/strings.xml @@ -61,8 +61,6 @@ මාධ්‍යය ලේඛන - බහුමාධ්‍ය පණිවිඩය - මාධ්‍ය පණිවිඩය බාගතවෙමින් %s ට යවන්න diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index aab98bd37f..7f17f00a71 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -61,8 +61,6 @@ මාධ්‍යය ලේඛන - බහුමාධ්‍ය පණිවිඩය - මාධ්‍ය පණිවිඩය බාගතවෙමින් %s ට යවන්න diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index f6071f00d9..a413e175e6 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -164,9 +164,6 @@ Označiť všetko Ukladám prílohy... - Multimediálna správa - Preberanie MMS správy - Chyba pri preberaní MMS správy, ťuknite pre opakovanie Poslať používateľovi %s diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml index f6071f00d9..a413e175e6 100644 --- a/app/src/main/res/values-sk/strings.xml +++ b/app/src/main/res/values-sk/strings.xml @@ -164,9 +164,6 @@ Označiť všetko Ukladám prílohy... - Multimediálna správa - Preberanie MMS správy - Chyba pri preberaní MMS správy, ťuknite pre opakovanie Poslať používateľovi %s diff --git a/app/src/main/res/values-sq-rAL/strings.xml b/app/src/main/res/values-sq-rAL/strings.xml index 9d441ac488..629a09651a 100644 --- a/app/src/main/res/values-sq-rAL/strings.xml +++ b/app/src/main/res/values-sq-rAL/strings.xml @@ -150,9 +150,6 @@ Përzgjidhi krejt Po mblidhen bashkëngjitje… - Mesazh multimedia - Po shkarkohet mesazh MMS - Gabim në shkarkim mesazhi MMS, prekeni që të riprovohet Dërgoje te %s diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 9d441ac488..629a09651a 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -150,9 +150,6 @@ Përzgjidhi krejt Po mblidhen bashkëngjitje… - Mesazh multimedia - Po shkarkohet mesazh MMS - Gabim në shkarkim mesazhi MMS, prekeni që të riprovohet Dërgoje te %s diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index ffbee30076..5852d985e9 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -157,9 +157,6 @@ Изабери све Сакупљам прилоге... - Мултимедијална порука - Преузимам ММС поруку - Грешка при преузимању ММС поруке, тапните да покушам поново Пошаљи %s diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index ffbee30076..5852d985e9 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -157,9 +157,6 @@ Изабери све Сакупљам прилоге... - Мултимедијална порука - Преузимам ММС поруку - Грешка при преузимању ММС поруке, тапните да покушам поново Пошаљи %s diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml index c966df21f5..8dd28619df 100644 --- a/app/src/main/res/values-sv-rSE/strings.xml +++ b/app/src/main/res/values-sv-rSE/strings.xml @@ -150,9 +150,6 @@ Markera alla Samlar bifogade filer... - Multimediameddelande - Hämtning av MMS-meddelanden - Fel vid hämtning av MMS-meddelanden, tryck för att försöka igen Skicka till %s diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index c966df21f5..8dd28619df 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -150,9 +150,6 @@ Markera alla Samlar bifogade filer... - Multimediameddelande - Hämtning av MMS-meddelanden - Fel vid hämtning av MMS-meddelanden, tryck för att försöka igen Skicka till %s diff --git a/app/src/main/res/values-sw-rKE/strings.xml b/app/src/main/res/values-sw-rKE/strings.xml index 08c2e7c52f..31120c468b 100644 --- a/app/src/main/res/values-sw-rKE/strings.xml +++ b/app/src/main/res/values-sw-rKE/strings.xml @@ -100,9 +100,6 @@ Chagua vyote kukusanya viambatisho - Ujumbe wa Multimedia - kupakua ujumbe wa mms - Hitilafu kupakua ujumbe wa MMS, bomba ili ujaribu tena tuma kwa 1%s diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml index 08c2e7c52f..31120c468b 100644 --- a/app/src/main/res/values-sw/strings.xml +++ b/app/src/main/res/values-sw/strings.xml @@ -100,9 +100,6 @@ Chagua vyote kukusanya viambatisho - Ujumbe wa Multimedia - kupakua ujumbe wa mms - Hitilafu kupakua ujumbe wa MMS, bomba ili ujaribu tena tuma kwa 1%s diff --git a/app/src/main/res/values-te-rIN/strings.xml b/app/src/main/res/values-te-rIN/strings.xml index ed65034517..17c79804e5 100644 --- a/app/src/main/res/values-te-rIN/strings.xml +++ b/app/src/main/res/values-te-rIN/strings.xml @@ -142,9 +142,6 @@ అన్నీ ఎంచుకో జోడింపుల సేకరణ ... - మల్టీమీడియా సందేశం - ఎమ్మెమ్మెస్ సందేశం దిగుమతి - ఎమ్మెమ్మెస్ సందేశం దిగుమతిలో లోపం, తట్టి మళ్ళీ ప్రయత్నించండి కెమెరా అందుబాటులో లేదు. diff --git a/app/src/main/res/values-te/strings.xml b/app/src/main/res/values-te/strings.xml index ed65034517..17c79804e5 100644 --- a/app/src/main/res/values-te/strings.xml +++ b/app/src/main/res/values-te/strings.xml @@ -142,9 +142,6 @@ అన్నీ ఎంచుకో జోడింపుల సేకరణ ... - మల్టీమీడియా సందేశం - ఎమ్మెమ్మెస్ సందేశం దిగుమతి - ఎమ్మెమ్మెస్ సందేశం దిగుమతిలో లోపం, తట్టి మళ్ళీ ప్రయత్నించండి కెమెరా అందుబాటులో లేదు. diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml index 014bc598ed..7bc5a08352 100644 --- a/app/src/main/res/values-th-rTH/strings.xml +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -119,9 +119,6 @@ เลือกทั้งหมด รวบรวมสิ่งแนบ... - ข้อความมัลติมีเดีย - กำลังดาวน์โหลดข้อความ MMS - เกิดข้อผิดพลาดระหว่างดาวน์โหลด MMS แตะเพื่อลองใหม่ diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml index 014bc598ed..7bc5a08352 100644 --- a/app/src/main/res/values-th/strings.xml +++ b/app/src/main/res/values-th/strings.xml @@ -119,9 +119,6 @@ เลือกทั้งหมด รวบรวมสิ่งแนบ... - ข้อความมัลติมีเดีย - กำลังดาวน์โหลดข้อความ MMS - เกิดข้อผิดพลาดระหว่างดาวน์โหลด MMS แตะเพื่อลองใหม่ diff --git a/app/src/main/res/values-tr-rTR/strings.xml b/app/src/main/res/values-tr-rTR/strings.xml index 5e696160dc..356da9c9f0 100644 --- a/app/src/main/res/values-tr-rTR/strings.xml +++ b/app/src/main/res/values-tr-rTR/strings.xml @@ -150,9 +150,6 @@ Hepsini seç Eklentiler toplanıyor... - Çoğulortam iletisi - MMS iletisi indiriliyor - MMS iletisi indirilirken hata, yeniden denemek için dokunun %s alıcısına gönder diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 5e696160dc..356da9c9f0 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -150,9 +150,6 @@ Hepsini seç Eklentiler toplanıyor... - Çoğulortam iletisi - MMS iletisi indiriliyor - MMS iletisi indirilirken hata, yeniden denemek için dokunun %s alıcısına gönder diff --git a/app/src/main/res/values-uk-rUA/strings.xml b/app/src/main/res/values-uk-rUA/strings.xml index 010bdae04e..97cf32b9c1 100644 --- a/app/src/main/res/values-uk-rUA/strings.xml +++ b/app/src/main/res/values-uk-rUA/strings.xml @@ -168,9 +168,6 @@ Обрати все Збираю вкладення... - Мультимедійне повідомлення - Завантаження MMS... - Виникла помилка при завантаженні MMS, натисніть щоб повторити Відправити %s diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 55dbcd63e3..0d39b7b2e0 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -168,9 +168,6 @@ Обрати все Збираю вкладення... - Мультимедійне повідомлення - Завантаження MMS... - Виникла помилка при завантаженні MMS, натисніть щоб повторити Відправити %s diff --git a/app/src/main/res/values-ur-rIN/strings.xml b/app/src/main/res/values-ur-rIN/strings.xml index cb03080ca7..91f024c58e 100644 --- a/app/src/main/res/values-ur-rIN/strings.xml +++ b/app/src/main/res/values-ur-rIN/strings.xml @@ -87,8 +87,6 @@ تمام منتخب کریں منسلکات کو جمع کرنے کا عمل جاری ہے... - ملٹی میڈیا پیغام - MMS پیغام ڈاؤن لوڈ ہو رہا ہے diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml index cb03080ca7..91f024c58e 100644 --- a/app/src/main/res/values-ur/strings.xml +++ b/app/src/main/res/values-ur/strings.xml @@ -87,8 +87,6 @@ تمام منتخب کریں منسلکات کو جمع کرنے کا عمل جاری ہے... - ملٹی میڈیا پیغام - MMS پیغام ڈاؤن لوڈ ہو رہا ہے diff --git a/app/src/main/res/values-vi-rVN/strings.xml b/app/src/main/res/values-vi-rVN/strings.xml index 3c6146ec48..fb10dc98ee 100644 --- a/app/src/main/res/values-vi-rVN/strings.xml +++ b/app/src/main/res/values-vi-rVN/strings.xml @@ -103,8 +103,6 @@ Chọn tất cả Đang thu thập đính kèm... - Tin nhắn đa phương tiện - Đang tải xuống tin nhắn MMS diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 3c6146ec48..fb10dc98ee 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -103,8 +103,6 @@ Chọn tất cả Đang thu thập đính kèm... - Tin nhắn đa phương tiện - Đang tải xuống tin nhắn MMS diff --git a/app/src/main/res/values-xh-rZA/strings.xml b/app/src/main/res/values-xh-rZA/strings.xml index 9ad53ec043..99aecc28e5 100644 --- a/app/src/main/res/values-xh-rZA/strings.xml +++ b/app/src/main/res/values-xh-rZA/strings.xml @@ -82,7 +82,6 @@ Londa byonna. ebigatibwako bikunganyizibwa - obubaka obwa vidiyo oba amaloboozi diff --git a/app/src/main/res/values-xh/strings.xml b/app/src/main/res/values-xh/strings.xml index 9ad53ec043..99aecc28e5 100644 --- a/app/src/main/res/values-xh/strings.xml +++ b/app/src/main/res/values-xh/strings.xml @@ -82,7 +82,6 @@ Londa byonna. ebigatibwako bikunganyizibwa - obubaka obwa vidiyo oba amaloboozi diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 6452efb83a..cd914646df 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -141,9 +141,6 @@ 选择全部 正在收集附件… - 多媒体信息 - 正在下载彩信 - 下载彩信时错误,点击重试 发送给%s diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 525d534185..d300cc841c 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -145,9 +145,6 @@ 全選 正在收集附件... - 多媒體訊息 - 正在下載MMS訊息 - 下載MMS訊息時發生錯誤,點擊重試 傳送給 %s diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 86963c540a..159efbf105 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -141,9 +141,6 @@ 选择全部 正在收集附件… - 多媒体信息 - 正在下载彩信 - 下载彩信时错误,点击重试 发送给%s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 9852cb5fa9..debca16db8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -316,9 +316,6 @@ Select all Collecting attachments... - Multimedia message - Downloading MMS message - Error downloading MMS message, tap to retry Send to %s diff --git a/gradle.properties b/gradle.properties index f41dc761bc..3558a57e32 100644 --- a/gradle.properties +++ b/gradle.properties @@ -35,6 +35,7 @@ materialVersion=1.8.0 mockitoKotlinVersion=4.1.0 okhttpVersion=4.12.0 pagingVersion=3.0.0 +phraseVersion=1.2.0 preferenceVersion=1.2.0 protobufVersion=2.5.0 testCoreVersion=1.5.0 diff --git a/libsession-util/libsession-util b/libsession-util/libsession-util index 20c06674d8..626b6628a2 160000 --- a/libsession-util/libsession-util +++ b/libsession-util/libsession-util @@ -1 +1 @@ -Subproject commit 20c06674d85369c2d12261582dd36a9f21504233 +Subproject commit 626b6628a2af8fff798042416b3b469b8bfc6ecf diff --git a/libsession/src/main/java/org/session/libsession/messaging/jobs/RetrieveProfileAvatarJob.kt b/libsession/src/main/java/org/session/libsession/messaging/jobs/RetrieveProfileAvatarJob.kt index 9ca2534f66..54efa1c80b 100644 --- a/libsession/src/main/java/org/session/libsession/messaging/jobs/RetrieveProfileAvatarJob.kt +++ b/libsession/src/main/java/org/session/libsession/messaging/jobs/RetrieveProfileAvatarJob.kt @@ -38,7 +38,7 @@ class RetrieveProfileAvatarJob(private val profileAvatar: String?, val recipient } override suspend fun execute(dispatcherName: String) { - val delegate = delegate ?: return + val delegate = delegate ?: return Log.w(TAG, "RetrieveProfileAvatarJob has no delegate method to work with!") if (profileAvatar in errorUrls) return delegate.handleJobFailed(this, dispatcherName, Exception("Profile URL 404'd this app instance")) val context = MessagingModuleConfiguration.shared.context val storage = MessagingModuleConfiguration.shared.storage diff --git a/libsession/src/main/java/org/session/libsession/utilities/StringSubKeys.kt b/libsession/src/main/java/org/session/libsession/utilities/StringSubKeys.kt new file mode 100644 index 0000000000..88dd9569eb --- /dev/null +++ b/libsession/src/main/java/org/session/libsession/utilities/StringSubKeys.kt @@ -0,0 +1,29 @@ +package org.session.libsession.utilities + +// String substitution keys for use with the Phrase library. +// Note: The substitution will be to {app_name} etc. in the strings - but do NOT include the curly braces in these keys! +object StringSubstitutionConstants { + const val APP_NAME_KEY = "app_name" + const val COMMUNITY_NAME_KEY = "community_name" + const val CONVERSATION_COUNT_KEY = "conversation_count" + const val CONVERSATION_NAME_KEY = "conversation_name" + const val COUNT_KEY = "count" + const val DATE_TIME_KEY = "date_time" + const val DISAPPEARING_MESSAGES_TYPE_KEY = "disappearing_messages_type" + const val DOWNLOAD_URL_KEY = "download_url" // Used to invite people to download Session + const val EMOJI_KEY = "emoji" + const val FILE_TYPE_KEY = "file_type" + const val GROUP_NAME_KEY = "group_name" + const val MEMBERS_KEY = "members" + const val MESSAGE_COUNT_KEY = "message_count" + const val NAME_KEY = "name" + const val OTHER_NAME_KEY = "other_name" + const val QUERY_KEY = "query" + const val SECONDS_KEY = "seconds" + const val TOTAL_COUNT_KEY = "total_count" + const val TIME_KEY = "time" + const val TIME_LARGE_KEY = "time_large" + const val TIME_SMALL_KEY = "time_small" + const val URL_KEY = "url" + const val VERSION_KEY = "version" +} \ No newline at end of file diff --git a/libsession/src/main/res/values/strings.xml b/libsession/src/main/res/values/strings.xml index 53cc1bacca..499b6f9956 100644 --- a/libsession/src/main/res/values/strings.xml +++ b/libsession/src/main/res/values/strings.xml @@ -83,4 +83,7 @@ Failed to remove display picture. Failed to update profile. + + + {emoji} Attachment From 66130a051711736d0044cb56a32f5dfdfde19c4f Mon Sep 17 00:00:00 2001 From: bemusementpark Date: Tue, 16 Jul 2024 14:43:55 +0930 Subject: [PATCH 2/3] Update libsession --- libsession-util/libsession-util | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libsession-util/libsession-util b/libsession-util/libsession-util index 626b6628a2..20c06674d8 160000 --- a/libsession-util/libsession-util +++ b/libsession-util/libsession-util @@ -1 +1 @@ -Subproject commit 626b6628a2af8fff798042416b3b469b8bfc6ecf +Subproject commit 20c06674d85369c2d12261582dd36a9f21504233 From 8a7f321ee00ccddd65f128a3296737d9c702eeb1 Mon Sep 17 00:00:00 2001 From: AL-Session <160798022+AL-Session@users.noreply.github.com> Date: Tue, 16 Jul 2024 15:41:46 +1000 Subject: [PATCH 3/3] SES2397 - Fix display name change fail feedback (#1544) * Added check to not update display name if offline or should config sync fail * Addressed PR feedback * WIP * Addressed PR feedback * Adjusted phrasing of log statement --------- Co-authored-by: alansley --- .../components/ProfilePictureView.kt | 5 +- .../securesms/preferences/SettingsActivity.kt | 147 ++++++++++-------- 2 files changed, 88 insertions(+), 64 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/ProfilePictureView.kt b/app/src/main/java/org/thoughtcrime/securesms/components/ProfilePictureView.kt index 52e2d52ab1..cddcc62485 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/ProfilePictureView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/ProfilePictureView.kt @@ -17,6 +17,7 @@ import org.session.libsession.messaging.contacts.Contact import org.session.libsession.utilities.Address import org.session.libsession.utilities.GroupUtil import org.session.libsession.utilities.recipients.Recipient +import org.session.libsignal.utilities.Log import org.thoughtcrime.securesms.dependencies.DatabaseComponent import org.thoughtcrime.securesms.mms.GlideApp import org.thoughtcrime.securesms.mms.GlideRequests @@ -24,6 +25,8 @@ import org.thoughtcrime.securesms.mms.GlideRequests class ProfilePictureView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : RelativeLayout(context, attrs) { + private val TAG = "ProfilePictureView" + private val binding = ViewProfilePictureBinding.inflate(LayoutInflater.from(context), this) private val glide: GlideRequests = GlideApp.with(this) var publicKey: String? = null @@ -85,7 +88,7 @@ class ProfilePictureView @JvmOverloads constructor( } fun update() { - val publicKey = publicKey ?: return + val publicKey = publicKey ?: return Log.w(TAG, "Could not find public key to update profile picture") val additionalPublicKey = additionalPublicKey if (additionalPublicKey != null) { setProfilePictureIfNeeded(binding.doubleModeImageView1, publicKey, displayName) diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt index e423b44170..67b716ce70 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsActivity.kt @@ -56,6 +56,7 @@ import org.thoughtcrime.securesms.showSessionDialog import org.thoughtcrime.securesms.util.BitmapDecodingException import org.thoughtcrime.securesms.util.BitmapUtil import org.thoughtcrime.securesms.util.ConfigurationMessageUtilities +import org.thoughtcrime.securesms.util.NetworkUtils import org.thoughtcrime.securesms.util.disableClipping import org.thoughtcrime.securesms.util.push import org.thoughtcrime.securesms.util.show @@ -179,7 +180,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { try { val profilePictureToBeUploaded = BitmapUtil.createScaledBytes(this@SettingsActivity, AvatarSelection.getResultUri(data), ProfileMediaConstraints()).bitmap Handler(Looper.getMainLooper()).post { - updateProfile(true, profilePictureToBeUploaded) + updateProfilePicture(profilePictureToBeUploaded) } } catch (e: BitmapDecodingException) { e.printStackTrace() @@ -228,56 +229,59 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { } } - private fun updateProfile( - isUpdatingProfilePicture: Boolean, - profilePicture: ByteArray? = null, - displayName: String? = null - ) { + private fun updateDisplayName(displayName: String): Boolean { binding.loader.isVisible = true - if (displayName != null) { - TextSecurePreferences.setProfileName(this, displayName) - configFactory.user?.setName(displayName) - } + // We'll assume we fail & flip the flag on success + var updateWasSuccessful = false - // Bail if we're not updating the profile picture in any way - if (!isUpdatingProfilePicture) return - - val encodedProfileKey = ProfileKeyUtil.generateEncodedProfileKey(this) - - val uploadProfilePicturePromise: Promise<*, Exception> - var removingProfilePic = false - - // Adding a new profile picture? - if (profilePicture != null) { - uploadProfilePicturePromise = ProfilePictureUtilities.upload(profilePicture, encodedProfileKey, this) + val haveNetworkConnection = NetworkUtils.haveValidNetworkConnection(this@SettingsActivity); + if (!haveNetworkConnection) { + Log.w(TAG, "Cannot update display name - no network connection.") } else { - // If not then we must be removing the existing one. - // Note: To get a promise that will resolve / sync correctly we overwrite the existing profile picture with - // a 0 byte image. - removingProfilePic = true - val emptyByteArray = ByteArray(0) - uploadProfilePicturePromise = ProfilePictureUtilities.upload(emptyByteArray, encodedProfileKey, this) + // if we have a network connection then attempt to update the display name + TextSecurePreferences.setProfileName(this, displayName) + val user = configFactory.user + if (user == null) { + Log.w(TAG, "Cannot update display name - missing user details from configFactory.") + } else { + user.setName(displayName) + binding.btnGroupNameDisplay.text = displayName + updateWasSuccessful = true + } } - // If the upload picture promise succeeded then we hit this successUi block - uploadProfilePicturePromise.successUi { + // Inform the user if we failed to update the display name + if (!updateWasSuccessful) { + Toast.makeText(this@SettingsActivity, R.string.profileErrorUpdate, Toast.LENGTH_LONG).show() + } - // If we successfully removed the profile picture on the network then we can clear the - // local data - otherwise it's weird to fail the online section but it _looks_ like it - // worked because we cleared the local image (also it denies them the chance to retry - // removal if we do it locally, and may result in them having a visible profile picture - // everywhere EXCEPT on their own device!). - if (removingProfilePic) { + binding.loader.isVisible = false + return updateWasSuccessful + } + + // Helper method used by updateProfilePicture and removeProfilePicture to sync it online + private fun syncProfilePicture(profilePicture: ByteArray, onFail: () -> Unit) { + binding.loader.isVisible = true + + // Grab the profile key and kick of the promise to update the profile picture + val encodedProfileKey = ProfileKeyUtil.generateEncodedProfileKey(this) + val updateProfilePicturePromise = ProfilePictureUtilities.upload(profilePicture, encodedProfileKey, this) + + // If the online portion of the update succeeded then update the local state + updateProfilePicturePromise.successUi { + + // When removing the profile picture the supplied ByteArray is empty so we'll clear the local data + if (profilePicture.isEmpty()) { MessagingModuleConfiguration.shared.storage.clearUserPic() } val userConfig = configFactory.user AvatarHelper.setAvatar(this, Address.fromSerialized(TextSecurePreferences.getLocalNumber(this)!!), profilePicture) - TextSecurePreferences.setProfileAvatarId(this, profilePicture?.let { SecureRandom().nextInt() } ?: 0 ) + TextSecurePreferences.setProfileAvatarId(this, profilePicture.let { SecureRandom().nextInt() } ) ProfileKeyUtil.setEncodedProfileKey(this, encodedProfileKey) - // new config + // Attempt to grab the details we require to update the profile picture val url = TextSecurePreferences.getProfilePictureURL(this) val profileKey = ProfileKeyUtil.getProfileKey(this) @@ -291,30 +295,52 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { } ConfigurationMessageUtilities.forceSyncConfigurationNowIfNeeded(this@SettingsActivity) + + // Update our visuals + binding.profilePictureView.recycle() + binding.profilePictureView.update() } - // Or if the promise failed to upload the new profile picture then we hit this failUi block - uploadProfilePicturePromise.failUi { - if (removingProfilePic) { - Log.e(TAG, "Failed to remove profile picture") - Toast.makeText(this@SettingsActivity, R.string.profileDisplayPictureRemoveError, Toast.LENGTH_LONG).show() - } else { - Log.e(TAG, "Failed to upload profile picture") - Toast.makeText(this@SettingsActivity, R.string.profileErrorUpdate, Toast.LENGTH_LONG).show() - } + // If the sync failed then inform the user + updateProfilePicturePromise.failUi { onFail() } + + // Finally, remove the loader animation after we've waited for the attempt to succeed or fail + updateProfilePicturePromise.alwaysUi { binding.loader.isVisible = false } + } + + private fun updateProfilePicture(profilePicture: ByteArray) { + + val haveNetworkConnection = NetworkUtils.haveValidNetworkConnection(this@SettingsActivity); + if (!haveNetworkConnection) { + Log.w(TAG, "Cannot update profile picture - no network connection.") + Toast.makeText(this@SettingsActivity, R.string.profileErrorUpdate, Toast.LENGTH_LONG).show() + return } - // Finally, regardless of whether the promise succeeded or failed, we always hit this `alwaysUi` block - uploadProfilePicturePromise.alwaysUi { - if (displayName != null) { - binding.btnGroupNameDisplay.text = displayName - } - if (isUpdatingProfilePicture) { - binding.profilePictureView.recycle() // Clear the cached image before updating - binding.profilePictureView.update() - } - binding.loader.isVisible = false + val onFail: () -> Unit = { + Log.e(TAG, "Sync failed when uploading profile picture.") + Toast.makeText(this@SettingsActivity, R.string.profileErrorUpdate, Toast.LENGTH_LONG).show() } + + syncProfilePicture(profilePicture, onFail) + } + + private fun removeProfilePicture() { + + val haveNetworkConnection = NetworkUtils.haveValidNetworkConnection(this@SettingsActivity); + if (!haveNetworkConnection) { + Log.w(TAG, "Cannot remove profile picture - no network connection.") + Toast.makeText(this@SettingsActivity, R.string.profileDisplayPictureRemoveError, Toast.LENGTH_LONG).show() + return + } + + val onFail: () -> Unit = { + Log.e(TAG, "Sync failed when removing profile picture.") + Toast.makeText(this@SettingsActivity, R.string.profileDisplayPictureRemoveError, Toast.LENGTH_LONG).show() + } + + val emptyProfilePicture = ByteArray(0) + syncProfilePicture(emptyProfilePicture, onFail) } // endregion @@ -333,8 +359,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { Toast.makeText(this, R.string.activity_settings_display_name_too_long_error, Toast.LENGTH_SHORT).show() return false } - updateProfile(false, displayName = displayName) - return true + return updateDisplayName(displayName) } private fun showQRCode() { @@ -348,7 +373,7 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { view(R.layout.dialog_change_avatar) button(R.string.activity_settings_upload) { startAvatarSelection() } if (TextSecurePreferences.getProfileAvatarId(context) != 0) { - button(R.string.activity_settings_remove) { removeAvatar() } + button(R.string.activity_settings_remove) { removeProfilePicture() } } cancelButton() }.apply { @@ -366,10 +391,6 @@ class SettingsActivity : PassphraseRequiredActionBarActivity() { } } - private fun removeAvatar() { - updateProfile(true) - } - private fun startAvatarSelection() { // Ask for an optional camera permission. Permissions.with(this)