diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index a97bd14cdc..234be4b858 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -26,8 +26,8 @@ configurations.configureEach {
exclude(module = "commons-logging")
}
-val canonicalVersionCode = 444
-val canonicalVersionName = "1.32.1"
+val canonicalVersionCode = 445
+val canonicalVersionName = "1.32.2"
val postFixSize = 10
val abiPostFix = mapOf(
diff --git a/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt b/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt
index 03d546c69a..119f1b61e4 100644
--- a/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt
+++ b/app/src/main/java/org/session/libsession/messaging/jobs/InviteContactsJob.kt
@@ -51,6 +51,10 @@ class InviteContactsJob @AssistedInject constructor(
override var failureCount: Int = 0
override val maxFailureCount: Int = 1
+ private fun handleSuccess(dispatcherName: String) {
+ delegate?.handleJobSucceeded(this, dispatcherName)
+ }
+
override suspend fun execute(dispatcherName: String) {
val group = requireNotNull(configFactory.getGroup(AccountId(groupSessionId))) {
"Group must exist to invite"
@@ -118,8 +122,10 @@ class InviteContactsJob @AssistedInject constructor(
result.exceptionOrNull()?.let { err -> id to err }
}
- // if there are failed invites, display a message
// assume job "success" even if we fail, the state of invites is tracked outside of this job
+ handleSuccess(dispatcherName)
+
+ // if there are failed invites, display a message
if (failures.isNotEmpty()) {
// show the failure toast
val (_, firstError) = failures.first()
diff --git a/app/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt b/app/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt
index 96dd03f4b5..cce09c539e 100644
--- a/app/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt
+++ b/app/src/main/java/org/session/libsession/utilities/NonTranslatableStringConstants.kt
@@ -17,5 +17,6 @@ object NonTranslatableStringConstants {
const val PRO = "Pro"
const val ENTITY_RANGEPROOF = "Rangeproof PTY LTD"
const val ENTITY_STF = "The Session Technology Foundation"
+ const val DONATE_APPEAL_NAME = "Cofounder of Session Chris McCabe"
}
diff --git a/app/src/main/java/org/session/libsession/utilities/StringSubKeys.kt b/app/src/main/java/org/session/libsession/utilities/StringSubKeys.kt
index 4008f3f1bb..e34d3124f8 100644
--- a/app/src/main/java/org/session/libsession/utilities/StringSubKeys.kt
+++ b/app/src/main/java/org/session/libsession/utilities/StringSubKeys.kt
@@ -65,4 +65,5 @@ object StringSubstitutionConstants {
const val ACTION_TYPE_KEY: StringSubKey = "action_type"
const val ACTIVATION_TYPE_KEY: StringSubKey = "activation_type"
const val ENTITY_KEY: StringSubKey = "entity"
+ const val DONATE_APPEAL_KEY: StringSubKey = "donate_appeal_name"
}
\ No newline at end of file
diff --git a/app/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt b/app/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
index 81a63f787d..687a6609b3 100644
--- a/app/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
+++ b/app/src/main/java/org/session/libsession/utilities/TextSecurePreferences.kt
@@ -406,11 +406,11 @@ interface TextSecurePreferences {
const val HAS_CHECKED_DOZE_WHITELIST = "has_checked_doze_whitelist"
// Donation
- const val HAS_DONATED = "has_donated"
- const val HAS_COPIED_DONATION_URL = "has_copied_donation_url"
- const val SEEN_DONATION_CTA_AMOUNT = "seen_donation_cta_amount"
- const val LAST_SEEN_DONATION_CTA = "last_seen_donation_cta"
- const val SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW = "show_donation_cta_from_positive_review"
+ const val HAS_DONATED = "has_donated_v2"
+ const val HAS_COPIED_DONATION_URL = "has_copied_donation_url_v2"
+ const val SEEN_DONATION_CTA_AMOUNT = "seen_donation_cta_amount_v2"
+ const val LAST_SEEN_DONATION_CTA = "last_seen_donation_cta_v2"
+ const val SHOW_DONATION_CTA_FROM_POSITIVE_REVIEW = "show_donation_cta_from_positive_review_v2"
const val DEBUG_HAS_DONATED = "debug_has_donated"
const val DEBUG_HAS_COPIED_DONATION_URL = "debug_has_copied_donation_url"
diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationReactionOverlay.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationReactionOverlay.kt
index 946c40ff73..e423f4e438 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationReactionOverlay.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/ConversationReactionOverlay.kt
@@ -350,6 +350,11 @@ class ConversationReactionOverlay : FrameLayout {
updateBoundsOnLayoutChanged()
revealAnimatorSet.start()
+ val maxMenuY = maxOf(
+ systemInsets.top.toFloat(),
+ (height - systemInsets.bottom - actualMenuHeight).toFloat()
+ )
+
if (isWideLayout) {
val menuXInOverlay = if (isMessageOnLeft) {
// Menu to the RIGHT of the scrubber
@@ -359,8 +364,7 @@ class ConversationReactionOverlay : FrameLayout {
scrubberX - contextMenu.getMaxWidth() - menuPadding
}
- val maxMenuYInOverlay = (height - systemInsets.bottom - actualMenuHeight).toFloat()
- val menuYInOverlay = minOf(backgroundView.y, maxMenuYInOverlay)
+ val menuYInOverlay = minOf(backgroundView.y, maxMenuY)
// Convert overlay-local to anchor relative as expected by ConversationContextMenu.show()
val (xOffset, yOffset) = toAnchorOffsets(menuXInOverlay, menuYInOverlay)
@@ -377,7 +381,7 @@ class ConversationReactionOverlay : FrameLayout {
val menuYInOverlay = (menuTop + menuPadding)
.coerceIn(
systemInsets.top.toFloat(),
- (height - systemInsets.bottom - actualMenuHeight).toFloat()
+ maxMenuY
)
val (xOffset, yOffset) = toAnchorOffsets(menuXInOverlay, menuYInOverlay)
diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/ConversationOptionsBottomSheet.kt b/app/src/main/java/org/thoughtcrime/securesms/home/ConversationOptionsBottomSheet.kt
index 705cce96de..e3d393782d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/home/ConversationOptionsBottomSheet.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/home/ConversationOptionsBottomSheet.kt
@@ -25,6 +25,7 @@ import org.session.libsession.utilities.getGroup
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsession.utilities.withUserConfigs
import org.session.libsignal.utilities.AccountId
+import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.auth.LoginStateRepository
import org.thoughtcrime.securesms.database.GroupDatabase
import org.thoughtcrime.securesms.database.ThreadDatabase
@@ -93,9 +94,15 @@ class ConversationOptionsBottomSheet() : BottomSheetDialogFragment(), View.OnCli
requireNotNull(args.getLong(ARG_THREAD_ID))
val addressString = requireNotNull(args.getString(ARG_ADDRESS))
val address = Address.fromSerialized(addressString)
- thread = requireNotNull(
- threadDatabase.getThreads(listOf(address)).firstOrNull()
- ) { "Thread not found for address: $addressString" }
+ val threadFromDb = threadDatabase.getThreads(listOf(address)).firstOrNull()
+
+ if(threadFromDb == null){
+ Log.w("", "Home conversation bottom sheet: Thread not found for address: $addressString" )
+ dismiss()
+ return
+ }
+
+ thread = threadFromDb
group = groupDatabase.getGroup(thread.recipient.address.toString())
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/HomeDialogs.kt b/app/src/main/java/org/thoughtcrime/securesms/home/HomeDialogs.kt
index 9831a9f6d2..bb610c0a49 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/home/HomeDialogs.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/home/HomeDialogs.kt
@@ -1,13 +1,39 @@
package org.thoughtcrime.securesms.home
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.BoxWithConstraints
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.IntrinsicSize
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.heightIn
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.foundation.verticalScroll
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.retain.retain
import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
import com.squareup.phrase.Phrase
import kotlinx.coroutines.delay
import network.loki.messenger.R
@@ -26,21 +52,32 @@ import org.thoughtcrime.securesms.home.HomeViewModel.Commands.HideUrlDialog
import org.thoughtcrime.securesms.home.HomeViewModel.Commands.HideUserProfileModal
import org.thoughtcrime.securesms.home.HomeViewModel.Commands.OnLinkCopied
import org.thoughtcrime.securesms.home.HomeViewModel.Commands.OnLinkOpened
-import org.thoughtcrime.securesms.home.HomeViewModel.Commands.ShowDonationConfirmation
import org.thoughtcrime.securesms.home.startconversation.StartConversationSheet
import org.thoughtcrime.securesms.preferences.prosettings.ProSettingsDestination
import org.thoughtcrime.securesms.ui.AlertDialog
import org.thoughtcrime.securesms.ui.AnimatedSessionProCTA
+import org.thoughtcrime.securesms.ui.BasicSessionAlertDialog
+import org.thoughtcrime.securesms.ui.BottomFadingEdgeBox
import org.thoughtcrime.securesms.ui.CTAFeature
import org.thoughtcrime.securesms.ui.DialogButtonData
+import org.thoughtcrime.securesms.ui.CTAImage
+import org.thoughtcrime.securesms.ui.DialogBg
import org.thoughtcrime.securesms.ui.GetString
import org.thoughtcrime.securesms.ui.OpenURLAlertDialog
import org.thoughtcrime.securesms.ui.PinProCTA
-import org.thoughtcrime.securesms.ui.SimpleSessionProCTA
import org.thoughtcrime.securesms.ui.UserProfileModal
+import org.thoughtcrime.securesms.ui.components.AccentFillButtonRect
import org.thoughtcrime.securesms.ui.components.annotatedStringResource
+import org.thoughtcrime.securesms.ui.openUrl
+import org.thoughtcrime.securesms.ui.qaTag
+import org.thoughtcrime.securesms.ui.shimmerOverlay
import org.thoughtcrime.securesms.ui.theme.LocalColors
+import org.thoughtcrime.securesms.ui.theme.LocalDimensions
+import org.thoughtcrime.securesms.ui.theme.LocalType
+import org.thoughtcrime.securesms.ui.theme.PreviewTheme
import org.thoughtcrime.securesms.ui.theme.SessionMaterialTheme
+import org.thoughtcrime.securesms.ui.theme.blackAlpha40
+import org.thoughtcrime.securesms.util.DonationManager.Companion.URL_DONATE
@Composable
fun HomeDialogs(
@@ -210,27 +247,8 @@ fun HomeDialogs(
}
if (showDonation && dialogsState.donationCTA) {
- val context = LocalContext.current
- SimpleSessionProCTA(
- heroImage = R.drawable.cta_hero_flower,
- title = Phrase.from(context,R.string.donateSessionHelp)
- .put(StringSubstitutionConstants.APP_NAME_KEY, NonTranslatableStringConstants.APP_NAME)
- .format()
- .toString(),
- showProBadge = false,
- text = Phrase.from(context,R.string.donateSessionDescription)
- .put(StringSubstitutionConstants.APP_NAME_KEY, NonTranslatableStringConstants.APP_NAME)
- .format()
- .toString(),
- positiveButtonText = stringResource(R.string.donate),
- negativeButtonText = stringResource(R.string.maybeLater),
- onUpgrade = {
- sendCommand(HideDonationCTADialog)
- sendCommand(ShowDonationConfirmation)
- },
- onCancel = {
- sendCommand(HideDonationCTADialog)
- }
+ DonationDialog(
+ sendCommand = sendCommand
)
}
@@ -245,3 +263,131 @@ fun HomeDialogs(
}
}
+@Composable
+fun DonationDialog(
+ sendCommand: (HomeViewModel.Commands) -> Unit
+) {
+ val context = LocalContext.current
+ val onCancel = {
+ sendCommand(HideDonationCTADialog)
+ }
+
+ val title = Phrase.from(context,R.string.donateSessionAppealTitle)
+ .put(StringSubstitutionConstants.DONATE_APPEAL_KEY, NonTranslatableStringConstants.DONATE_APPEAL_NAME)
+ .format()
+
+ val text = Phrase.from(context,R.string.donateSessionAppealDescription)
+ .put(StringSubstitutionConstants.APP_NAME_KEY, NonTranslatableStringConstants.APP_NAME)
+ .format()
+
+ val titleColor: Color = LocalColors.current.text
+
+ BasicSessionAlertDialog(
+ onDismissRequest = onCancel,
+ content = {
+ DialogBg {
+ BoxWithConstraints(Modifier.fillMaxWidth()) {
+ val heroMaxHeight = maxHeight * 0.4f
+ Column(
+ modifier = Modifier.fillMaxWidth()
+ .verticalScroll(rememberScrollState())
+ ) {
+ // hero image
+ BottomFadingEdgeBox(
+ modifier = Modifier.heightIn(max = heroMaxHeight),
+ fadingEdgeHeight = 70.dp,
+ fadingColor = LocalColors.current.backgroundSecondary,
+ content = { _ ->
+ CTAImage(heroImage = R.drawable.cta_hero_donation)
+ },
+ )
+
+ // content
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(LocalDimensions.current.smallSpacing)
+ ) {
+ // title
+ Text(
+ modifier = Modifier
+ .align(Alignment.CenterHorizontally),
+ text = annotatedStringResource(title),
+ textAlign = TextAlign.Center,
+ style = LocalType.current.h5.copy(color = titleColor),
+ )
+
+ Spacer(Modifier.height(LocalDimensions.current.contentSpacing))
+
+ // main message
+ Text(
+ modifier = Modifier
+ .qaTag(R.string.qa_cta_body)
+ .align(Alignment.CenterHorizontally),
+ text = annotatedStringResource(text),
+ textAlign = TextAlign.Center,
+ style = LocalType.current.base.copy(
+ color = LocalColors.current.textSecondary
+ )
+ )
+
+ Spacer(Modifier.height(LocalDimensions.current.contentSpacing))
+
+ // buttons
+ Row(
+ Modifier.height(IntrinsicSize.Min)
+ .fillMaxWidth(),
+ horizontalArrangement = Arrangement.spacedBy(
+ LocalDimensions.current.xsSpacing,
+ Alignment.CenterHorizontally
+ ),
+ ) {
+ AccentFillButtonRect(
+ modifier = Modifier
+ .qaTag(R.string.qa_cta_button_positive)
+ .shimmerOverlay(),
+ text = stringResource(R.string.donateSessionAppealReadMore),
+ onClick = {
+ context.openUrl(URL_DONATE)
+ sendCommand(HomeViewModel.Commands.OnDonationLinkClicked)
+ }
+ )
+ }
+ }
+ }
+
+ IconButton(
+ onClick = onCancel,
+ modifier = Modifier
+ .align(Alignment.TopEnd)
+ .padding(LocalDimensions.current.xxsSpacing)
+ .background(
+ color = blackAlpha40,
+ shape = CircleShape,
+ ).size(34.dp),
+ ) {
+ Icon(
+ painter = painterResource(id = R.drawable.ic_x),
+ tint = Color.White,
+ contentDescription = stringResource(R.string.close)
+ )
+ }
+ }
+ }
+ }
+ )
+}
+
+
+@Preview
+@Composable
+fun PreviewDonationDialog() {
+ PreviewTheme {
+ Column(
+ modifier = Modifier.fillMaxSize()
+ ) {
+ DonationDialog {}
+ }
+ }
+}
+
diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/HomeViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/home/HomeViewModel.kt
index b4a1281707..20c7f91d21 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/home/HomeViewModel.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/home/HomeViewModel.kt
@@ -406,8 +406,9 @@ class HomeViewModel @Inject constructor(
_dialogsState.update { it.copy(donationCTA = false) }
}
- is Commands.ShowDonationConfirmation -> {
- showUrlDialog(URL_DONATE)
+ is Commands.OnDonationLinkClicked -> {
+ donationManager.onDonationSeen()
+ _dialogsState.update { it.copy(donationCTA = false) }
}
is Commands.HideUrlDialog -> {
@@ -533,7 +534,7 @@ class HomeViewModel @Inject constructor(
data object HidePinCTADialog : Commands
data object HideExpiringCTADialog : Commands
data object HideExpiredCTADialog : Commands
- data object ShowDonationConfirmation : Commands
+ data object OnDonationLinkClicked : Commands
data object HideDonationCTADialog : Commands
data object HideUserProfileModal : Commands
data object HideUrlDialog : Commands
diff --git a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java
index 7cbff2d8f3..a7aedfb55d 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/scribbles/ImageEditorFragment.java
@@ -152,7 +152,11 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
- new Data(outState).writeModel(imageEditorView.getModel());
+ if (imageEditorView != null) {
+ new Data(outState).writeModel(imageEditorView.getModel());
+ } else if (restoredModel != null) {
+ new Data(outState).writeModel(restoredModel);
+ }
}
@Override
diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/DonationManager.kt b/app/src/main/java/org/thoughtcrime/securesms/util/DonationManager.kt
index e9ac3fbf4b..96c24f4075 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/util/DonationManager.kt
+++ b/app/src/main/java/org/thoughtcrime/securesms/util/DonationManager.kt
@@ -15,7 +15,7 @@ class DonationManager @Inject constructor(
val prefs: TextSecurePreferences
){
companion object {
- const val URL_DONATE = "https://getsession.org/donate#app"
+ const val URL_DONATE = "https://getsession.org/donate"
}
// increment in days between showing the donation CTA, matching the list index to the number of views of the CTA
diff --git a/app/src/main/res/drawable-nodpi/cta_hero_donation.webp b/app/src/main/res/drawable-nodpi/cta_hero_donation.webp
new file mode 100644
index 0000000000..b896ea1ec9
Binary files /dev/null and b/app/src/main/res/drawable-nodpi/cta_hero_donation.webp differ
diff --git a/app/src/main/res/drawable-nodpi/cta_hero_flower.webp b/app/src/main/res/drawable-nodpi/cta_hero_flower.webp
deleted file mode 100644
index b7fbe5ae9e..0000000000
Binary files a/app/src/main/res/drawable-nodpi/cta_hero_flower.webp and /dev/null differ
diff --git a/app/src/main/res/values-b+cs+CZ/strings.xml b/app/src/main/res/values-b+cs+CZ/strings.xml
index b9ee11f493..083a0330c9 100644
--- a/app/src/main/res/values-b+cs+CZ/strings.xml
+++ b/app/src/main/res/values-b+cs+CZ/strings.xml
@@ -487,6 +487,9 @@
Vaše zobrazované jméno je viditelné pro uživatele, skupiny a komunity, se kterými jste ve spojení.
Dokument
Darovat
+ Před osmi lety byla aplikace {app_name} založena s posláním obnovit vaše soukromí. Dnes aplikace {app_name} čelí nedostatku financí, který ohrožuje její samotnou existenci.\n\nPokud jste někdy v aplikaci {app_name} nebo v jejím poslání našli hodnotu, věnujte mi prosím chvilku svého času a přečtěte si tuto výzvu.
+ Přečíst výzvu
+ Přečtěte si prosím:\nOsobní výzva od {donate_appeal_name}
Mocné síly se snaží oslabit soukromí, ale tento boj nemůžeme vést sami.\n\nPříspěvky pomáhají udržet aplikaci {app_name} bezpečnou, nezávislou a online.
{app_name} potřebuje vaši pomoc
Hotovo
diff --git a/app/src/main/res/values-b+de+DE/strings.xml b/app/src/main/res/values-b+de+DE/strings.xml
index 231d9e22d2..53a438f7fc 100644
--- a/app/src/main/res/values-b+de+DE/strings.xml
+++ b/app/src/main/res/values-b+de+DE/strings.xml
@@ -460,6 +460,9 @@
Ihr Anzeigename ist für Benutzer, Gruppen und Gemeinschaften sichtbar, mit denen Sie interagieren.
Dokument
Spenden
+ Vor acht Jahren wurde {app_name} mit der Mission gegründet, Ihre Privatsphäre wiederherzustellen. Heute hat {app_name} mit einem Finanzierungsengpass zu kämpfen, der das Überleben der App gefährdet.\n\nWenn {app_name} oder diese Mission für Sie jemals von Wert waren, bitte ich Sie um einen Moment Ihrer Zeit, diesen Spendenaufruf zu lesen.
+ Spendenaufruf lesen
+ Bitte lesen:\nEin persönlicher Spendenaufruf von {donate_appeal_name}
Mächtige Kräfte versuchen, die Privatsphäre zu schwächen – aber wir können diesen Kampf nicht alleine führen.\n\nMit einer Spende hilfst du dabei, {app_name} sicher, unabhängig und online zu halten.
{app_name} braucht deine Hilfe
Fertig
@@ -1179,6 +1182,8 @@
{app_name} bewerten?
App bewerten
Es freut uns, dass du {app_name} genießt! Wenn du einen Moment Zeit hast, hilft eine Bewertung im {storevariant} anderen dabei, private und sichere Nachrichten zu entdecken.
+ {app_name} schaltet keine Werbung, verkauft keine Nutzerdaten und ist nur seinen Nutzern gegenüber verantwortlich. Ihre Bewertung bei {storevariant} hilft anderen dabei, Nachrichtendienste zu finden, denen ihre Privatsphäre wirklich wichtig ist.
+ Bewerten Sie uns
Gelesen
Lesebestätigungen
Zeige Lesebestätigungen für alle Nachrichten, die du sendest und erhältst.
diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml
index 49c8231fcd..3b81474146 100644
--- a/app/src/main/res/values-b+es+419/strings.xml
+++ b/app/src/main/res/values-b+es+419/strings.xml
@@ -460,6 +460,9 @@
Tu nombre visible es visible para los usuarios, grupos y comunidades con los que interactúas.
Documento
Donar
+ Hace ocho años, se fundó {app_name} con la misión de restaurar su privacidad. Hoy, {app_name} se enfrenta a una escasez de financiación que pone en riesgo su propia supervivencia.\n\nSi alguna vez ha encontrado valor en {app_name} o en su misión, por favor dedíqueme un momento de su tiempo y lea este llamamiento.
+ Leer el llamamiento
+ Por favor, lea:\nUn llamamiento personal de {donate_appeal_name}
Fuerzas poderosas intentan debilitar la privacidad, pero no podemos continuar esta lucha solos.\n\nDonar ayuda a mantener {app_name} seguro, independiente y en línea.
{app_name} necesita tu ayuda
Hecho
diff --git a/app/src/main/res/values-b+es+ES/strings.xml b/app/src/main/res/values-b+es+ES/strings.xml
index df6e346e8e..9e29ee2026 100644
--- a/app/src/main/res/values-b+es+ES/strings.xml
+++ b/app/src/main/res/values-b+es+ES/strings.xml
@@ -460,6 +460,9 @@
Tu nombre para mostrar es visible para los usuarios, grupos y comunidades con los que interactúas.
Documento
Donar
+ Hace ocho años, se fundó {app_name} con la misión de restaurar su privacidad. Hoy, {app_name} se enfrenta a una escasez de financiación que pone en riesgo su propia supervivencia.\n\nSi alguna vez ha encontrado valor en {app_name} o en su misión, por favor dedíqueme un momento de su tiempo y lea este llamamiento.
+ Leer el llamamiento
+ Por favor, lea:\nUn llamamiento personal de {donate_appeal_name}
Fuerzas poderosas intentan debilitar la privacidad, pero no podemos continuar esta lucha solos.\n\nDonar ayuda a mantener {app_name} seguro, independiente y en línea.
{app_name} necesita tu ayuda
Hecho
diff --git a/app/src/main/res/values-b+fr+FR/strings.xml b/app/src/main/res/values-b+fr+FR/strings.xml
index ef1a39d945..32adcee953 100644
--- a/app/src/main/res/values-b+fr+FR/strings.xml
+++ b/app/src/main/res/values-b+fr+FR/strings.xml
@@ -460,6 +460,9 @@
Votre nom d\'affichage est visible par les utilisateurs, les groupes et les communautés avec lesquels vous interagissez.
Document
Faire un don
+ Il y a huit ans, {app_name} a été fondée avec pour mission de rétablir votre vie privée. Aujourd’hui, {app_name} fait face à un manque de financement qui met en péril sa survie même.\n\nSi {app_name} ou sa mission ont déjà eu de la valeur à vos yeux, accordez-moi un instant de votre temps et lisez cet appel.
+ Lire l’appel
+ À lire :\nAppel personnel de {donate_appeal_name}
Des forces importantes cherchent à affaiblir la vie privée, mais nous ne pouvons poursuivre ce combat seuls.\n\nFaire un don permet à {app_name} de rester sécurisé, indépendant et accessible.
{app_name} a besoin de votre aide
Terminé
diff --git a/app/src/main/res/values-b+hi+IN/strings.xml b/app/src/main/res/values-b+hi+IN/strings.xml
index 8fe78913ec..b8d512456e 100644
--- a/app/src/main/res/values-b+hi+IN/strings.xml
+++ b/app/src/main/res/values-b+hi+IN/strings.xml
@@ -460,6 +460,9 @@
आपका डिस्प्ले नाम उन उपयोगकर्ताओं, समूहों और समुदायों को दिखाई देता है जिनके साथ आप संपर्क करते हैं।
दस्तावेज़
दान करें
+ आठ साल पहले, {app_name} की स्थापना आपकी निजता को बहाल करने के मिशन के साथ की गई थी। आज, {app_name} को धन की कमी का सामना करना पड़ रहा है, जिससे उसके अस्तित्व पर ही खतरा मंडरा रहा है।\n\nअगर आपने कभी {app_name} या उसके मिशन में मूल्य पाया है, तो कृपया मुझे अपने समय का एक क्षण दें और इस अपील को पढ़ें।
+ अपील पढ़ें
+ कृपया पढ़ें:\n{donate_appeal_name} की ओर से एक व्यक्तिगत अपील
शक्तिशाली ताकतें गोपनीयता को कमजोर करने का प्रयास कर रही हैं, लेकिन हम यह लड़ाई अकेले नहीं जारी रख सकते।\n\nदान करने से {app_name} को सुरक्षित, स्वतंत्र और ऑनलाइन बनाए रखने में मदद मिलती है।
{app_name} को आपकी सहायता चाहिए
पूरा हुआ
@@ -1220,6 +1223,10 @@
- सदस्य हटाएँ
- सदस्यों को हटाएँ
+
+ - सदस्य को हटाएं
+ - सदस्यों को हटाएं
+
- सदस्य और उनके संदेशों को हटाएं
- सदस्यों और उनके संदेशों को हटाएं
diff --git a/app/src/main/res/values-b+hu+HU/strings.xml b/app/src/main/res/values-b+hu+HU/strings.xml
index 945130c847..ad445a2b51 100644
--- a/app/src/main/res/values-b+hu+HU/strings.xml
+++ b/app/src/main/res/values-b+hu+HU/strings.xml
@@ -460,6 +460,9 @@
Az Ön megjelenítendő neve látható a felhaszálók, a csoportok és a közösségek számára, amelyekkel interakcióba lép.
Dokumentum
Adományozás
+ Nyolc évvel ezelőtt a(z) {app_name} azzal a küldetéssel jött létre, hogy helyreállítsa az Ön adatvédelmét. Ma a(z) {app_name} finanszírozási hiánnyal küzd, ami a fennmaradását is veszélyezteti.\n\nHa valaha értékesnek találta a(z) {app_name}-ot vagy annak küldetését, kérem, szánjon rám egy pillanatot, és olvassa el ezt a felhívást.
+ A felhívás elolvasása
+ Kérjük, olvassa el:\n{donate_appeal_name} személyes felhívása
Hatalmas erők próbálják gyengíteni az adatvédelmet, de ezt a harcot nem tudjuk egyedül folytatni.\n\nA támogatásod segít megőrizni a(z) {app_name} biztonságát, függetlenségét és elérhetőségét.
A(z) {app_name} a segítségedet kéri
Kész
diff --git a/app/src/main/res/values-b+it+IT/strings.xml b/app/src/main/res/values-b+it+IT/strings.xml
index af92f875dc..b6c6ba92df 100644
--- a/app/src/main/res/values-b+it+IT/strings.xml
+++ b/app/src/main/res/values-b+it+IT/strings.xml
@@ -460,6 +460,9 @@
Il tuo Nome Pubblico è visibile agli utenti, ai gruppi e alle comunità con cui interagisci.
Documento
Dona
+ Otto anni fa, {app_name} è stata fondata con la missione di ripristinare la tua privacy. Oggi, {app_name} si trova ad affrontare una carenza di fondi che mette a rischio la sua stessa sopravvivenza.\n\nSe {app_name} o la sua missione hanno mai avuto valore per te, ti prego di dedicarmi un momento del tuo tempo e leggere questo appello.
+ Leggi l\'appello
+ Leggi attentamente:\nUn appello personale da parte di {donate_appeal_name}
Forze potenti stanno cercando di indebolire la privacy, ma non possiamo continuare questa battaglia da soli.\n\nDonare aiuta a mantenere {app_name} sicuro, indipendente e online.
{app_name} ha bisogno del tuo aiuto
Fatto
diff --git a/app/src/main/res/values-b+ja+JP/strings.xml b/app/src/main/res/values-b+ja+JP/strings.xml
index 921ec75a43..82920478f6 100644
--- a/app/src/main/res/values-b+ja+JP/strings.xml
+++ b/app/src/main/res/values-b+ja+JP/strings.xml
@@ -446,6 +446,9 @@
あなたの表示名は、やり取りするユーザー、グループ、コミュニティに表示されます。
ドキュメント
寄付
+ 8年前、{app_name}はあなたのプライバシーを取り戻すことを使命として設立されました。今日、{app_name}は資金不足に直面しており、その存続そのものが危機にさらされています。\n\n{app_name}やその使命に価値を感じたことがあるなら、少しだけお時間をいただき、この訴えをお読みください。
+ 訴えを読む
+ お読みください:\n{donate_appeal_name}からの個人的な訴え
強大な勢力がプライバシーの弱体化を試みていますが、私たちだけではこの戦いを続けられません。\n\n寄付により、{app_name}の安全性、独立性、そしてオンライン維持を支援できます。
{app_name}へのご支援をお願いします
完了
diff --git a/app/src/main/res/values-b+nl+NL/strings.xml b/app/src/main/res/values-b+nl+NL/strings.xml
index 503c6d887f..25341a31f1 100644
--- a/app/src/main/res/values-b+nl+NL/strings.xml
+++ b/app/src/main/res/values-b+nl+NL/strings.xml
@@ -460,6 +460,9 @@
Uw weergeven naam is zichtbaar voor gebruikers, groepen en gemeenschappen waarmee u communiceert.
Document
Doneer
+ Acht jaar geleden werd {app_name} opgericht met als missie uw privacy te herstellen. Vandaag kampt {app_name} met een financieringstekort, waardoor het voortbestaan ernstig in gevaar komt.\n\nAls u ooit waarde hebt gevonden in {app_name} of zijn missie, geef me dan alstublieft een moment van uw tijd en lees deze oproep.
+ Lees de oproep
+ Lees alstublieft:\nEen persoonlijke oproep van {donate_appeal_name}
Krachtige machten proberen privacy te ondermijnen, maar we kunnen deze strijd niet alleen voeren.\n\nDonaties helpen om {app_name} veilig, onafhankelijk en online te houden.
{app_name} heeft je hulp nodig
Klaar
diff --git a/app/src/main/res/values-b+pl+PL/strings.xml b/app/src/main/res/values-b+pl+PL/strings.xml
index 265c0af7cf..aafed04c27 100644
--- a/app/src/main/res/values-b+pl+PL/strings.xml
+++ b/app/src/main/res/values-b+pl+PL/strings.xml
@@ -488,6 +488,9 @@
Wyświetlana nazwa użytkownika jest widoczna dla użytkowników, grup i społeczności, z którymi użytkownik wchodzi w interakcje.
Dokument
Wspomóż
+ Osiem lat temu {app_name} powstała z misją przywrócenia Ci prywatności. Dziś {app_name} boryka się z niedoborem funduszy, który zagraża jej dalszemu istnieniu.\n\nJeśli kiedykolwiek dostrzegłeś(-aś) wartość w {app_name} lub jej misji, poświęć mi proszę chwilę i przeczytaj ten apel.
+ Przeczytaj apel
+ Prosimy przeczytać:\nOsobisty apel od {donate_appeal_name}
Potężne siły próbują osłabić prywatność, ale nie możemy prowadzić tej walki sami.\n\nTwoja darowizna pomoże utrzymać {app_name} jako bezpieczną, niezależną i działającą aplikację.
{app_name} potrzebuje Twojej pomocy
Gotowe
diff --git a/app/src/main/res/values-b+pt+BR/strings.xml b/app/src/main/res/values-b+pt+BR/strings.xml
index 59d3679704..7f508a72f0 100644
--- a/app/src/main/res/values-b+pt+BR/strings.xml
+++ b/app/src/main/res/values-b+pt+BR/strings.xml
@@ -460,6 +460,9 @@
Seu Nome de Exibição é visível para usuários, grupos e comunidades com os quais você interage.
Documento
Doar
+ Há oito anos, o {app_name} foi fundado com a missão de restaurar a sua privacidade. Hoje, o {app_name} enfrenta uma falta de recursos que coloca em risco a sua própria sobrevivência.\n\nSe você já viu valor no {app_name} ou em sua missão, por favor, me conceda um momento do seu tempo e leia este apelo.
+ Ler apelo
+ Leia, por favor:\nUm apelo pessoal de {donate_appeal_name}
Forças poderosas estão tentando enfraquecer a privacidade, mas não podemos continuar essa luta sozinhos.\n\nDoar ajuda a manter o {app_name} seguro, independente e online.
{app_name} precisa da sua ajuda
Pronto
diff --git a/app/src/main/res/values-b+pt+PT/strings.xml b/app/src/main/res/values-b+pt+PT/strings.xml
index 80ac66fefe..68491b3002 100644
--- a/app/src/main/res/values-b+pt+PT/strings.xml
+++ b/app/src/main/res/values-b+pt+PT/strings.xml
@@ -460,6 +460,9 @@
Seu Nome de Exibição é visível para usuários, grupos e comunidades com os quais você interage.
Documento
Fazer uma doação
+ Há oito anos, {app_name} foi fundado com a missão de restaurar a sua privacidade. Hoje, {app_name} enfrenta uma falta de financiamento que coloca a sua própria sobrevivência em risco.\n\nSe você já encontrou valor em {app_name} ou em sua missão, por favor, me conceda um momento do seu tempo e leia este apelo.
+ Ler apelo
+ Por favor, leia:\nUm apelo pessoal de {donate_appeal_name}
Forças poderosas estão tentando enfraquecer a privacidade, mas não podemos continuar esta luta sozinhos.\n\nDoar ajuda a manter o {app_name} seguro, independente e online.
{app_name} precisa da sua ajuda
Concluído
diff --git a/app/src/main/res/values-b+ro+RO/strings.xml b/app/src/main/res/values-b+ro+RO/strings.xml
index ad133d7c3b..a2c87c6e13 100644
--- a/app/src/main/res/values-b+ro+RO/strings.xml
+++ b/app/src/main/res/values-b+ro+RO/strings.xml
@@ -474,6 +474,9 @@
Numele tău de afișare este vizibil utilizatorilor, grupurilor și comunităților cu care interacționezi.
Document
Donează
+ Acum opt ani, {app_name} a fost fondată cu misiunea de a vă reda confidențialitatea. Astăzi, {app_name} se confruntă cu un deficit de finanțare care îi pune însăși supraviețuirea în pericol.\n\nDacă {app_name} sau misiunea sa au avut vreodată valoare pentru dumneavoastră, vă rog să-mi acordați un moment din timpul dumneavoastră și să citiți acest apel.
+ Citiți apelul
+ Vă rugăm să citiți:\nUn apel personal din partea lui {donate_appeal_name}
Forțe puternice încearcă să slăbească confidențialitatea, dar nu putem duce această luptă singuri.\n\nDonațiile ajută la menținerea {app_name} sigur, independent și online.
{app_name} are nevoie de ajutorul tău
Terminat
diff --git a/app/src/main/res/values-b+ru+RU/strings.xml b/app/src/main/res/values-b+ru+RU/strings.xml
index 4a19842278..92c6140336 100644
--- a/app/src/main/res/values-b+ru+RU/strings.xml
+++ b/app/src/main/res/values-b+ru+RU/strings.xml
@@ -488,6 +488,9 @@
Ваше отображаемое имя видно пользователям, группам и сообществам, с которыми вы взаимодействуете.
Документ
Донат
+ Восемь лет назад {app_name} был создан с миссией вернуть вам конфиденциальность. Сегодня {app_name} столкнулся с нехваткой финансирования, что ставит под угрозу само его существование.\n\nЕсли {app_name} или его миссия когда-либо были для вас ценны, пожалуйста, уделите мне немного времени и прочитайте это обращение.
+ Прочитать обращение
+ Пожалуйста, прочитайте:\nЛичное обращение от {donate_appeal_name}
Могущественные силы пытаются ослабить конфиденциальность, но мы не можем продолжать эту борьбу в одиночку.\n\nВаши пожертвования помогают сохранять безопасность, независимость и доступность {app_name}.
{app_name} нуждается в вашей помощи
Готово
diff --git a/app/src/main/res/values-b+sv+SE/strings.xml b/app/src/main/res/values-b+sv+SE/strings.xml
index df3d7661f5..d7d1b106dc 100644
--- a/app/src/main/res/values-b+sv+SE/strings.xml
+++ b/app/src/main/res/values-b+sv+SE/strings.xml
@@ -460,6 +460,9 @@
Ditt visningsnamn är synligt för användare, grupper och samhällen du interagerar med.
Dokument
Donera
+ För åtta år sedan grundades {app_name} med uppdraget att återställa din integritet. Idag står {app_name} inför en finansieringsbrist som riskerar dess överlevnad.\n\nOm du någonsin har sett värde i {app_name} eller dess uppdrag, ge mig gärna en stund av din tid och läs denna vädjan.
+ Läs vädjan
+ Vänligen läs:\nEn personlig vädjan från {donate_appeal_name}
Starka krafter försöker försvaga den personliga integriteten, men vi kan inte fortsätta kampen ensamma.\n\nAtt donera hjälper till att hålla {app_name} säker, oberoende och online.
{app_name} behöver din hjälp
Klar
diff --git a/app/src/main/res/values-b+zh+CN/strings.xml b/app/src/main/res/values-b+zh+CN/strings.xml
index b94e11d583..87b0c7c5dc 100644
--- a/app/src/main/res/values-b+zh+CN/strings.xml
+++ b/app/src/main/res/values-b+zh+CN/strings.xml
@@ -446,6 +446,9 @@
您的显示名称对与您互动的用户、群组和社区可见。
文档
捐赠
+ 八年前,{app_name} 带着恢复您的隐私这一使命成立。如今,{app_name} 面临资金短缺,这使其生存本身也岌岌可危。\n\n如果您曾从 {app_name} 或其使命中获得过价值,请给我一点时间,读一读这封呼吁。
+ 阅读呼吁
+ 请阅读:\n来自 {donate_appeal_name} 的个人呼吁
有强大的势力正试图削弱隐私保护,但我们无法独自应对这场战斗。\n\n捐赠有助于保持 {app_name} 的安全性、独立性和在线状态。
{app_name} 需要您的帮助
完成
@@ -958,6 +961,7 @@
通知效果预览
预览通知
你的 {pro} 访问权限已激活!\n\n你的 {pro} 访问将在 {date} 自动续订 {current_plan_length}。
+ 您的 {pro} 访问权限将在 {date} 过期。\n\n请立即更新你的 {pro} 访问权限确保在你的 {pro} 访问权限到期前自动续订。
你的 {pro} 访问权限已激活!\n\n你的 {pro} 访问将在 {date} 自动续订 \n{current_plan_length}。你在此所做的更改将在下次续订时生效。
{pro} 访问错误
您的 {pro} 访问权限将于 {date} 到期。
@@ -1006,7 +1010,9 @@
想要固定超过 {limit} 个对话?\n使用 {app_pro} Beta 整理您的对话并解锁高级功能
很遗憾看到您取消 {pro}。在取消您的 {pro} 访问之前,请了解以下信息。
取消
+ 取消 {pro} 访问将阻止在 {pro} 到期前自动续订。取消 {pro} 不会导致退款。在您的 {pro} 到期之前,您仍然可以使用 {app_pro} 功能。\n\n由于您最初是通过 {platform_account} 注册 {app_pro} 的,您需要使用相同的 {platform_account} 来取消 {pro}。
取消 {pro} 访问的两种方式:
+ 取消 {pro} 访问权限将阻止在 {pro} 到期前自动续订。\n\n取消 {pro} 不会导致退款。在 {pro} 到期前,您仍可继续使用 {app_pro} 功能。
选择适合您的 {pro} 访问选项。\n访问时间越长,折扣越大。
您确定要从此设备中删除您的数据吗?\n\n{app_pro} 无法转移至其他账户。请务必保存您的恢复密码,以确保您之后可以恢复对 {pro} 的访问权限。
您确定要从网络中删除您的数据吗?继续操作将无法恢复您的消息或联系人。\n\n{app_pro} 无法转移至其他账户。请务必保存您的恢复密码,以确保您之后可以恢复对 {pro} 的访问权限。
@@ -1098,6 +1104,7 @@
无限置顶消息
使用无限置顶消息,整理你的所有聊天。
您当前的账单选项包括 {current_plan_length} 的 {pro} 访问权限。您确定要切换到 {selected_plan_length_singular} 的账单选项吗?\n\n更新后,您的 {pro} 访问权限将在 {date} 自动续订,新增 {selected_plan_length} 的 {pro} 访问时长。
+ 您的 {pro} 访问权限将于 {date} 到期。\n\n更新后,您的 {pro} 访问权限将在 {date} 自动续订,延长 {selected_plan_length} 的 {pro} 使用时间。
正在更新
升级至 {app_pro} Beta,获取大量专属福利和功能。
请在通过 {platform_store} 或 {platform_store_other} 安装了 {app_name} 的关联设备上的 {app_pro} 设置中升级至 {pro}。
@@ -1138,6 +1145,8 @@
给 {app_name} 评分?
评分应用
很高兴您喜欢 {app_name},如果方便的话,请在 {storevariant} 上为我们评分,这将帮助他人发现私密、安全的消息方式!
+ {app_name} 不包含广告、不出售数据,并且只对用户负责。您在 {storevariant} 上的评分有助于更多人发现真正尊重隐私的消息应用。
+ 为我们评分
已读
已读回执
显示您发送和接收的所有消息的已读回执。
diff --git a/app/src/main/res/values-b+zh+TW/strings.xml b/app/src/main/res/values-b+zh+TW/strings.xml
index deca8c8017..a8f377c84c 100644
--- a/app/src/main/res/values-b+zh+TW/strings.xml
+++ b/app/src/main/res/values-b+zh+TW/strings.xml
@@ -391,6 +391,9 @@
您的顯示名稱對您互動的用戶、群組和社群可見。
文件
捐款
+ 八年前,{app_name} 創立時肩負著恢復您隱私的使命。如今,{app_name} 面臨資金短缺,使其生存本身岌岌可危。\n\n如果您曾從 {app_name} 或其使命中獲得價值,請給我一點您的時間,讀一讀這份呼籲。
+ 閱讀呼籲
+ 請閱讀:\n來自 {donate_appeal_name} 的個人呼籲
完成
下載
下載中…
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3001c61ac7..337fc8c22f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -465,6 +465,9 @@
Your Display Name is visible to users, groups, and communities you interact with.
Document
Donate
+ Eight years ago, {app_name} was founded with a mission to restore your privacy. Today, {app_name} faces a funding shortage which puts its very survival at risk.\n\nIf you’ve ever found value in {app_name} or its mission, please give me a moment of your time and read this appeal.
+ Read Appeal
+ Please Read:\nA Personal Appeal From {donate_appeal_name}
Powerful forces are trying to weaken privacy, but we can’t continue this fight alone.\n\nDonating helps keep {app_name} secure, independent, and online.
{app_name} Needs Your Help
Done