Ver Fonte

Version 5.0.1

Threema há 3 anos atrás
pai
commit
fcd60a6b2f

+ 2 - 2
app/build.gradle

@@ -13,7 +13,7 @@ if (getGradle().getStartParameter().getTaskRequests().toString().contains("Hms")
 }
 
 // version codes
-def app_version = "5.0"
+def app_version = "5.0.1"
 def beta_suffix = "" // with leading dash
 
 /**
@@ -92,7 +92,7 @@ android {
         vectorDrawables.useSupportLibrary = true
         applicationId "ch.threema.app"
         testApplicationId 'ch.threema.app.test'
-        versionCode 776
+        versionCode 777
         versionName "${app_version}${beta_suffix}"
         resValue "string", "app_name", "Threema"
         // package name used for sync adapter - needs to match mime types below

+ 9 - 9
app/src/main/java/ch/threema/app/backuprestore/csv/RestoreService.java

@@ -21,6 +21,10 @@
 
 package ch.threema.app.backuprestore.csv;
 
+import static ch.threema.app.services.NotificationService.NOTIFICATION_CHANNEL_ALERT;
+import static ch.threema.app.services.NotificationService.NOTIFICATION_CHANNEL_BACKUP_RESTORE_IN_PROGRESS;
+import static ch.threema.app.utils.IntentDataUtil.PENDING_INTENT_FLAG_IMMUTABLE;
+
 import android.annotation.SuppressLint;
 import android.app.Notification;
 import android.app.NotificationManager;
@@ -37,6 +41,10 @@ import android.text.TextUtils;
 import android.text.format.DateUtils;
 import android.widget.Toast;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+
 import net.lingala.zip4j.ZipFile;
 import net.lingala.zip4j.io.inputstream.ZipInputStream;
 import net.lingala.zip4j.model.FileHeader;
@@ -56,9 +64,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.core.app.NotificationCompat;
 import ch.threema.app.BuildConfig;
 import ch.threema.app.R;
 import ch.threema.app.ThreemaApplication;
@@ -67,7 +72,6 @@ import ch.threema.app.activities.HomeActivity;
 import ch.threema.app.asynctasks.DeleteIdentityAsyncTask;
 import ch.threema.app.backuprestore.BackupRestoreDataService;
 import ch.threema.app.collections.Functional;
-import ch.threema.app.collections.IPredicateNonNull;
 import ch.threema.app.exceptions.RestoreCanceledException;
 import ch.threema.app.managers.ServiceManager;
 import ch.threema.app.notifications.NotificationBuilderWrapper;
@@ -115,10 +119,6 @@ import ch.threema.storage.models.data.MessageContentsType;
 import ch.threema.storage.models.data.media.BallotDataModel;
 import ch.threema.storage.models.data.media.FileDataModel;
 
-import static ch.threema.app.services.NotificationService.NOTIFICATION_CHANNEL_ALERT;
-import static ch.threema.app.services.NotificationService.NOTIFICATION_CHANNEL_BACKUP_RESTORE_IN_PROGRESS;
-import static ch.threema.app.utils.IntentDataUtil.PENDING_INTENT_FLAG_IMMUTABLE;
-
 public class RestoreService extends Service {
 	private static final Logger logger = LoggingUtil.getThreemaLogger("RestoreService");
 
@@ -473,7 +473,7 @@ public class RestoreService extends Service {
 
 					try {
 						if (!userService.restoreIdentity(identityContent, this.password)) {
-							throw new ThreemaException("Restoring identity failed");
+							throw new ThreemaException(getString(R.string.unable_to_restore_identity_because, "n/a"));
 						}
 					} catch (UnknownHostException e) {
 						throw e;

+ 8 - 0
app/src/main/java/ch/threema/app/fragments/ComposeMessageFragment.java

@@ -4400,6 +4400,14 @@ public class ComposeMessageFragment extends Fragment implements
 		//update header
 		if(contactModel.getIdentity().equals(identity)) {
 			updateToolbarTitle();
+
+			if (this.contactModel != contactModel) {
+				// Update the contact model (and the receiver) to have the current setting for
+				// sending messages (forward security). This needs to be done if the contact model
+				// cache has been reset and therefore a new contact model object has been created.
+				this.contactModel = contactModel;
+				messageReceiver = this.contactService.createReceiver(this.contactModel);
+			}
 		}
 
 		if (composeMessageAdapter != null) {

+ 6 - 1
app/src/main/java/ch/threema/app/services/MessageServiceImpl.java

@@ -381,6 +381,7 @@ public class MessageServiceImpl implements MessageService {
 	}
 
 	@Override
+	@Nullable
 	public AbstractMessageModel createGroupCallStatus(
 		@NonNull GroupCallStatusDataModel data,
 		@NonNull MessageReceiver receiver,
@@ -388,8 +389,12 @@ public class MessageServiceImpl implements MessageService {
 		@Nullable GroupCallDescription call,
 		boolean isOutbox,
 		Date postedDate) {
-		logger.info("Storing group call status message for call={}", call != null ? call.getCallId() : "n/a");
+		if (receiver instanceof GroupMessageReceiver && ((GroupMessageReceiver) receiver).getGroup() == null) {
+			logger.info("Unable to store group call status message. Group no longer exists");
+			return null;
+		}
 
+		logger.info("Storing group call status message for call={}", call != null ? call.getCallId() : "n/a");
 		final AbstractMessageModel model = receiver.createLocalModel(
 			MessageType.GROUP_CALL_STATUS,
 			MessageContentsType.GROUP_CALL_STATUS,

+ 12 - 3
app/src/main/java/ch/threema/app/ui/OngoingCallNoticeView.kt

@@ -99,10 +99,10 @@ class OngoingCallNoticeView : LinearLayout, DefaultLifecycleObserver {
 				callContainer.isClickable = true
 				callContainer.isFocusable = true
 				actionButton.text = context.getString(R.string.voip_hangup)
-				actionButton.chipBackgroundColor = getDefaultBackgroundColor()
-				actionButton.setTextColor(getTextColor())
+				actionButton.chipBackgroundColor = getDangerousBackgroundColor()
+				actionButton.setTextColor(getDangerousTextColor())
 				actionButton.chipIcon = AppCompatResources.getDrawable(context, R.drawable.ic_call_end_outline)
-				actionButton.chipIconTint = getTextColor()
+				actionButton.chipIconTint = getDangerousTextColor()
 				callText.setText(R.string.call_ongoing)
 				participantsText.visibility = GONE
 			}
@@ -170,6 +170,15 @@ class OngoingCallNoticeView : LinearLayout, DefaultLifecycleObserver {
 		return ColorStateList.valueOf(ConfigUtils.getColorFromAttribute(context, R.attr.colorAccent))
 	}
 
+	private fun getDangerousTextColor(): ColorStateList {
+		return ColorStateList.valueOf(resources.getColor(R.color.material_red))
+	}
+
+	private fun getDangerousBackgroundColor(): ColorStateList {
+		val backgroundColor = ColorStateList.valueOf(resources.getColor(R.color.material_red))
+		return backgroundColor.withAlpha(0x1a)
+	}
+
 	private fun setViewAction(view: View?, action: Runnable?) {
 		if (action == null) {
 			view?.setOnClickListener(null)

+ 1 - 2
app/src/main/java/ch/threema/app/voip/groupcall/GroupCallManagerImpl.kt

@@ -660,8 +660,7 @@ class GroupCallManagerImpl(
 		// Step 8 is handled by getting the chosen call before sending a GroupCallStart and therefore
 		// this step is not part in the group call refresh steps implementation here
 
-		// Step 9 is currently not implemented
-		logger.info("consolidate joined call")
+		// Step 9
 		consolidateJoinedCall(chosenCall, groupId)
 
 		// Step 10: return chosen-call

+ 1 - 4
app/src/main/java/ch/threema/app/voip/groupcall/service/GroupCallService.kt

@@ -278,10 +278,7 @@ class GroupCallService : Service() {
     // TODO(ANDR-1964): Could this be called twice for a call and cause problems?
     //   make sure groupCallController and audioManager will only be initialised once per service lifetime
     private fun joinCall() {
-        logger.info("Join call")
-        if (BuildConfig.DEBUG) {
-            logger.info("callId={}, sfuBaseUrl={}", callId, sfuBaseUrl)
-        }
+        logger.info("Join call (callId={}, sfuBaseUrl={})", callId, sfuBaseUrl)
         stopOngoingOneToOneCall()
 
         setPSTNCallStateListener()

+ 8 - 7
app/src/main/java/ch/threema/app/voip/groupcall/sfu/SfuConnectionImpl.kt

@@ -90,7 +90,6 @@ internal class SfuConnectionImpl (private val apiConnector: APIConnector, privat
         callDescription: GroupCallDescription,
         dtlsFingerprint: ByteArray,
     ): JoinResponse {
-        logger.debug("Join call {}", callDescription.callId)
         return withContext(Dispatchers.IO) {
             try {
                 postJoin(token, sfuBaseUrl, callDescription, dtlsFingerprint)
@@ -102,10 +101,12 @@ internal class SfuConnectionImpl (private val apiConnector: APIConnector, privat
 
     @WorkerThread
     private fun postPeek(token: SfuToken, sfuBaseUrl: String, callId: CallId): PeekResponse {
+        val url = createURL(sfuBaseUrl, SFU_VERSION, SFU_PEEK_PATH_SEGMENT, callId.hex)
+        logger.info("Peeking call {} via URL {}", callId, url)
         val request = SfuHttpRequest.Peek.newBuilder()
             .setCallId(ByteString.copyFrom(callId.bytes))
             .build()
-        val byteResponse = post(token, sfuBaseUrl, SFU_PEEK_PATH_SEGMENT, callId, request.toByteArray(), ProtocolDefines.GC_PEEK_TIMEOUT_MILLIS)
+        val byteResponse = post(token, url, request.toByteArray(), ProtocolDefines.GC_PEEK_TIMEOUT_MILLIS)
         val body = byteResponse.body?.let { PeekResponseBody.fromSfuResponseBytes(it) }
         logger.info("Peek status for {}: {}", callId, byteResponse.statusCode)
         return PeekResponse(byteResponse.statusCode, body)
@@ -113,12 +114,14 @@ internal class SfuConnectionImpl (private val apiConnector: APIConnector, privat
 
     @WorkerThread
     private fun postJoin(token: SfuToken, sfuBaseUrl: String, callDescription: GroupCallDescription, dtlsFingerprint: ByteArray): JoinResponse {
+        val url = createURL(sfuBaseUrl, SFU_VERSION, SFU_JOIN_PATH_SEGMENT, callDescription.callId.hex)
+        logger.info("Joining call {} via URL {}", callDescription.callId, url)
         val request = SfuHttpRequest.Join.newBuilder()
             .setProtocolVersion(callDescription.protocolVersion.toInt())
             .setCallId(ByteString.copyFrom(callDescription.callId.bytes))
             .setDtlsFingerprint(ByteString.copyFrom(dtlsFingerprint))
             .build()
-        val byteResponse = post(token, sfuBaseUrl, SFU_JOIN_PATH_SEGMENT, callDescription.callId, request.toByteArray(), ProtocolDefines.GC_JOIN_TIMEOUT_MILLIS)
+        val byteResponse = post(token, url, request.toByteArray(), ProtocolDefines.GC_JOIN_TIMEOUT_MILLIS)
         val body = byteResponse.body?.let { JoinResponseBody.fromSfuResponseBytes(it) }
         return JoinResponse(byteResponse.statusCode, body)
     }
@@ -126,14 +129,12 @@ internal class SfuConnectionImpl (private val apiConnector: APIConnector, privat
     @WorkerThread
     private fun post(
         token: SfuToken,
-        sfuBaseUrl: String,
-        path: String,
-        callId: CallId,
+        url: URL,
         body: ByteArray,
         timeoutMillis: Int,
     ): ByteResponse {
 
-        val connection = (createURL(sfuBaseUrl, SFU_VERSION, path, callId.hex).openConnection() as HttpURLConnection).also {
+        val connection = (url.openConnection() as HttpURLConnection).also {
             it.connectTimeout = timeoutMillis
             it.readTimeout = timeoutMillis
             it.requestMethod = "POST"

+ 1 - 1
app/src/main/java/ch/threema/app/voip/groupcall/sfu/connection/Failed.kt

@@ -36,7 +36,7 @@ class Failed internal constructor(call: GroupCall, val reason: Throwable) : Grou
         // Make sure the [connectedSignal] is completed in case someone is waiting for it
         call.connectedSignal.completeExceptionally(reason)
 
-        logger.error("Call failed, tearing down", reason)
+        logger.error("Call failed, tearing down\n{}", reason.stackTraceToString())
         call.teardown()
         null
     })

+ 2 - 4
app/src/main/res/values-fr/voip_strings.xml

@@ -92,14 +92,12 @@
     <string name="voip_gc_call_error">Impossible de lancer l\'appel de groupe</string>
     <string name="voip_gc_call_full_generic">Maximum atteint : plus aucun participant ne peut rejoindre cet appel de groupe.</string>
     <string name="voip_gc_call_full_n">Maximum de %1$d participants atteint, vous ne pouvez pas rejoindre cet appel de groupe.</string>
-    <plurals name="n_participants_in_call">
+    <plurals name="n_participants_in_call" tools:ignore="MissingQuantity">
         <item quantity="one">%d participant</item>
-        <item quantity="many">%d participants</item>
         <item quantity="other">%d participants</item>
     </plurals>
-    <plurals name="n_members_dont_support_group_calls">
+    <plurals name="n_members_dont_support_group_calls" tools:ignore="MissingQuantity">
         <item quantity="one" tools:ignore="ImpliedQuantity">Attention : un membre ne peut pas participer aux appels de groupe.</item>
-        <item quantity="many">Attention : %d membres ne peuvent pas participer aux appels de groupe.</item>
         <item quantity="other">Attention : %d membres ne peuvent pas participer aux appels de groupe.</item>
     </plurals>
 </resources>

+ 1 - 1
app/src/main/res/values-pl/strings.xml

@@ -1027,7 +1027,7 @@ anonimowo?</string>
     <string name="open_in_maps_app">Otwórz w aplikacji Mapy</string>
     <string name="delete">Usuń</string>
     <string name="continue_recording">Kontynuuj nagrywanie</string>
-    <string name="whatsnew_headline"><![CDATA[<p>%sW aplikacji %1$ na Androida są teraz dostępne połączenia grupowe z szyfrowaniem od końca do końca.</p>
+    <string name="whatsnew_headline"><![CDATA[<p>W aplikacji %1$s na Androida są teraz dostępne połączenia grupowe z szyfrowaniem od końca do końca.</p>
 <p>Aby zainicjować połączenie, otwórz czat grupowy i stuknij przycisk kamery na górze.</p>
 <p>Wszyscy członkowie grupy otrzymają powiadomienie i będą mogli zdecydować, czy chcą dołączyć do połączenia, czy też nie.</p>
 <p><b>Uwaga:</b> W przypadku systemu iOS funkcja połączeń grupowych zostanie wprowadzona w późniejszym terminie.</p> ]]></string>

+ 1 - 1
app/src/main/res/values-ru/voip_strings.xml

@@ -23,7 +23,7 @@
     <string name="voip_status_ringing">Звоним</string>
     <string name="voip_mic_enable">Включить микрофон</string>
     <string name="voip_mic_disable">Отключить микрофон</string>
-    <string name="voip_checking_compatibility">Проверка возможности приема звонков Threema контактом...</string>
+    <string name="voip_checking_compatibility">Проверка возможности приема звонков Threema контактом</string>
     <string name="voip_incompatible">Этот контакт пока не может принимать звонки Threema.</string>
     <string name="voip_call_status_unavailable">Адресат звонка недоступен</string>
     <string name="voip_call_status_rejected">Звонок отклонен</string>

+ 174 - 10
app/src/main/res/values-sk/strings.xml

@@ -111,6 +111,7 @@
     <string name="cancel">Zrušiť</string>
     <string name="copy_message_action">Kopírovať</string>
     <string name="delete_contact_action">Vymazať kontakt</string>
+    <string name="delete_multiple_contact_action">Odstrániť kontakty</string>
     <string name="scan_id">Skenovať ID</string>
     <string name="id_scanned">ID zoskenované</string>
     <string name="id_mismatch">Naskenovaný verejný kľúč sa nezhoduje s kľúčom, ktorý je uložený na serveri pre toto ID. To znamená, že niekto s naskenovaným kódom manipuloval a kľúč preto nie je možné považovať za dôveryhodný.</string>
@@ -127,6 +128,7 @@
     <string name="whoaaa">Oznámenie</string>
     <string name="really_delete_message_title">Vymazať správu</string>
     <string name="really_delete_thread">Vymazať konverzáciu</string>
+    <string name="really_delete_multiple_threads">Odstrániť konverzácie</string>
     <string name="really_delete_contact">Naozaj chcete odstrániť tento kontakt a všetky s ním súvisiace správy?</string>
     <string name="image_placeholder">Obrázok</string>
     <string name="invalid_threema_id">Neplaté Threema ID</string>
@@ -270,7 +272,7 @@ https://shop.threema.ch/retrieve_keys]]></string>
     <string name="prefs_sum_pin_grace">Čas do aktivácie zámku obrazovky</string>
     <string name="click_here_to_change_pin">PIN je nastavený. Kliknutím tu ho zmeníte</string>
     <string name="set_pin_menu_title">Nastaviť nový PIN</string>
-    <string name="set_pin_summary_intro">Ochráňte svoje súkromie nastavením PIN kódu (iba číslice). Tento PIN kód je možné použiť k zablokovaniu prístupu k uživateľskému rozhraniu aplikácie po uplynutí zvolenej doby, alebo k zabezpečeniu súkromných konverzácií</string>
+    <string name="set_pin_summary_intro">Chráňte svoje súkromie nastavením číselného kódu PIN (len číslice). Tento kód PIN možno použiť na uzamknutie prístupu k používateľskému rozhraniu aplikácie po uplynutí doby odkladu alebo na ochranu súkromných rozhovorov</string>
     <string name="set_pin_again_summary">Zadajte PIN znovu</string>
     <string name="set_pin_hint">PIN</string>
     <string name="title_addgroup">Nová skupina</string>
@@ -386,7 +388,7 @@ https://shop.threema.ch/retrieve_keys]]></string>
     <string name="is_typing">píše...</string>
     <string name="push_not_available_title">Služba Push nenájdená</string>
     <string name="push_not_available_text1">Služba Push nebola nájdená vo vašom zariadení, pretože Google Play Services nie sú nainštalované, alebo sú neaktuálne.</string>
-    <string name="push_not_available_text2">%s sa pokúsi otvoriť trvalé pripojenie na pozadí k serveru. Toto nemusí fungovať spoľahlivo, ak mechanizmy optimalizácie batérie vášho zariadenia rušia pripojenie na pozadí.</string>
+    <string name="push_not_available_text2">%s sa pokúsi otvoriť trvalé pripojenie k serveru na pozadí. Toto nemusí fungovať spoľahlivo, ak mechanizmy optimalizácie batérie vášho zariadenia narúšajú pripojenie na pozadí.</string>
     <string name="backup_in_progress">Prebieha zálohovanie</string>
     <string name="backup_or_restore_success_body">Záloha úspešne vytvorená</string>
     <string name="backup_or_restore_error">Threema zálohy</string>
@@ -412,6 +414,12 @@ https://shop.threema.ch/retrieve_keys]]></string>
     <string name="media_gallery_pictures">Obrázky</string>
     <string name="media_gallery_videos">Videá</string>
     <string name="group_membership_title">Člen uvedených skupín</string>
+    <string name="group_description">Popis skupiny</string>
+    <string name="change_group_description">Zmeniť popis skupiny</string>
+    <string name="add_group_description">Pridať popis skupiny</string>
+    <string name="read_more">čítať viac</string>
+    <string name="read_less">čítať menej</string>
+    <string name="changed_group_desc_date">"Posledn\u00e1 zmena: "</string>
     <string name="num_items_sected">Vybratých: %s</string>
     <string name="really_delete_media">Naozaj chcete odstrániť %d mediálnych správ?</string>
     <string name="check_updates">Skontrolovať aktualizácie</string>
@@ -474,6 +482,9 @@ Naplánujte udalosti, vytvorte prieskum, alebo sa niečo spýtajte svojich priat
     <string name="video_size_large">Nízka (viac dát)</string>
     <string name="video_size_original">Žiadna (veľký objem dát)</string>
     <string name="prefs_video_size">Kompresia videa</string>
+    <string name="menu_video_size_small">Malá veľkosť</string>
+    <string name="menu_video_size_medium">Stredná veľkosť</string>
+    <string name="menu_video_size_large">Pôvodná veľkosť</string>
     <string name="show_contact">Zobraziť kontakt</string>
     <string name="chat_with">Konverzácia s %1$s</string>
     <string name="kick_user_from_group">Vyhodiť %1$s zo skupiny</string>
@@ -493,6 +504,7 @@ Naplánujte udalosti, vytvorte prieskum, alebo sa niečo spýtajte svojich priat
     <string name="send_media">Odoslať média</string>
     <string name="rotate">Otočenie</string>
     <string name="remove">Odstrániť</string>
+    <string name="item_already_added">Táto položka už bola pridaná.</string>
     <string name="password_too_short" tools:ignore="PluralsCandidate">%d znakov min.</string>
     <string name="mark_read">Označiť ako prečítané</string>
     <string name="attach_document">Súbor</string>
@@ -700,7 +712,7 @@ Už ich nebude možné obnoviť.</string>
     <string name="restore_disable_energy_saving">Pripojte prosím zariadenie na nabíjačku a vypnite všetky možnosti úsporného režimu, aby sa predišlo prerušeniu procesu zálohovania alebo obnovenia.</string>
     <string name="draft">Koncept</string>
     <string name="prefs_bigger_single_emojis">Väčšie samostatné emoji</string>
-    <string name="wizard1_sync_work">Synchronizujú sa dáta Threema Work...</string>
+    <string name="wizard1_sync_work">Synchronizujú sa údaje Threema Work…</string>
     <string name="notification_hidden_text">Obsah je skrytý</string>
     <string name="really_reset_ringtones">Obnoviť nastavenia zvukových upozornení na východzie hodnoty?</string>
     <string name="reset_ringtones_confirm">Nastavenia zvukových upozornení boli obnovené.</string>
@@ -998,13 +1010,18 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="open_in_maps_app">Otvoriť v aplikácii Mapy</string>
     <string name="delete">Odstrániť</string>
     <string name="continue_recording">Pokračovať v nahrávaní</string>
+    <string name="whatsnew_title">Novinka: %1$s skupinové hovory</string>
+    <string name="whatsnew_headline"><![CDATA[<p>Skupinové hovory so šifrovaním end-to-end sú teraz k dispozícii v %1$s pre Android.</p>
+<p>Ak chcete začať hovor, otvorte skupinovú konverzáciu a kliknite na tlačidlo fotoaparátu v hornej časti.</p>
+<p>Všetci členovia skupiny dostanú upozornenie a môžu sa rozhodnúť, či sa chcú k hovoru pripojiť alebo nie.</p>
+<p><b>Poznámka:</b> pre iOS bude funkcia skupinového hovoru vydaná neskôr.</p>]]></string>
     <string name="tap_to_start">Kliknutím sem spustíte aplikáciu %s.</string>
     <string name="two_years">2 roky</string>
     <string name="invalid_backup_path">Neplatná cesta pre zálohu</string>
     <string name="backup_data_no_permission">Do tejto zložky sa nedá zapisovať. Vyberte inú.</string>
     <string name="prefs_sum_show_unread_badge">Zobraziť odznaky (čísla) na spodnej navigačnej lište</string>
     <string name="prefs_title_show_unread_badge">Odznaky</string>
-    <string name="pinning_not_trusted">Zlyhanie pri komunikácii s certifikátom. Skontrolujte, či je vo vašom zariadení (credentials storage) nainštalovaný a aktivovaný certifikát «Entrust Root Certification Authority - G2».</string>
+    <string name="pinning_not_trusted">Zlyhanie pripnutia certifikátu. Skontrolujte, či je v úložisku poverení vášho zariadenia nainštalovaná a aktivovaná „Entrust Root Certification Authority – G2“.</string>
     <string name="pinning_failed">Zlyhanie pri komunikácii s certifikátom. Možný útok \"Man-in-the-middle\". Ak máte nainštalovaný blokovač reklám, filter obsahu, alebo aplikáciu s firewallom ako napr. „AdGuard“, zakážte ju prosím pre aplikáciu Threema.</string>
     <string name="open_myid_popup">Otvorte panel rýchleho prístupu</string>
     <string name="logo">Logo / Skok na začiatok</string>
@@ -1028,7 +1045,7 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="mime_type">MIME typ</string>
     <string name="password_does_not_comply">Heslo nezodpovedá zásadám, ktoré určil správca.</string>
     <string name="audio_mute_due_to_focus_loss">Zvuk bol dočasne stlmený kvôli strate kontroly nad zvukom</string>
-    <string name="restore_data_backup_explain">Ak chcete obnoviť zálohované údaje, najprv na obrazovke „Môj profil“ zmažte svoje Threema ID.\n\nKeď sa aplikácia reštartuje, zvolte možnosť „Obnoviť zo zálohy“, „Dalšie možnosti obnovenia“, „Záloha údajov“ a potom vyberte súbor, ktorý chcete obnoviť.</string>
+    <string name="restore_data_backup_explain">Ak chcete obnoviť zálohu údajov, najprv odstráňte svoje Threema ID z obrazovky „Môj profil“.\nKeď sa aplikácia reštartuje, vyberte „Obnoviť zo zálohy“, „Ďalšie možnosti obnovenia“, „Zálohovanie údajov“ a potom vyberte súbor zálohy údajov, ktorý chcete obnoviť.</string>
     <string name="audio_focus_loss_complete">Hovor presušený z dôvodu straty kontroly nad zvukom.</string>
     <string name="tap_for_picture_hold_for_video">Kliknutím odfotíte, podržaním nahráte video</string>
     <string name="sending_media">Odosielanie médií</string>
@@ -1078,6 +1095,8 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="translators_thanks">Veľké poďakovanie našim dobrovoľným prekladateľom:\n%s</string>
     <string name="ballot_window_hide">Skryť otvorené ankety</string>
     <string name="ballot_window_show">Zobraziť otvorené ankety</string>
+    <string name="single_ballot_really_delete">Odstrániť túto anketu</string>
+    <string name="single_ballot_really_delete_text">Naozaj chcete odstrániť túto anketu? Nebudete môcť obnoviť hlasy.</string>
     <string name="tooltip_voip_other_party_video_on">Protistrana zahájila videohovor. Kliknutím sem zapnete kameru.</string>
     <string name="tooltip_voip_other_party_video_disabled">Protistrana buď nepoužíva aktuálnu verziu aplikácie, alebo nepodporuje videohovory.</string>
     <string name="biometrics_not_enrolled">Biometrické údaje nie sú v systéme nastavené.</string>
@@ -1144,7 +1163,8 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="transcoder_unsupported_audio_format">Zvuk nie je možné prekódovať kvôli chýbajúcej podpore tohto formátu v systéme.</string>
     <string name="transcoder_unknown_audio_error">Počas prekódovania zvuku nastala neznáma chyba.</string>
     <string name="video_size_explain">Veľmi veľké videá môžu byť skomprimované bez ohľadu na toto nastavenie.</string>
-    <string name="status_create_notes">*Ste tu úplne sám*\nTúto konverzáciu môžete využiť ako bezpečný zápisník pre textové poznámky, média alebo dokumenty.</string>
+    <string name="status_create_notes">*Ste jediný člen v tejto skupine*
+Túto konverzáciu môžete využiť ako bezpečný zápisník pre textové poznámky, média alebo dokumenty.</string>
     <string name="status_create_notes_off">*V tejto konverzácii uz nie ste jediný*\nNové správy budú poslané všetkým členom skupiny.</string>
     <string name="note_group_howto">Tip: Ak do tejto skupiny nepridáte žiadnych členov, správy do nej odoslané zostanú uložené iba na vašom zariadení. Takáto možnosť môže príjsť vhod na bezpečné ukladanie poznámok, mediálnych súborov či dokumentov, alebo neskôr k ich prenosu do počítača.</string>
     <string name="mark_unread">Označiť ako neprečítané</string>
@@ -1164,7 +1184,9 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="reject">Odmetnúť</string>
     <string name="group_request_already_sent"><![CDATA[Už ste žiadosť  o vstup do skupiny <b>%s</b> odoslali cez tento odkaz a čaká sa na odpoveď od správcu skupiny. Kliknite na žiadosť ak ju chcete opäť odoslať.]]></string>
     <string name="group_link_none">Odkaz nebol zatiaľ vygenerovaný.</string>
-    <string name="group_request_confirm_send"><![CDATA[Chystáte sa odoslať žiadosť o vstup do skupiny <b>%1$s</b> správcovi <b>%2$s</b>. Pokiaľ nebol tento odkaz zneplatnený, budete do skupiny automaticky pridaný hneď, ako zariadenie správcu príjme túto vašu žiadosť.]]></string>
+    <string name="group_request_confirm_send"><![CDATA[Chystáte sa odoslať skupinovú žiadosť o <b>%1$s</b> správcovi <b>%2$s</b>. Ak tento odkaz nebol zrušený, budete automaticky pridaný do skupiny hneď, ako zariadenie správcu prijme vašu žiadosť.]]></string>
+    <string name="really_delete_group_request_title_singular">Odstrániť žiadosť o skupinu</string>
+    <string name="really_delete_group_request_title_plural">Odstrániť žiadosti o skupinu</string>
     <string name="sent_to">Odoslané pre: %s</string>
     <string name="sent_on">Odoslané: %s</string>
     <string name="group_response">Odpoveď pre vstup do skupiny</string>
@@ -1241,7 +1263,7 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="select_time">Vyberte čas</string>
     <string name="send_to">Odoslať pre %s</string>
     <string name="receipts_override_choice_send">Odoslať</string>
-    <string name="receipts_override_choice_dont_send">Neodosielať</string>
+    <string name="receipts_override_choice_dont_send">Neodoslať</string>
     <string name="receipts_override_choice_default">Predvolené (%s)</string>
     <string name="unable_to_determine_recording_length">Nahrávka je prázdna, alebo sa nepodarilo zistiť dĺžku</string>
     <string name="prefs_header_receipts">Potvrdenia</string>
@@ -1254,6 +1276,7 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="group_links_manage_menu">Spravovať odkazy skupiny</string>
     <string name="group_request_sent_menu">Odoslať žiadosti skupiny</string>
     <string name="really_delete_group_link_title">Vymazať odkaz skupiny</string>
+    <string name="really_delete_multiple_group_links_title">Odstrániť skupinové odkazy</string>
     <string name="qr_scan_result_dialog_title">Výsledok QR skenu</string>
     <string name="scan_failure_dialog_title">Sken zlyhal</string>
     <string name="no_threema_qr_info">Toto nie je specifický QR kód Threema. Dekódovaný obsah je:</string>
@@ -1281,7 +1304,7 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="threema_push">Threema Push</string>
     <string name="threema_push_notification_text">Klepnutím sa dozviete viac.</string>
     <string name="threema_push_notification_info_text_1">Threema Push je aktívny na pozadí, aby vás upozornil na prichádzajúce správy a hovory.</string>
-    <string name="threema_push_notification_info_text_2">Aplikácie nemôžu bežať na pozadí bez zobrazenia trvalého upozornenia. Zobrazovaním tohto upozornenia môžeme zabezpečiť, že Threema Push zostane aktívny, aj keď aplikáciu aktívne nepoužívate.</string>
+    <string name="threema_push_notification_info_text_2">Aplikácie nemôžu bežať na pozadí bez zobrazenia trvalého upozornenia. Zobrazením tohto upozornenia môžeme zabezpečiť, že Threema Push zostane aktívna, aj keď aplikáciu aktívne nepoužívate.</string>
     <string name="threema_push_notification_info_text_3">Ak stále máte problémy s oneskorenými alebo chýbajúcimi upozorneniami, upravte nastavenia systému tak, aby aplikácia mohla byť aktívna na pozadí bez akýchkoľvek obmedzení a všetky šetriče batérie sú vypnuté.</string>
     <string name="threema_push_service_description">Trvalé upozornenie je zobrazené, keď je aktívna funkcia Threema Push</string>
     <string name="threema_push_activated">Threema Push aktivovaný.</string>
@@ -1328,11 +1351,22 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="contact_picture_content_description">Obrázok kontaktu</string>
     <string name="prefs_title_use_system_ringtone">Použiť systémové vyzváňanie</string>
     <string name="organization_type">Organizácia</string>
-    <string name="permission_bluetooth_connect_required">Povoliť „Zariadenia v blízkosti“ na vyhľadanie pripojených Bluetooth slúchadiel</string>
+    <string name="permission_bluetooth_connect_required">Povoľte „Zariadenia v blízkosti“ pre vyhľadanie pripojených slúchadiel Bluetooth</string>
     <string name="threema_push_start_webclient_sessions_manually">Threema Push je aktívna. Relácie Threema Web a Desktop sa preto musia spúšťať manuálne.</string>
     <string name="tooltip_multiple_recipients_title">Novinka: Viacerí príjemcovia</string>
     <string name="tooltip_multiple_recipients_text">Dlhým klepnutím vyberiete viacerých príjemcov, ktorým chcete poslať rovnakú správu.</string>
     <string name="synchronizing">Synchronizuje sa…</string>
+    <string name="forward_security">Odosielať správy s funkciou Perfect Forward Secrecy</string>
+    <string name="forward_security_mode">Perfect Forward Secrecy</string>
+    <string name="forward_security_mode_none">nie</string>
+    <string name="clear_forward_security">Odstrániť reláciu Perfect Forward Secrecy</string>
+    <string name="forward_security_cleared">Relácie Perfect Forward Secrecy s týmto kontaktom boli odstránené</string>
+    <string name="message_without_forward_security">Bola prijatá správa bez Perfect Forward Secrecy. Overte, či odosielateľ úmyselne zakázal funkciu Perfect Forward Secrecy.</string>
+    <string name="forward_security_established">Správy v tomto rozhovore sú teraz chránené systémom Perfect Forward Secrecy.</string>
+    <string name="forward_security_established_rx">Správy prijaté v tomto rozhovore sú teraz chránené systémom Perfect Forward Secrecy. Povoľte Perfect Forward Secrecy v kontaktných údajoch, aby ste ochránili aj odoslané správy.</string>
+    <string name="forward_security_reset">Relácia Perfect Forward Secrecy s týmto kontaktom bola resetovaná. Môže sa to stať, ak kontakt zmenil zariadenie alebo preinštaloval aplikáciu.</string>
+    <string name="forward_security_reset_simple">Relácia Perfect Forward Secrecy s týmto kontaktom bola resetovaná.</string>
+    <string name="forward_security_message_out_of_order">Správa bola prijatá ako nefunkčná a nedá sa dešifrovať.</string>
     <string name="self_updater_installation_failed">Sťahovanie aktualizácie zlyhalo. Stiahnite si a nainštalujte aktualizáciu z <a href="https://shop.threema.ch/download">https://shop.threema.ch/download</a> manuálne.</string>
     <string name="spam_first_contact">Táto konverzácia pochádza od neznámeho kontaktu</string>
     <string name="spam_report">Nahlásiť spam</string>
@@ -1348,8 +1382,46 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
     <string name="last_added_contact">Najnovší kontakt</string>
     <string name="directory_explain_text">V adresári spoločnosti vyhľadajte zamestnancov, ktorí ešte nie sú vo vašom zozname kontaktov.</string>
     <string name="cannot_display_location">Toto miesto nie je možné zobraziť.</string>
+    <string name="draw_reply">Nakresliť odpoveď</string>
+    <string name="drawing">Kreslenie</string>
+    <string name="background_color">Farba pozadia</string>
+    <string name="send_video_muted">Odstrániť zvuk z videa</string>
+    <string name="send_without_audio">Odstrániť zvuk</string>
+    <string name="edit_filename">Upraviť názov súboru</string>
     <string name="unable_to_restore_identity_because">ID sa nepodarilo obnoviť. Dôvod: %s</string>
     <string name="share_with_app">Zdieľať cez Threema</string>
+    <string name="read_phone_state_dialog_allow">Udeliť povolenie</string>
+    <string name="read_phone_state_dialog_disallow">Napriek tomu pokračovať</string>
+    <string name="read_phone_state_dialog_never_ask_again">Viac sa nepýtať</string>
+    <string name="read_phone_state_dialog_title">Vyžaduje sa povolenie</string>
+    <string name="read_phone_state_dialog_message">Ak chcete zabrániť tomu, aby hovory Threema prerušili bežné hovory, je potrebné povolenie pre Telefón. Ak toto povolenie neudelíte, prichádzajúci hovor Threema zazvoní, aj keď prebieha bežný hovor.</string>
+    <string name="read_phone_state_short_message">Ak chcete skontrolovať prebiehajúce hovory, udeľte aplikácii Threema povolenie pre Telefón.</string>
+    <string name="prefs_title_read_phone_state">Udeliť povolenie telefónu</string>
+    <string name="prefs_title_hibernation">Nastavenia nepoužívaných aplikácií</string>
+    <string name="prefs_summary_hibernation_api_32">Aby ste zabránili pozastaveniu Threema systémom po dlhšej nečinnosti, vypnite systémové nastavenie „Odstrániť povolenia a uvoľniť miesto“.</string>
+    <string name="prefs_summary_hibernation_api">Aby ste zabránili tomu, že sa Threema po dlhšej dobe nečinnosti pozastaví, vypnite systémové nastavenie „Pozastaviť aktivitu aplikácie, ak sa nepoužíva“.</string>
+    <string name="unable_to_fetch_configuration">Nie je možné načítať údaje z konfiguračného servera. Skúste to znova neskôr.</string>
+    <string name="rogue_device_warning">Server zistil pripojenie z iného zariadenia s rovnakým Threema ID.\n\nAk ste medzitým nepoužili svoje Threema ID na inom zariadení alebo so staršou verziou aplikácie, kontaktujte podporu a pošlite súbor denníka, ak je to možné.</string>
+    <string name="fetch2_failure">Synchronizácia so serverom poskytovania zlyhala.</string>
+    <string name="no_members_support_group_calls">V tejto skupine nie sú žiadni ďalší členovia, ktorí by mohli prijímať skupinové hovory</string>
+    <string name="group_calls">Skupinové hovory</string>
+    <string name="prefs_title_group_calls_enable">Povoliť skupinové hovory</string>
+    <string name="group_no_members">Táto skupina neobsahuje žiadnych ďalších členov</string>
+    <string name="group_call">Skupinový hovor</string>
+    <string name="checking_compatibility">Kontrola kompatibility...</string>
+    <string name="group_call_mic_permission_rationale">Ak chcete uskutočňovať skupinové hovory, musíte používateľovi %s povoliť prístup k mikrofónu v časti „Povolenia“.</string>
+    <string name="group_call_camera_permission_rationale">Aby ostatní účastníci videli váš obrázok, musíte používateľovi %s povoliť prístup ku kamere v časti „Povolenia“.</string>
+    <string name="settings">Nastavenia</string>
+    <string name="leave">Odísť</string>
+    <string name="fs_key_mismatch">nesúlad kľúčov</string>
+    <string name="tap_to_resend">Znovu odoslať</string>
+    <string name="group_calls_tooltip_title">Novinka: Skupinové hovory</string>
+    <string name="group_calls_tooltip_text">Klepnutím sem pozvete všetkých členov skupiny, aby sa pripojili k hovoru. Všetci členovia skupiny dostanú upozornenie a môžu sa rozhodnúť, či sa chcú k hovoru pripojiť alebo nie.</string>
+    <string name="prefs_title_calls">Bezpečné hovory</string>
+    <string name="prefs_sum_group_calls_vibration">Vyberte, či má po začatí skupinového hovoru vibrovať</string>
+    <string name="forward_security_mode_4dh">kompletné</string>
+    <string name="forward_security_mode_2dh">jednostranné</string>
+    <string name="forward_security_explanation">Perfect Forward Secrecy (PFS) chráni zaznamenanú komunikáciu pred spätným dešifrovaním, aj keď je ohrozený dlhodobý šifrovací kľúč.\n\nToto je možné povoliť, ak aplikácia na oboch stranách podporuje PFS.</string>
     <plurals name="contacts_counter_label">
         <item quantity="few">kontakty</item>
         <item quantity="many">kontakty</item>
@@ -1380,4 +1452,96 @@ Vykonajte prosím zálohú vašich údajov vhodnou metódou.</string>
         <item quantity="few">Správy skopírované</item>
         <item quantity="many">Správy skopírované</item>
     </plurals>
+    <plurals name="new_messages">
+        <item quantity="few">%d nové správy</item>
+        <item quantity="many">%d nových správ</item>
+        <item quantity="one">%d nová správa</item>
+        <item quantity="other">%d nových správ</item>
+    </plurals>
+    <plurals name="file_saved">
+        <item quantity="few">%d súbory úspešne uložené.</item>
+        <item quantity="many">%d súborov úspešne uložených.</item>
+        <item quantity="one">%d súbor úspešne uložený.</item>
+        <item quantity="other">%d súborov úspešne uložených.</item>
+    </plurals>
+    <plurals name="ballot_really_delete">
+        <item quantity="few">Odstrániť ankety</item>
+        <item quantity="many">Odstrániť ankety</item>
+        <item quantity="one">Odstrániť anketu</item>
+        <item quantity="other">Odstrániť ankety</item>
+    </plurals>
+    <plurals name="ballot_really_delete_text">
+        <item quantity="few">Naozaj chcete odstrániť %1$d prieskumy? Nebudete môcť obnoviť hlasy.</item>
+        <item quantity="many">Naozaj chcete odstrániť %1$d prieskumov? Nebudete môcť obnoviť hlasy.</item>
+        <item quantity="one">Naozaj chcete odstrániť %1$d prieskum? Nebudete môcť obnoviť hlasy.</item>
+        <item quantity="other">Naozaj chcete odstrániť %1$d prieskumov? Nebudete môcť obnoviť hlasy.</item>
+    </plurals>
+    <plurals name="message_deleted">
+        <item quantity="few">%d správy boli odstránené</item>
+        <item quantity="many">%d správ bolo odstránených</item>
+        <item quantity="one">%d správa bola odstránená</item>
+        <item quantity="other">%d správ bolo odstránených</item>
+    </plurals>
+    <plurals name="notifications_for_x_hours">
+        <item quantity="few">Na %d hodiny</item>
+        <item quantity="many">Na %d hodín</item>
+        <item quantity="one">Na %d hodinu</item>
+        <item quantity="other">Na %d hodín</item>
+    </plurals>
+    <plurals name="some_contacts_not_deleted">
+        <item quantity="few">%d kontakty nebolo možné odstrániť, pretože sú stále súčasťou skupiny.</item>
+        <item quantity="many">%d kontaktov nebolo možné odstrániť, pretože sú stále súčasťou skupiny.</item>
+        <item quantity="one">%d Kontakt nebolo možné odstrániť, pretože je stále súčasťou skupiny.</item>
+        <item quantity="other">%d kontaktov nebolo možné odstrániť, pretože sú stále súčasťou skupiny.</item>
+    </plurals>
+    <plurals name="message_archived">
+        <item quantity="few">%d konverzácie archivované</item>
+        <item quantity="many">%d konverzácií archivovaných</item>
+        <item quantity="one">%d konverzácia archivovaná</item>
+        <item quantity="other">%d konverzácií archivovaných</item>
+    </plurals>
+    <plurals name="webclient_running_sessions">
+        <item quantity="few">%d spustené relácie</item>
+        <item quantity="many">%d spustených relácií</item>
+        <item quantity="one">%d spustená relácia</item>
+        <item quantity="other">%d spustených relácií</item>
+    </plurals>
+    <plurals name="really_delete_incoming_request">
+        <item quantity="few">Naozaj chcete odstrániť %d skupinové žiadosťi? Po odstránení nemôžete na žiadosti odpovedať.</item>
+        <item quantity="many">Naozaj chcete odstrániť %d skupinových žiadosťí? Po odstránení nemôžete na žiadosti odpovedať.</item>
+        <item quantity="one">Naozaj chcete odstrániť %d skupinovú žiadosť? Po odstránení nemôžete na žiadosti odpovedať.</item>
+        <item quantity="other">Naozaj chcete odstrániť %d skupinových žiadosťí? Po odstránení nemôžete na žiadosti odpovedať.</item>
+    </plurals>
+    <plurals name="really_delete_group_link">
+        <item quantity="few">Naozaj chcete odstrániť %d odkazy na skupinu?
+Ľudia už cez ne nebudú môcť posielať žiadosti.
+Predtým prijaté žiadosti však možno stále prijať alebo odmietnuť.</item>
+        <item quantity="many">Naozaj chcete odstrániť %d odkazov na skupinu?
+Ľudia už cez ne nebudú môcť posielať žiadosti.
+Predtým prijaté žiadosti však možno stále prijať alebo odmietnuť.</item>
+        <item quantity="one">Naozaj chcete odstrániť %d odkaz na skupinu?
+Ľudia už cez ňu nebudú môcť posielať žiadosti.
+Predtým prijaté žiadosti však možno stále prijať alebo odmietnuť.</item>
+        <item quantity="other">Naozaj chcete odstrániť %d odkazov na skupinu?
+Ľudia už cez ne nebudú môcť posielať žiadosti.
+Predtým prijaté žiadosti však možno stále prijať alebo odmietnuť.</item>
+    </plurals>
+    <plurals name="chat_deleted">
+        <item quantity="few">%d konverzácie odstránené.</item>
+        <item quantity="many">%d konverzácií odstránených.</item>
+        <item quantity="one">%d konverzácia odstránená.</item>
+        <item quantity="other">%d konverzácií odstránených.</item>
+    </plurals>
+    <plurals name="forward_security_messages_skipped">
+        <item quantity="few">Od poslednej správy sa stratili %d správy.</item>
+        <item quantity="many">Od poslednej správy sa stratilo %d správ.</item>
+        <item quantity="one">Od poslednej správy sa stratila jedna správa.</item>
+        <item quantity="other">Od poslednej správy sa stratilo %d správ.</item>
+    </plurals>
+    <plurals name="delete_messages">
+        <item quantity="few">Odstrániť %d správy v tomto zariadení?</item>
+        <item quantity="many">Odstrániť %d správ v tomto zariadení?</item>
+        <item quantity="one">Odstrániť %d správu v tomto zariadení?</item>
+        <item quantity="other">Odstrániť %d správ v tomto zariadení?</item>
+    </plurals>
 </resources>

+ 37 - 2
app/src/main/res/values-sk/voip_strings.xml

@@ -54,12 +54,13 @@
     <string name="voip_prefs_video_codec_sw">Softvérové kodeky</string>
     <string name="voip_connection_failed">Spojenie nebolo nadviazané</string>
     <string name="voip_connection_lost">Spojenie prerušené</string>
-    <string name="prefs_voip_reject_incoming_calls_title">Odmietať mobilné hovory</string>
-    <string name="prefs_voip_reject_incoming_calls_summary">Odmietať prichádzajúce mobilné hovory, pokiaľ prebieha Threema hovor.</string>
+    <string name="prefs_voip_reject_incoming_calls_title">Odmietnuť mobilné hovory</string>
+    <string name="prefs_voip_reject_incoming_calls_summary">Odmietnuť prichádzajúce mobilné hovory, keď je aktívny hovor Threema.</string>
     <string name="voip_contact_not_found">Pre toto číslo nebol nájdený Threema kontakt.</string>
     <string name="voip_another_pstn_call">Hovor nie je možné uskutočniť. Stále prebieha klasický telefónny hovor.</string>
     <string name="voip_call_status_off_hours">Hovory mimo pracovnú dobu</string>
     <string name="voip_peer_video_disabled">Video hovory sú zakázané protistranou.</string>
+    <string name="voip_reject_channel_name">Zmena stavu hovoru</string>
     <!-- WebRTC debugger -->
     <string name="voip_prefs_webrtc_debug">Diagnostika WebRTC</string>
     <string name="voip_prefs_webrtc_debug_summary">Spustením tohoto nástroja vám umožní hľadať zdroj problémov s nastavením spojenia hlasového hovoru</string>
@@ -69,4 +70,38 @@
     <string name="voip_webrtc_debug_done">Hotovo. Pokiaľ zaznamenáte problémy s nadviazaním spojenia hovoru, odošlite tento výstup podpore Threema.</string>
     <string name="voip_webrtc_debug_copied">Skopírované do schránky</string>
     <string name="voip_webrtc_debug_copy_clipboard">Skopírovať do schránky</string>
+    <!-- Group Calls -->
+    <string name="voip_gc_members_notified">Všetci členovia skupiny boli upozornení</string>
+    <string name="voip_gc_notification_channel_description">Skupinové hovory</string>
+    <string name="voip_gc_notification_title">Skupinový hovor</string>
+    <string name="voip_gc_notification_call_started">%1$s začal(a) skupinový hovor v %2$s</string>
+    <string name="voip_gc_notification_call_started_generic">%1$s začal(a) skupinový hovor</string>
+    <string name="voip_gc_notification_call_started_generic_outbox">Začali ste skupinový hovor</string>
+    <string name="voip_gc_dismiss_call">Ignorovať</string>
+    <string name="voip_gc_join_call">Pripojiť sa</string>
+    <string name="voip_gc_ongoing_call">Prebiehajúci skupinový hovor</string>
+    <string name="voip_gc_waiting_for_participants">Čakanie na účastníkov</string>
+    <string name="voip_gc_participant_avatar_description">Profilová fotka účastníka</string>
+    <string name="voip_gc_participant_mute_status_description">Stav stlmeného účastníka</string>
+    <string name="voip_gc_notification_new_call_public">Bol spustený nový skupinový hovor</string>
+    <string name="voip_gc_open_call">Otvoriť</string>
+    <string name="voip_gc_call_started">Bol spustený skupinový hovor</string>
+    <string name="voip_gc_call_ended">Skupinový hovor sa skončil</string>
+    <string name="voip_gc_in_call">V skupinovom hovore</string>
+    <string name="voip_gc_sfu_not_available">Server je nedostupný, skúste to neskôr</string>
+    <string name="voip_gc_call_error">Skupinový hovor sa nepodarilo spustiť</string>
+    <string name="voip_gc_call_full_generic">Dosiahlo sa maximum: K tomuto skupinovému hovoru sa nemôžu pripojiť žiadni ďalší účastníci.</string>
+    <string name="voip_gc_call_full_n">Dosiahol sa maximálny počet účastníkov (%1$d), k tomuto skupinovému hovoru sa nemôžete pripojiť.</string>
+    <plurals name="n_participants_in_call">
+        <item quantity="one">%d účastník</item>
+        <item quantity="other">%d účastníkov</item>
+        <item quantity="few">%d účastníci</item>
+        <item quantity="many">%d účastníkov</item>
+    </plurals>
+    <plurals name="n_members_dont_support_group_calls">
+        <item quantity="one">Upozornenie: Jeden člen sa nemôže zúčastniť skupinových hovorov.</item>
+        <item quantity="other">Upozornenie: %d členov sa nemôže zúčastniť skupinových hovorov.</item>
+        <item quantity="few">Upozornenie: %d členovia sa nemôžu zúčastniť skupinových hovorov.</item>
+        <item quantity="many">Upozornenie: %d členov sa nemôže zúčastniť skupinových hovorov.</item>
+    </plurals>
 </resources>

+ 33 - 33
app/src/main/res/values-tr/strings.xml

@@ -120,7 +120,7 @@
     <string name="linked_email">E-posta</string>
     <string name="linked_mobile">Cep telefonu numarası</string>
     <string name="public_nickname">Takma isim</string>
-    <string name="share_via">Paylaş...</string>
+    <string name="share_via">Paylaş</string>
     <string name="share_subject">%s görüşmesi</string>
     <string name="message_delete_undo">Geri al</string>
     <string name="mobile_already_linked">Threema kimliğiniz zaten bu cep telefonu numarasına bağlı</string>
@@ -258,8 +258,8 @@ tekrar denemeden önce girdiğiniz numaranın doğru olduğundan ve mobil ağa b
     <string name="prefs_masterkey_notification_newmsg_off">Yeni mesajlar, ana anahtar kilitliyken bildirim tetiklemez</string>
     <string name="prefs_masterkey_notification_newmsg_on">Yeni mesajlar, ana anahtar kilitliyken genel bir bildirim tetikler</string>
     <string name="chat_history_attached">Konuşma günlüğü eklendi.</string>
-    <string name="backup_data_title">Veri yedekleme</string>
-    <string name="backup_data_password_msg">Verileriniz dahili USB depolama biriminizde bir ZIP dosyasına kaydedilecek ve herhangi bir Android cihazda geri yüklenebilir olacaktır. Lütfen veri yedeklemenizi korumak için bir şifre girin.</string>
+    <string name="backup_data_title">Veri Yedekleme</string>
+    <string name="backup_data_password_msg">Verileriniz dahili USB depolama alanınızdaki bir ZIP dosyasına kaydedilecek ve herhangi bir Android cihazda geri yüklenebilir. Veri yedeğinizi korumak için lütfen bir parola girin.</string>
     <string name="restore_data_password_msg">Bu yedeklemeyi oluşturmak için kullandığınız şifreyi girin.</string>
     <string name="backup_data_media">Büyük medya dosyalarını (video, belgeler, orijinal resimler) dahil edin</string>
     <string name="backup_data_new">Veri yedeği oluştur</string>
@@ -272,7 +272,7 @@ tekrar denemeden önce girdiğiniz numaranın doğru olduğundan ve mobil ağa b
     <string name="prefs_sum_pin_grace">Ekran kilidinin etkinleşmesine kadar geçen süre</string>
     <string name="click_here_to_change_pin">PIN kodu ayarlandı. Değiştirmek için buraya dokunun</string>
     <string name="set_pin_menu_title">Yeni PIN kodu ayarla</string>
-    <string name="set_pin_summary_intro">Sayısal bir PIN kodu (yalnızca rakamlar) ayarlayarak gizliliğinizi koruyun. Bu PIN kodu, belirli bir sürenin ardından uygulamanın kullanıcı arayüzüne erişimini kilitlemek veya özel sohbetleri korumak için kullanılabilir</string>
+    <string name="set_pin_summary_intro">Sayısal bir PIN kodu (yalnızca rakamlar) ayarlayarak gizliliğinizi koruyun. Bu PIN kodu, belirli bir sürenin ardından uygulamanın kullanıcı arayüzüne erişimi kilitlemek veya özel sohbetleri korumak için kullanılabilir.</string>
     <string name="set_pin_again_summary">PIN kodunu tekrar girin</string>
     <string name="set_pin_hint">PIN kodu</string>
     <string name="title_addgroup">Yeni grup</string>
@@ -385,10 +385,10 @@ tekrar denemeden önce girdiğiniz numaranın doğru olduğundan ve mobil ağa b
     <string name="distribution_list">Dağıtım listesi</string>
     <string name="title_tab_distribution_list">Dağıtım listeleri</string>
     <string name="no_matching_distribution_lists">Eşleşen dağıtım listesi yok</string>
-    <string name="is_typing">yazıyor...</string>
+    <string name="is_typing">yazıyor</string>
     <string name="push_not_available_title">Push hizmeti bulunamadı</string>
     <string name="push_not_available_text1">Google Play Hizmetleri yüklü veya güncel olmadığı için cihazınızda bir push hizmeti bulamadık.</string>
-    <string name="push_not_available_text2">%s sunucuya kalıcı bir arka plan bağlantısı açmaya çalışacak. Cihazınızın pil optimizasyon mekanizmaları arka plan bağlantısını engelliyorsa, güvenilir bir şekilde çalışmayabilir.</string>
+    <string name="push_not_available_text2">%s sunucuya kalıcı bir arka plan bağlantısı açmaya çalışacak. Cihazınızın pil optimizasyon mekanizmaları arka plan bağlantısını engelliyorsa, bu güvenilir şekilde çalışmayabilir.</string>
     <string name="backup_in_progress">Yedekleme devam ediyor</string>
     <string name="backup_or_restore_success_body">Veri yedekleme başarıyla tamamlandı</string>
     <string name="backup_or_restore_error">Threema yedekleme</string>
@@ -404,7 +404,7 @@ tekrar denemeden önce girdiğiniz numaranın doğru olduğundan ve mobil ağa b
     <string name="verification_level3_explain">Kare kodunu tarayarak kimliğini ve genel anahtarını kişisel olarak doğruladığınız kişi.</string>
     <string name="verification_level2_explain">Telefon numarası ve / veya e-posta adresi rehberinizde bulunan kişi.</string>
     <string name="verification_level1_explain">Bilinmeyen kişi; bu kişi kimliğine telefon numarası veya e-posta adresi bağlamadı ya da adres defteriniz bu iletişim bilgilerini içermiyor.</string>
-    <string name="state_dialog_received">Alınan</string>
+    <string name="state_dialog_received">Alın</string>
     <string name="prefs_title_hide_screenshots">Küçük resim ve ekran görüntüsü yok</string>
     <string name="prefs_summary_hide_screenshots">Uygulama geçişinde küçük resimleri gösterme ve ekran görüntülerini devre dışı bırak</string>
     <string name="media_gallery">Galeri</string>
@@ -486,7 +486,7 @@ tekrar denemeden önce girdiğiniz numaranın doğru olduğundan ve mobil ağa b
     <string name="menu_video_size_large">Orijinal boyut</string>
     <string name="show_contact">Kişiyi göster</string>
     <string name="chat_with">%1$s ile sohbet et</string>
-    <string name="kick_user_from_group">%1$s gruptan at</string>
+    <string name="kick_user_from_group">%1$s kişisini gruptan çıkar</string>
     <string name="show_as_qrcode">Kare kod olarak göster</string>
     <string name="qr_code">Kare kod</string>
     <string name="really_leave_id_export">Henüz yapmadıysanız, dışa aktarılan kimliğinize ait metin dizesini veya ilgili kare kodunuzu güvenli bir yere kaydedin veya yazdırın. Threema kimliğiniz, yedek olmadan geri yüklenemez.</string>
@@ -566,7 +566,7 @@ tekrar denemeden önce girdiğiniz numaranın doğru olduğundan ve mobil ağa b
     <string name="prefs_android_emojis">Sistem emojileri</string>
     <string name="prefs_default_emojis">Threema emojileri (varsayılan)</string>
     <string name="android_emojis_warning">Not: Sistemin karakter seti Threema tarafından desteklenen tüm emojileri görüntüleyemeyebilir.</string>
-    <string name="crop">Kırp</string>
+    <string name="crop">Bitti</string>
     <string name="scan_id_mismatch_title">Kimlik uyuşmazlığı</string>
     <string name="scan_id_mismatch_message">Taradığınız kimlik, kaydettiğiniz kişiyle eşleşmiyor.</string>
     <string name="title_remove_picture">Resmi kaldır</string>
@@ -652,7 +652,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="error_saving_file">Dosya kaydedilirken hata oluştu. İzinleri kontrol edin.</string>
     <string name="wait_one_minute">Lütfen arama talebinde bulunmadan önce kısa mesajın gelmesi için en az 10 dakika bekleyin.</string>
     <string name="backup_id">Dışa aktarılan kimlik</string>
-    <string name="backup_data">Veri yedekleme</string>
+    <string name="backup_data">Veri Yedekleme</string>
     <string name="really_leave_group_admin_message">Bu grubun yöneticisi sizsiniz. Şimdi bırakırsanız yöneticisiz kalacak. Diğer üyeler hala sohbet edebilecek, ancak değişiklikler artık mümkün olmayacak</string>
     <string name="action_delete_group">Grubu sil</string>
     <string name="delete_my_group_message">Bu grubu gerçekten tamamen silmek istiyor musunuz? Tüm iletiler kaldırılacak ve kalan üyeler artık grubu kullanamaz.</string>
@@ -679,8 +679,8 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="continue_anyway">Devam et</string>
     <string name="invalid_input">Geçersiz giriş</string>
     <string name="already_licensed">Zaten lisanslı</string>
-    <string name="hide_chat">Özel sohbetler</string>
-    <string name="really_hide_chat_message">Bu sohbeti özel olarak işaretlemek ister misiniz? Mesaj listesindeki özel sohbetlerin görünürlüğünü değiştirmek için menüyü kullanın.</string>
+    <string name="hide_chat">Özel Sohbetler</string>
+    <string name="really_hide_chat_message">Bu sohbeti özel olarak işaretlemek istiyor musunuz? Mesaj listesindeki özel sohbetlerin görünürlüğünü değiştirmek için menüyü kullanın.</string>
     <string name="chat_hidden">Sohbet özel olarak işaretlendi</string>
     <string name="title_show_private_chats">Özel sohbetleri göster</string>
     <string name="title_hide_private_chats">Özel sohbetleri gizle</string>
@@ -689,7 +689,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="lock_option_none">Hiçbiri</string>
     <string name="lock_option_pin">PIN kodu</string>
     <string name="lock_option_screenlock">Sistem ekran kilidi</string>
-    <string name="hide_chat_message_explain">Threema, belirli sohbetleri bir PIN kodu ile korumanıza ve bunları geçici olarak mesaj listenizde gizlemenize imkan tanır. Özel sohbetleri etkinleştirmek için lütfen bir PIN kodu ayarlayın veya ayarlarda sistem ekran kilidi\'ni (Android 6.0+) etkinleştirin.</string>
+    <string name="hide_chat_message_explain">Threema, belirli sohbetleri bir PIN kodu ile korumanıza ve bunları geçici olarak mesaj listenizde gizlemenize imkan tanır. Özel sohbetleri etkinleştirmek için lütfen bir PIN kodu ayarlayın veya ayarlarda sistem ekran kilidini (Android 6.0+) etkinleştirin.</string>
     <string name="set_lock">Kurulumu başlat</string>
     <string name="prefs_title_access_protection">Erişim koruması</string>
     <string name="private_chat_subject">Özel</string>
@@ -701,7 +701,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="grace_thirty_minutes">30 dakika</string>
     <string name="grace_never">Asla (manuel)</string>
     <string name="never">Asla</string>
-    <string name="unhide_chats_confirm">Erişim korumasını şimdi kaldırırsanız, özel sohbetleriniz tekrar görünür hale gelecektir.</string>
+    <string name="unhide_chats_confirm">Erişim korumasını şimdi kaldırırsanız, özel sohbetleriniz tekrar görünür hale gelir.</string>
     <string name="verification_started">Doğrulama başladı</string>
     <string name="cannot_open_file">Dosya açılamadı</string>
     <string name="prefs_title_image_attach_previews">Hızlı medya seçimi</string>
@@ -926,7 +926,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="empty_chat_confirm">Bu sohbetteki tüm mesajlar silinecektir. Devam edilsin mi?</string>
     <string name="emptying_chat">Sohbet temizleniyor</string>
     <string name="set_private">\"Özel sohbet\" olarak işaretle</string>
-    <string name="unset_private">\"Özel sohbet\" devre dışı bırak</string>
+    <string name="unset_private">\"Özel sohbet\" seçeneğini devre dışı bırak</string>
     <string name="delete_group_message">Bu gruptan ayrılıp tamamen silmek istiyor musunuz? Tüm mesajlar kaldırılacaktır.</string>
     <string name="delete_left_group_message">Bu grubu gerçekten silmek istiyor musunuz? Tüm mesajlar kaldırılacaktır.</string>
     <string name="chats">Sohbetler</string>
@@ -950,7 +950,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="add_answer">Cevap ekle</string>
     <string name="title_cannot_be_empty">Anket başlığı boş bırakılamaz</string>
     <string name="voip_disabled">Threema aramaları devre dışı bırakıldı</string>
-    <string name="hide_chat_enter_message_explain">Bu sohbet özel sohbet olarak işaretlendi. Giriş yapmak için lütfen önce erişim korumasını ayarlayın.</string>
+    <string name="hide_chat_enter_message_explain">Bu sohbet özel sohbet olarak işaretlendi. Giriş yapmak için öncelikle lüfen erişim korumasını kurun.</string>
     <string name="unknown">Bilinmeyen</string>
     <string name="miui_notification_title">MIUI\'deki bildirimler hakkında önemli uyarı</string>
     <string name="miui_notification_body">MIUI 10, varsayılan olarak tüm yeni oluşturulan bildirim kanalları için sesi ve ışıkları devre dışı bırakır (Xiaomi tarafından \"önemli\" kabul edilen bazı uygulamalar hariç). Telefonunuzun uygulamaya özel bildirim ayarları ekranında her kanal için bunları açıkça etkinleştirmeniz gerekir. Daha fazla bilgi için telefonunuzun üreticisine başvurun.</string>
@@ -990,7 +990,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="lp_search_place">Şehir girin</string>
     <string name="lp_no_nearby_places_found">Yakınlarda yer bulunamadı</string>
     <string name="select_directory_for_backup">Burayı kaydet</string>
-    <string name="data_backup_headline">Sohbetler ve medya dahil tüm verilerinizi kaydetmek için bir yedek oluşturun.</string>
+    <string name="data_backup_headline">Sohbetler ve medya dahil tüm verilerinizi kaydetmek için bir veri yedeği oluşturun.</string>
     <string name="data_backup_save_path">Yedekleme dizini</string>
     <string name="change">Değiştir</string>
     <string name="data_backup_last_date">Son başarılı veri yedekleme</string>
@@ -1012,7 +1012,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="whatsnew_headline"><![CDATA[<p>Uçtan uca şifrelenmiş grup aramaları artık Android için %1$s içinde kullanılabilir.</p>
 <p>Bir arama başlatmak için bir grup sohbeti açın ve üst kısımdaki kamera düğmesine dokunun.</p>
 <p>Tüm grup üyeleri bir bildirim alacak ve aramaya katılmak isteyip istemeyeceklerine karar verebilecekler.</p>
-<p><b>Lütfen dikkat:</b> iOS için grup görüşmesi özelliği daha sonra kullanıma sunulacaktır.</p>]]></string>
+<p><b>Lütfen dikkat:</b> iOS için grup araması özelliği daha sonra kullanıma sunulacaktır.</p>]]></string>
     <string name="whatsnew2_title">(boş bir cümle)</string>
     <string name="whatsnew2_body">(boş bir cümle)</string>
     <string name="tap_to_start">%s şimdi başlatmak için buraya dokunun.</string>
@@ -1021,7 +1021,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="backup_data_no_permission">Bu dizine yazılamıyor. Lütfen başka bir yer seçin.</string>
     <string name="prefs_sum_show_unread_badge">Alt gezinme sekmelerinde rozetleri göster</string>
     <string name="prefs_title_show_unread_badge">Rozetler</string>
-    <string name="pinning_not_trusted">Sertifika sabitleme hatası. Lütfen cihazınızın kimlik bilgileri deposunda \"Entrust Root Certification Authority - G2\" yüklü ve etkinleştirilmiş olup olmadığını kontrol edin.</string>
+    <string name="pinning_not_trusted">Sertifika Sabitleme Hatası. Lütfen cihazınızın kimlik bilgileri deposunda “Entrust Root Certification Authority - G2” kurulu ve etkinleştirilmiş olup olmadığını kontrol edin.</string>
     <string name="pinning_failed">Sertifika sabitleme hatası. Olası ortadaki adam saldırısı. \"AdGuard\" gibi bir reklam engelleyici, içerik filtresi veya güvenlik duvarı uygulamanız varsa, lütfen Threema için devre dışı bırakın.</string>
     <string name="open_myid_popup">Hızlı erişim penceresini aç</string>
     <string name="logo">Logo / Yukarı kaydır</string>
@@ -1045,7 +1045,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="mime_type">MIME türü</string>
     <string name="password_does_not_comply">Parola yönetici tarafından belirlenen yönergelere uymuyor.</string>
     <string name="audio_mute_due_to_focus_loss">Odak kaybı nedeniyle ses geçici olarak kapatıldı</string>
-    <string name="restore_data_backup_explain">Bir veri yedeğini geri yüklemek için, önce \"Profilim\" ekranından Threema kimliğinizi silin. Uygulama yeniden başladığında, \"Yedekten geri yükle\", \"Diğer geri yükleme seçenekleri\", \"Veri yedekleme\" öğelerini seçin ve ardından geri yüklemek istediğiniz yedek dosyasını seçin.</string>
+    <string name="restore_data_backup_explain">Bir veri yedeğini geri yüklemek için önce Threema kimliğinizi \"Profilim\" ekranından silin.\n\nUygulama yeniden başladığında, \"Yedekten geri yükle\", \"Diğer geri yükleme seçenekleri\", \"Veri Yedeği\" ni seçin ve ardından geri yüklemek istediğiniz veri yedeği dosyasını seçin.</string>
     <string name="audio_focus_loss_complete">Ses odağının tamamen kaybolması nedeniyle arama sonlandı.</string>
     <string name="tap_for_picture_hold_for_video">Resim için dokunun, video için basılı tutun</string>
     <string name="sending_media">Medya gönderiliyor</string>
@@ -1118,7 +1118,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="state_processing">işleniyor</string>
     <string name="passphrase_locked">Parola kilitli</string>
     <string name="selected_media">Seçiminiz</string>
-    <string name="attach_gif">Gif</string>
+    <string name="attach_gif">GIF</string>
     <string name="attach_gallery">Galeri</string>
     <string name="attach_picture">Resim</string>
     <string name="attach_video">Video</string>
@@ -1171,7 +1171,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="unread">Okunmadı</string>
     <string name="missing_app_licence">Uygulama mağazası satın alma işleminizi doğrulayamadı. Google Play kullanıyorsanız, lütfen Google Play Store Uygulamasının verilerini temizleyin ve cihazınızı yeniden başlatın.</string>
     <string name="set_backup_path">Yedekleme dizinini ayarla</string>
-    <string name="set_backup_path_intro">Aşağıdaki ekranda lütfen veri yedeğinin kaydedileceği klasörü seçin.</string>
+    <string name="set_backup_path_intro">Aşağıdaki ekranda lütfen veri yedeklerinin kaydedileceği klasörü seçin.</string>
     <string name="discard_changes_title">Değişiklikleri yoksay</string>
     <string name="group_join_request_message_info"><![CDATA[<b>%1$s</b> grup yöneticisine, <b>%2$s</b> grubuna neden katılmak istediğinizi belirten kısa bir mesaj yazın.]]></string>
     <string name="group_join_request">Gruba katılma isteği</string>
@@ -1183,7 +1183,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="reject">Reddet</string>
     <string name="group_request_already_sent"><![CDATA[Bu bağlantı üzerinden <b>%s</b> için zaten devam eden gruba katılma talebiniz var ve grup yöneticisinden yanıt bekleniyor. Yeniden talep göndermeyi denemek istiyorsanız listedeki seçeneğe tıklayın.]]></string>
     <string name="group_link_none">Henüz bağlantı oluşturulmadı</string>
-    <string name="group_request_confirm_send"><![CDATA[<b>%1$s</b> için <b>%2$s</b> yöneticisine grup isteği göndermek üzeresiniz. Bu bağlantı geçersiz kılınmadıysa, yöneticinin cihazı, isteğinizi alır almaz otomatik olarak gruba eklenirsiniz.]]></string>
+    <string name="group_request_confirm_send"><![CDATA[<b>%2$s</b> yöneticisine <b>%1$s</b> için bir grup isteği göndermek üzeresiniz. Bu bağlantı geçersiz kılınmadıysa, yöneticinin cihazı isteğinizi alır almaz gruba otomatik olarak ekleneceksiniz.]]></string>
     <string name="really_delete_group_request_title_singular">Grup isteğini sil</string>
     <string name="really_delete_group_request_title_plural">Grup isteklerini sil</string>
     <string name="sent_to">%s gönderildi</string>
@@ -1299,11 +1299,11 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="not_voted_user_list">Bu katılımcılar oy vermedi: %s</string>
     <string name="contact_update">Kişi durumları güncelleniyor</string>
     <string name="invalid_onprem_id">Bu kimlik (artık) mevcut değil veya kimliğiniz ile uyumlu değil.</string>
-    <string name="enable_unknown_sources">Yükleme başarısız. Lütfen %s için \"Bilinmeyen uygulamaları yükle\" seçeneğinin etkinleştirildiğinden emin olun.</string>
+    <string name="enable_unknown_sources">Yüklenemiyor. Lütfen %s için \"Bilinmeyen uygulamaları yükle\" seçeneğinin etkinleştirildiğinden emin olun.</string>
     <string name="threema_push">Threema Push</string>
     <string name="threema_push_notification_text">Daha fazlasını öğrenmek için dokunun.</string>
     <string name="threema_push_notification_info_text_1">Threema Push, gelen mesajlar ve aramalar hakkında sizi bilgilendirmek için arka planda çalışıyor.</string>
-    <string name="threema_push_notification_info_text_2">Uygulamalar, kalıcı bir bildirim göstermeden arka planda çalışamaz. Bu bildirimi göstererek, uygulamayı aktif olarak kullanmadığınızda bile Threema Push\'un etkin kalmasını sağlayabiliriz.</string>
+    <string name="threema_push_notification_info_text_2">Uygulamalar, kalıcı bir bildirim göstermeden arka planda çalışamaz. Bu bildirimi göstererek, uygulamayı aktif olarak kullanmadığınızda bile Threema Push\'un aktif kalmasını sağlayabiliriz.</string>
     <string name="threema_push_notification_info_text_3">Gecikmeli veya eksik bildirimlerle ilgili sorun yaşamaya devam ederseniz, uygulamanın arka planda herhangi bir kısıtlama olmaksızın etkin olabilmesini ve tüm pil tasarruflarının devre dışı bırakılmasını sağlamak için lütfen sistem ayarlarınızı yapın.</string>
     <string name="threema_push_service_description">Threema Push aktifken gösterilen kalıcı bildirim</string>
     <string name="threema_push_activated">Threema Push etkinleştirildi.</string>
@@ -1350,14 +1350,14 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="contact_picture_content_description">Kişi resmi</string>
     <string name="prefs_title_use_system_ringtone">Sistem zil sesini kullan</string>
     <string name="organization_type">Kuruluş</string>
-    <string name="permission_bluetooth_connect_required">Bağlı bluetooth kulaklıkları bulmak için \"Yakındaki cihazlar\" iznini etkinleştir</string>
+    <string name="permission_bluetooth_connect_required">Bağlı Bluetooth kulaklıkları bulmak için \"Yakındaki cihazlar\" iznini etkinleştir</string>
     <string name="threema_push_start_webclient_sessions_manually">Threema Push aktif. Threema web ve masaüstü oturumları bu nedenle manuel olarak başlatılmalıdır.</string>
     <string name="tooltip_multiple_recipients_title">Yeni: Birden çok alıcı</string>
     <string name="tooltip_multiple_recipients_text">Aynı mesajı göndermek üzere birden fazla alıcı seçmek için uzun dokunun.</string>
     <string name="synchronizing">Eşitleniyor...</string>
     <string name="forward_security">Mükemmel İletme Gizliliği ile mesaj gönder</string>
     <string name="forward_security_mode">Mükemmel İletme Gizliliği</string>
-    <string name="forward_security_mode_none">no</string>
+    <string name="forward_security_mode_none">Hayır</string>
     <string name="clear_forward_security">Mükemmel İletme Gizliliği Oturumlarını Temizle</string>
     <string name="forward_security_cleared">Bu kişiyle Mükemmel İletme Gizliliği oturumları temizlendi</string>
     <string name="message_without_forward_security">Mükemmel İletme Gizliliği olmayan bir mesaj alındı. Gönderenin Mükemmel İletme Gizliliğini kasıtlı olarak devre dışı bıraktığını doğrulayın.</string>
@@ -1397,10 +1397,10 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="read_phone_state_short_message">Devam eden aramaları kontrol etmek için Threema\'ya Telefon izni verin.</string>
     <string name="prefs_title_read_phone_state">Telefon izni ver</string>
     <string name="prefs_title_hibernation">Kullanılmayan uygulama ayarları</string>
-    <string name="prefs_summary_hibernation_api_32">Threema\'nın daha uzun süre kullanılmadığında sistem tarafından duraklatılmasını önlemek için lütfen \"İzinleri kaldır ve yer aç\" sistem ayarını devre dışı bırakın.</string>
-    <string name="prefs_summary_hibernation_api">Threema\'nın daha uzun süre kullanılmadığında sistem tarafından duraklatılmasını önlemek için lütfen \"Kullanılmıyorsa uygulama etkinliğini duraklat\" sistem ayarını devre dışı bırakın.</string>
+    <string name="prefs_summary_hibernation_api_32">Threema\'nın uzun süre kullanılmadığında sistem tarafından duraklatılmasını önlemek için lütfen \"İzinleri kaldır ve yer aç\" sistem ayarını devre dışı bırakın.</string>
+    <string name="prefs_summary_hibernation_api">Threema\'nın uzun süre kullanılmadığında sistem tarafından duraklatılmasını önlemek için lütfen \"Kullanılmıyorsa uygulama etkinliğini duraklat\" sistem ayarını devre dışı bırakın.</string>
     <string name="unable_to_fetch_configuration">Yapılandırma sunucusundan veri alınamıyor. Daha sonra tekrar deneyin</string>
-    <string name="rogue_device_warning">Sunucu, aynı Threema kimliğine sahip farklı bir cihazdan bağlantı tespit etti.\n\nBu arada Threema kimliğinizi başka bir cihazda veya daha eski bir uygulama sürümünde kullanmadıysanız, lütfen destek ekibiyle iletişime geçin ve mümkünse günlük dosyasını gönderin.</string>
+    <string name="rogue_device_warning">Sunucu, aynı Threema kimliğine sahip farklı bir cihazdan bir bağlantı tespit etti.\nBu arada Threema kimliğinizi başka bir cihazda veya daha eski bir uygulama sürümünde kullanmadıysanız, lütfen destek ekibiyle iletişime geçin ve mümkünse günlük dosyasını gönderin.</string>
     <string name="fetch2_failure">Konfigurasyon sunucusuyla eşitleme başarısız oldu.</string>
     <string name="no_members_support_group_calls">Bu grupta grup aramalarına cevap verebilecek başka üye yok</string>
     <string name="group_calls">Grup aramaları</string>
@@ -1408,8 +1408,8 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="group_no_members">Bu grup başka üye içermiyor</string>
     <string name="group_call">Grup araması</string>
     <string name="checking_compatibility">Uyumluluk kontrol ediliyor…</string>
-    <string name="group_call_mic_permission_rationale">Grup aramaları yapmak için, «izinler» altında mikrofon erişimine %s için izin vermelisiniz.</string>
-    <string name="group_call_camera_permission_rationale">Diğer katılımcıların resminizi görebilmesi için, «izinler» altında kamera erişimine %s için izin vermelisiniz.</string>
+    <string name="group_call_mic_permission_rationale">Grup aramaları gerçekleştirmek için, \"izinler\" altında %s için mikrofon erişimine izin vermelisiniz.</string>
+    <string name="group_call_camera_permission_rationale">Diğer katılımcıların resminizi görmesi için, \"izinler\" altında %s için kamera erişimine izin vermelisiniz.</string>
     <string name="settings">Ayarlar</string>
     <string name="leave">Ayrıl</string>
     <string name="fs_key_mismatch">anahtar uyuşmazlığı</string>
@@ -1420,7 +1420,7 @@ sunucularımıza güvenli bir şekilde iletildi. Kişisel anahtar hiçbir zaman
     <string name="prefs_sum_group_calls_vibration">Bir grup araması başlatıldığında titreyip titremeyeceğini seçin</string>
     <string name="forward_security_mode_4dh">tamamlandı</string>
     <string name="forward_security_mode_2dh">tek taraflı</string>
-    <string name="forward_security_explanation">Mükemmel İletme Gizliliği (Perfect Forward Secrecy) (PFS), uzun süreli şifreleme anahtarının gizliliği ihlal edilmiş olsa bile kayıtlı bir iletişimi geriye dönük şifre çözme işleminden korur.\n\nHer iki taraftaki uygulama PFS\'i destekliyorsa seçenek etkinleştirilebilir.</string>
+    <string name="forward_security_explanation">Mükemmel İletme Gizliliği (Perfect Forward Secrecy (PFS)), uzun süreli şifreleme anahtarının gizliliği ihlal edilmiş olsa bile kayıtlı bir iletişimi geriye dönük şifre çözme işleminden korur.\n\nHer iki taraftaki uygulama PFS\'i destekliyorsa seçenek etkinleştirilebilir.</string>
     <plurals name="contacts_counter_label">
         <item quantity="one">%d kişi</item>
         <item quantity="other">%d kişi</item>

+ 6 - 6
app/src/main/res/values-tr/voip_strings.xml

@@ -73,13 +73,13 @@
     <!-- Group Calls -->
     <string name="voip_gc_members_notified">Tüm grup üyeleri bilgilendirildi</string>
     <string name="voip_gc_notification_channel_description">Grup çağrıları</string>
-    <string name="voip_gc_notification_title">Grup görüşmesi</string>
+    <string name="voip_gc_notification_title">Grup araması</string>
     <string name="voip_gc_notification_call_started">%1$s, %2$s içinde bir grup araması başlattı</string>
     <string name="voip_gc_notification_call_started_generic">%1$s bir grup araması başlattı</string>
     <string name="voip_gc_notification_call_started_generic_outbox">Bir grup araması başlattınız</string>
     <string name="voip_gc_dismiss_call">Yoksay</string>
     <string name="voip_gc_join_call">Katıl</string>
-    <string name="voip_gc_ongoing_call">Devam eden grup görüşmesi</string>
+    <string name="voip_gc_ongoing_call">Devam eden grup araması</string>
     <string name="voip_gc_waiting_for_participants">Katılımcılar bekleniyor</string>
     <string name="voip_gc_participant_avatar_description">Katılımcının profil resmi</string>
     <string name="voip_gc_participant_mute_status_description">Katılımcı sessiz durumu</string>
@@ -87,11 +87,11 @@
     <string name="voip_gc_open_call">Açık</string>
     <string name="voip_gc_call_started">Grup araması başlatıldı</string>
     <string name="voip_gc_call_ended">Grup araması sona erdi</string>
-    <string name="voip_gc_in_call">grup görüşmesinde</string>
+    <string name="voip_gc_in_call">grup aramasında</string>
     <string name="voip_gc_sfu_not_available">Sunucu kullanılamıyor, daha sonra tekrar deneyin</string>
-    <string name="voip_gc_call_error">Grup görüşmesi başlatılamadı</string>
-    <string name="voip_gc_call_full_generic">Maksimuma sayıya ulaşıldı: Bu grup görüşmesine başka katılımcı katılamaz.</string>
-    <string name="voip_gc_call_full_n">Maksimum %1$d katılımcıya ulaşıldı, bu grup görüşmesine katılamazsınız.</string>
+    <string name="voip_gc_call_error">Grup araması başlatılamadı</string>
+    <string name="voip_gc_call_full_generic">Maksimuma sayıya ulaşıldı: Bu grup aramasına başka katılımcı katılamaz.</string>
+    <string name="voip_gc_call_full_n">Maksimum %1$d katılımcıya ulaşıldı, bu grup aramasına katılamazsınız.</string>
     <plurals name="n_participants_in_call">
         <item quantity="one">%d katılımcı</item>
         <item quantity="other">%d katılımcı</item>

+ 7 - 7
app/src/main/res/values-zh-rCN/strings.xml

@@ -282,7 +282,7 @@ https://shop.threema.ch/retrieve_keys]]></string>
     <string name="prefs_sum_pin_grace">直到屏幕锁定被激活的时间</string>
     <string name="click_here_to_change_pin">PIN 码已设置。点击这里即可更改。</string>
     <string name="set_pin_menu_title">设置新 PIN 码</string>
-    <string name="set_pin_summary_intro">通过设置 PIN 码(仅数字)来保护您的隐私。此 PIN 码可用于在限制时间后锁定应用,或保护私人会话</string>
+    <string name="set_pin_summary_intro">通过设置 PIN 码(仅数字)来保护您的隐私。此 PIN 码可用于在限制时间后锁定应用,或保护私人会话</string>
     <string name="set_pin_again_summary">再次输入 PIN 码</string>
     <string name="set_pin_hint">PIN 码</string>
     <string name="title_addgroup">新建群组</string>
@@ -1058,7 +1058,7 @@ Threema ID。您将不会出现在朋友的联系人列表中。您确定要
     <string name="backup_data_no_permission">无法写入此目录。请选择另一个。</string>
     <string name="prefs_sum_show_unread_badge">在底部导航栏显示未读消息提示</string>
     <string name="prefs_title_show_unread_badge">未读消息提示</string>
-    <string name="pinning_not_trusted">证书固定失败。请检查是否在设备的凭据存储中安装并激活了 “委托根证书颁发机构-G2”。</string>
+    <string name="pinning_not_trusted">证书固定失败。请检查您的设备上的凭据存储中是否安装并激活了 “Entrust Root Certification Authority - G2”。</string>
     <string name="pinning_failed">证书固定失败。可能发生中间人攻击。如果您安装了广告拦截器、内容过滤器或防火墙应用程序,例如 AdGuard,请禁用后重开 Threema。</string>
     <string name="open_myid_popup">打开快速访问弹出窗口</string>
     <string name="logo">标志/回到顶部</string>
@@ -1221,7 +1221,7 @@ Threema ID。您将不会出现在朋友的联系人列表中。您确定要
     <string name="reject">拒绝</string>
     <string name="group_request_already_sent"><![CDATA[您已经通过这个链接发送了 <b>%s</b> 公开群组加入请求,正在等待群组管理员的回复。如果您想重新发送请求,请再次点击列表中的链接。]]></string>
     <string name="group_link_none">尚未生成链接</string>
-    <string name="group_request_confirm_send"><![CDATA[您即将向管理员 <b>%2$s</b> 发送 <b>%1$s</b> 群组加入请求。如果此链接没有失效,管理员一收到您的请求,您就会自动添加到群组。]]></string>
+    <string name="group_request_confirm_send"><![CDATA[您即将向管理员 <b>%2$s</b> 发送 <b>%1$s</b> 群组加入请求。如果此链接没有失效,而且管理员接受您的加入请求后,您就会自动加入到群组。]]></string>
     <string name="really_delete_group_request_title_singular">删除群组加入请求</string>
     <string name="really_delete_group_request_title_plural">删除群组加入请求</string>
     <string name="sent_to">发送到:%s</string>
@@ -1341,7 +1341,7 @@ Threema ID。您将不会出现在朋友的联系人列表中。您确定要
     <string name="threema_push">Threema Push</string>
     <string name="threema_push_notification_text">点击了解更多。</string>
     <string name="threema_push_notification_info_text_1">Threema Push 在后台持续运行,以通知您新收到的消息和来电。</string>
-    <string name="threema_push_notification_info_text_2">如果不能显示永久通知,应用程序就不能在后台运行。通过显示永久通知,可以确保 Threema Push 即使在您不主动使用应用程序时也会保持运行。</string>
+    <string name="threema_push_notification_info_text_2">如果不能显示永久通知,应用程序就不能在后台运行。通过显示永久通知,可以确保 Threema Push 即使在您不主动使用应用程序时也会保持运行。</string>
     <string name="threema_push_notification_info_text_3">如果您仍然遇到延迟或丢失通知的问题,请调整您的系统设置,以确保应用程序可以在后台不受任何限制地运行,并禁用节电模式。</string>
     <string name="threema_push_service_description">当 Threema Push 运行时,显示永久通知</string>
     <string name="threema_push_activated">Threema Push 现在已激活。</string>
@@ -1435,7 +1435,7 @@ Threema ID。您将不会出现在朋友的联系人列表中。您确定要
     <string name="read_phone_state_short_message">如要检查正在进行的通话,请授予 Threema 通话权限。</string>
     <string name="prefs_title_read_phone_state">授予通话权限</string>
     <string name="prefs_title_hibernation">未使用的应用设置</string>
-    <string name="prefs_summary_hibernation_api_32">为防止 Threema 在长时间不使用后被系统暂停,请禁用系统设置中的 “撤权限并释放空间” 。</string>
+    <string name="prefs_summary_hibernation_api_32">为防止 Threema 在长时间不使用后被系统暂停,请禁用系统设置中的 “撤权限并释放空间” 。</string>
     <string name="prefs_summary_hibernation_api">为防止 Threema 在长时间不使用后被系统暂停,请禁用系统设置中的 “暂停未使用应用的活动” 。</string>
     <string name="unable_to_fetch_configuration">无法从配置服务器获取数据,请稍后再试。</string>
     <string name="rogue_device_warning">服务器检测到有人试图从另一台设备登录现有的 Threema ID。\n\n如果您之前没有在其他设备上登录您的 Threema ID,或者使用旧版本的应用程序,请联系支持人员并发送日志文件。</string>
@@ -1447,7 +1447,7 @@ Threema ID。您将不会出现在朋友的联系人列表中。您确定要
     <string name="group_call">群组通话</string>
     <string name="checking_compatibility">正在检查兼容性...</string>
     <string name="group_call_mic_permission_rationale">如要进行群组通话,您必须在系统 “权限” 设置下允许 %s 访问麦克风权限。</string>
-    <string name="group_call_camera_permission_rationale">为了让其他参与者看到的照片,您必须在系统 “权限” 设置下允许 %s 访问相机权限。</string>
+    <string name="group_call_camera_permission_rationale">为了让其他参与者看到的照片,您必须在系统 “权限” 设置下允许 %s 访问相机权限。</string>
     <string name="settings">设置</string>
     <string name="leave">退出</string>
     <string name="fs_key_mismatch">密钥不匹配</string>
@@ -1458,7 +1458,7 @@ Threema ID。您将不会出现在朋友的联系人列表中。您确定要
     <string name="prefs_sum_group_calls_vibration">选择是否在群组通话开始时进行振动</string>
     <string name="forward_security_mode_4dh">双向保密</string>
     <string name="forward_security_mode_2dh">单向保密</string>
-    <string name="forward_security_explanation">完全前向保密 (PFS) 可保护记录的通信,即使长期加密密钥已泄露也不会被追溯解密。\n\n如果双方的应用程序都支持完全前向保密,则可以启用该选项。</string>
+    <string name="forward_security_explanation">完全前向保密 (PFS) 可保护会话记录的通信,即使长期加密密钥已泄露也不会被追溯解密。\n\n如果双方的应用程序都支持完全前向保密,则可以启用该选项。</string>
     <plurals name="contacts_counter_label">
         <item quantity="other">%d个联系人</item>
     </plurals>

+ 6 - 6
app/src/main/res/values-zh-rTW/strings.xml

@@ -1052,7 +1052,7 @@ Threema 支援的所有表情符號。</string>
     <string name="backup_data_no_permission">無法寫入此目錄。請選擇另一個。</string>
     <string name="prefs_sum_show_unread_badge">在導覽列顯示未讀訊息提示</string>
     <string name="prefs_title_show_unread_badge">未讀訊息提示</string>
-    <string name="pinning_not_trusted">憑證固定失敗。請檢查裝置認證儲存中是否安裝並啟動了「委託根認證機構 - G2」。</string>
+    <string name="pinning_not_trusted">憑證鎖定失敗。請檢查您的裝置上的認證儲存中是否安裝並啟動了「Entrust Root Certification Authority - G2」。</string>
     <string name="pinning_failed">憑證固定失敗。可能發生了中間人攻擊。如果您安裝了廣告攔截器、內容過濾器或防火牆應用程式,例如 AdGuard,請停用後重啟 Threema。</string>
     <string name="open_myid_popup">開啟快速存取彈出式視窗</string>
     <string name="logo">標誌/回到頁首</string>
@@ -1214,7 +1214,7 @@ Threema 支援的所有表情符號。</string>
     <string name="reject">拒絕</string>
     <string name="group_request_already_sent"><![CDATA[您已經透過這個連結傳送了 <b>%s</b> 公開群組加入要求,正在等待群組管理員的回覆。如果您想重新傳送要求,請重按清單中的連結。]]></string>
     <string name="group_link_none">尚未生成連結</string>
-    <string name="group_request_confirm_send"><![CDATA[您即將向管理員 <b>%2$s</b> 傳送 <b>%1$s</b> 群組加入要求。如果此連結沒有失效,管理員一收到您的要求,您就會自動新增至群組。]]></string>
+    <string name="group_request_confirm_send"><![CDATA[您即將向管理員 <b>%2$s</b> 傳送 <b>%1$s</b> 群組加入要求。如果此連結沒有失效,而且管理員接受您的加入要求後,您就會自動加入至群組。]]></string>
     <string name="really_delete_group_request_title_singular">刪除群組加入要求</string>
     <string name="really_delete_group_request_title_plural">刪除群組加入要求</string>
     <string name="sent_to">傳送至:%s</string>
@@ -1330,11 +1330,11 @@ Threema 支援的所有表情符號。</string>
     <string name="not_voted_user_list">這些參與者沒有投票:%s</string>
     <string name="contact_update">更新聯絡人狀態</string>
     <string name="invalid_onprem_id">此ID(永久)不再存在,或者與您的ID不相容。</string>
-    <string name="enable_unknown_sources">無法安裝。請確保為 %s 啟用了「安裝未知應用程式」。</string>
+    <string name="enable_unknown_sources">無法安裝。請確保為 %s 啟用了「安裝不明的應用程式」。</string>
     <string name="threema_push">Threema Push</string>
     <string name="threema_push_notification_text">按一下了解更多資訊。</string>
     <string name="threema_push_notification_info_text_1">Threema Push 在背景持續執行,以通知您新收到的訊息和來電。</string>
-    <string name="threema_push_notification_info_text_2">如果不能顯示永久通知,應用程式就不能在背景執行。透過顯示永久通知,可以確保 Threema Push 即使在您不主動使用應用程式時也會保持執行。</string>
+    <string name="threema_push_notification_info_text_2">如果不能顯示永久通知,應用程式就不能在背景執行。透過顯示永久通知,可以確保 Threema Push 即使在您不主動使用應用程式時也會保持執行。</string>
     <string name="threema_push_notification_info_text_3">如果您仍然遇到延遲或丟失通知的問題,請調整您的系統設定,以確保應用程式可以在背景不受任何限制地運行,並停用省電模式。</string>
     <string name="threema_push_service_description">當 Threema Push 執行時,顯示永久通知</string>
     <string name="threema_push_activated">Threema Push 現在已開啟。</string>
@@ -1440,7 +1440,7 @@ Threema 支援的所有表情符號。</string>
     <string name="group_call">群組通話</string>
     <string name="checking_compatibility">正在檢查相容性...</string>
     <string name="group_call_mic_permission_rationale">如要進行群組通話,您必須在系統「權限」設定下允許 %s 取用麥克風權限。</string>
-    <string name="group_call_camera_permission_rationale">為了讓其他參與者看到的照片,您必須在系統「權限」設定下允許 %s 取用相機權限。</string>
+    <string name="group_call_camera_permission_rationale">為了讓其他參與者看到的照片,您必須在系統「權限」設定下允許 %s 取用相機權限。</string>
     <string name="settings">設定</string>
     <string name="leave">離開</string>
     <string name="fs_key_mismatch">密鑰不相符</string>
@@ -1451,7 +1451,7 @@ Threema 支援的所有表情符號。</string>
     <string name="prefs_sum_group_calls_vibration">選擇是否在群組通話開始時震動</string>
     <string name="forward_security_mode_4dh">雙向保密</string>
     <string name="forward_security_mode_2dh">單向保密</string>
-    <string name="forward_security_explanation">完全前向保密 (PFS) 可保護記錄的通訊,即使長期加密密鑰已洩露也不會被追溯解密。\n\n如果雙方的應用程式都支援完全前向保密,則可以啟用該選項。</string>
+    <string name="forward_security_explanation">完全前向保密 (PFS) 可保護對話記錄的通訊,即使長期加密密鑰已洩露也不會被追溯解密。\n\n如果雙方的應用程式都支援完全前向保密,則可以啟用該選項。</string>
     <plurals name="contacts_counter_label">
         <item quantity="other">%d位聯絡人</item>
     </plurals>

+ 39 - 23
domain/src/main/proto/group-call.proto

@@ -113,39 +113,55 @@
 //
 // 1. Let `running` be the list of group calls that are currently considered
 //    running within the group.
-// 2. Let `calls` be a copy of `running`.
-// 3. For each `call` of `calls`, run the following steps concurrently and wait
-//    for them to return:
-//    1. If the user is currently participating in `call`, abort these
+// 2. Let `calls` be a copy of `running`. Reset the _token-refreshed_ mark of
+//    each `call` of `calls` (or simply scope it to the execution of these
+//    steps).
+// 3. For each `call` of `calls`, run the following steps (labelled _peek-call_)
+//    concurrently and wait for them to return:
+//    1. If the user is currently participating in `call`, abort the _peek-call_
 //       sub-steps.
-//    2. _Peek_ the `call` via `SfuHttpRequest.Peek`.
-//    3. If the received status code is `401`, refresh the _SFU Token_ and
-//       restart the _Group Call Refresh Steps_ from the beginning.
-//    4. If the received status code is `5xx`, remove `call` from `calls` and
-//       abort these sub-steps.
-//    5. If the received status code is not `200`, remove `call` from `calls`
-//       and from `running` and abort these sub-steps.
+//    2. _Peek_ the `call` via `SfuHttpRequest.Peek`. If this does not result in
+//       a response within 5s, remove `call` from `calls` and abort the
+//       _peek-call_ sub-steps.
+//    3. If the received status code for `call` is `401` and `call` is not
+//       marked with _token-refreshed_:
+//       1. Refresh the _SFU Token_. If the _SFU Token_ refresh fails or does
+//          not yield an _SFU Token_ within 10s, remove `call` from `calls` and
+//          abort the _peek-call_ sub-steps.
+//       2. Mark the `call` as _token-refreshed_.
+//       3. Restart the _peek-call_ sub-steps for this `call`.
+//    4. If the server could not be reached or the received status code is not
+//       `200` or if the _Peek_ response could not be decoded:
+//       1. Remove `call` from `calls`.
+//       2. If the received status code is `404`, remove `call` from `running`
+//          and abort the _peek-call_ sub-steps.
+//       3. If the `call`'s _failed_ counter is `>= 3` and the `call` was
+//          received more than 10h ago, remove `call` from `running` and abort
+//          the _peek-call_ sub-steps.
+//       4. Increase the _failed_ counter for `call` by `1` and abort the
+//          _peek-call_ sub-steps.
+//    5. Reset the `call`'s _failed_ counter to `0`.
 //    6. If the protocol version of the `call` is not supported, remove `call`
 //       from `calls`, log a warning that a group call with an unsupported
-//       version is currently running and abort these sub-steps.
-//    7. If the SFU did not provide a _peek_ response within 5s, remove `call`
-//       from `calls` and abort these sub-steps.
-// 4. Let `chosen-call` be any call of `calls` with the highest `started_at`
+//       version is currently running and abort the _peek-call_ sub-steps.
+//    7. (`call` is kept in `calls` and in `running`.)
+// 4. If `running` is empty, cancel the timer to periodically re-run the _Group
+//    Call Refresh Steps_ of this group. Otherwise, restart or schedule the
+//    timer to re-run the _Group Call Refresh Steps_ of this group in 10s.
+// 5. Let `chosen-call` be any call of `calls` with the highest `started_at`
 //    value (i.e. the most recently created call) as provided by the _peek_
 //    result.
-// 5. If `chosen-call` is not defined, cancel the timer to periodically re-run
-//    the _Group Call Refresh Steps_ of this group and abort these steps.
-// 6. If the user is currently in the process of starting a new group call
+// 6. If `chosen-call` is not defined, display that no group call is currently
+//    running within the group, abort these steps and return `chosen-call`.
+// 7. Display `chosen-call` as the currently running group call within the
+//    group.
+// 8. If the user is currently in the process of starting a new group call
 //    within the group, prior to sending a `GroupCallStart` message (see the
 //    associated creation steps), cancel that process and join `chosen-call`
 //    instead.
-// 7. If the user is currently participating in a group call of this group which
+// 9. If the user is currently participating in a group call of this group which
 //    does not match `chosen-call`, exit the call immediately and join
 //    `chosen-call`.
-// 8. Schedule the timer to re-run the _Group Call Refresh Steps_ of this group
-//    in 10s.
-// 9. Display `chosen-call` as the currently running group call within the
-//    group.
 // 10. Return `chosen-call`.
 //
 // Note: The above steps have been carefully crafted to gracefully handle cases

+ 1 - 1
domain/src/main/proto/version.txt

@@ -1 +1 @@
-12
+13