mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-02-17 08:25:46 +00:00
Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3be011bdaf | ||
|
|
526f6e3058 | ||
|
|
21b7dccf1c | ||
|
|
adc6fc8524 | ||
|
|
b5216ed7af | ||
|
|
d4718c373a | ||
|
|
797513b372 | ||
|
|
0b7342ba67 | ||
|
|
103686f89b | ||
|
|
aaf3d6a7c7 | ||
|
|
923d9fb07b | ||
|
|
df164a58c9 | ||
|
|
5ef65f039d |
@@ -2,8 +2,8 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
package="org.thoughtcrime.securesms"
|
||||
android:versionCode="146"
|
||||
android:versionName="2.26.0">
|
||||
android:versionCode="148"
|
||||
android:versionName="2.26.2">
|
||||
|
||||
<uses-sdk tools:overrideLibrary="com.amulyakhare.textdrawable,com.astuetz.pagerslidingtabstrip,pl.tajchert.waitingdots,com.h6ah4i.android.multiselectlistpreferencecompat"/>
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ kontakt</string>
|
||||
<string name="ConversationFragment_deleting">Mažu</string>
|
||||
<string name="ConversationFragment_deleting_messages">Mažu zprávy...</string>
|
||||
<!--ConversationListActivity-->
|
||||
<string name="ConversationListActivity_search">Vyhhledávám...</string>
|
||||
<string name="ConversationListActivity_search">Vyhledávám...</string>
|
||||
<!--ConversationListFragment-->
|
||||
<string name="ConversationListFragment_delete_threads_question">Smazat konverzace?</string>
|
||||
<string name="ConversationListFragment_are_you_sure_you_wish_to_delete_all_selected_conversation_threads">Opravdu chcete smazat VŠECHNY označené konverzace?</string>
|
||||
@@ -623,6 +623,9 @@ TextSecure nyní automaticky ověří vaše telefonní číslo pomocí potvrzova
|
||||
<string name="arrays__name_and_message">Jméno a zpráva</string>
|
||||
<string name="arrays__name_only">Pouze jméno</string>
|
||||
<string name="arrays__neither">Ani</string>
|
||||
<string name="arrays__images">Obrázky</string>
|
||||
<string name="arrays__audio">Audio</string>
|
||||
<string name="arrays__video">Video</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d hodina</item>
|
||||
@@ -708,6 +711,7 @@ TextSecure nyní automaticky ověří vaše telefonní číslo pomocí potvrzova
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">U každé odeslané zprávy požadovat potvrzení o doručení</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Automaticky mazat starší zprávy jakmile konverzace přesáhne určitou délku</string>
|
||||
<string name="preferences__delete_old_messages">Smazat staré zprávy</string>
|
||||
<string name="preferences__chats">Konverzace a media</string>
|
||||
<string name="preferences__conversation_length_limit">Limit délky konverzací</string>
|
||||
<string name="preferences__trim_all_threads_now">Zkrátit konverzace</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Pohledat všechny konverzace a uplatnit limit délky.</string>
|
||||
|
||||
@@ -599,6 +599,9 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.</string>
|
||||
<string name="arrays__name_and_message">Name und Nachricht</string>
|
||||
<string name="arrays__name_only">Nur Name</string>
|
||||
<string name="arrays__neither">Weder Name noch Nachricht</string>
|
||||
<string name="arrays__images">Bilder</string>
|
||||
<string name="arrays__audio">Audio</string>
|
||||
<string name="arrays__video">Video</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d Stunde</item>
|
||||
@@ -683,6 +686,7 @@ Die Überprüfung der SMS-Bestätigung hat zu lange gedauert.</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Zustellbericht für jede gesendete SMS anfordern</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Alte Nachrichten automatisch löschen, sobald die Unterhaltung eine bestimmte Länge überschreitet</string>
|
||||
<string name="preferences__delete_old_messages">Alte Nachrichten löschen</string>
|
||||
<string name="preferences__chats">Unterhaltungen und Medien</string>
|
||||
<string name="preferences__conversation_length_limit">Höchstzahl an Nachrichten</string>
|
||||
<string name="preferences__trim_all_threads_now">Alle Unterhaltungen jetzt kürzen</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Alle Unterhaltungen prüfen und deren Längenbegrenzung sicherstellen</string>
|
||||
@@ -702,6 +706,11 @@ Kostenlos verschlüsselte Nachrichten mit TextSecure- und Signal-Nutzern austaus
|
||||
<string name="preferences__enable_if_your_device_supports_sms_mms_delivery_over_wifi">Aktivieren, falls das Gerät SMS/MMS über WLAN nutzt (nur bei aktivierter WLAN-Telefonie)</string>
|
||||
<string name="preferences_app_protection__blocked_contacts">Blockierte Kontakte</string>
|
||||
<string name="preferences_notifications__display_in_notifications">In Benachrichtigungen anzeigen</string>
|
||||
<string name="preferences_chats__when_using_mobile_data">Bei mobiler Datenverbindung</string>
|
||||
<string name="preferences_chats__when_using_wifi">Bei WLAN-Verbindung</string>
|
||||
<string name="preferences_chats__when_roaming">Bei Roaming</string>
|
||||
<string name="preferences_chats__media_auto_download">Automatisches Herunterladen von Medien</string>
|
||||
<string name="preferences_chats__message_trimming">Kürzen von Unterhaltungen</string>
|
||||
<!--****************************************-->
|
||||
<!--menus-->
|
||||
<!--****************************************-->
|
||||
|
||||
@@ -674,6 +674,9 @@ por SMS.
|
||||
<string name="arrays__name_and_message">Nombre y mensaje</string>
|
||||
<string name="arrays__name_only">Sólo nombre</string>
|
||||
<string name="arrays__neither">Ninguno de los dos</string>
|
||||
<string name="arrays__images">Imágenes</string>
|
||||
<string name="arrays__audio">Audio</string>
|
||||
<string name="arrays__video">Vídeo</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d hora</item>
|
||||
|
||||
@@ -71,7 +71,7 @@ tämän yhteystiedon.</string>
|
||||
<string name="ConversationItem_click_to_approve_unencrypted">Napsauta, jos haluat lähettää viestin salaamattomana</string>
|
||||
<string name="ConversationItem_click_to_approve_unencrypted_sms_dialog_title">Käytä salaamattomia tekstiviestejä?</string>
|
||||
<string name="ConversationItem_click_to_approve_unencrypted_mms_dialog_title">Käytä salaamattomia MMS-viestejä?</string>
|
||||
<string name="ConversationItem_click_to_approve_unencrypted_dialog_message">Tätä viestiä <b>ei</b> tulla salaamaan, koska vastaanottaja ei enää käytä TextSecurea.\n\nLähetä salaamaton viesti?</string>
|
||||
<string name="ConversationItem_click_to_approve_unencrypted_dialog_message">Tätä viestiä <b>ei</b> voida salata, koska vastaanottaja ei enää käytä TextSecurea.\n\nLähetetäänkö salaamattomana?</string>
|
||||
<string name="ConversationItem_unable_to_open_media">Median avaamiseen ei löytynyt sovellusta.</string>
|
||||
<!--ConversationActivity-->
|
||||
<string name="ConversationActivity_initiate_secure_session_question">Aloita salattu istunto?</string>
|
||||
@@ -628,6 +628,9 @@ epäonnistui.</string>
|
||||
<string name="arrays__name_and_message">Nimi ja viesti</string>
|
||||
<string name="arrays__name_only">Vain nimi</string>
|
||||
<string name="arrays__neither">Ei kumpaakaan</string>
|
||||
<string name="arrays__images">Kuvat</string>
|
||||
<string name="arrays__audio">Äänitallenteet</string>
|
||||
<string name="arrays__video">Videot</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d tunti</item>
|
||||
@@ -712,6 +715,7 @@ epäonnistui.</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Pyydä vahvistus jokaisen lähetetyn tekstiviestin toimituksesta</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Poista vanhimpia viestejä automaattisesti, kun keskustelu ylittää määritetyn pituusrajan</string>
|
||||
<string name="preferences__delete_old_messages">Vanhojen viestien poisto</string>
|
||||
<string name="preferences__chats">Keskustelut ja media</string>
|
||||
<string name="preferences__conversation_length_limit">Keskustelun pituusraja</string>
|
||||
<string name="preferences__trim_all_threads_now">Karsi kaikki keskustelut nyt</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Käy läpi kaikki keskustelut ja pakota niihin pituusrajat</string>
|
||||
@@ -731,6 +735,11 @@ Ilmaiset ja yksityiset viestit TextSecuren ja Signalin käyttäjille</string>
|
||||
<string name="preferences__enable_if_your_device_supports_sms_mms_delivery_over_wifi">Ota käyttöön, jos laitteesi lähettää SMS- ja MMS-viestit WiFi-yhteyden kautta. (Ota käyttöön vain, kun \"WiFi Calling\" on käytössä laitteessasi.)</string>
|
||||
<string name="preferences_app_protection__blocked_contacts">Estetyt yhteystiedot</string>
|
||||
<string name="preferences_notifications__display_in_notifications">Ilmoituksissa näytetään</string>
|
||||
<string name="preferences_chats__when_using_mobile_data">Mobiilitiedonsiirtoverkossa</string>
|
||||
<string name="preferences_chats__when_using_wifi">Wi-Fi-verkossa</string>
|
||||
<string name="preferences_chats__when_roaming">Roaming-verkossa</string>
|
||||
<string name="preferences_chats__media_auto_download">Liitetiedostojen automaattinen lataus</string>
|
||||
<string name="preferences_chats__message_trimming">Viestien karsiminen</string>
|
||||
<!--****************************************-->
|
||||
<!--menus-->
|
||||
<!--****************************************-->
|
||||
|
||||
@@ -641,6 +641,9 @@ non riuscita.
|
||||
<string name="arrays__name_and_message">Nome e messaggio</string>
|
||||
<string name="arrays__name_only">Solo nome</string>
|
||||
<string name="arrays__neither">Nessuno dei due</string>
|
||||
<string name="arrays__images">Immagini</string>
|
||||
<string name="arrays__audio">Audio</string>
|
||||
<string name="arrays__video">Video</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d ora</item>
|
||||
@@ -725,6 +728,7 @@ non riuscita.
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Richiedi un rapporto di consegna per ogni SMS inviato</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Elimina automaticamente i messaggi più vecchi quando un thread di conversazione supera una certa lunghezza</string>
|
||||
<string name="preferences__delete_old_messages">Elimina i messaggi vecchi</string>
|
||||
<string name="preferences__chats">Chat e download</string>
|
||||
<string name="preferences__conversation_length_limit">Limite di lunghezza conversazione</string>
|
||||
<string name="preferences__trim_all_threads_now">Riduci immediatamente tutti i thread</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Analizza tutti i thread e applica il limite di lunghezza delle conversazioni.</string>
|
||||
|
||||
@@ -576,6 +576,9 @@
|
||||
<string name="arrays__name_and_message">이름과 메시지</string>
|
||||
<string name="arrays__name_only">이름</string>
|
||||
<string name="arrays__neither">이름이나 메시지 표시하지 않음</string>
|
||||
<string name="arrays__images">이미지</string>
|
||||
<string name="arrays__audio">오디오</string>
|
||||
<string name="arrays__video">동영상</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="other">%d시간 전</item>
|
||||
@@ -659,6 +662,7 @@
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">SMS 메시지 보낼 때마다 전송 확인 요청</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">대화 메시지 저장한도가 초과되면 이전 메시지 자동 삭제</string>
|
||||
<string name="preferences__delete_old_messages">이전 메시지 삭제</string>
|
||||
<string name="preferences__chats">대화 및 미디어</string>
|
||||
<string name="preferences__conversation_length_limit">대화 메시지 저장한도</string>
|
||||
<string name="preferences__trim_all_threads_now">모든 대화 줄이기</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">모든 대화에 메시지 저장한도 적용</string>
|
||||
|
||||
@@ -614,6 +614,9 @@ TextSecure heeft te lang moeten wachten op het binnenkomen van de verificatie-SM
|
||||
<string name="arrays__name_and_message">Naam en bericht</string>
|
||||
<string name="arrays__name_only">Alleen naam</string>
|
||||
<string name="arrays__neither">Geen van alle</string>
|
||||
<string name="arrays__images">Afbeeldingen</string>
|
||||
<string name="arrays__audio">Geluid</string>
|
||||
<string name="arrays__video">Video</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d uur</item>
|
||||
@@ -698,6 +701,7 @@ TextSecure heeft te lang moeten wachten op het binnenkomen van de verificatie-SM
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Verzoeken om een ontvangstbevestiging voor ieder verzonden SMS bericht</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Automatisch oudere berichten verwijderen wanneer een gesprek meer dan een bepaald aantal berichten bevat</string>
|
||||
<string name="preferences__delete_old_messages">Verwijder oude berichten</string>
|
||||
<string name="preferences__chats">Gesprekken en media</string>
|
||||
<string name="preferences__conversation_length_limit">Gesprekslengte limiet</string>
|
||||
<string name="preferences__trim_all_threads_now">Oude berichten nu verwijderen</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Alle gesprekken scannen en de maximale gesprekslengte toepassen</string>
|
||||
|
||||
@@ -608,6 +608,9 @@ feilet.</string>
|
||||
<string name="arrays__name_and_message">Navn og melding</string>
|
||||
<string name="arrays__name_only">Kun navn</string>
|
||||
<string name="arrays__neither">Ingen</string>
|
||||
<string name="arrays__images">Bilder</string>
|
||||
<string name="arrays__audio">Lyd</string>
|
||||
<string name="arrays__video">Video</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d time</item>
|
||||
@@ -692,6 +695,7 @@ feilet.</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Be om en leveringsrapport for hver SMS-melding du sender</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Slett eldre meldinger automatisk når en samtaletråd overskrider en spesifisert lengde</string>
|
||||
<string name="preferences__delete_old_messages">Slett gamle meldinger</string>
|
||||
<string name="preferences__chats">Samtaler og media</string>
|
||||
<string name="preferences__conversation_length_limit">Grense på samtalelengde</string>
|
||||
<string name="preferences__trim_all_threads_now">Trimme alle samtaletråder nå</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Gjennomgå alle samtaletrådene og håndhev grensen på samtalelengde </string>
|
||||
|
||||
@@ -604,9 +604,12 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.</string>
|
||||
<string name="arrays__settings_default">Ustawienia domyślne</string>
|
||||
<string name="arrays__enabled">Włączone</string>
|
||||
<string name="arrays__disabled">Wyłączone</string>
|
||||
<string name="arrays__name_and_message">Nazwa i wiadomość</string>
|
||||
<string name="arrays__name_and_message">Imię i wiadomość</string>
|
||||
<string name="arrays__name_only">Tylko imie</string>
|
||||
<string name="arrays__neither">Żadne</string>
|
||||
<string name="arrays__images">Obrazy</string>
|
||||
<string name="arrays__audio">Audio</string>
|
||||
<string name="arrays__video">Wideo</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d godzina</item>
|
||||
@@ -692,6 +695,7 @@ Upłynął czas oczekiwania na wiadomość weryfikacyjną SMS.</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Żądaj raportu dostarczenia każdej wysłanej wiadomości SMS</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Automatycznie usuń starsze wiadomości po przekroczeniu określonej długości wątku</string>
|
||||
<string name="preferences__delete_old_messages">Usuń stare wiadomości</string>
|
||||
<string name="preferences__chats">Czaty i media</string>
|
||||
<string name="preferences__conversation_length_limit">Limit długości konwersacji</string>
|
||||
<string name="preferences__trim_all_threads_now">Przytnij wszystkie wątki</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Skanuj wszystkie rozmowy i przytnij do zdefiniowanej długości</string>
|
||||
|
||||
@@ -605,6 +605,9 @@ bila uspešna.</string>
|
||||
<string name="arrays__name_and_message">Pošiljatelj in sporočilo</string>
|
||||
<string name="arrays__name_only">Samo pošiljatelj</string>
|
||||
<string name="arrays__neither">Brez</string>
|
||||
<string name="arrays__images">Slike</string>
|
||||
<string name="arrays__audio">Zvok</string>
|
||||
<string name="arrays__video">Video</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d ura</item>
|
||||
@@ -691,6 +694,7 @@ bila uspešna.</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Zahtevaj potrdilo o dostavi za vsako poslano sporočilo SMS</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Samodejen izbris starih sporočil, ko pogovor preseže določeno dolžino</string>
|
||||
<string name="preferences__delete_old_messages">Izbris starih sporočil</string>
|
||||
<string name="preferences__chats">Pogovori in multimedija</string>
|
||||
<string name="preferences__conversation_length_limit">Omejitev dolžine pogovorov</string>
|
||||
<string name="preferences__trim_all_threads_now">Obreži vse pogovore zdaj</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Preišči vse pogovore in uveljavi omejitve njihove dolžine</string>
|
||||
|
||||
@@ -611,6 +611,9 @@ TextSecure uppnådde tidsgränsen för SMS-verifiering.</string>
|
||||
<string name="arrays__name_and_message">Namn och meddelande</string>
|
||||
<string name="arrays__name_only">Endast namn</string>
|
||||
<string name="arrays__neither">Varken eller</string>
|
||||
<string name="arrays__images">Bilder</string>
|
||||
<string name="arrays__audio">Ljud</string>
|
||||
<string name="arrays__video">Video</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="one">%d timme</item>
|
||||
@@ -695,6 +698,7 @@ TextSecure uppnådde tidsgränsen för SMS-verifiering.</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">Begär en leveransrapport för varje SMS-meddelande du skickar</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">Radera automatiskt gamla meddelanden när en konversationstråd överstiger en specificerad längd</string>
|
||||
<string name="preferences__delete_old_messages">Radera gamla meddelanden</string>
|
||||
<string name="preferences__chats">Konversationer och media</string>
|
||||
<string name="preferences__conversation_length_limit">Konversationstrådslängd</string>
|
||||
<string name="preferences__trim_all_threads_now">Trimma alla trådar nu</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">Skanna igenom alla konversationstrådar och framtvinga konversationstrådslängder.</string>
|
||||
|
||||
@@ -619,6 +619,9 @@ TextSecure 在等待短信验证时超时。</string>
|
||||
<string name="arrays__name_and_message">名字和信息</string>
|
||||
<string name="arrays__name_only">仅名字</string>
|
||||
<string name="arrays__neither">都不</string>
|
||||
<string name="arrays__images">图片</string>
|
||||
<string name="arrays__audio">音频</string>
|
||||
<string name="arrays__video">视频</string>
|
||||
<!--plurals.xml-->
|
||||
<plurals name="hours_ago">
|
||||
<item quantity="other">%d 小时</item>
|
||||
@@ -702,6 +705,7 @@ TextSecure 在等待短信验证时超时。</string>
|
||||
<string name="preferences__request_a_delivery_report_for_each_sms_message_you_send">请求发送报告</string>
|
||||
<string name="preferences__automatically_delete_older_messages_once_a_conversation_thread_exceeds_a_specified_length">对话超过指定数量时自动删除旧的信息</string>
|
||||
<string name="preferences__delete_old_messages">删除旧信息</string>
|
||||
<string name="preferences__chats">聊天与媒体</string>
|
||||
<string name="preferences__conversation_length_limit">对话数量限制</string>
|
||||
<string name="preferences__trim_all_threads_now">现在处理所有对话</string>
|
||||
<string name="preferences__scan_through_all_conversation_threads_and_enforce_conversation_length_limits">查找并处理所有超过限制的对话</string>
|
||||
|
||||
@@ -872,6 +872,11 @@
|
||||
<string name="preferences__enable_if_your_device_supports_sms_mms_delivery_over_wifi">Enable if your device uses SMS/MMS delivery over WiFi (only enable when \'WiFi Calling\' is enabled on your device)</string>
|
||||
<string name="preferences_app_protection__blocked_contacts">Blocked contacts</string>
|
||||
<string name="preferences_notifications__display_in_notifications">Display in notifications</string>
|
||||
<string name="preferences_chats__when_using_mobile_data">When using mobile data</string>
|
||||
<string name="preferences_chats__when_using_wifi">When using Wi-Fi</string>
|
||||
<string name="preferences_chats__when_roaming">When roaming</string>
|
||||
<string name="preferences_chats__media_auto_download">Media auto-download</string>
|
||||
<string name="preferences_chats__message_trimming">Message trimming</string>
|
||||
|
||||
<!-- **************************************** -->
|
||||
<!-- menus -->
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<PreferenceCategory android:key="media_download" android:title="Media auto-download">
|
||||
<PreferenceCategory android:key="media_download" android:title="@string/preferences_chats__media_auto_download">
|
||||
<com.h6ah4i.android.compat.preference.MultiSelectListPreferenceCompat
|
||||
android:title="When using mobile data"
|
||||
android:title="@string/preferences_chats__when_using_mobile_data"
|
||||
android:key="pref_media_download_mobile"
|
||||
android:defaultValue="@array/pref_media_download_mobile_data_default"
|
||||
android:persistent="true"
|
||||
@@ -11,7 +11,7 @@
|
||||
android:entryValues="@array/pref_media_download_entries" />
|
||||
|
||||
<com.h6ah4i.android.compat.preference.MultiSelectListPreferenceCompat
|
||||
android:title="When using Wi-Fi"
|
||||
android:title="@string/preferences_chats__when_using_wifi"
|
||||
android:key="pref_media_download_wifi"
|
||||
android:defaultValue="@array/pref_media_download_wifi_default"
|
||||
android:persistent="true"
|
||||
@@ -19,7 +19,7 @@
|
||||
android:entryValues="@array/pref_media_download_entries" />
|
||||
|
||||
<com.h6ah4i.android.compat.preference.MultiSelectListPreferenceCompat
|
||||
android:title="When roaming"
|
||||
android:title="@string/preferences_chats__when_roaming"
|
||||
android:key="pref_media_download_roaming"
|
||||
android:defaultValue="@array/pref_media_download_roaming_default"
|
||||
android:persistent="true"
|
||||
@@ -27,7 +27,7 @@
|
||||
android:entryValues="@array/pref_media_download_entries" />
|
||||
</PreferenceCategory>
|
||||
|
||||
<PreferenceCategory android:key="message_trimming" android:title="Message trimming">
|
||||
<PreferenceCategory android:key="message_trimming" android:title="@string/preferences_chats__message_trimming">
|
||||
<org.thoughtcrime.securesms.components.SwitchPreferenceCompat
|
||||
android:defaultValue="false"
|
||||
android:key="pref_trim_threads"
|
||||
|
||||
@@ -300,7 +300,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
addAttachmentContactInfo(data.getData());
|
||||
break;
|
||||
case GROUP_EDIT:
|
||||
this.recipients = RecipientFactory.getRecipientsForIds(this, data.getLongArrayExtra(GroupCreateActivity.GROUP_RECIPIENT_EXTRA), true);
|
||||
recipients = RecipientFactory.getRecipientsForIds(this, data.getLongArrayExtra(GroupCreateActivity.GROUP_RECIPIENT_EXTRA), true);
|
||||
recipients.addListener(this);
|
||||
titleView.setTitle(recipients);
|
||||
setBlockedUserState(recipients);
|
||||
supportInvalidateOptionsMenu();
|
||||
@@ -883,7 +884,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
|
||||
if (recipients != null) {
|
||||
long[] ids = recipients.getIds();
|
||||
Log.w("ConversationActivity", "Looking up new recipients...");
|
||||
recipients = RecipientFactory.getRecipientsForIds(context, ids, false);
|
||||
recipients = RecipientFactory.getRecipientsForIds(context, ids, true);
|
||||
recipients.addListener(ConversationActivity.this);
|
||||
titleView.setTitle(recipients);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,7 @@ import org.thoughtcrime.securesms.crypto.storage.TextSecureSessionStore;
|
||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||
import org.thoughtcrime.securesms.database.MmsDatabase.Reader;
|
||||
import org.thoughtcrime.securesms.database.PartDatabase;
|
||||
import org.thoughtcrime.securesms.database.PushDatabase;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.jobs.AttachmentDownloadJob;
|
||||
@@ -223,16 +224,20 @@ public class DatabaseUpgradeActivity extends BaseActivity {
|
||||
}
|
||||
|
||||
private void schedulePendingIncomingParts(Context context) {
|
||||
MmsDatabase db = DatabaseFactory.getMmsDatabase(context);
|
||||
List<PduPart> pendingParts = DatabaseFactory.getPartDatabase(context).getPendingParts();
|
||||
final PartDatabase partDb = DatabaseFactory.getPartDatabase(context);
|
||||
final MmsDatabase mmsDb = DatabaseFactory.getMmsDatabase(context);
|
||||
final List<PduPart> pendingParts = DatabaseFactory.getPartDatabase(context).getPendingParts();
|
||||
|
||||
Log.w(TAG, pendingParts.size() + " pending parts.");
|
||||
for (PduPart part : pendingParts) {
|
||||
final Reader reader = db.readerFor(masterSecret, db.getMessage(part.getMmsId()));
|
||||
final Reader reader = mmsDb.readerFor(masterSecret, mmsDb.getMessage(part.getMmsId()));
|
||||
final MessageRecord record = reader.getNext();
|
||||
|
||||
if (record != null && !record.isOutgoing() && record.isPush()) {
|
||||
Log.w(TAG, "queuing new attachment download job for incoming push part.");
|
||||
if (part.getContentLocation() == null) {
|
||||
Log.w(TAG, "corrected a pending self-sent media part " + part.getPartId() + ".");
|
||||
partDb.setTransferState(part.getMmsId(), part.getPartId(), PartDatabase.TRANSFER_PROGRESS_DONE);
|
||||
} else if (record != null && !record.isOutgoing() && record.isPush()) {
|
||||
Log.w(TAG, "queuing new attachment download job for incoming push part " + part.getPartId() + ".");
|
||||
ApplicationContext.getInstance(context)
|
||||
.getJobManager()
|
||||
.add(new AttachmentDownloadJob(context, part.getMmsId(), part.getPartId()));
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.thoughtcrime.securesms;
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
@@ -51,39 +52,32 @@ public class VerifyIdentityActivity extends KeyScanningActivity {
|
||||
protected void onCreate(Bundle state, @NonNull MasterSecret masterSecret) {
|
||||
this.masterSecret = masterSecret;
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
getSupportActionBar().setTitle(R.string.AndroidManifest__verify_identity);
|
||||
|
||||
setContentView(R.layout.verify_identity_activity);
|
||||
|
||||
initializeResources();
|
||||
initializeFingerprints();
|
||||
this.localIdentityFingerprint = (TextView)findViewById(R.id.you_read);
|
||||
this.remoteIdentityFingerprint = (TextView)findViewById(R.id.friend_reads);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
getSupportActionBar().setTitle(R.string.AndroidManifest__verify_identity);
|
||||
|
||||
this.recipient = RecipientFactory.getRecipientForId(this, this.getIntent().getLongExtra("recipient", -1), true);
|
||||
|
||||
initializeFingerprints();
|
||||
}
|
||||
|
||||
private void initializeLocalIdentityKey() {
|
||||
private void initializeFingerprints() {
|
||||
if (!IdentityKeyUtil.hasIdentityKey(this)) {
|
||||
localIdentityFingerprint.setText(R.string.VerifyIdentityActivity_you_do_not_have_an_identity_key);
|
||||
return;
|
||||
}
|
||||
|
||||
localIdentityFingerprint.setText(IdentityKeyUtil.getIdentityKey(this).getFingerprint());
|
||||
}
|
||||
|
||||
private void initializeRemoteIdentityKey() {
|
||||
IdentityKeyParcelable identityKeyParcelable = getIntent().getParcelableExtra("remote_identity");
|
||||
IdentityKey identityKey = null;
|
||||
|
||||
if (identityKeyParcelable != null) {
|
||||
identityKey = identityKeyParcelable.get();
|
||||
}
|
||||
|
||||
if (identityKey == null) {
|
||||
identityKey = getRemoteIdentityKey(masterSecret, recipient);
|
||||
}
|
||||
IdentityKey identityKey = getRemoteIdentityKey(masterSecret, recipient);
|
||||
|
||||
if (identityKey == null) {
|
||||
remoteIdentityFingerprint.setText(R.string.VerifyIdentityActivity_recipient_has_no_identity_key);
|
||||
@@ -92,17 +86,6 @@ public class VerifyIdentityActivity extends KeyScanningActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void initializeFingerprints() {
|
||||
initializeLocalIdentityKey();
|
||||
initializeRemoteIdentityKey();
|
||||
}
|
||||
|
||||
private void initializeResources() {
|
||||
this.localIdentityFingerprint = (TextView)findViewById(R.id.you_read);
|
||||
this.remoteIdentityFingerprint = (TextView)findViewById(R.id.friend_reads);
|
||||
this.recipient = RecipientFactory.getRecipientForId(this, this.getIntent().getLongExtra("recipient", -1), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initiateDisplay() {
|
||||
if (!IdentityKeyUtil.hasIdentityKey(this)) {
|
||||
@@ -167,7 +150,13 @@ public class VerifyIdentityActivity extends KeyScanningActivity {
|
||||
return getString(R.string.VerifyIdentityActivity_verified_exclamation);
|
||||
}
|
||||
|
||||
private IdentityKey getRemoteIdentityKey(MasterSecret masterSecret, Recipient recipient) {
|
||||
private @Nullable IdentityKey getRemoteIdentityKey(MasterSecret masterSecret, Recipient recipient) {
|
||||
IdentityKeyParcelable identityKeyParcelable = getIntent().getParcelableExtra("remote_identity");
|
||||
|
||||
if (identityKeyParcelable != null) {
|
||||
return identityKeyParcelable.get();
|
||||
}
|
||||
|
||||
SessionStore sessionStore = new TextSecureSessionStore(this, masterSecret);
|
||||
AxolotlAddress axolotlAddress = new AxolotlAddress(recipient.getNumber(), TextSecureAddress.DEFAULT_DEVICE_ID);
|
||||
SessionRecord record = sessionStore.loadSession(axolotlAddress);
|
||||
|
||||
@@ -159,14 +159,15 @@ public class ThumbnailView extends FrameLayout {
|
||||
|
||||
public void setImageResource(@NonNull Slide slide, @Nullable MasterSecret masterSecret) {
|
||||
if (Util.equals(slide, this.slide)) {
|
||||
Log.w(TAG, "Not loading resource, slide was identical");
|
||||
Log.w(TAG, "Not re-loading slide " + slide.getPart().getPartId());
|
||||
return;
|
||||
}
|
||||
if (!isContextValid()) {
|
||||
Log.w(TAG, "Not loading resource, context is invalid");
|
||||
Log.w(TAG, "Not loading slide, context is invalid");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.w(TAG, "loading part with id " + slide.getPart().getPartId() + ", progress " + slide.getTransferProgress());
|
||||
if (!hideControls && slide.getTransferProgress() == PartDatabase.TRANSFER_PROGRESS_STARTED) {
|
||||
getProgressWheel().spin();
|
||||
getProgressWheel().setVisibility(VISIBLE);
|
||||
@@ -183,7 +184,11 @@ public class ThumbnailView extends FrameLayout {
|
||||
|
||||
this.slide = slide;
|
||||
buildGlideRequest(slide, masterSecret).into(image);
|
||||
setOnClickListener(new ThumbnailClickDispatcher(thumbnailClickListener, slide));
|
||||
if (this.slide.getTransferProgress() == PartDatabase.TRANSFER_PROGRESS_DONE) {
|
||||
setOnClickListener(new ThumbnailClickDispatcher(thumbnailClickListener, slide));
|
||||
} else {
|
||||
setOnClickListener(null);
|
||||
}
|
||||
downloadButton.setOnClickListener(new ThumbnailClickDispatcher(downloadClickListener, slide));
|
||||
}
|
||||
|
||||
@@ -338,10 +343,9 @@ public class ThumbnailView extends FrameLayout {
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (listener != null) {
|
||||
if (listener != null)
|
||||
{
|
||||
listener.onClick(view, slide);
|
||||
} else {
|
||||
Log.w(TAG, "onClick, but no thumbnail click listener attached.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -577,6 +577,10 @@ public class MmsDatabase extends MessagingDatabase {
|
||||
contentValues.put(READ, 1);
|
||||
contentValues.put(DATE_RECEIVED, contentValues.getAsLong(DATE_SENT));
|
||||
|
||||
for (int i = 0; i < request.getBody().getPartsNum(); i++) {
|
||||
request.getBody().getPart(i).setTransferProgress(PartDatabase.TRANSFER_PROGRESS_DONE);
|
||||
}
|
||||
|
||||
return insertMediaMessage(new MasterSecretUnion(masterSecret), request.getPduHeaders(),
|
||||
request.getBody(), contentValues);
|
||||
} catch (NoSuchMessageException e) {
|
||||
|
||||
@@ -24,6 +24,7 @@ import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import android.util.Pair;
|
||||
@@ -444,7 +445,7 @@ public class PartDatabase extends Database {
|
||||
return part;
|
||||
}
|
||||
|
||||
public List<PduPart> getPendingParts() {
|
||||
public @NonNull List<PduPart> getPendingParts() {
|
||||
final SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
||||
final List<PduPart> parts = new LinkedList<>();
|
||||
|
||||
@@ -640,17 +641,22 @@ public class PartDatabase extends Database {
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream call() throws Exception {
|
||||
public @Nullable InputStream call() throws Exception {
|
||||
final InputStream stream = getDataStream(masterSecret, partId, THUMBNAIL);
|
||||
if (stream != null) {
|
||||
return stream;
|
||||
}
|
||||
|
||||
PduPart part = getPart(partId);
|
||||
if (part.isInProgress()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
ThumbnailData data = MediaUtil.generateThumbnail(context, masterSecret, part.getDataUri(), Util.toIsoString(part.getContentType()));
|
||||
if (data == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
updatePartThumbnail(masterSecret, partId, part, data.toDataStream(), data.getAspectRatio());
|
||||
|
||||
return getDataStream(masterSecret, partId, THUMBNAIL);
|
||||
|
||||
@@ -67,6 +67,11 @@ public class AttachmentDownloadJob extends MasterSecretJob implements Injectable
|
||||
final PartId partId = new PartId(partRowId, partUniqueId);
|
||||
final PduPart part = DatabaseFactory.getPartDatabase(context).getPart(partId);
|
||||
|
||||
if (part == null) {
|
||||
Log.w(TAG, "part no longer exists.");
|
||||
return;
|
||||
}
|
||||
|
||||
Log.w(TAG, "Downloading push part " + partId);
|
||||
|
||||
retrievePart(masterSecret, part, messageId);
|
||||
@@ -88,6 +93,7 @@ public class AttachmentDownloadJob extends MasterSecretJob implements Injectable
|
||||
private void retrievePart(MasterSecret masterSecret, PduPart part, long messageId)
|
||||
throws IOException
|
||||
{
|
||||
|
||||
PartDatabase database = DatabaseFactory.getPartDatabase(context);
|
||||
File attachmentFile = null;
|
||||
|
||||
@@ -115,6 +121,8 @@ public class AttachmentDownloadJob extends MasterSecretJob implements Injectable
|
||||
private TextSecureAttachmentPointer createAttachmentPointer(MasterSecret masterSecret, PduPart part)
|
||||
throws InvalidPartException
|
||||
{
|
||||
if (part.getContentLocation() == null) throw new InvalidPartException("null content location");
|
||||
|
||||
try {
|
||||
AsymmetricMasterSecret asymmetricMasterSecret = MasterSecretUtil.getAsymmetricMasterSecret(context, masterSecret);
|
||||
long id = Long.parseLong(Util.toIsoString(part.getContentLocation()));
|
||||
@@ -153,6 +161,7 @@ public class AttachmentDownloadJob extends MasterSecretJob implements Injectable
|
||||
}
|
||||
|
||||
private static class InvalidPartException extends Exception {
|
||||
public InvalidPartException(String s) {super(s);}
|
||||
public InvalidPartException(Exception e) {super(e);}
|
||||
}
|
||||
|
||||
|
||||
@@ -78,8 +78,8 @@ public class MediaNetworkRequirement implements Requirement, ContextDependent {
|
||||
final PartDatabase db = DatabaseFactory.getPartDatabase(context);
|
||||
final PduPart part = db.getPart(partId);
|
||||
if (part == null) {
|
||||
Log.w(TAG, "part was null");
|
||||
return false;
|
||||
Log.w(TAG, "part was null, returning vacuous true");
|
||||
return true;
|
||||
}
|
||||
|
||||
Log.w(TAG, "part transfer progress is " + part.getTransferProgress());
|
||||
|
||||
@@ -26,6 +26,7 @@ import android.database.Cursor;
|
||||
import android.media.AudioManager;
|
||||
import android.media.MediaPlayer;
|
||||
import android.net.Uri;
|
||||
import android.os.AsyncTask;
|
||||
import android.support.annotation.NonNull;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.text.Spannable;
|
||||
@@ -416,10 +417,17 @@ public class MessageNotifier {
|
||||
public static final String REMINDER_ACTION = "org.thoughtcrime.securesms.MessageNotifier.REMINDER_ACTION";
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
MasterSecret masterSecret = KeyCachingService.getMasterSecret(context);
|
||||
int reminderCount = intent.getIntExtra("reminder_count", 0);
|
||||
MessageNotifier.updateNotification(context, masterSecret, true, true, reminderCount + 1);
|
||||
public void onReceive(final Context context, final Intent intent) {
|
||||
new AsyncTask<Void, Void, Void>() {
|
||||
@Override
|
||||
protected Void doInBackground(Void... params) {
|
||||
MasterSecret masterSecret = KeyCachingService.getMasterSecret(context);
|
||||
int reminderCount = intent.getIntExtra("reminder_count", 0);
|
||||
MessageNotifier.updateNotification(context, masterSecret, true, true, reminderCount + 1);
|
||||
|
||||
return null;
|
||||
}
|
||||
}.execute();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -93,6 +93,7 @@ public class BitmapUtil {
|
||||
return Glide.with(context)
|
||||
.load(model)
|
||||
.asBitmap()
|
||||
.fitCenter()
|
||||
.skipMemoryCache(true)
|
||||
.into(width, height)
|
||||
.get();
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
package org.thoughtcrime.securesms.util;
|
||||
|
||||
import org.thoughtcrime.securesms.TextSecureTestCase;
|
||||
|
||||
public class BitmapUtilTest extends TextSecureTestCase {
|
||||
public void testScaleFactorNormal() {
|
||||
assertEquals(1, BitmapUtil.getScaleFactor(1000, 1000, 9000, 9000, false));
|
||||
|
||||
assertEquals(1, BitmapUtil.getScaleFactor(1000, 1000, 750, 750, false));
|
||||
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 500, 500, false));
|
||||
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 499, 499, false));
|
||||
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 250, 250, false));
|
||||
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 249, 249, false));
|
||||
|
||||
assertEquals(1, BitmapUtil.getScaleFactor(1000, 500, 750, 750, false));
|
||||
assertEquals(1, BitmapUtil.getScaleFactor(2000, 1000, 501, 501, false));
|
||||
assertEquals(2, BitmapUtil.getScaleFactor(2000, 1000, 500, 500, false));
|
||||
assertEquals(2, BitmapUtil.getScaleFactor(1000, 2000, 499, 499, false));
|
||||
}
|
||||
|
||||
public void testScaleFactorConstrained() {
|
||||
assertEquals(1, BitmapUtil.getScaleFactor(1000, 1000, 9000, 9000, true));
|
||||
|
||||
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 750, 750, true));
|
||||
assertEquals(2, BitmapUtil.getScaleFactor(1000, 1000, 500, 500, true));
|
||||
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 499, 499, true));
|
||||
assertEquals(4, BitmapUtil.getScaleFactor(1000, 1000, 250, 250, true));
|
||||
assertEquals(8, BitmapUtil.getScaleFactor(1000, 1000, 249, 249, true));
|
||||
|
||||
assertEquals(2, BitmapUtil.getScaleFactor(1000, 500, 750, 750, true));
|
||||
assertEquals(4, BitmapUtil.getScaleFactor(2000, 1000, 500, 500, true));
|
||||
assertEquals(8, BitmapUtil.getScaleFactor(1000, 2000, 499, 499, true));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user