From ebc1725f5b9848e4c633427ae91b09d8a6206439 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 23 Sep 2020 02:12:04 +0000 Subject: [PATCH 01/55] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hant/ --- vector/src/main/res/values-zh-rTW/strings.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index efbb583ec9..dac6b366ce 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2574,4 +2574,9 @@ Matrix 中的消息可見度類似于電子郵件。我們忘記您的郵件意 驗證結論 連結格式錯誤 - +您沒有在此聊天室開始通話的權限 + 刪除類型為 %1$s 的帳號資料? +\n +\n小心使用,它可能會導致意料之外的行為。 + + From 8aae5b2599ab7217e94e5a8c56bf7f139c74f416 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Tue, 22 Sep 2020 15:17:15 +0000 Subject: [PATCH 02/55] Translated using Weblate (Estonian) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/et/ --- vector/src/main/res/values-et/strings.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 5fd84ffb47..5a35f77cdf 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2557,4 +2557,9 @@ Verifitseerimise tulemus Link oli vigane - +Sul ei ole õigusi siin jututoas helistamiseks + Kas kustutame %1$s tüüpi kasutajakonto andmed\? +\n +\nKuna nii mõndagi ootamatut võib juhtuda, siis kasuta seda võimalust mõningase ettevaatusega. + + From 5b7bfe5302daf02338033db49cab0737150dd26c Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Wed, 23 Sep 2020 20:08:25 +0000 Subject: [PATCH 03/55] Translated using Weblate (German) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/ --- vector/src/main/res/values-de/strings.xml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index db116d9912..d075cc44dd 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2683,5 +2683,12 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Umfrage Bot-Schaltflächen Reagierte mit: %s - Der Link war nicht korrekt - + Der Link war fehlerhaft +Du bist nicht berechtigt, einen Anruf in diesem Raum zu starten + Ergebnis der Überprüfung + + Kontodaten vom Typ %1$s löschen\? +\n +\nVorsicht! Es kann zu unerwartetem Verhalten führen. + + From 63718ab4f2947efc72842fa0c8df03d1992aea63 Mon Sep 17 00:00:00 2001 From: random Date: Wed, 23 Sep 2020 12:43:41 +0000 Subject: [PATCH 04/55] Translated using Weblate (Italian) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/it/ --- vector/src/main/res/values-it/strings.xml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 190e1610aa..3ea31027a4 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -1635,7 +1635,7 @@ Permetti chiamate dal Server di appoggio "Se il tuo Home Server non ne ha un proprio Server d\'appoggio verrà usato %s (il Server d\'appoggio verrà a conoscenza del tuo indirizzo IP durante le chiamate)" Per poterlo fare, aggiungi un Identity Server nelle Impostazioni. - Modalità sync in background (Sperimentale) + Modalità sync in background Ottimizzato per la batteria Element si sincronizzerà in background in modo da non consumare la poca batteria disponibile. \nA seconda del livello della batteria, il sistema operativo potrebbe ritardare la sincronizzazione. @@ -2669,4 +2669,22 @@ Impossibile aprire una stanza dove sei stato bandito. Impossibile trovare questa stanza. Assicurati che esista. +Non hai il permesso di avviare una chiamata in questa stanza + + %d secondo + %d secondi + + + Mostra eventi di stato dei membri della stanza + Includi eventi di invito/entrata/uscita/kick/ban e modifiche di avatar/nome. + Sondaggio + Pulsanti bot + Reagito con: %s + Conclusione della verifica + + Eliminare i dati dell\'account di tipo %1$s\? +\n +\nUsalo con attenzione, può avere comportamenti imprevisti. + + Il collegamento non è corretto From be2c6295907d37368172c3415d3af8c29657821d Mon Sep 17 00:00:00 2001 From: call_xz Date: Wed, 23 Sep 2020 12:46:51 +0000 Subject: [PATCH 05/55] Translated using Weblate (Japanese) Currently translated at 49.2% (922 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/ja/ --- vector/src/main/res/values-ja/strings.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index 66c6eb53d3..9f98d6f7e3 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -1227,4 +1227,7 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ 自分自身には通話できません - +マークダウン書式 + メッセージ送信前にマークダウン書式を適用します。これにより、アスタリスクを使用して斜体のテキストを表示するなどの高度な書式設定が利用できます。 + 音声とビデオ + From 32e8caab0377302a228dea9a8565f1e4fdaa6fdb Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Tue, 22 Sep 2020 16:32:08 +0000 Subject: [PATCH 06/55] Translated using Weblate (Portuguese (Brazil)) Currently translated at 99.6% (1866 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/ --- vector/src/main/res/values-pt-rBR/strings.xml | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 399dff3c89..fbf710feaf 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -1315,7 +1315,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr O aplicativo não precisa de se conectar ao servidor em segundo plano, isto deve reduzir a utilização da bateria - Sincronização em segundo plano (Experimental) + Sincronização em segundo plano Optimizado para bateria Element sincronizará em segundo plano para preservar os recursos limitados do aparelho (bateria). \nDependendo do estado dos recursos do seu aparelho, a sincronização pode ser adiada pelo sistema operacional. @@ -2643,4 +2643,28 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Atenção! Última tentativa restante antes de você ser desconectada/o! Muitos erros, você foi desconectada/o +Você não tem permissão para iniciar uma chamada nesta sala + Nenhum número de telefone foi adicionado à sua conta + Endereços de e-mail + Nenhum e-mail foi adicionado à sua conta + Números de telefone + Remover %s\? + Certifique-se de ter clicado no link do e-mail que enviamos para você. + + + %d segundo + %d segundos + + + Mostrar quando alguém for convidado/entrar/sair/banido e mostrar alterações de foto de perfil e de nome e sobrenome. + E-mails e números de telefone + Editar e-mails e números de telefone vinculados à sua conta Matrix + + Código + Por favor, use o formato internacional (o número de telefone precisa começar com \'+\') + Confirme sua identidade verificando este login, concedendo a ele acesso a mensagens criptografadas. + Não é possível carregar uma sala da qual você foi banido. + Não foi possível encontrar esta sala. Certifique-se de que ela existe. + + O link não está correto From e02b0aad6fa9983761f61a640824230c4e34ddf3 Mon Sep 17 00:00:00 2001 From: Lua Date: Tue, 22 Sep 2020 23:59:36 +0000 Subject: [PATCH 07/55] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (3 of 3 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.riot.im/projects/element-android/element-store/pt_BR/ --- vector/src/main/play/listings/pt_BR/title.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/play/listings/pt_BR/title.txt b/vector/src/main/play/listings/pt_BR/title.txt index 70c9f7030b..5d2ae0c353 100644 --- a/vector/src/main/play/listings/pt_BR/title.txt +++ b/vector/src/main/play/listings/pt_BR/title.txt @@ -1 +1 @@ -Element (antigo Riot.im) +Element (o novo Riot.im) From c2a938a17c5c84463596b8e98fbb5c36272471d1 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Tue, 22 Sep 2020 20:09:07 +0000 Subject: [PATCH 08/55] Translated using Weblate (Russian) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/ --- vector/src/main/res/values-ru/strings.xml | 39 +++++++++++++---------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 5d9c44518f..4512389abf 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -99,7 +99,7 @@ %d пользователь %d пользователя %d пользователей - + Отправить логи @@ -833,13 +833,13 @@ %d комната %d комнаты %d комнат - + %d комната %d комнаты %d комнат - + %1$s в %2$s @@ -847,7 +847,7 @@ %d активный виджет %d активных виджета %d активных виджетов - + @@ -857,45 +857,45 @@ %d активный участник %d активных участника %d активных участников - + %d участник %d участника %d участников - + %d новое сообщение %d новых сообщения %d новых сообщений - + %1$s комната найдена для %2$s %1$s комнаты найдено для %2$s %1$s комнат найдено для %2$s - + %d изменение членства %d изменения членства %d изменений членства - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + Получить аватар Заметка аватара @@ -1030,20 +1030,20 @@ %d выбран %d выбрано %d выбраны - + %d участник %d участника %d участников - + %d комната %d комнаты %d комнат - + Системные оповещения @@ -1304,7 +1304,7 @@ %d новый ключ был добавлен к этому устройству. %d новых ключа были добавлены к этому устройству. %d новых ключей были добавлены к этому устройству. - + @@ -1355,7 +1355,7 @@ Резервное копирование %d ключа… Резервное копирование %d ключей… Резервное копирование %d ключей… - + Все ключи сохранены @@ -2730,4 +2730,9 @@ Результат проверки Ссылка была искажена - +У вас нет разрешения на запуск звонка в этой комнате + Удалить данные учетной записи типа %1$s\? +\n +\nИспользуйте с осторожностью, это может привести к неожиданному поведению. + + From ae84a0bbe96e47a7f2bb8f87d9d60a34651060ae Mon Sep 17 00:00:00 2001 From: linsui Date: Fri, 25 Sep 2020 04:48:20 +0000 Subject: [PATCH 09/55] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/zh_Hans/ --- vector/src/main/res/values-zh-rCN/strings.xml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 3cbcbb0875..5a9e3a9066 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -1511,7 +1511,7 @@ Element 在后台时的工作将被显著的限制,这可能会影响消息通 需要身份认证 - 后台同步模式(实验性) + 后台同步模式 电池优化 Element 将在后台以保留设备有限资源(电池)的方式同步。 \n取决于您的设备资源状态,同步可能被操作系统推迟。 @@ -2578,4 +2578,21 @@ Element 在后台时的工作将被显著的限制,这可能会影响消息通 无法打开您被封禁的聊天室。 无法找到此聊天室。请确认它存在。 +您没有权限在此聊天室发起通话 + + %d 秒 + + + 显示聊天室成员状态事件 + 包括邀请/加入/离开/踢掉/封禁事件和头像/昵称变更。 + 轮询 + 机器人按钮 + 回应:%s + 验证结果 + + 是否删除类型 %1$s 的账户数据? +\n +\n小心使用,它可能导致意外行为。 + + 链接格式不正确 From 667ea844f2eea1e1f3c18de0b877082cc9490431 Mon Sep 17 00:00:00 2001 From: zeritti Date: Fri, 25 Sep 2020 17:51:21 +0000 Subject: [PATCH 10/55] Translated using Weblate (Czech) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/cs/ --- vector/src/main/res/values-cs/strings.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 745d938555..919acc53b7 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2623,4 +2623,9 @@ Vaši e-mailovou adresu můžete přidat k profilu v nastavení. Výsledek ověření Odkaz byl chybně zformován - +K zahájení hovoru v této místnosti nemáte oprávnění + Smazat údaje účtu typu %1$s\? +\n +\nOpatrně, může vést k neočekávanému chování. + + From c14bf80b40fe65062f8e5f6e3b4e1a1de5f7dc19 Mon Sep 17 00:00:00 2001 From: zeritti Date: Sat, 26 Sep 2020 07:19:02 +0000 Subject: [PATCH 11/55] Translated using Weblate (Czech) Currently translated at 100.0% (168 of 168 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/cs/ --- .../src/main/res/values-cs/strings.xml | 212 ++++++++++++++---- 1 file changed, 169 insertions(+), 43 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml index 9e208f812a..57828ac182 100644 --- a/matrix-sdk-android/src/main/res/values-cs/strings.xml +++ b/matrix-sdk-android/src/main/res/values-cs/strings.xml @@ -4,47 +4,47 @@ Uživatel %1$s poslal obrázek. Uživatel %1$s poslal nálepku. - Pozvánka od uživatele %s + Pozvání od uživatele %s Uživatel %1$s pozval uživatele %2$s Uživatel %1$s vás pozval - Uživatel %1$s se připojil + %1$s vstoupil do místnosti Uživatel %1$s odešel - Uživatel %1$s odmítl pozvání - Uživatel %1$s vykopl uživatele %2$s - Uživatel %1$s znovu povolil vstup uživateli %2$s - Uživatel %1$s vykázal uživatele %2$s - Uživatel %1$s zrušil pozvání pro uživatele %2$s - Uživatel %1$s změnil svůj profilový obrázek - Uživatel %1$s nastavil své zobrazované jméno na %2$s - Uživatel %1$s změnil své zobrazované jméno z %2$s na %3$s - Uživatel %1$s odstranil své zobrazované jméno (%2$s) - Uživatel %1$s změnil téma na: %2$s - Uživatel %1$s změnil název místnosti na: %2$s - Uživatel %s uskutečnil videohovor. - Uživatel %s uskutečnil hlasový hovor. - Uživatel %s přijal hovor. - Uživatel %s ukončil hovor. - Uživatel %1$s nastavit viditelnost budoucích zpráv v místnosti pro %2$s + %1$s odmítli pozvání + %1$s vykopli %2$s + %1$s zrušil vykázání %2$s + %1$s vykázali %2$s + %1$s zrušili pozvání pro %2$s + %1$s změnili svůj profilový obrázek + %1$s nastavili své veřejné jméno na %2$s + %1$s změnili své veřejné jméno z %2$s na %3$s + %1$s odstranili své veřejné jméno (%2$s) + %1$s změnili téma na: %2$s + %1$s změnili název místnosti na: %2$s + %s uskutečnili videohovor. + %s uskutečnili hlasový hovor. + %s přijali hovor. + %s ukončili hovor. + %1$s nastavili viditelnost budoucí historie místnosti pro %2$s všechny členy místnosti od chvíle, kdy budou pozváni. všechny členy místnosti od chvíle, kdy se připojí. všechny členy místnosti. kohokoliv. neznámým (%s). - Uživatel %1$s zapnul end-to-end šifrování (%2$s) + %1$s zapnuli end-to-end šifrování (%2$s) - Uživatel %1$s požádal o VoIP konferenci + %1$s požádali o VoIP konferenci Začala VoIP konference VoIP konference skončila (profilový obrázek byl také změněn) - Uživatel %1$s odstranil název místnosti - Uživatel %1$s odstranil téma místnosti - Uživatel %1$s aktualizoval svůj profil %2$s - Uživatel %1$s do této místnosti pozval uživatele %2$s - Uživatel %1$s přijal pozvání pro %2$s + %1$s odstranili název místnosti + %1$s odstranili téma místnosti + %1$s aktualizovali svůj profil %2$s + %1$s do této místnosti pozvali %2$s + %1$s přijali pozvání pro %2$s ** Nelze dešifrovat: %s ** - Odesílatelovo zařízení neposlalo klíče pro tuto zprávu. + Odesílatelovo zařízení nám neposlalo klíče pro tuto zprávu. Nelze vymazat Zprávu nelze odeslat @@ -54,7 +54,7 @@ Chyba sítě Chyba v Matrixu - V současnosti není možné se znovu připojit do prázdné místnosti. + V současnosti není možné znovu vstoupit do prázdné místnosti. Šifrovaná zpráva @@ -74,35 +74,161 @@ Prázdná místnost - Uživatel %s upgradoval tuto místnost. + %s povýšili tuto místnost. Zpráva byla smazána [důvod: %1$s] Zpráva smazána uživatelem %1$s [důvod: %2$s] - Uživatel %1$s obnovil pozvánku do místnosti pro uživatele %2$s - Úvodní synchronizace: -\nImport účtu… + %1$s zrušili pozvánku do místnosti pro %2$s + Úvodní synchronizace: +\nImportuji účet… Úvodní synchronizace: -\nImport klíčů +\nImportuji klíče Úvodní synchronizace: -\nImport místností +\nImportuji místnosti Úvodní synchronizace: -\nImport místností, kterými jste členy +\nImportuji místností, jichž jste členy Úvodní synchronizace: -\nImport opuštěných místností +\nImportuji místnost, jež jste opustili Úvodní synchronizace: -\nImport skupin +\nImportuji komunity Úvodní synchronizace: -\nImport dat účtu +\nImportuji data účtu - Odesílání zprávy… + Odesílám zprávu… - Úvodní synchronizace: -\nImport pozvánek + Úvodní synchronizace: +\nImportuji pozvání Vymazat frontu neodeslaných zpráv - Uživatel %1$s pozval uživatele %2$s. Důvod: %3$s - Uživatel %1$s váš pozval. Důvod: %2$s - Uživatel %1$s odešel. Důvod: %2$s + %1$s pozvali %2$s. Důvod: %3$s + %1$s vás pozvali. Důvod: %2$s + %1$s opustil místnost. Důvod: %2$s Zpráva odstraněna Zprávu odstranil/a %1$s +Poslali jste obrázek. + Poslali jste nálepku. + + Vaše pozvání + %1$s založil místnost + Vy jste založili místnost + Pozvali jste %1$s + Vstoupili jste do místnosti + Opustili jste místnost + Odmítli jste pozvání + Vykopli jste %1$s + Zrušili jste vykázání pro %1$s + Vykázali jste %1$s + Stáhli jste pozvánku od %1$s zpět + Změnili jste svůj profilový obrázek + Změnili jste své veřejné jméno na %1$s + Změnili jste své veřejné jméno z %1$s na %2$s + Odstranili jste své veřejné jméno (%1$s) + Změnili jste téma na: %1$s + %1$s změnili obrázek místnosti + Změnili jste obrázek místnosti + Změnili jste jméno místnosti na: %1$s + Zahájili jste video hovor. + Zahájili jste hlasový hovor. + %s poslali data, aby mohli zahájit hovor. + Poslali jste data, abyste mohli zahájit hovor. + Přijali jste hovor. + Ukončili jste hovor. + Učinili jste budoucí historii místnosti viditelnou pro %1$s + Zapnuli jste end-to-end šifrování (%1$s) + Povýšili jste tuto místnost. + + Požádali jste o VoIP konferenci + Odstranili jste jméno místnosti + Odstranili jste téma místnosti + %1$s odstranili obrázek místnosti + Odstranili jste obrázek místnosti + Aktualizovali jste svů profil %1$s + Poslali jste %1$s pozvání ke vstupu do místnosti + Zrušili jste pozvánku ke vstupu do místnosti pro %1$s + Přijali jste pozvání pro %1$s + + %1$s přidali widget %2$s + Přidali jste widget %1$s + %1$s odstranili widget %2$s + Odstranili jste widget %1$s + %1$s změnil widget %2$s + Změnili jste widget %1$s + + Správce + Moderátor + Výchozí + Vlastní (%1$d) + Vlastní + + Změnili jste %1$s stupeň oprávnění. + %1$s změnili %2$s stupeň oprávnění. + %1$s z %2$s na %3$s + + Pozvání od %1$s. Důvod: %2$s + Vaše pozvání. Důvod: %1$s + Pozvali jste %1$s. Důvod: %2$s + %1$s vstoupili do místnosti. Důvod: %2$s + Vstoupili jste do místnosti. Důvod: %1$s + Opustili jste místnost. Důvod: %1$s + %1$s pozvání odmítli. Důvod: %2$s + Odmítli jste pozvání. Důvod: %1$s + %1$s vykopnuli %2$s. Důvod: %3$s + Vykopnuli jste %1$s. Důvod: %2$s + %1$s zrušili %2$s vykázání. Důvod: %3$s + Zrušili jste %1$s vykázání. Důvod: %2$s + %1$s vykázali %2$s. Důvod: %3$s + Vykázali jste %1$s. Důvod: %2$s + %1$s poslali %2$s pozvání, aby vstoupili do místnosti. Důvod: %3$s + "Poslali jste %1$s pozvání, aby vstoupili do místnosti. Důvod: %2$s" + %1$s zrušili pozvání do místnosti pro %2$s. Důvod: %3$s + Zrušili jste pozvání do místnosti pro %1$s. Důvod: %2$s + %1$s přijali pozvání pro %2$s. Důvod: %3$s + Přijali jste pozvání pro %1$s. Důvod: %2$s + %1$s zrušili pozvání pro %2$s. Důvod: %3$s + Zrušili jste pozvání od %1$s. Důvod: %2$s + + + %1$s přidali %2$s jako adresu pro tuto místnost. + %1$s přidali %2$s jako adresy pro tuto místnost. + %1$s přidali %2$s jako adresy pro tuto místnost. + + + + Přidali jste %1$s jako adresu pro tuto místnost. + Přidali jste %1$s jako adresy pro tuto místnost. + Přidali jste %1$s jako adresy pro tuto místnost. + + + + %1$s odstranili %2$s jako adresu pro tuto místnost. + %1$s odstranili %2$s jako adresy pro tuto místnost. + %1$s odstranili %2$s jako adresy pro tuto místnost. + + + + Odstranili jste %2$s jako adresu pro tuto místnost. + Odstranili jste %2$s jako adresuy pro tuto místnost. + Odstranili jste %2$s jako adresy pro tuto místnost. + + + %1$s přidali %2$ a odstranili %3$s jako adresy pro tuto místnost. + Přidali jste %1$s a odstranili %2$s jako adresy pro tuto místnost. + + %1$s nastavili hlavní adresu této místnosti na %2$s. + Nastavili jste %1$s na hlavní adresu této místnosti. + %1$s odstranili hlavní adresu této místnosti. + Odstranili jste hlavní adresu této místnosti. + + "%1$s povolili hostům vstoupit do místnosti." + Povolili jste hostům vstoupit do místnosti. + %1$s zamezili hostům vstoupit do místnosti. + Zamezili jste hostům vstoupit do místnosti. + + %1$s zapnuli end-to-end šifrování. + Zapnuli jste end-to-end šifrování. + %1$s zapnuli end-to-end šifrování (neznámý algoritmus %2$s). + Zapnuli jste end-to-end šifrování (neznámý algoritmus %2$s). + + %s žádá ověření Vašeho klíče, ale Váš klient nepodporuje ověření klíče v chatu. Budete muset k ověření klíčů použít zastaralý způsob ověření. + From d6d9ece045ca4824992fe00204034393b0b2537f Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Sat, 26 Sep 2020 09:17:39 +0000 Subject: [PATCH 12/55] Translated using Weblate (Russian) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/ --- vector/src/main/res/values-ru/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 4512389abf..f4e870d913 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -1181,7 +1181,7 @@ Отключить ограничения Оптимизация батареи - Оптимизация батареи не влияет на Райот. + Оптимизация батареи не влияет на Element. Если пользователь оставляет устройство в отключенном от сети и в неподвижном состоянии в течение некоторого времени при выключенном экране, устройство переходит в режим Doze. Это предотвращает доступ приложений к сети и откладывает выполнение заданий, синхронизацию и передачу стандартных аварийных сигналов. Игнорировать оптимизацию @@ -1196,7 +1196,7 @@ Необходимо минимизировать влияние на фоновое соединение для надёжности уведомлений. На следующем экране вам будет предложено разрешить Райоту всегда работать в фоновом режиме, пожалуйста, примите. - Использовать системную камеру вместо камеры Райот. + Использовать системную камеру вместо камеры Element. Показать информацию %1$s: %1$s: %2$s From 7bf510880f026d4f4974dea02cda5a8b1261f607 Mon Sep 17 00:00:00 2001 From: OLIVIER Thomas Date: Sun, 27 Sep 2020 09:36:13 +0000 Subject: [PATCH 13/55] Translated using Weblate (French) Currently translated at 92.0% (1725 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/fr/ --- vector/src/main/res/values-fr/strings.xml | 54 ++++++++++++++++++++++- 1 file changed, 52 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index d58f22b399..48df26c6d8 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -1583,7 +1583,7 @@ Si vous n’avez pas configuré de nouvelle méthode de récupération, un attaq Autoriser le serveur d’assistance d’appel de secours Utilisera %s comme assistant quand votre serveur d’accueil n’en offre pas (votre adresse IP sera partagée lors d’un appel) Ajoutez un serveur d’identité dans vos paramètres pour réaliser cette action. - Mode de synchronisation en arrière-plan (expérimental) + Mode de synchronisation en arrière-plan Optimisé pour la batterie Element se synchronisera en arrière-plan de façon à préserver les ressources limitées de l’appareil (batterie). \nSelon l’état des ressources de votre appareil, la synchronisation peut être retardée par le système d’exploitation. @@ -2377,4 +2377,54 @@ Si vous n’avez pas configuré de nouvelle méthode de récupération, un attaq Renseignez l’URL d’un serveur d’identité Valider - +Lancer + Pause + Ignorer + + + Vous n\'avez pas la permission de commencer une téléconférence dans ce salon + Vous n\'avez pas la permission de commencer un appel dans ce salon + Une téléconférence est déjà en cours ! + Commencer une réunion vidéo + Commencer une réunion audio + Les réunions utilisent les règles de sécurités et les permissions de Jitsi. Toutes les personnes actuellement dans ce salon recevrons une invitation à participer à la réunion. + Vous ne pouvez pas passer un appel avec vous-même + Vous ne pouvez pas passer un appel avec vous-même, attendez que les participants accepte l\'invitation + Échec de l\'ajout du module d\'information (widget) + Échec de la suppression du module d\'information (widget) + Accepter + Refuser + Raccrocher + + Copier + Succès + + Notifications + Impossible d\'établir une connexion en temps réel. +\nVeuillez demander à l\'administrateur de votre serveur domestique de configurer un serveur TURN afin que les appels fonctionnent de manière fiable. + + Sélectionner un appareil audio + Téléphone + Hauts-parleurs + Écouteurs + Écouteurs sans fil + Changer de caméra + Le numéro de téléphone est déjà défini. + Erreur SSL : l\'identité du pair n\'a pas été vérifiée. + Erreur SSL. + Prévenir les appels accidentels + Demandez une confirmation avant de commencer un appel + Appel actif (%s) + Retour à l\'appel + + Annuler l\'invitation + Ignorer l\'utilisateur + Ignorer cet utilisateur aura pour effet de supprimer ses messages des espaces que vous partagez. +\n +\nVous pouvez annuler cette action à tout moment dans les paramètres généraux. + Annuler l\'invitation + Êtes-vous sûr de vouloir annuler l\'invitation pour cet utilisateur \? + Bloquer l\'utilisateur + Motif du blocage + Débloquer l\'utilisateur + From 6a67c0fd0d611ac0048a851d018ae5283be1ae06 Mon Sep 17 00:00:00 2001 From: John Date: Sun, 27 Sep 2020 20:00:34 +0000 Subject: [PATCH 14/55] Translated using Weblate (Greek) Currently translated at 15.0% (282 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/el/ --- vector/src/main/res/values-el/strings.xml | 36 +++++++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 499f4a0549..945ea8029c 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -31,7 +31,7 @@ Αποστολή πληροφοριών Έναρξη συνομιλίας Ο διακομιστής είναι μη διαθέσιμος ή υπερφορτωμένος - Προβολή του αποκρυπτογραφημένου κώδικα + Προβολή αποκρυπτογραφημένου κώδικα Προβολή κώδικα Σήμερα @@ -69,11 +69,11 @@ Αργότερα Μπροστά - Διαγαρφή + Διαγραφή Μετονομασία Αναφορά περιεχομένου Ενεργή κλήση - βίντεο + Βίντεο Κάποια χαρακτηριστικά μπορεί να μην είναι διαθέσιμα λόγω ελλιπών δικαιωμάτων… Αυτή η ενέργεια δεν είναι δυνατή λόγω ελλιπών δικαιωμάτων. Πληροφορίες συσκευής @@ -151,8 +151,8 @@ %1$s : %1$s: %2$s +%d - ήχος - Η κλήση δεν ήταν δυνατή, παρακαλώ δοκιμάστε αργότερα + Ήχος + Δεν είναι δυνατή η έναρξη της κλήσης, δοκιμάστε αργότερα Η κλήση δεν ήταν δυνατή Πάντα Για μηνύματα και σφάλματα @@ -338,4 +338,28 @@ Άτομα Αναζήτηση ατόμων ΑΤΟΜΑ - +Λτνκ + + Αρχικοποίηση υπηρεσίας + Αναμονή για συμβάντα + Δημιουργία αντιγράφων ασφαλείας κλειδιών + Χρησιμοποιήστε το αντίγραφο ασφαλείας κλειδιών + Επαλήθευση συνεδρίας + + Το αντίγραφο ασφαλείας κλειδιών δεν έχει ολοκληρωθεί, παρακαλώ περιμένετε… + Θα χάσετε τα κρυπτογραφημένα μηνύματά σας εάν αποσυνδεθείτε τώρα + Δημιουργία αντίγραφου κλειδιού ασφαλείας σε εξέλιξη. Εάν αποσυνδεθείτε τώρα, θα χάσετε την πρόσβαση στα κρυπτογραφημένα μηνύματά σας. + Δεν θέλω τα κρυπτογραφημένα μηνύματά μου + Δημιουργία αντιγράφων ασφαλείας κλειδιών… + Χρησιμοποιήστε το αντιγραφο κλειδιού ασφαλείας + Είστε σίγουρος; + Δημιουργία αντίγραφου ασφαλείας + Θα χάσετε την πρόσβαση στα κρυπτογραφημένα μηνύματά σας, εκτός εάν δημιουργήσετε αντίγραφα ασφαλείας των κλειδιών σας πριν αποσυνδεθείτε. + Αφαίρεση + Κατεβάστε + Διαμοιρασμός + Καθαρισμός + Ανάκληση + Αποσύνδεση + Παύση + From 6f29d380473494f0148889849c2d6c7d3dfcaacb Mon Sep 17 00:00:00 2001 From: Dmytro Kyrychuk Date: Tue, 29 Sep 2020 17:14:41 +0000 Subject: [PATCH 15/55] Translated using Weblate (Greek) Currently translated at 15.1% (283 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/el/ --- vector/src/main/res/values-el/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 945ea8029c..14580a49f8 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -362,4 +362,5 @@ Ανάκληση Αποσύνδεση Παύση + Прямі повідомлення From 29f8c18b09737b26779c004e178d6a1000674214 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 29 Sep 2020 13:00:13 +0000 Subject: [PATCH 16/55] Translated using Weblate (Kabyle) Currently translated at 100.0% (168 of 168 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/kab/ --- matrix-sdk-android/src/main/res/values-kab/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/res/values-kab/strings.xml b/matrix-sdk-android/src/main/res/values-kab/strings.xml index 0d1cad6550..ec498256f2 100644 --- a/matrix-sdk-android/src/main/res/values-kab/strings.xml +++ b/matrix-sdk-android/src/main/res/values-kab/strings.xml @@ -201,7 +201,7 @@ Tekkseḍ %2$s am tansiwin i texxamt-a. - %1$s yerna %2$s terniḍ tekkseḍ %3s am tansiwin i texxamt-a. + %1$s yerna %2$s terniḍ tekkseḍ %3$s am tansiwin i texxamt-a. Terniḍ %1$s terniḍ tekkseḍ %2$s am tansiwin i texxamt-a. %1$s isbadu %2$s am tansa tagejdant i texxamt-a. From d744dea46ef6aa9549d66a4e043a0515df017f6c Mon Sep 17 00:00:00 2001 From: Dmytro Kyrychuk Date: Tue, 29 Sep 2020 17:16:32 +0000 Subject: [PATCH 17/55] Translated using Weblate (Ukrainian) Currently translated at 41.4% (775 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/uk/ --- vector/src/main/res/values-uk/strings.xml | 60 ++++++++++++++++------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index 7ed1791908..ce34bf8ddb 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -772,7 +772,7 @@ %d зміна членства %d зміни членства %d змін членства - + Список учасників @@ -797,13 +797,13 @@ %d активний участник %d активних участника %d активних участників - + %d участник %d участника %d участників - + Ви впевнені, що хочете забанити цього користувача в цьому чаті? @@ -811,7 +811,7 @@ %d нове повідомлення %d нових повідомленя %d нових повідомлень - + Обмежена конфіденційність @@ -863,25 +863,25 @@ %d сек. %d сек. %d сек. - + %d хв. %d хв. %d хв. - + %d год. %d год. %d год. - + %d день %d днів %d дні - + Зараз %1$s @@ -897,19 +897,19 @@ %d обрано "%d обрано" "%d обрано" - + %d кімната %d кімнати %d кімнат - + %1$s кімнату знайдено для %2$s %1$s кімнати знайдено для %2$s %1$s кімнат знайдено для %2$s - + Версія %s • Сповіщення містять метадані та дані повідомлення @@ -938,19 +938,19 @@ %d непрочитане сповіщення %d непрочитані сповіщення %d непрочитаних сповіщень - + %d непрочитане сповіщення %d непрочитані сповіщення %d непрочитаних сповіщень - + %d кімната %d кімнати %d кімнат - + %1$s у %2$s @@ -958,7 +958,7 @@ %d активний віджет %d активні віджети %d активних віджетів - + Пропущено обов’язковий параметр. @@ -1004,14 +1004,14 @@ %d учасник %d учасника %d учасників - + %d кімната %d кімнати %d кімнат - + Адміністратор спільноти не вказав для неї детальної інформації. @@ -1110,4 +1110,28 @@ Будь ласка, ознайомтесь та прийміть правила цього серверу: Позначити як прочитане - +Cyrl + + Запуск сервісу + Резервна копія ключа + Використати резервну копію ключа + Тут буде список Ваших прямих чатів + Повідомлення видалено + Прямі чати + + Прямі чати + + Відправити нове пряме повідомлення + Додає ¯\\_(ツ)_/¯ перед текстовим повідомленням + + Element не підтримує повідомлення типу \'%1$s\' + Відправляє повідомлення розмальоване веселково + Редактор повідомлень + + Відправляє повідомлення як текст без інтерпретації його як Markdown + + Повідомлення… + + Ви не маєте доступу до цього повідомлення + Очікуємо повідомлення, це може тривати певний час + From b6bbe19316dbc1996be983070acb23ce24a5a1e2 Mon Sep 17 00:00:00 2001 From: Dmytro Kyrychuk Date: Tue, 29 Sep 2020 17:20:22 +0000 Subject: [PATCH 18/55] Translated using Weblate (Ukrainian) Currently translated at 100.0% (3 of 3 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.riot.im/projects/element-android/element-store/uk/ --- vector/src/main/play/listings/uk/full_description.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/play/listings/uk/full_description.txt b/vector/src/main/play/listings/uk/full_description.txt index ca6b4c2ae1..64247581d2 100644 --- a/vector/src/main/play/listings/uk/full_description.txt +++ b/vector/src/main/play/listings/uk/full_description.txt @@ -13,7 +13,7 @@ Element здатен забезпечити усе це завдяки тому, Element надає вам повний контроль, дозволяючи обирати з-поміж надавачів послуг, що обслуговують сервери з вашими бесідами. Ви вільні обрати будь-який спосіб розміщення прямо з застосунку Element: -1. Отримати безкоштовний обліковий запис на загальнодоступному сервері matrix.org +1. Отримати безкоштовний обліковий запис на загальнодоступному сервері matrix.org, який обслуговують розробники Matrix, чи на одному з тисяч публічних серверів, які обслуговують волонтери 2. Розмістити свій обліковий запис на власному сервері 3. Зареєструватись на індивідуальному сервері, просто підписавшись на послуги платформи Element Matrix Services From 44d850e78f080beb1c5084ec7164091a4a79449b Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Fri, 2 Oct 2020 10:05:47 +0000 Subject: [PATCH 19/55] Translated using Weblate (German) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/ --- vector/src/main/res/values-de/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index d075cc44dd..1a271eaa09 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2654,7 +2654,7 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Falscher code, %d verbleibende Versuche Warnung! Letzter Versuch bevor du ausgeloggt wirst! - Zu viele Fehler, du bist ausgeloggt worden + Zu viele Fehler. Du wurdest ausgeloggt Diese Telefonnummer ist bereits registriert. Deinem Konto wurde keine Telefonnummer hinzugefügt E-mail-Adressen From 19def67a9aba5077ac15e0434e99062defa5fd93 Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Sun, 4 Oct 2020 13:43:47 +0000 Subject: [PATCH 20/55] Translated using Weblate (German) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/de/ --- vector/src/main/res/values-de/strings.xml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 1a271eaa09..1b653375cc 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -96,9 +96,9 @@ Keine Räume Keine öffentl. Räume verfügbar - 1 Benutzer - %d Benutzer - + 1 Benutzer + %d Benutzer/in + Logdateien übermitteln Absturzberichte übermitteln @@ -312,7 +312,7 @@ Du kannst dich mit einem anderen Konto anmelden oder diese E-Mail-Adresse zu die Aus diesem Raum entfernen Verbannen Verbannung aufheben - Zum normalen Benutzer herabstufen + Zum/r normalen Benutzer/in herabstufen Zum Moderator machen Zum Admin machen Alle Nachrichten dieses Nutzers verbergen @@ -320,8 +320,7 @@ Du kannst dich mit einem anderen Konto anmelden oder diese E-Mail-Adresse zu die Nutzer-ID, Name oder E-Mail-Adresse Erwähnen Sitzungsliste anzeigen - Du wirst diese Änderung nicht rückgängig machen können, da der Benutzer dasselbe Berechtigungslevel wie du selbst erhalten wirst. -Bist du sicher? + Du wirst diese Änderung nicht rückgängig machen können, da der/die Benutzer!n dasselbe Berechtigungslevel wie du selbst erhalten wirst. Bist du sicher\? "Bist du sicher, dass du %s in diesen Chat einladen willst?" From 3182850e19097ea6c58d433daaf677537e2966cf Mon Sep 17 00:00:00 2001 From: rkfg Date: Mon, 5 Oct 2020 20:44:49 +0000 Subject: [PATCH 21/55] Translated using Weblate (Russian) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/ru/ --- vector/src/main/res/values-ru/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index f4e870d913..f3665caded 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -1227,7 +1227,7 @@ Настроить шумные уведомления Настроить уведомления о вызовах Настроить беззвучные уведомления - Выберать цвет светодиода, вибрацию, звук… + Выбрать цвет светодиода, вибрацию, звук… Управление криптографическими ключами From 2e5e072631813009fce35140365df34a7141bbe5 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Wed, 7 Oct 2020 09:12:38 +0000 Subject: [PATCH 22/55] Translated using Weblate (Swedish) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/sv/ --- vector/src/main/res/values-sv/strings.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 7915abb41c..96385b4cc3 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2560,4 +2560,9 @@ Verifieringsavslutning Länken var felformaterad - +Du har inte behörighet att starta ett samtal i det här rummet + Radera kontodata av typen %1$s\? +\n +\nAnvänd varsamt, det kan leda till oväntat beteende. + + From f82aee608920d5a9b1bf4f2eebca01bdcc37640d Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 12 Oct 2020 13:35:34 +0300 Subject: [PATCH 23/55] Add fab to the member list screen to invite users. --- CHANGES.md | 1 + .../members/RoomMemberListFragment.kt | 51 +++++++++++-------- .../main/res/drawable/ic_fab_add_members.xml | 30 +++++++++++ .../src/main/res/drawable/ic_invite_users.xml | 18 ------- .../res/layout/fragment_room_member_list.xml | 24 +++++++++ .../main/res/menu/menu_room_member_list.xml | 12 ----- 6 files changed, 84 insertions(+), 52 deletions(-) create mode 100644 vector/src/main/res/drawable/ic_fab_add_members.xml delete mode 100644 vector/src/main/res/drawable/ic_invite_users.xml create mode 100644 vector/src/main/res/layout/fragment_room_member_list.xml delete mode 100644 vector/src/main/res/menu/menu_room_member_list.xml diff --git a/CHANGES.md b/CHANGES.md index 05d189ed12..187d9ad8f4 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -16,6 +16,7 @@ Improvements 🙌: - Drawer: move settings access and add sign out action (#2171) - Filter room member (and banned users) by name (#2184) - Implement "Jump to read receipt" and "Mention" actions on the room member profile screen + - Add FAB to room members list (#2226) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt index 67577e866e..f38877ca6b 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt @@ -17,12 +17,11 @@ package im.vector.app.features.roomprofile.members import android.os.Bundle -import android.view.Menu -import android.view.MenuItem import android.view.View import androidx.appcompat.app.AlertDialog import androidx.appcompat.widget.SearchView import androidx.core.view.isVisible +import androidx.recyclerview.widget.RecyclerView import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState @@ -37,6 +36,7 @@ import im.vector.app.core.extensions.configureWith import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.roomprofile.RoomProfileArgs +import kotlinx.android.synthetic.main.fragment_room_member_list.* import kotlinx.android.synthetic.main.fragment_room_setting_generic.* import javax.inject.Inject @@ -49,38 +49,44 @@ class RoomMemberListFragment @Inject constructor( private val viewModel: RoomMemberListViewModel by fragmentViewModel() private val roomProfileArgs: RoomProfileArgs by args() - override fun getLayoutResId() = R.layout.fragment_room_setting_generic - - override fun getMenuRes() = R.menu.menu_room_member_list - - override fun onPrepareOptionsMenu(menu: Menu) { - val canInvite = withState(viewModel) { - it.actionsPermissions.canInvite - } - menu.findItem(R.id.menu_room_member_list_add_member).isVisible = canInvite - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - R.id.menu_room_member_list_add_member -> { - navigator.openInviteUsersToRoom(requireContext(), roomProfileArgs.roomId) - return true - } - } - return super.onOptionsItemSelected(item) - } + override fun getLayoutResId() = R.layout.fragment_room_member_list override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) roomMemberListController.callback = this setupToolbar(roomSettingsToolbar) setupSearchView() + setupInviteUsersButton() recyclerView.configureWith(roomMemberListController, hasFixedSize = true) + // Hide FAB when list is scrolling + recyclerView.addOnScrollListener( + object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + when (newState) { + RecyclerView.SCROLL_STATE_IDLE -> { + if (withState(viewModel) { it.actionsPermissions.canInvite }) { + inviteUsersButton.show() + } + } + RecyclerView.SCROLL_STATE_DRAGGING, + RecyclerView.SCROLL_STATE_SETTLING -> { + inviteUsersButton.hide() + } + } + } + } + ) viewModel.selectSubscribe(this, RoomMemberListViewState::actionsPermissions) { invalidateOptionsMenu() } } + private fun setupInviteUsersButton() { + inviteUsersButton.debouncedClicks { + navigator.openInviteUsersToRoom(requireContext(), roomProfileArgs.roomId) + } + } + private fun setupSearchView() { searchViewAppBarLayout.isVisible = true searchView.queryHint = getString(R.string.search_members_hint) @@ -131,5 +137,6 @@ class RoomMemberListFragment @Inject constructor( roomSettingsToolbarTitleView.text = it.displayName avatarRenderer.render(it.toMatrixItem(), roomSettingsToolbarAvatarImageView) } + inviteUsersButton.isVisible = state.actionsPermissions.canInvite } } diff --git a/vector/src/main/res/drawable/ic_fab_add_members.xml b/vector/src/main/res/drawable/ic_fab_add_members.xml new file mode 100644 index 0000000000..50768871ab --- /dev/null +++ b/vector/src/main/res/drawable/ic_fab_add_members.xml @@ -0,0 +1,30 @@ + + + + + + + + + diff --git a/vector/src/main/res/drawable/ic_invite_users.xml b/vector/src/main/res/drawable/ic_invite_users.xml deleted file mode 100644 index 64e5a3788d..0000000000 --- a/vector/src/main/res/drawable/ic_invite_users.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/vector/src/main/res/layout/fragment_room_member_list.xml b/vector/src/main/res/layout/fragment_room_member_list.xml new file mode 100644 index 0000000000..cfc7e2a891 --- /dev/null +++ b/vector/src/main/res/layout/fragment_room_member_list.xml @@ -0,0 +1,24 @@ + + + + + + + + \ No newline at end of file diff --git a/vector/src/main/res/menu/menu_room_member_list.xml b/vector/src/main/res/menu/menu_room_member_list.xml deleted file mode 100644 index ef452de70f..0000000000 --- a/vector/src/main/res/menu/menu_room_member_list.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file From 69e624df4151a9dc66f0a474e093c4b37b2fa519 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 12 Oct 2020 17:10:22 +0200 Subject: [PATCH 24/55] Cross signing: we should not show the verify with other sessions when there is not --- .../VerificationBottomSheetViewModel.kt | 12 +++++-- .../request/VerificationRequestController.kt | 32 ++++++++++++------- 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheetViewModel.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheetViewModel.kt index 3c00478ab0..e65fb6042b 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheetViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheetViewModel.kt @@ -76,7 +76,8 @@ data class VerificationBottomSheetViewState( val userWantsToCancel: Boolean = false, val userThinkItsNotHim: Boolean = false, val quadSContainsSecrets: Boolean = true, - val quadSHasBeenReset: Boolean = false + val quadSHasBeenReset: Boolean = false, + val hasAnyOtherSession: Boolean = false ) : MvRxState class VerificationBottomSheetViewModel @AssistedInject constructor( @@ -119,6 +120,12 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( session.cryptoService().verificationService().getExistingTransaction(args.otherUserId, it) as? QrCodeVerificationTransaction } + val hasAnyOtherSession = session.cryptoService() + .getCryptoDeviceInfo(session.myUserId) + .any { + it.deviceId != session.sessionParams.deviceId + } + setState { copy( otherUserMxItem = userItem?.toMatrixItem(), @@ -130,7 +137,8 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( roomId = args.roomId, isMe = args.otherUserId == session.myUserId, currentDeviceCanCrossSign = session.cryptoService().crossSigningService().canCrossSign(), - quadSContainsSecrets = session.sharedSecretStorageService.isRecoverySetup() + quadSContainsSecrets = session.sharedSecretStorageService.isRecoverySetup(), + hasAnyOtherSession = hasAnyOtherSession ) } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt index 3f4c3120e7..1b2c32a7e4 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt @@ -52,25 +52,33 @@ class VerificationRequestController @Inject constructor( val matrixItem = viewState?.otherUserMxItem ?: return if (state.selfVerificationMode) { - bottomSheetVerificationNoticeItem { - id("notice") - notice(stringProvider.getString(R.string.verification_open_other_to_verify)) - } + if (state.hasAnyOtherSession) { - bottomSheetSelfWaitItem { - id("waiting") - } + bottomSheetVerificationNoticeItem { + id("notice") + notice(stringProvider.getString(R.string.verification_open_other_to_verify)) + } - dividerItem { - id("sep") + bottomSheetSelfWaitItem { + id("waiting") + } + + dividerItem { + id("sep") + } } if (state.quadSContainsSecrets) { + val subtitle = if (state.hasAnyOtherSession) { + stringProvider.getString(R.string.verification_use_passphrase) + } else { + null + } bottomSheetVerificationActionItem { id("passphrase") title(stringProvider.getString(R.string.verification_cannot_access_other_session)) titleColor(colorProvider.getColorFromAttribute(R.attr.riotx_text_primary)) - subTitle(stringProvider.getString(R.string.verification_use_passphrase)) + subTitle(subtitle) iconRes(R.drawable.ic_arrow_right) iconColor(colorProvider.getColorFromAttribute(R.attr.riotx_text_primary)) listener { listener?.onClickRecoverFromPassphrase() } @@ -122,13 +130,13 @@ class VerificationRequestController @Inject constructor( listener { listener?.onClickOnVerificationStart() } } } - is Loading -> { + is Loading -> { bottomSheetVerificationWaitingItem { id("waiting") title(stringProvider.getString(R.string.verification_request_waiting_for, matrixItem.getBestName())) } } - is Success -> { + is Success -> { if (!pr.invoke().isReady) { if (state.isMe) { bottomSheetVerificationWaitingItem { From 840c8e0b91d64272622e459844c90159faa6dd60 Mon Sep 17 00:00:00 2001 From: Valere Date: Mon, 12 Oct 2020 17:03:28 +0200 Subject: [PATCH 25/55] Fix / reset cross signing not well supported --- CHANGES.md | 1 + .../sdk/internal/crypto/DeviceListManager.kt | 1 - .../crypto/store/db/RealmCryptoStore.kt | 41 ++++++++++++++++++- .../vector/app/features/home/HomeActivity.kt | 12 ++++++ .../features/home/HomeActivityViewEvents.kt | 1 + .../features/home/HomeActivityViewModel.kt | 35 ++++++++++++++-- .../UnknownDeviceDetectorSharedViewModel.kt | 4 +- 7 files changed, 88 insertions(+), 7 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 74aaa8cee3..afe6fa8461 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -26,6 +26,7 @@ Bugfix 🐛: - Invalid popup when pressing back (#1635) - Simplifies draft management and should fix bunch of draft issues (#952, #683) - Very long topic cannot be fully visible (#1957) + - Properly detect cross signing keys reset Translations 🗣: - diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt index 8e0d7407c6..ab30d3052d 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt @@ -359,7 +359,6 @@ internal class DeviceListManager @Inject constructor(private val cryptoStore: IM cryptoStore.storeUserDevices(userId, workingCopy) } - // Handle cross signing keys update val masterKey = response.masterKeys?.get(userId)?.toCryptoModel().also { Timber.v("## CRYPTO | CrossSigning : Got keys for $userId : MSK ${it?.unpaddedBase64PublicKey}") } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt index 394b93306c..9065da47b9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt @@ -302,22 +302,42 @@ internal class RealmCryptoStore @Inject constructor( userEntity.crossSigningInfoEntity?.deleteFromRealm() userEntity.crossSigningInfoEntity = null } else { + var shouldResetMyDevicesLocalTrust = false CrossSigningInfoEntity.getOrCreate(realm, userId).let { signingInfo -> // What should we do if we detect a change of the keys? val existingMaster = signingInfo.getMasterKey() if (existingMaster != null && existingMaster.publicKeyBase64 == masterKey.unpaddedBase64PublicKey) { crossSigningKeysMapper.update(existingMaster, masterKey) } else { + Timber.d("## CrossSigning MSK change for $userId") val keyEntity = crossSigningKeysMapper.map(masterKey) signingInfo.setMasterKey(keyEntity) + if (userId == credentials.userId) { + shouldResetMyDevicesLocalTrust = true + // my msk has changed! clear my private key + // Could we have some race here? e.g I am the one that did change the keys + // could i get this update to early and clear the private keys? + // -> initializeCrossSigning is guarding for that by storing all at once + realm.where().findFirst()?.apply { + xSignMasterPrivateKey = null + } + } } val existingSelfSigned = signingInfo.getSelfSignedKey() if (existingSelfSigned != null && existingSelfSigned.publicKeyBase64 == selfSigningKey.unpaddedBase64PublicKey) { crossSigningKeysMapper.update(existingSelfSigned, selfSigningKey) } else { + Timber.d("## CrossSigning SSK change for $userId") val keyEntity = crossSigningKeysMapper.map(selfSigningKey) signingInfo.setSelfSignedKey(keyEntity) + if (userId == credentials.userId) { + shouldResetMyDevicesLocalTrust = true + // my ssk has changed! clear my private key + realm.where().findFirst()?.apply { + xSignSelfSignedPrivateKey = null + } + } } // Only for me @@ -326,10 +346,29 @@ internal class RealmCryptoStore @Inject constructor( if (existingUSK != null && existingUSK.publicKeyBase64 == userSigningKey.unpaddedBase64PublicKey) { crossSigningKeysMapper.update(existingUSK, userSigningKey) } else { + Timber.d("## CrossSigning USK change for $userId") val keyEntity = crossSigningKeysMapper.map(userSigningKey) signingInfo.setUserSignedKey(keyEntity) + if (userId == credentials.userId) { + shouldResetMyDevicesLocalTrust = true + // my usk has changed! clear my private key + realm.where().findFirst()?.apply { + xSignUserPrivateKey = null + } + } } } + + // When my cross signing keys are reset, we consider clearing all existing device trust + if (shouldResetMyDevicesLocalTrust) { + realm.where() + .equalTo(UserEntityFields.USER_ID, credentials.userId) + .findFirst() + ?.devices?.forEach { + it?.trustLevelEntity?.crossSignedVerified = false + it?.trustLevelEntity?.locallyVerified = it.deviceId == credentials.deviceId + } + } userEntity.crossSigningInfoEntity = signingInfo } } @@ -1197,7 +1236,7 @@ internal class RealmCryptoStore @Inject constructor( .findAll() .mapNotNull { entity -> when (entity.type) { - GossipRequestType.KEY -> { + GossipRequestType.KEY -> { IncomingRoomKeyRequest( userId = entity.otherUserId, deviceId = entity.otherDeviceId, diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt index 829ab1624b..32a4af1b1b 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivity.kt @@ -138,6 +138,7 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet is HomeActivityViewEvents.AskPasswordToInitCrossSigning -> handleAskPasswordToInitCrossSigning(it) is HomeActivityViewEvents.OnNewSession -> handleOnNewSession(it) HomeActivityViewEvents.PromptToEnableSessionPush -> handlePromptToEnablePush() + is HomeActivityViewEvents.OnCrossSignedInvalidated -> handleCrossSigningInvalidated(it) }.exhaustive } homeActivityViewModel.subscribe(this) { renderState(it) } @@ -182,6 +183,17 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet } } + private fun handleCrossSigningInvalidated(event: HomeActivityViewEvents.OnCrossSignedInvalidated) { + // We need to ask + promptSecurityEvent( + event.userItem, + R.string.crosssigning_verify_this_session, + R.string.confirm_your_identity + ) { + it.navigator.waitSessionVerification(it) + } + } + private fun handleOnNewSession(event: HomeActivityViewEvents.OnNewSession) { // We need to ask promptSecurityEvent( diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewEvents.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewEvents.kt index be62997e0c..2a29e13572 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewEvents.kt @@ -22,5 +22,6 @@ import org.matrix.android.sdk.api.util.MatrixItem sealed class HomeActivityViewEvents : VectorViewEvents { data class AskPasswordToInitCrossSigning(val userItem: MatrixItem.UserItem?) : HomeActivityViewEvents() data class OnNewSession(val userItem: MatrixItem.UserItem?, val waitForIncomingRequest: Boolean = true) : HomeActivityViewEvents() + data class OnCrossSignedInvalidated(val userItem: MatrixItem.UserItem?) : HomeActivityViewEvents() object PromptToEnableSessionPush : HomeActivityViewEvents() } diff --git a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt index 46ae65ec02..48a71db35c 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeActivityViewModel.kt @@ -27,6 +27,9 @@ import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.login.ReAuthHelper import im.vector.app.features.settings.VectorPreferences +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.NoOpMatrixCallback import org.matrix.android.sdk.api.pushrules.RuleIds @@ -38,9 +41,7 @@ import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo import org.matrix.android.sdk.internal.crypto.model.MXUsersDevicesMap import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth import org.matrix.android.sdk.rx.asObservable -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.delay -import kotlinx.coroutines.launch +import org.matrix.android.sdk.rx.rx import timber.log.Timber class HomeActivityViewModel @AssistedInject constructor( @@ -67,11 +68,39 @@ class HomeActivityViewModel @AssistedInject constructor( } private var checkBootstrap = false + private var onceTrusted = false init { observeInitialSync() mayBeInitializeCrossSigning() checkSessionPushIsOn() + observeCrossSigningReset() + } + + private fun observeCrossSigningReset() { + val safeActiveSession = activeSessionHolder.getSafeActiveSession() + val crossSigningService = safeActiveSession + ?.cryptoService() + ?.crossSigningService() + onceTrusted = crossSigningService + ?.allPrivateKeysKnown() ?: false + + safeActiveSession + ?.rx() + ?.liveCrossSigningInfo(safeActiveSession.myUserId) + ?.subscribe { + val isVerified = it.getOrNull()?.isTrusted() ?: false + if (!isVerified && onceTrusted) { + // cross signing keys have been reset + // Tigger a popup to re-verify + _viewEvents.post( + HomeActivityViewEvents.OnCrossSignedInvalidated( + safeActiveSession.getUser(safeActiveSession.myUserId)?.toMatrixItem() + ) + ) + } + onceTrusted = isVerified + }?.disposeOnClear() } private fun observeInitialSync() { diff --git a/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt index eeb1639045..3bdcfc4018 100644 --- a/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/UnknownDeviceDetectorSharedViewModel.kt @@ -30,6 +30,8 @@ import im.vector.app.core.platform.EmptyViewEvents import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.VectorViewModelAction import im.vector.app.features.settings.VectorPreferences +import io.reactivex.Observable +import io.reactivex.functions.Function3 import org.matrix.android.sdk.api.NoOpMatrixCallback import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.Session @@ -39,8 +41,6 @@ import org.matrix.android.sdk.api.util.toMatrixItem import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo import org.matrix.android.sdk.internal.crypto.model.rest.DeviceInfo import org.matrix.android.sdk.internal.crypto.store.PrivateKeysInfo -import io.reactivex.Observable -import io.reactivex.functions.Function3 import org.matrix.android.sdk.rx.rx import timber.log.Timber import java.util.concurrent.TimeUnit From d8e9d363fa72733c833afac8b1fb365a411e9366 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 12 Oct 2020 17:15:38 +0200 Subject: [PATCH 26/55] Cross signing: update CHANGES and clean --- CHANGES.md | 1 + .../crypto/verification/request/VerificationRequestController.kt | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 74aaa8cee3..3bda0d9084 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,6 +19,7 @@ Improvements 🙌: - Implement "Jump to read receipt" and "Mention" actions on the room member profile screen - Add Sygnal API implementation to test is Push are correctly received - Add PushGateway API implementation to test if Push are correctly received + - Cross signing: shouldn't offer to verify with other session when there is not. Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt index 1b2c32a7e4..6e98d924e7 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/request/VerificationRequestController.kt @@ -53,7 +53,6 @@ class VerificationRequestController @Inject constructor( if (state.selfVerificationMode) { if (state.hasAnyOtherSession) { - bottomSheetVerificationNoticeItem { id("notice") notice(stringProvider.getString(R.string.verification_open_other_to_verify)) From d6b94802d8578fb7796f6969818a684262489f68 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 12 Oct 2020 18:32:31 +0300 Subject: [PATCH 27/55] Benoit code review fixes. --- .../members/RoomMemberListFragment.kt | 20 +++++++++---------- .../res/layout/fragment_room_member_list.xml | 11 ++++------ 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt index f38877ca6b..77337d7208 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt @@ -58,6 +58,15 @@ class RoomMemberListFragment @Inject constructor( setupSearchView() setupInviteUsersButton() recyclerView.configureWith(roomMemberListController, hasFixedSize = true) + viewModel.selectSubscribe(this, RoomMemberListViewState::actionsPermissions) { + invalidateOptionsMenu() + } + } + + private fun setupInviteUsersButton() { + inviteUsersButton.debouncedClicks { + navigator.openInviteUsersToRoom(requireContext(), roomProfileArgs.roomId) + } // Hide FAB when list is scrolling recyclerView.addOnScrollListener( object : RecyclerView.OnScrollListener() { @@ -76,15 +85,6 @@ class RoomMemberListFragment @Inject constructor( } } ) - viewModel.selectSubscribe(this, RoomMemberListViewState::actionsPermissions) { - invalidateOptionsMenu() - } - } - - private fun setupInviteUsersButton() { - inviteUsersButton.debouncedClicks { - navigator.openInviteUsersToRoom(requireContext(), roomProfileArgs.roomId) - } } private fun setupSearchView() { @@ -110,6 +110,7 @@ class RoomMemberListFragment @Inject constructor( override fun invalidate() = withState(viewModel) { viewState -> roomMemberListController.setData(viewState) renderRoomSummary(viewState) + inviteUsersButton.isVisible = viewState.actionsPermissions.canInvite } override fun onRoomMemberClicked(roomMember: RoomMemberSummary) { @@ -137,6 +138,5 @@ class RoomMemberListFragment @Inject constructor( roomSettingsToolbarTitleView.text = it.displayName avatarRenderer.render(it.toMatrixItem(), roomSettingsToolbarAvatarImageView) } - inviteUsersButton.isVisible = state.actionsPermissions.canInvite } } diff --git a/vector/src/main/res/layout/fragment_room_member_list.xml b/vector/src/main/res/layout/fragment_room_member_list.xml index cfc7e2a891..e144ddb6e3 100644 --- a/vector/src/main/res/layout/fragment_room_member_list.xml +++ b/vector/src/main/res/layout/fragment_room_member_list.xml @@ -1,7 +1,6 @@ - @@ -11,14 +10,12 @@ android:id="@+id/inviteUsersButton" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_gravity="bottom|end" android:layout_marginEnd="16dp" android:layout_marginBottom="16dp" android:contentDescription="@string/add_members_to_room" android:scaleType="center" android:src="@drawable/ic_fab_add_members" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:maxImageSize="36dp" - tools:visibility="visible" /> + app:maxImageSize="36dp" /> - \ No newline at end of file + \ No newline at end of file From 5ad46d251daa6b0c8e68802921866295c75a951b Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 12 Oct 2020 17:57:09 +0200 Subject: [PATCH 28/55] Update CHANGES.md Co-authored-by: Benoit Marty --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 3bda0d9084..257837dc6a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -19,7 +19,7 @@ Improvements 🙌: - Implement "Jump to read receipt" and "Mention" actions on the room member profile screen - Add Sygnal API implementation to test is Push are correctly received - Add PushGateway API implementation to test if Push are correctly received - - Cross signing: shouldn't offer to verify with other session when there is not. + - Cross signing: shouldn't offer to verify with other session when there is not. (#2227) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) From 1b0049aaf705acb7bf8059900b5ee51627fe9a1b Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Fri, 9 Oct 2020 09:31:53 +0000 Subject: [PATCH 29/55] Translated using Weblate (Albanian) Currently translated at 99.5% (1864 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/sq/ --- vector/src/main/res/values-sq/strings.xml | 269 +++++++++++++++++++++- 1 file changed, 264 insertions(+), 5 deletions(-) diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 43506d8798..af5708143f 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -566,7 +566,7 @@ Të dhëna sesioni dërguesi Emër publik Emër publik - ID + ID Sesioni Kyç sesioni Verifikim Shenja gishtash Ed25519 @@ -1536,7 +1536,7 @@ S’kapet dot shërbyes Home te kjo URL, ju lutemi, kontrollojeni Do të përdoret %s si ndihmë kur shërbyesi juaj Home nuk ofron të tillë (gjatë thirrjes, adresa juaj IP do të ndahet me të tjerë) Që të kryhet ky veprim, shtoni një shërbyes identitetesh, që nga rregullimet tuaja. - Mënyrë Njëkohësimi Në Prapaskenë (Eksperimentale) + Mënyrë Njëkohësimi Në Prapaskenë E optimizuar për baterinë Element-i do të bëjë njëkohësim në prapaskenë, në një mënyrë që kursen burimet e kufizuara të pajisjes (baterinë). \nNë varësi të gjendjes së burimeve tuaja, njëkohësimi mund të shtyhet për më vonë nga sistemi operativ. @@ -1629,7 +1629,7 @@ Raportojeni këtë lëndë Arsye për raportimin e kësaj lënde RAPORTOJENI - BLLOKOJENI PËRDORUESIN + SHPËRFILLE PËRDORUESIN Lënda u raportua Kjo lëndë është raportuar. @@ -1690,7 +1690,7 @@ Hashi i lëndës s’u përputh me atë që pritej S’trajtoi dot të dhëna ndarjeje - Bllokoje përdoruesin + Shpërfille përdoruesin Krejt mesazhet (e zhurmshme) Krejt mesazhet @@ -2207,7 +2207,7 @@ Emër përdoruesi dhe/ose fjalëkalim i pasaktë. Fjalëkalimi i dhënë fillon ose mbaron me hapësirë, ju lutemi, kontrollojeni. - + Po publikohen kyçe të krijuar identiteti Mesazh… @@ -2333,4 +2333,263 @@ Parashtroje Hap termat e %s +Luaje + Pauzë + Hidhe poshtë + + + S’keni leje të nisni një thirrje konferencë në këtë dhomë + S’keni leje të nisni thirrje në këtë dhomë + Ka tashmë një konferencë në ecuri e sipër! + Nis mbledhje video + Nis mbledhje audio + Mbledhjet përdorin siguri dhe rregulla lejesh Jitsi. Krejt personat aktualisht në dhomë do të shohin një ftesë për të marrë pjesë, teksa mbahet mbledhja juaj. + S’mund të bëni thirrje me vetveten + S’mund të bëni thirrje me vetveten, prisni për pjesëmarrësit të pranojnë ftesën + S’u arrit të shtohej widget + S’u arrit të hiqej widget + Pranoje + Hidhe poshtë + Mbylle + + Kopjoje + Sukses + + Njoftime + Thirrja Element Dështoi + S’u arrit të vendosej lidhje e atypëratyshme. +\nQë thirrjet të punojnë mirë, ju lutemi, kërkojini përgjegjësit të shërbyesit tuaj Home të formësojë një shërbyes TURN. + + Përzgjidhni Pajisje Zëri + Telefon + Altoparlant + Ndërroni Kamera + Ballore + E pasme + Mbyllni HD-në + Hapni HD-në + + Ky numër telefoni është i përcaktuar tashmë. + Gabim SSL: identiteti i ortakut s’është verifikuar. + Gabim SSL. + Parandalo thirrje aksidentale + Kërko për ripohim, para se të fillohet një thirrje + Thirrje Aktive (%s) + Kthehu te thirrje + + Anuloje ftesën + Të zhgradohet vetja\? + S’do të jeni në gjendje ta zhbëni këtë ndryshim, teksa zhgradoni veten, nëse jeni përdoruesi i fundit i privilegjuar, s’do të jetë e mundur të rifitoni privilegjet. + Zhgradoje + + + Shpërfille përdoruesin + Shpërfillja e këtij përdoruesi do të heqë mesazhet e tij prej dhomave që ndani me të. +\n +\nKëtë veprim mund ta zhbëni në çfarëdo kohe, te rregullimet e përgjithshme. + Hiqe shpërfilljen e përdoruesit + Heqja e shpërfilljes së këtij përdoruesi do të shfaqë sërish krejt mesazhet prej tij. + Anuloje ftesën + Jeni i sigurt se doni të anulohet ftesa për këtë përdorues\? + Përzëre përdoruesin + Arsye për përzënie + Përzënia e përdoruesit do ta heqë prej kësaj dhome. +\n +\nQë të pengohet pjesëmarrja sërish e tij, duhet ta dëboni. + Dëboje përdoruesin + Arsye për dëbim + Hiqja dëbimin përdoruesit + Heqja e dëbimit përdoruesit do t’i lejojë të marrë pjesë sërish në dhomë. + + Te llogaria juaj s’është shtuar ndonjë numër telefoni + Adresa email + Te llogaria juaj s’është shtuar ndonjë email + Numra telefoni + Të hiqet %s\? + Sigurohuni që keni klikuar te lidhja në email-in që ju kemi dërguar. + + + %d sekondë + %d sekonda + + + Shfaq akte gjendjeje përdoruesish të dhomës + Përfshin akte ftimi/pjesëmarrjeje/ikjeje/përzënieje/dëbimi dhe ndryshime emri avatari/shfaqjeje. + Kopjeruajtje e Sigurt + Administroni + Ujdisni Kopjeruajtje të Sigurt + Riktheje Kopjeruajtjen e Sigurt te Parazgjedhjet + Ujdise në këtë pajisje + Ruhuni nga humbja e hyrjes te mesazhe & të dhëna të fshehtëzuara, duke kopjeruajtur kyçe fshehtëzimi në shërbyesin tuaj. + Prodhoni një Kyç të ri Sigurie ose caktoni një Frazë të re Sigurie për kopjeruajtjen tuaj ekzistuese. + Kjo do të zëvendësojë Kyçin ose Frazën tuaj aktuale. + + Integrimet janë të çaktivizuara + Që të bëhet kjo, aktivizoni “Lejo integrime”, te Rregullimet. + + Email-e dhe numra telefonash + Administroni email-e dhe numra telefonash të lidhur me llogarinë tuaj Matrix + + + %d përdorues i dëbuar + %d përdorues të dëbuar + + + Kyçet u eksportuan me sukses + + + %1$d/%2$d kyç i importuar me sukses. + %1$d/%2$d kyçe të importuar me sukses. + + + SHIHENI + Widget-e aktivë + + + Administroni Integrime + S’ka widget-e aktivë + Kyçi i rikthimeve u ruajt. + + Kopjeruajtje e Sigur + Ruhuni nga humbja e hyrjes në mesazhe & të dhëna të fshehtëzuara + + Ujdisni Kopjeruajtje të Sigurt + + Dhoma është krijuar, por disa ftesa s’janë dërguar, për arsyen vijuese: +\n +\n%s + + Shtoni një skedë enkas për njoftime të palexuar në skenën kryesore. + + Kod + + %1$s, %2$s dhe %3$d tjetër i lexuar + %1$s, %2$s dhe %3$d të tjerë të lexuar + + Shtoje te të parapëlqyerit + Hiqe prej të parapëlqyerve + S’bëtë ndryshime + E bëtë dhomën publike për këdo që di lidhjen. + E bëtë dhomën vetëm me ftesa. + Jepni adresën e shërbyesit që doni të përdoret + + Ju lutemi, përdorni formatin ndërkombëtar (numrat e telefonave duhet të fillojnë me \'+\') + Nëse s’e dini fjalëkalimin, kthehuni mbrapsht që ta ricaktoni. + Ngjitës + Pyetësor + Butona Roboti + Reagoi me: %s + Përfundim Verifikimi + + Veprime Përgjegjësi + %1$s, si parazgjedhje + Përgjegjësi i shërbyesit tuaj ka çaktivizuar, si parazgjedhje, fshehtëzim skaj-më-skaj në dhoma private & Mesazhe të Drejtpërdrejtë. + Të fshihen të dhënat e llogarisë të llojit %1$s\? +\n +\nPërdoreni me kujdes, mund të shpjerë në sjellje të papritura. + + Jepni një frazë sigurie që e dini vetëm ju, e përdorur për të siguruar të fshehta në shërbyesin tuaj. + + Nëse e anuloni tani, mund të humbni mesazhe & të dhëna të fshehtëzuara, nëse humbni hyrje te kredencialet tuaja. +\n +\nMundeni edhe të ujdisni Kopjeruajtje të Sigurt & të administroni kyçet tuaj, te Rregullimet. + + Krijuat dhe formësuat dhomën. + + Kjo llogari është çaktivizuar. + + S’u ruajt dot kartelë media + Ripohoni identitetin tuaj duke verifikuar këto kredenciale hyrjeje, duke i akorduar hyrje te mesazhe të fshehtëzuar. + Na ndjeni, ky veprim s’është ende i mundshëm për llogari të lidhura duke përdorur Hyrje Njëshe. + + Për privatësinë tuaj, Element-i mbulon vetëm dërgim email-esh dhe numrash telefoni përdoruesi të koduar. + Caktoni rol + Rol + Hapni fjalosje + Mbylle mikrofonin + Hape mikrofonin + Ndale kamerën + Nise kamerën + + Ujdisni Kopjeruajtje të Sigurt + + Kopjeruajtje e sigurt + Ruhuni nga humbja e hyrjes te mesazhe & të dhëna të fshehtëzuara, duke kopjeruajtur në shërbyesin tuaj kyçet e fshehtëzimit. + Ujdiseni + Përdor një Kyç Sigurie + Prodhoni një kyç sigurie që të depozitohet diku në një vend të parrezik, bie fjala, në një përgjegjës fjalëkalimesh ose kasafortë. + Përdor një Frazë Sigurie + Jepni një frazë të fshehtë që e dini vetëm ju, dhe prodhoni një kyç për kopjeruajtjen. + + Ruani Kyçin tuaj të Sigurisë + Depozitojeni Kyçin tuaj të Sigurisë në një vend të parrezik, bie fjala, një përgjegjës fjalëkalimesh ose një kasafortë. + + Caktoni një Frazë Sigurie + Jepni një frazë sigurie që e dini vetëm ju, e përdorur për të siguruar të fshehta në shërbyesin tuaj. + Frazë Sigurie + Rijepni Frazën tuaj të Sigurisë, për ta ripohuar. + + Ruani Kyçin tuaj të Sigurisë + Depozitojeni Kyçin tuaj të Sigurisë në një vend të parrezik, bie fjala, një përgjegjës fjalëkalimesh ose një kasafortë. + + Emër Dhome + Temë + Ndryshuat me sukses rregullimet për dhomën + + S’mund të hapni këtë mesazh + Po pritet për këtë mesazh, kjo mund të zgjasë ca + Nuk Shfshehtëzohet Dot + Për shkak të fshehtëzimit skaj-më-skaj, mund t’ju duhet të prisni që të mbërrijë mesazhi i dikujt, ngaqë kyçet e fshehtëzimit s’qenë ujdisur si duhet për ju. + S’mund ta hapni këtë mesazh, ngaqë jeni bllokuar nga dërguesi + S’mund të hapni këtë mesazh, ngaqë sesionit tuaj nuk i zihet besë nga dërguesi + S’mund ta hapni këtë mesazh, ngaqë dërguesi qëllimisht nuk ju dërgoi kyçet + Po pritet për historik fshehtëzimesh + + Riot-i tanimë quhet Element! + Jemi të ngazëllyer t’ju njoftojmë se kemi ndërruar emër! Aplikacioni juaj është i përditësuar dhe jeni i futur në llogarinë tuaj. + E MORA VESH + MËSONI MË TEPËR + + element + + + Ruaje kyçin e rimarrjeve te + + Shto prej numëratorit tim telefonik + Numëratori juaj telefonik është i zbrazët + Numërator telefonik + Kërko te kontaktet e mia + Po merren kontaktet tuaja… + Numëratori juaj telefonik është i zbrazët + Libër adresash + + Shfuqizo ftesën + Të shfuqizohet ftesa për %1$s\? + + Dëbuar nga %1$s + S’u arrit të Hiqej Dëbimi i përdoruesit + + Njoftimet push janë të çaktivizuar + Që të aktivizoni njoftimet push, shihni te rregullimet tuaja + + Kod i gabuar, edhe %d provë + Kod i gabuar, edhe %d prova + + Kujdes! Prova e fundit e mbetur, përpara daljes! + Shumë gabime, u nxorët nga llogaria + Zgjidhni një PIN për siguri + Ripohoni PIN-in + S’u arrit të vlerësohet pin-i, ju lutemi, jepni një të ri. + Jepni PIN-in tuaj + Harruat PIN-in\? + Ricaktoni pin-in + Pin i ri + Që të ricaktoni PIN-in tuaj, do t’ju duhet të ribëni hyrjen dhe të krijoni një të ri. + Aktivizo PIN-in + Nëse doni të ricaktoni PIN-in tuaj, prekni “Harrova PIN-in”, që të bëhet dalja nga llogaria dhe ricaktimi. + Që të çaktivizohet PIN-i, ripohoni PIN-in + S’mund të hapet një dhomë prej të cilës jeni dëbuar. + S’gjendet dot kjo dhomë. Sigurohuni që ekziston. + + Lidhja qe e keqformësuar From 087711f1f7906ccbe1e9fbb3ad2b163584cb8979 Mon Sep 17 00:00:00 2001 From: Besnik Bleta Date: Mon, 12 Oct 2020 11:35:25 +0000 Subject: [PATCH 30/55] Translated using Weblate (Albanian) Currently translated at 100.0% (168 of 168 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/sq/ --- .../src/main/res/values-sq/strings.xml | 94 ++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml index 14a7c61bbc..4dc7f910d8 100644 --- a/matrix-sdk-android/src/main/res/values-sq/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sq/strings.xml @@ -138,4 +138,96 @@ %s po kërkon të verifikojë kyçin tuaj, por klienti juaj nuk mbulon verifikim kyçesh brenda fjalosjeje. Që të verifikoni kyça, do t’ju duhet të përdorni verifikim të dikurshëm kyçesh. %1$s krijo dhomën - +Dërguat një figurë. + Dërguat një ngjitës. + + Ftesa juaj + Krijuat dhomën + Ftuat %1$s + Hytë në dhomë + Dolët nga dhoma + Hodhët poshtë ftesën + Përzutë %1$s + Hoqët dëbimin për %1$s + Dëbuat %1$s + Tërhoqët mbrapsht ftesën për %1$s + Ndryshuat avatarin tuaj + Caktuat si emrin tuaj në ekran %1$s + E ndryshuat emrin tuaj në ekran nga %1$s në %2$s + Hoqët emrin tuaj në ekran (qe %1$s) + E ndryshuat temën në: %1$s + %1$s ndryshoi avatarin e dhomës + Ndryshuat avatarin e dhomës + Ndryshuat emrin e dhomës në: %1$s + Filluat një thirrje video. + Filluat një thirrje zanore. + %s dërgoi të dhëna për ujdisjen e thirrjes. + Dërguat të dhëna për ujdisjen e thirrjes. + Iu përgjigjët thirrjes. + E përfunduat thirrjen. + E bëtë historikun e ardhshëm të dhomë të dukshëm për %1$s + Aktivizuat fshehtëzim skaj-më-skaj (%1$s) + Përmirësuat këtë dhomë. + + Kërkuat një konferencë VoIP + Hoqët emrin e dhomës + Hoqët temën e dhomës + %1$s hoqi avatarin e dhomës + Hoqët avatarin e dhomës + Përditësuat profilin tuaj %1$s + Dërguat një ftesë te %1$s për të ardhur te dhoma + Shfuqizuat ftesën për ardhjen në dhomë të %1$s + Pranuat ftesën për %1$s + + %1$s shtoi widget-in %2$s + Shtuat widget-in %1$s + %1$s hoqi widget-in %2$s + Hoqët widget-in %1$s + %1$s ndryshoi widget-in %2$s + Ndryshuat widget-in %1$s + + Përgjegjës + Moderator + Parazgjedhje + Vetjake (%1$d) + Vetjake + + Ndryshuat shkallën e pushtetit për %1$s. + %1$s ndryshoi shkallën e pushtetit për %2$s. + %1$s nga %2$s në %3$s + + Ftesa juaj. Arsye: %1$s + Ftuat %1$s. Arsye: %2$s + Erdhët në dhomë, Arsye: %1$s + Ikët nga dhoma. Arsye: %1$s + Hodhët poshtë ftesën. Arsye: %1$s + Përzutë %1$s. Arsye: %2$s + Hoqët dëbimin për %1$s. Arsye: %2$s + Dëbuat %1$s. Arsye: %2$s + Dërguat një ftesë për %1$s të vijë në dhomë. Arsye: %2$s + Shfuqizuat ftesën për ardhjen në dhomë të %1$s. Arsye: %2$s + Pranuat ftesën për %1$s. Arsye: %2$s + Tërhoqët mbrapsht ftesën për %1$s. Arsye: %2$s + + + Shtuat %1$s si një adresë për këtë dhomë. + Shtuat %1$s si adresa për këtë dhomë. + + + + Hoqët %1$s si një adresë për këtë dhomë. + Hoqët %1$s si adresa për këtë dhomë. + + + Shtuat %1$s dhe hoqët %2$s si adresa për këtë dhomë. + + Caktuat si adresë kryesore për këtë dhomë %1$s. + Hoqët adresën kryesore për këtë dhomë. + + Keni lejuar të vijnë mysafirë në dhomë. + U keni penguar mysafirëve të vijnë në dhomë. + + Aktivizuat fshehtëzimin skaj-më-skaj. + Aktivizuat fshehtëzimin skaj-më-skaj (algoritëm %1$s i panjohur). + + From 2b2a263ba69906d0c8863f21ec644c103ced9cf9 Mon Sep 17 00:00:00 2001 From: Kahina Messaoudi Date: Thu, 8 Oct 2020 21:40:05 +0000 Subject: [PATCH 31/55] Translated using Weblate (Kabyle) Currently translated at 99.8% (1870 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/kab/ --- vector/src/main/res/values-kab/strings.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 9dabcdd77a..9b4f2a512e 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -2549,4 +2549,6 @@ Taggrayt n usenqed Aseɣwen ur yemsil ara akken iwata - +Ur tesɛiḍ ara tasiregt ad tebduḍ asiwel deg texxamt-a + Issedmer s: %s + From 8d4912126630cde1d9118df7eb363f6c146d5f8f Mon Sep 17 00:00:00 2001 From: Danial Behzadi Date: Sat, 10 Oct 2020 14:17:08 +0000 Subject: [PATCH 32/55] Translated using Weblate (Persian) Currently translated at 64.9% (1216 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/fa/ --- vector/src/main/res/values-fa/strings.xml | 911 +++++++++++++++++++++- 1 file changed, 874 insertions(+), 37 deletions(-) diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index 34aaeb3599..a08650c539 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -20,9 +20,9 @@ ذخیره ترک کردن ارسال - ارسال مجدد + ارسال دوباره نقل قول - اشتراک گذاری + هم‌رسانی بعداً مشاهده منبع حذف @@ -74,7 +74,7 @@ ساخت حساب ورود خروج از حساب - جستجو + جست‌وجو آغاز گپ جدید آغاز تماس صوتی @@ -152,7 +152,7 @@ مخاطبین من فهرست کاربران - فقط مخاطبین ماتریس + فقط مخاطبین ماتریکس شما اجازه‌ی دسترسی به مخاطبین را به برنامه نداده‌اید نتیجه‌ای نیست @@ -202,7 +202,7 @@ سرور خانه: سرور هویتی: امکان ورود وجود ندارد - %1$dm %2$ds + %1$dد %2$dث موضوع اتاق @@ -289,7 +289,7 @@ رد شدن انجام شد انصراف - نادیده‌گیری + چشم‌پوشی آیا می‌خواهید از حساب کاربری خود خارج شوید؟ علامت‌گذاری به عنوان خوانده شده @@ -304,7 +304,7 @@ جزییات انجمن ارسال برچسب پشتیبان‌گیری کلید - بازیابی پشتیبان کلید + استفاده از پشتیبان کلید پشتیبان‌گیری از کلید هنوز به پایان نرسیده است، لطفاً شکیبا باشید… در صورتی که اکنون از حساب خود خارج شوید، پیام‌های رمزنگاری شده خود را از دست خواهید داد پشتیبان‌گیری کلید در جریان است. در صورتی که اکنون از حساب خود خارج شوید، پیام‌های رمزنگاری شده خود را از دست خواهید داد. @@ -335,7 +335,7 @@ درخواست کلید ارسال شد. درخواست ارسال شد - لطفاً ریوت را روی دستگاه دیگر که می‌تواند پیام را رمزگشایی کند، اجرا کنید تا بتواند کلیدها را به این نشست بفرستد. + لطفاً المنت را روی افزاره‌ای دیگر که می‌تواند پیام را رمزگشایی کند، اجرا کنید تا بتواند کلیدها را به این نشست بفرستد. فهرست رسیدهای خواندن @@ -346,7 +346,7 @@ دوباره از من نپرس - برای بازیابی یک ایمیل وارد کنید، و بعدا در صورت دلخواه می توانید از آن برای شناسایی دوستان خود استفاده کنید. + رایانامه‌ای برای بازیابی تنظیم کرده تا بتوانید در صورت نیاز، از طریقش به دست افرادی که می‌شناسید، قابل کشف باشید. ثبت شماره تلفن (بعدا در صورت دلخواه می توانید از آن برای شناسایی دوستان خود استفاده کنید). نشانی رایانامهٔ پیوسته به حسابتان را برای بازنشانی گذواژه‌تان وارد کنید: Latn @@ -370,7 +370,7 @@ نگارش %s شرایط و ضوابط تذکّرهای سوم‌شخص - حق نشر + حق رونوشت سیاست محرمانگی عکس نمایه @@ -382,7 +382,7 @@ اطّلاعات برنامه نمایش اطّلاعات برنامه در تنظیمات سامانه. تأیید گذرواژه‌تان - نمی‌توانید این کار را از ریوت همراه انجام دهید + نمی‌توانید با المنت همراه، این کار را بکنید نیاز به تأیید هویت است @@ -395,8 +395,8 @@ آگاهی‌ها برای حسابتان از کار افتاده‌اند. \nلطفاً تتظیمات حساب را بررسی کنید. آگاهی‌ها برای این نشست به کار افتاده‌اند. - آگاهی‌ها برای این نشست از کار افتاده‌اند. -\nلطفاً تنظینات ریوت را بررسی کنید. + آگاهی‌ها برای این نشست به کار نیفتاده‌اند. +\nلطفاً تنظیمات المنت را بررسی کنید. برخی آگاهی‌ها در تنظیمات سفارشیتان از کار افتاده‌اند. خدمت آگاهی خدمت آگاهی در حال اجراست. @@ -414,7 +414,7 @@ نگارش olm شرایط و ضوابط تذکّرهای سوم‌شخص - حق نشر + حق رونوشت سیاست محرمانگی نگه‌داری رسانه پاک‌سازی انباره @@ -476,7 +476,7 @@ زمینه رمزنگاری فقط به نشست‌های تأیید شده - اتاق شامل نشست‌های ناشناخته + اتاق شامل نشست‌های ناشناخته است برای فهرست شدن اتاق‌های عمومی از یک کاساز، نامش را بنویسید تمامی اتاق‌های روی کارساز %s تمامی اتاق‌های بومی %s @@ -492,7 +492,7 @@ زمینه‌تان - افزودن کاره‌های ماتریس + افزودن کاره‌های ماتریکس پیام رمزنگاری شده ایجاد اجتماع @@ -566,7 +566,7 @@ نمایهٔ اتاق‌ها انتشار این اتاق در نمایهٔ اتاق‌ها - نگارش SDK ماتریس + نگارش SDK ماتریکس عمومی ترجیحات امنیت و محرمانگی @@ -602,8 +602,8 @@ به کار انداختن کشیدن برای پاسخ در خط زمانی - افزودن با شناسهٔ ماتریس - نتیجه‌ای پیدا نشد. برای جست‌وجو روی کارساز، از افزون با شناسهٔ ماتریس استفاده کنید. + افزودن با شناسهٔ ماتریکس + نتیجه‌ای پیدا نشد. برای جست‌وجو روی کارساز، از افزون با شناسهٔ ماتریکس استفاده کنید. پالایش با نام کاربری یا شناسه… ایجاد یک گفت‌وگوی مستقیم جدید @@ -614,12 +614,12 @@ گزارش این محتوا دلیل گزارش این محتوا گزارش - انسداد کاربر + چشم‌پوشی از کاربر محتوا گزارش شد به عنوان هرزنامه گزارش شد به عنوان نامناسب گزارش شد - انسداد کاربر + چشم‌پوشی از کاربر تنظیمات پیش‌رفته و سفارشی @@ -649,7 +649,7 @@ شکست در گرفتن نشست‌ها نشست‌ها ابزارهای توسعه - نشست را تایید کن + تأیید نشست هیچ ابطال @@ -657,8 +657,8 @@ تماس بدلیل سرور بد پیکربندی شده شکست خورد از %s استفاده کنید - یک ایمیل برای بازیابی ثبت کنید. بعدا در صورت دلخواه می توانید از آن برای شناسایی دوستان خود استفاده کنید. - یک ایمیل برای بازیابی ثبت کنید. بعدا در صورت دلخواه می توانید از آن برای شناسایی دوستان خود استفاده کنید. + رایانامه‌ای برای بازیابی تنظیم کنید. برای کشف شدن به دست افرادی که می‌شناسید، از رایانامه یا تلفن بعدی استفاده کنید. + رایانامه‌ای برای بازیابی تنظیم کنید. برای کشف شدن به دست افرادی که می‌شناسید، از رایانامه یا تلفن بعدی استفاده کنید. نشانی ایمیل پیوست شده به حساب شما باید وارد شده باشد. گذرواژه جدیدی باید وارد شود. یک ایمیل به %s فرستاده شد. هنگامی که پیوند همراه را دنبال کردید، در زیر کلیک کنید. @@ -674,24 +674,24 @@ نمی‌توان ثبت‌نام کرد : مالکیت ایمیل تایید نشد لطفا یک نشانی معتبر وارد کنید نشانی قابل دسترس نیست، لطفا آن را بررسی کنید - این یک نشانی سرور ماتریس معتبر نیست + این یک نشانی کارساز ماتریکس معتبر نیست نمی‌توان به این نشانی سرور خانه دست یافت، لطفا آن را بررسی کنید - دستگاه شما یک پروتوکل امنیتی TLS خارج از رده را استفاده می‌کند، به حمله آسیپ پذیر بوده، برای امنیت شما شما نمی‌توانید متصل شوید + افزاره‌تان از یک قرارداد امنیتی TLS تاریخ‌گذشته که به حمله آسیپ‌پذیر است استفاده می‌کند. برای امنیتتان، نخواهید توانست وصل شوید توکن دسترسی مشخص شده، شناخته نشد JSON ناهنجار شامل یک JSON معتبر نبود درخواست‌های بیش از حد ارسال شده هنوز روی پیوند ایمیل کلیک نشده - برای تماس‌های ورودی از آهنگ زنگ پیش‌فرض ریوت استفاده کن - آهنگ زنگ تماس ورودی - انتخاب آهنگ زنگ برای تماس‌ها: + استفاده از صدای زنگ پیش‌گزیدهٔ المنت برای تماس‌های ورودی + صدای زنگ تماس ورودی + گزینش صدای زنگ برای تماس‌ها: یک عکس یا ویدیو بگیر نمی‌توان ویدیو ظبط کرد اطلاعات - ریوت برای گرفتن عکس و برای تماس‌های ویدیویی باید به دوربین شما به دسترسی یابد. + المنت برای گرفتن عکس و تماس‌های ویدیویی نیاز به اجازه دارد. بازکردن سرتیتر در حال هم‌گام‌سازی… پریدن به نخستین پیام خوانده نشده. @@ -704,22 +704,22 @@ ۱ عضو فعال %d عضو فعال - انسداد + تحریم رفع انسداد اخراج بازنشانی به کاربر عادی ناظر کردن مدیر کردن - پنهان کردن همه پیام‌ها از این کاربر + چشم‌پوشی نمایش همه پیام‌ها از این کاربر اشاره نمایش فهرست نشست - آیا مطئنید می‌خواهید این کاربر را از این گفتگو مسدود کنید؟ + انسداد کاربر، او را از این اتاق اخراج کرده و از پیوستن دوباره‌اش جلوگیری می‌کند. دلیل تنظیمات پیام‌ها - همه پیام‌ها + تمام پیام‌ها پیام‌ها تنظیمات گذرواژه @@ -738,11 +738,11 @@ تنظیمات گذرواژه جدید - گذرواژه شما بازنشانی شد. + گذرواژه‌تان بازنشانی شد. گذرواژه گذرواژه تنظیمات - گذرواژه حساب + گذرواژهٔ حساب پخش توقف @@ -750,4 +750,841 @@ موفقیت اعلان‌ها - +خاتمه + + + اجازهٔ شروع تماس کنفرانسی در این اتاق را ندارید + اجازهٔ شروع تماس در این اتاق را ندارید + کنفرانسی در حال اجراست! + شروع جلسهٔ ویدیویی + شروع جلسهٔ صوتی + نمی‌توانید با خودتان تماس بگیرید + نمی‌توانید با خودتان تماس بگیرید. منتظر پذیرش دعوت شرکت‌کنندگان شوید + شکست در افزودن ابزارک + شکست در برداشتن ابزارک + پذیرش + رد + قطع + + تماس المنت شکست خورد + گزینش افزارهٔ صوتی + تلفن + بلندگو + هدست + هدست بی‌سیم + تعویض دوربین + جلو + پشت + خاموش کردن HD + روشن کردن HD + + این شماره تلفن از پیش تعریف شده. + خطای SSL. + + ۱ عضویت تغییر کرد + %d عضویت تغییر کردند + + + پیش‌گیری از تماس تصادفی + خواستن تأیید پیش از شروع تماس + تماس فعّال (%s) + بازگشت به تماس + + این پیش‌نمایی از اتاق است. برهم‌کنش‌های اتاق از کار افتاده‌اند. + برای انجام این عمل، کارساز هویتی را به تنظیماتتان بیفزایید. + لغو دعوت + چشم‌پوشی از کاربر + نادیده نگرفتن کاربر + لغو دعوت + مطمئنید که می‌خواهید دعوت این کاربر را لغو کنید؟ + اخراج کاربر + دلیل اخراج + اخراج کاربر، از این اتاق برش می‌دارد. +\n +\nبرای پیش‌گیری از پیوستن دوباره، باید تحریمش کنید. + تحریم کاربر + دلیل تحریم + تحریم نکردن کاربر + مطمئنید که می‌خواهید %s را به این گپ دعوت کنید؟ + "%1$s، " + %1$s و %2$s + %1$s %2$s + + با شناسه دعوت شده + مخاطبان محلّی (%d) + شاخهٔ کاربر (%s) + فقط کاربران ماتریکس + + دعوت کاربر با شناسه + لطفاً یک یا چند نشانی رایانامه یا شناسهٔ ماتریکس را وارد کنید + رایانامه یا شناسهٔ ماتریکس + + جست‌وجو + %s دارد می‌نویسد… + %1$s و %2$s دارند می‌نویسند… + %1$s و %2$s و دیگران دارند می‌نویسند… + فرستادن پیام رمزشده… + فرستادن پیام (رمز نشده)… + اتّصال به کارساز از دست رفت. + بازفرستادن همه + لغو همه + بازفرستادن پیام‌های فرستاده‌نشده + حذف پیام‌های فرستاده‌نشده + پرونده پیدا نشد + اجازهٔ فرستادن در این اتاق را ندارید + + ۱ پیام جدید + %d پیام جدید + + + اعتماد کردن + اعتماد نکردن + خروج + چشم‌پوشی + اثرانگشت (%s): + نمی‌توان هویت کارساز دوردست را تأیید کرد. + جست‌وجو + افراد + پرونده‌ها + + پیوستن + شاخه + محبوب‌ها + کم‌اهمیت + دعوت‌ها + شروع گپ + ایجاد اتاق + پیوستن به اتاق + پیوستن به یک اتاق + شناسهٔ اتاق یا نام مستعارش را بنویسید + + مرور شاخه + جست‌وجو کردن شاخه… + + تمام پیام‌ها (پرصدا) + فقط اشاره‌ها + خموش + محبوب + بی‌اولویت + ترک گفت‌وگو + فراموشی + افزودن میان‌بر صفحهٔ خانگی + + اهمّیت آگاهی بر حسب رویداد + + محرمانگی آگاهی + تنظیمات سامانه. + گشودن تنظیمات + + تنظیمات حساب. + به کار انداختن + + تنظیمات نشست. + به کار انداختن + + تنظیمات سفارشی. + به یاد داشته باشید که برخی گونه‌های پیام‌ها روی صامت بودن تنظیم شده‌اند (آگاهی‌ای بدون هیچ صدایی تولید خواهند کرد). + بررسی تنظیمات + + بررسی خدمات پلی + شروع خدمت + + خدمت کشته و به صورت خودکار دوباره شروع شد. + شروع دوبارهٔ خدمت شکست خورد + + شروع هنگام راه‌اندازی + خدمت هنگام شروع دوبارهٔ افزاره، شروع خواهد شد. + به کار اندازی شروع هنگام راه‌اندازی + + بررسی محدودیت‌های پس‌زمینه + محدودیت‌های پس‌زمینه برای المنت از کار افتاده‌اند. این آزمون باید با استفاده از دادهٔ همراه (بدون وای‌فای) اجرا شود. +\n%1$s + محدودیت‌های پس‌زمینه برای النت به کار افتاده‌اند. +\nکارهایی که کاره می‌خواهد انجام دهد، هنگامی که در پس‌زمینه است به صورت تهاجمی محدود می‌شوند که می‌تواند روی آگاهی‌ها تأثیر بگذارد. +\n%1$s + از کار انداختن محدودیت‌ها + + بهینه‌سازی باتری + المنت تحت تأثیر بهینه‌سازی باتری نیست. + چشم‌پوشی از بهینه‌سازی + + عادی + محرمانگی کاهش‌یافته + کاره برای اجرا در پس‌زمینه نیاز به اجازه دارد + کاره در پس‌زمینه، به وصل شدن به کارساز خانگی نیاز ندارد. این کار نصرف باتری را کاهش می‌دهد + صدای آگاهی + گزینش رنگ چراغ، لرزش، صدا و… + + + پیام‌های شامل نام نمایشی + پیام‌های شامل نام کاربری + پیام‌ها در گپ‌های یک‌به‌یک + پیام‌ها در گپ‌های گروهی + هنگام دعوت شدن به یک اتاق + دعوت‌های تماس + پیام‌های ارسالی از بات‌ها + + همگام‌سازی پس‌زمینه + حالت همگام‌سازی پس‌زمینه + بهینه برای باتری + بهینه برای بلادرنگ + بدون همگام‌سازی پس‌زمینه + هنگامی که کاره در پس‌زمینه‌است، از پیام‌های ورودی آگاه نخواهید شد. + شکست در به‌روز رسانی تنظیمات. + + + شروع هنگام راه‌اندازی + به کار انداختن همگام‌سازی پس‌زمینه + پایان زمان درخواست همگام‌سازی + دورهٔ همگام‌سازی ترجیحی + + %d ثانیه + %d ثانیه + + + برای مدیریت بات‌ها، پل‌ها، ابزارک‌ها و بسته‌های برچسب از یک مدیر یکپارچگی استفاده کنید. +\nمدیرهای یکپارچگی، داده‌های پیکربندی را دریافت کرده و می‌توانند از طرف شما ابزارک‌ها را تغییر داده، دعوت‌های اتاق فرستاده و سطوح قدرت را تنظیم کنند. + نمایش برچسب زمانی برای تمامی پیام‌ها + نمایش برچسب‌های زمانی در قالب ۱۲ساعته + شامل رویدادهای دعوت/پیوستن/خروج/اخراج/تحریم و تغییرهای آواتار/نام نمایشی. + پشتیبان امن + مدیریت + برپایی پشتیبان امن + بازنشانی پشتیبان امن + برپایی روی این افزاره + سپرامنیتی در برابر از دست دادن دسترسی به داده‌ها و پیام‌های رمزشده با پشتیبان گیری از کلیدها روی کارسازتان. + غیرفعّال‌سازی حساب + غیرفعّال‌سازی حسابم + کشف + مدیریت تنظیمات کشفتان. + محرمانگی آگاهی + اتّصال پس‌زمینه + نمایش همهٔ پیام‌ها از %s؟ +\n +\nبه خاطر داشته باشید این عمل، کاره را دوباره شروع خواهد کرد و ممکن است کمی زمان ببرد. + گذرواژه‌ها مطابق نیستند + + رایانامه‌ها و شماره تلفن‌ها + مدیریت رایانامه‌ها و شماره تلفن‌های پیوسته به حساب ماتریکستان + + مطمئنید که می‌خواهید این هدف آگاهی را بردارید؟ + + ۳ روز + ۱ هفته + ۱ ماه + برای همیشه + + عکس اتاق + نام اتاق + موضوع + برچسب اتاق + برچسب خورده به عنوان: + + محبوب + اولویت پایین + هیچ + + دسترسی و مشاهده‌پذیری + فهرست کردن این اتاق در شاخهٔ اتاق‌ها + دسترسی اتاق + خوانش تاریخچهٔ اتاق + چه‌کسی می‌تواند تاریخچه را بخواند؟ + چه‌کسی می‌تواندبه این اتاق دسترسی داشته باشد؟ + + هرکسی + فقط اعضا (از زمان گزینش این گزینه) + فقط اعضا (از زمان دعوتشان) + فقط اعضا (از زمان پیوستنشان) + + + %d کاربر مسدود + %d کاربر مسدود + + + این‌ها ویژگی‌های آزمایشی‌ای هستند که ممکن است به روش‌های نامنتظره‌ای حراب شوندا. با احتیاط استفاده کنید. + هرگز پیام‌های رمزشده از این نشست به نشست‌های تأییدنشده در این اتاق فرستاده نشود. + + این اتاق هیچ نشانی محلّی‌ای ندارد + نشانی جدید (مثلاً ‪#foo:matrix.org‬) + + قالب نام مستعار نامعتبر + تظنیم به عنوان نشانی اصلی + شناسهٔ نشست + نام عمومی + نام عمومی + شناسهٔ نشست + کلید نشست + تأییدیه + اثرانگشت Ed25519 + + برون‌ریزی کلید‌های اتاق‌های سرتاسری + برون‌ریزی کلید‌های اتاق‌ها + برون‌ریزی کلیدها به یک پروندهٔ محلّی + برون‌ریزی + بازیابی پیام‌های رمزشده + مدیریت پشتیبان کلید + + درون‌ریزی کلید‌های اتاق‌های سرتاسری + درون‌ریزی کلیدهای اتاق‌ها + درون‌ریزی کلیدها از یک پروندهٔ محلّی + درون‌ریزی + هرگز پیام‌های رمزشده از این نشست به نشست‌های تأییدنشده فرستاده نشود. + تأیید نشده + تأیید‌شده + در فهرست سیاه + + نشست ناشناخته + آی‌پی ناشناخته + هیچ‌کدام + + تأیید + عدم تأیید + بردن در فهرست سیاه + بیرون آوردن از فهرست سیاه + + تأیید نشست + با مقایسهٔ موارد زیر با تنظیمات کاربر در دیگر نشستتان، تأیید کنید: + اگر مطابق نبودند، ممکن است امنیت ارتباطاتتان در معرض خطر باشد. + تأیید می‌کنم که کلیدها مطابقند + + گزینش یک شاخهٔ اتاق + ممکن است کارساز در دسترس نبوده یا شلوغ باشد + این‌جا بنویسید… + + + ۱ پیام آگاهی نخوانده + %d پیام آگاهی نخوانده + + + ۱ پیام آگاهی نخوانده + %d پیام آگاهی نخوانده + + + %1$s: ۱ پیام + %1$s: %2$d پیام + + %1$s در %2$s + رویداد جدید + اتاق + پیام‌های جدید + دعوت جدید + من + **‌شکست در فرستادن - لطفاً اتاق را بگشایید + %1$s: %2$s + %1$s: %2$s %3$s + + اندازهٔ قلم + ریز + کوچک + عادی + بزرگ + بزرگ‌تر + بزرگ‌ترین + سترگ + + برای مدیریت ابزارک‌های این اتاق، نیاز به اجازه دارید + ایجاد ابزارک شکست خورد + ایجاد تماس کنفرانسی با جیتسی + مطمئنید که می‌خواهید ابزارک را از این اتاق حذف کنید؟ + + ۱ ابزارک فعّال + %d ابزارک فعّال + + نما + ابزارک‌های فعّال + + + ابزارک + بار کردن ابزارک + ابزارک افزوده شده به دست: + استفاده از آن ممکن است کوکی تنظیم کرده و داده‌ها را با %s هم‌رسانی کند: + استفاده از آن ممکن است داده‌ها را با %s هم‌رسانی کند: + شکست در بار کردن ابزارک. +\n%s + بار کردن دوبارهٔ ابزارک + گشودن در مرورگر + ابطال دسترسی من + + نام نمایشیتان + نشانی اینترنتی آواتارتان + شناسهٔ کاربریتان + شناسهٔ ابزارک + شناسهٔ اتاق + + + متأسّفانه تماس‌های کنفرانسی با جیتسی روی افزاره‌های قدیمی (افزاره‌هایی با سیستم‌عامل اندروید زیر ۵) پشتیبانی نمی‌شود + این ابزارک می‌خواهد از منابع زیر استفاده کند: + اجازه + انسداد همه + استفاده از دوربین + استفاده از میکروفون + خواندن رسانهٔ محافظت‌شده با DRM + + ناتوان در ایجاد ابزارک. + شکست در فرستادن درخواست. + سطح قدرت باید عدد صحیح مثبت باشد. + در این اتاق نیستید. + اجازهٔ انجامش را در این اتاق ندارید. + بدون room_id در درخواست. + بدون user_id در درخواست. + اتاق %s قابل مشاهده نیست. + هیچ مدیر یکپارچگی‌ای پیکربندی نشده. + مدیریت یکپارچگی‌ها + بدون ابزارک فعّال + استفاده از دوربین بومی + استفاده از دوربین سامانه به جای صفحهٔ دوربین سفارشی. + استفاده از کلید ورود صفحه‌کلید برای فرستادن پیام + فرستادن پیام‌های صوتی + این انتخاب برای ضبط پیام نیاز به یک برنامهٔ سوم‌شخص دارد. + برای ادامه لازم است شرایط خدمت را بپذیرید. + + آغاز تأیید + تأیید + هم‌رسانی بدون تأیید + هم‌رسانی + درخواست هم‌رسانی کلید + چشم‌پوشی از درخواست + چشم‌پوشی + + هشدار! + خاموش + خموش + پرصدا + + ایجاد + مثال + مثال + + خانه + مردم + بدون کاربر + + پیوست + دعوت شد + + ۱ عضو + %d عضو + + + غیرفعّال‌سازی حساب + غیرفعّال‌سازی حساب + + افزایش کارایی با فقط بار کردن اعضای اتاق در نمای نخست. + کارساز خانگیتان هنوز از بار کردن تنبلانهٔ اعضای اتاق پشتیبانی نمی‌کند. بعداً تلاش کنید. + + هرگز پیام‌های رمزشده را از دست ندهید + شروع با استفاده از پشتیبان کلید + برون‌ریزی دستی کلیدها + + امن کردن پشتیبانتان با یک عبارت عبور. + تنظیم عبارت عبور + ایجاد کردن پشتیبان + موفّق! + انجام شد + رونوشت گرفتم + ذخیرهٔ کلید بازیابی + هم‌رسانی + ذخیره به شکل پرونده + جایگزینی + توقّف + + لطفاً رونوشتی بردارید + هم‌رسانی کلید بازیابی با… + کلید بازیابی + خطای نامنتظره + پشتیبان‌گیری آغاز شد + استفاده از کلید بازیابیتان + ورود کلید بازیابی + + بازیابی پیام + + محاسبهٔ کلید بازیابی… + لطفاً‌یک کلید بازیابی وارد کنید + من بودم + + هرگز پیام‌های رمزشده را از دست ندهید + شروع با استفاده از پشتیبان کلید + + پشتیبان امن + سپرامنیتی در برابر از دست دادن دسترسی به داده‌ها و پیام‌های رمزشده + + هرگز پیام‌های رمزشده را از دست ندهید + استفاده از پشتیبان کلید + + برپایی پشتیبان امن + + پاسخ کشف کارساز خانگی نامعتبر + نمایش پیام‌های برداشته + نمایش یک جانگه‌دار برای پیام‌های برداشته‌شده + ویرایش‌های پیام‌ها + هیچ ویرایشی پیدا نشد + + نمی‌توانید کسی که به دنبالش هستید را بیابید؟ + مشاهدهٔ شاخهٔ اتاق + + ادغام پیام‌های شکست‌خورده در رمزگشایی در خط زمانی + افزودن زبانه‌ای اختصاصی روی صفحهٔ اصلی برای آگاهی‌های خوانده‌نشده. + + پیوند در تخته‌گیره رونشت شد + + ایجاد کردن اتاق… + برغای گرفتن نتایج، شروع به نوشتن کنید + پیوستن به اتاق… + + مشاهدهٔ تاریخچهٔ ویرایش + + شرایط خدمت + بازبینی شرایط + قابل‌مشاهده بودن برای دیگران + استفاده از بات‌ها،پل‌ها، ابزارک‌ها و بسته‌های برچسب + + کارساز هویت + قطع از کارساز هویت + پیکربندی کارساز هویت + تغییر کارساز هویت + نشانی‌های رایانامهٔ قابل‌کشف + گزینه‌های کشف به محض افزودن یک رایانامه، ظاهر خواهند شد. + گزینه‌های کشف به محض افزودن یک شماره تلفن، ظاهر خواهند شد. + شماره تلفن‌های قابل‌کشف + منتظر + + به کار انداختن گزارش‌های پرگو. + گزارش‌های پرگو با فراهم کردن گزارش‌های بیش‌تر هنگام تکان دادن محکم گوشی، به توسعه‌دهندگان کمک می‌کند. حتا هنگام به کار افتاده بودن هم برنامه، محتوای پیام یا هیچ دادهٔ خصوصی دیگری را گزارش نمی‌کند. + + + پرونده + مخاطب + دوربین + صدا + جُنگ + برچسب + رسانه + هیچ رسانه‌ای در این اتاق نیست + پرونده‌ها + %1$s در %2$s + هیچ پرونده‌ای در این اتاق نیست + + تمام پیام‌ها (پرصدا) + تمام پیام‌ها + فقط اشاره‌ها + خموش + افزودن به محبوب‌ها + برداشتن از محبوب‌ها + ترک اتاق + %1$s تغییری ایجاد نکرد + تغییری ایجاد نکردید + برای یافتن واکنش، کلیدواژگان را بنویسید. + + از هیچ کاربری چشم نمی‌پوشید + + میزبانی حرفه‌ای برای سازمان‌ها + بیش‌تر بدانید + دیگر + ادامه + وصل شدن به %1$s + وصل شدن به حدمات ماتریکس المنت + وصل شدن به یک کارساز سفارشی + ورود به %1$s + نام‌نویسی + ورود + ادامه با ورود یکپارچه + + نشانی خدمات ماتریکس المنت + نشانی + میزبانی حرفه‌ای برای سازمان‌ها + رایانامه + هشدار! + ادامه + + موفق! + بازگشت به ورود + + هشدار + تنظیم نشانی رایانامه + رایانامه + رایانامه (اختیاری) + بعدی + + تنظیم شماره تلفن + لطفاً از قالب بین‌المللی استفاده کنید. + شماره تلفن + شماره تلفن (اختیاری) + بعدی + + تأیید شماره تلفن + ورود رمز + فرستادن دوباره + بعدی + + لطفاً از قالب بین‌المللی استفاده کنید (شماره تلفن باید با + شروع شود) + شماره تلفن‌های بین‌المللی باید با + شروع شوند + نام کاربری + بعدی + نام کاربری گرفته شده + هشدار + ورود با شناسهٔ ماتریکس + ورود با شناسهٔ ماتریکس + شناسهٔ ماتریکس + دیده شده به دست + + خارج شده‌اید + ورود دوباره + + خارج شده‌اید + ورود + ورود + پاک‌سازی داده‌های شخصی + پاک‌سازی تمامی داده‌ها + + پاک‌سازی داده + پاک‌سازی داده + شرح بیش از حد کوتاه است + + همگام‌سازی نخستین… + + حالت توسعه‌دهنده ویژگی‌های پنهان را فعّال کرده و همچنین ممکن است پایداری برنامه را کاهش دهد. فقط برای توسعه‌دهنگان! + آستانهٔ تشخیص + برای آزمودن آستانهٔ تشخیص، تلفنتان را تکان دهید + نشست جاری + فقط نمایش نخستین نتایج. حرف‌های بیش‌تری بنویسید… + + شکست سریع + المنت ممکن است هنگام رخ دادن خطای نامنتظره،‌بیش‌تر فروبپاشد + + به کار انداختن رمزنگاری + پس از به کار افتادن، رمزنگاری قابل از کار انداختن نیست. + + ورود نامطمئن + مطابقند + مطابق نیستند + ناامن + ویدیو. + تصویر. + صدا + پرونده + برچسب + نظرسنجی + دکمه‌های بات + واکنش داده با: %s + نتیجه‌گیری تأیید + + در حال انتظار… + %s لغو شد + لغو کردید + %s پذیرفت + پذیرفتید + تأییدیه فرستاده شد + درخواست تأییدیه + تأیید این نشست + تأیید دستی + + شما + + برای تأیید امن یکدیگر* رمز را با افزارهٔ کاربر دیگر بپویید + رمزش را بپویید + ناتوانی در پویش + اگر کنار هم نیستید، به‌جایش اموجی‌ها را مقایسه کنید + + تأیید با مقایسهٔ اموجی‌ها + + تأیید با اموجی + اگر نمی‌توانید رمز بالا را بپویید، با مقایسهٔ گزیده‌ای خاص و کوتاه از اموجی‌ها، تأیید کنید. + + تصویر رمز QR + + تأیید %s + %s تأیید شد + منتظر %s… + پیام‌های این اتاق، رمزنگاری سرتاسری نشده‌اند. + پیام‌های این اتاق، رمزنگاری سرتاسری شده‌اند. +\n +\nپیام‌هایتان با قفل‌هایی امن شده‌اند و فقط شما و گیرندگان دیگر، کلیدهای یکتا را برای قفل‌گشاییشان دارید. + امنیت + بثیش‌تر بدانید + بیش‌تر + کنش‌های مدیر + تنظمیات اتاق + + ۱ نفر + %1$d نفر + + بارگذاری‌ها + ترک اتاق + ترک کردن اتاق… + + مدیران + ناظم‌ها + سفارشی + دعوت‌ها + کاربران + + مدیر در %1$s + ناظم در %1$s + پیش گزیده در %1$s + سفارشی (%1$d) در %2$s + + پرش به رسیدِ خواندن + + چشم‌ناپوشی + + پس از به کار افتادن، رمزنگاری قابل از کار انداختن نیست. + + به کار انداختن رمزنگاری + + ورود چندگانه + ورود چندگانه به کار افتاده +\nکلیدهای خصوصی روی دستگاه. + ورود چندگانه به کار افتاده +\nکلیدها مورد اعتمادند. +\nکلیدهای خصوصی ناشناخته + ورود چندگانه به کار افتاده. +\nکلیدها مورد اعتماد نیستند + ورود چندگانه به کار نیفتاده + + مدیر کارسازتان رمزنگاری سرتاسری پیش‌گزیده را در اتاق‌های خصوصی و پیام‌های مستقیم از کار انداخته است. + خروج از این نشست + + تأیید این ورود + ممکن است دیگر کاربران، به آن اعتماد نکنند + تکمیل امنیت + + استفاده از نشستی موجود برای تأییدش که به پیام‌های رمزشده دسترسی می‌دهد. + + + تأیید + تأیید‌شده + هشدار + + مورد اعتماد + بدون اعتماد + + بازنشانی کلیدها + + رمز QR + + تقریباً تمام شد! آیا %s همین سپر را نشان می‌دهد؟ + بله + خیر + + اتّصال به کارساز از دست رفت + حالت هواپیما روشن است + + داده‌های حساب + + %d رأی + %d رأی + + + %d رأی - نتایج نهایی + %d رأی - نتایج نهایی + + انتخاب گزیده + ایجاد نظرسنجی‌ای ساده + استفاده از یک کلید یا عبارت بازیابی + اگر به نشست‌های موجود دسترسی ندارید + + ورود جدید + + هشدار: + برداشتن… + می‌خواهید این پیوست را به %1$s بفرستید؟ + + فرستادن تصویر با اندازهٔ اصلی + فرستادن تصویرها با اندازهٔ اصلی + + + تأیید برداشت + آوردن دلیل + المنت اندروید + + درخواست‌های کلید + + قفل‌گشایی از تاریخچهٔ پیام‌های رمزشده + + نوسازی + + ورود جدید. خودتان بودید؟ + برای بازبینی و تأیید بزنید + من نبودم + تأیید افزاره‌هایتان از تنظیمات. + تأیید لغو شد + + عبارت عبور بازیابی + کلید پیام + تنظیم یک %s + تولید یک کلید پیام + + تأیید %s + + برای ادامه %s تان را وارد کنید. + + برپایی بازیابی. + کلید بازیابیتان + رفع‌اشکال + تنظیم اهمّیت آگاهی بر حسب رویداد + + پیام… + + ارتقای رمزنگاری موجود است + استفاده از پرونده + + عبارت عبور بازیابی + این یک کلید بازیابی معتبر نیست + لطفاً‌یک کلید بازیابی وارد کنید + + بررسی کردن کلید پشتیبان + بررسی کردن کلید پشتیبان (%s) + %1$s (%2$s) + + برای ادامه،‌عبارت عبور پشتیبان کلیدتان را وارد کنید. + استفاده از کلید بازیابی پشتیبان کلیدتان + کلید بازیابی پشتیبان کلید + + جلوگیری از نماگرفت کاره + به کار انداختن این انتخاب، FLAG_SECURE را به تمامی فعّالیت‌ها می‌افزاید. برای اثرگذاری تغییر، برنامه را دوباره شروع کنید. + + پروندهٔ رسانه‌ای به جُنگ افزوده شد + المنت وب +\nالمنت میزکار + المنت آی‌اواس +\nالمنت اندروید + استفاده از کلید بازیابی + رمزشده به دست افزاره‌ای تأییدنشده + لطفاً نام کاربری‌ای برگزینید. + لطفاً گذرواژه‌ای برگزینید. + این پیوند را دوباره بررسی کنید + پیوند %1$s به پایگاه دیگری می‌بردتان: %2$s. +\n +\nمطمئنید که می‌خواهید ادامه دهید؟ + + افزودن اعضا + دعوت + دعوت کردن کاربران… + دعوت کاربران + دعوت برای %1$s فرستاده شد + دعوت برای %1$s و %2$s فرستاده شد + + دعوت برای %1$s و یک نفر دیگر فرستاده شد + دعوت برای %1$s و %2$d نفر دیگر فرستاده شد + + زبان جاری + دیگر زبان‌های موجود + بار کردن زبان‌های موچود… + + گشودن شرایط %s + توقّف دوربین + شروع دوربین + + برپایی پشتیبان امن + + پشتیبان امن + سپرامنیتی در برابر از دست دادن دسترسی به داده‌ها و پیام‌های رمزشده با پشتیبان گیری از کلیدها روی کارسازتان. + نام اتاق + موضوع + گرفتم + اطّلاعات بیش‌تر + + المنت + + + From ecdec83c37b94a1e83cfb0db50aee8cecce53fc4 Mon Sep 17 00:00:00 2001 From: Danial Behzadi Date: Sun, 11 Oct 2020 15:38:41 +0000 Subject: [PATCH 33/55] Translated using Weblate (Persian) Currently translated at 100.0% (168 of 168 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.riot.im/projects/element-android/element-sdk/fa/ --- .../src/main/res/values-fa/strings.xml | 106 ++++++++++++++++-- 1 file changed, 99 insertions(+), 7 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-fa/strings.xml b/matrix-sdk-android/src/main/res/values-fa/strings.xml index b88a98459d..72610aa31c 100644 --- a/matrix-sdk-android/src/main/res/values-fa/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fa/strings.xml @@ -40,10 +40,10 @@ (تصویر هم عوض شد) %1$s نام اتاق را پاک کرد %1$s موضوع اتاق را پاک کرد - پیام پاک شد - پیام به دست %1$s پاک شد - پیام پاک شد [دلیل: %1$s] - پیام به دست %1$s پاک شد [دلیل: %2$s] + پیام برداشته شد + پیام به دست %1$s برداشته شد + پیام برداشته شد [دلیل: %1$s] + پیام به دست %1$s برداشته شد [دلیل: %2$s] %1$s دعوتی برای پیوستن %2$s به اتاق فرستاد %1$s دعوت پیوستن به اتاق %2$s را باطل کرد %1$s دعوت برای %2$s را پذیرفت @@ -56,7 +56,7 @@ شکست در بارگذاری تصویر خطای شبکه - خطای ماتریس + خطای ماتریکس در حال حاضر امکان بازپیوست به اتاقی خالی وجود ندارد‌‌. @@ -135,6 +135,98 @@ %s درخواست تأیید کلیدتان را دارد، ولی کارخواهتان تأیید کلید درون گپ را پشتیبانی نمی‌کند. برای تأیید کلیدها لازم است از تأییدیهٔ کلید قدیمی استفاده کنید. %1$s اتاق را ایجاد کرد - %1$s نمایه خود را به‌روز کرد %2$s + %1$s نمایه‌اش را به‌روز کرد %2$s نمی‌توان ویرایش کرد - +تصویری فرستادید. + برچسبی فرستادید. + + دعوتتان + اتاق را ایجاد کردید + از %1$s دعوت کردید + به اتاق پیوستید + اتاق را ترک کردید + دعوت را رد کردید + %1$s را اخراج کردید + تحریم %1$s را برداشتید + %1$s را تحریم کردید + دعوت %1$s را پس‌گرفتید + آواتارتان را عوض کردید + نام نمایشیتان را به %1$s تغییر دادید + نام نمایشیتان را از %1$s به %2$s تغییر دادید + نام نمایشیتان را برداشتید (%1$s بود) + موضوع را به %1$s تغییر دادید + %1$s آواتار اتاق را تغییر داد + آواتار اتاق را تغییر دادید + نام اتاق را به %1$s تغییر دادید + تماس تصویری گرفتید. + تماس صوتی گرفتید. + %s برای برپایی تماس، داده فرستاد. + برای برپایی تماس، داده فرستادید. + تماس را پاسخ دادید. + به تماس پایان دادید. + تاریخچهٔ آتی اتاق را برای %1$s نمایان کردید + رمزنگاری سرتاسری را روشن کردید (%1$s) + این اتاق را ارتقا دادید. + + دارخواست کنفرانس ویپ دادید + نام اتاق را برداشتید + موضوع اتاق را برداشتید + %1$s آواتار اتاق را برداشت + آواتار اتاق را برداشتید + نمایه‌تان را به‌روز کردید %1$s + برای %1$s دعوت پیوستن به اتاق فرستادید + دعوت پیوستن %1$s به اتاق را پس گرفتید + دعوت برای %1$s را پذیرفتید + + %1$s ابزارک %2$s را افزود + ابزارک %1$s را افزودید + %1$s ابزارک %2$s را برداشت + ابزارک %1$s را برداشتید + %1$s ابزارک %2$s را دستکاری کرد + ابزارک %1$s را دستکاری کردید + + مدیر + ناظم + پیش‌گزیده + سفارشی (%1$d) + سفارشی + + سطح قدرت %1$s را تغییر دادید. + %1$s سطح قدرت %2$s را تغییر داد. + %1$s از %2$s به %3$s + + دعوتتان. دلیل: %1$s + %1$s را دعوت کردید. دلیل: %2$s + به اتاق پیوستید. دلیل: %1$s + اتاق را ترک کردید. دلیل: %1$s + دعوت را رد کردید. دلیل: %1$s + %1$s را اخراج کردید. دلیل: %2$s + تحریم %1$s را برداشتید. دلیل: %2$s + %1$s را تحریم کردید. دلیل: %2$s + دعوتی به %1$s برای پیوستن به اتاق فرستادید. دلیل: %2$s + دعوت %1$s برای پیوستن به اتاق را پس گرفتید. دلیل: %2$s + دعوت برای %1$s را پذیرفتید. دلیل: %2$s + دعوت %1$s را رد کردید. دلیل: %2$s + + + نشانی %1$s را به این اتاق افزودید. + نشانی‌های %1$s را به این اتاق افزودید. + + + + نشانی %1$s ار از این اتاق برداشتید. + نشانی‌های %1$s ار از این اتاق برداشتید. + + + نشانی %1$s ار افزوده و %2$s را از این اتاق برداشتید. + + نشانی اصلی این اتاق را به %1$s تنظیم کردید. + نشانی اصلی این اتاق را برداشتید. + + به میهمانان اجازهٔ پیوستن به گروه دادید. + میمهانان را از پیوستن به گروه بازداشتید. + + رمزنگاری سرتاسری را روشن کردید. + رمزنگاری سرتاسری را روشن کردید (الگوریتم ناشناخته %1$s). + + From 9c6ea95df89e0e6513a0be5823cedc75f3ebc115 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Fri, 9 Oct 2020 18:11:35 +0000 Subject: [PATCH 34/55] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1874 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/pt_BR/ --- vector/src/main/res/values-pt-rBR/strings.xml | 149 ++++++++++-------- 1 file changed, 81 insertions(+), 68 deletions(-) diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index fbf710feaf..5e66462496 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -543,7 +543,7 @@ Acesso e visibilidade - Exibir esta sala no diretório público de salas + Exibir esta sala na lista pública de salas Acesso à sala Legibilidade do histórico da sala Quem pode ler o histórico de mensagens? @@ -1180,7 +1180,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Backup de chaves não está concluído. Por favor, aguarde… Você perderá suas mensagens criptografadas se sair agora Backup de chave em andamento. Se você sair agora, perderá o acesso às suas mensagens criptografadas. - O backup de chave segura deve estar ativado em todas as suas sessões, para evitar perder o acesso às suas mensagens criptografadas. + O backup de chave deve estar ativado em todas as suas sessões, para evitar perder o acesso às suas mensagens criptografadas. Não quero minhas mensagens criptografadas Fazendo backup das chaves… Use o backup de chave @@ -1331,14 +1331,14 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr %s \nA sincronização pode ser adiada dependendo dos recursos (bateria) ou do estado do aparelho (modo de suspensão). Integrações - Use o Gerenciador de Integrações para gerenciar bots, pontes, widgets e pacotes de figurinhas. + Use o Gerenciador de Integrações para gerenciar bots, integrações, widgets e pacotes de figurinhas. \nO Gerenciador de Integrações recebe dados de configuração e pode modificar widgets, enviar convites para salas e definir níveis de permissão em seu nome. Botão enter do teclado enviará a mensagem em vez de adicionar uma quebra de linha - Backup Seguro + Backup online Gerenciar - Configurar Backup Seguro - Restaurar Backup Seguro + Configurar backup online + Restaurar backup online Configurar neste aparelho Prevenir contra a perda de acesso a mensagens e dados encriptados, guardando as chaves de encriptação no seu servidor. Gerar uma nova Chave de Segurança ou definir uma nova Frase de Segurança para o seu backup existente. @@ -1375,7 +1375,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Chaves exportadas com sucesso Recuperação de mensagens criptografadas - Gerenciar Backup das Chaves + Configurar backup das chaves IP desconhecido @@ -1452,23 +1452,23 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Nenhuma sessão Matrix disponível Nunca perca mensagens criptografadas - As mensagens em salas criptografadas são protegidas com a criptografia de ponta a ponta. Somente você e o(s) destinatário(s) têm as chaves para ler essas mensagens. -\n -\nFaça backup de suas chaves de segurança para evitar perdê-las. - Comece a usar o Backup de Chave + As mensagens em salas criptografadas são protegidas com a criptografia de ponta a ponta. Somente você e o(s) destinatário(s) têm as chaves para ler essas mensagens. +\n +\nFaça backup de suas chaves para evitar perdê-las. + Comece a fazer o backup de chave (Avançado) Exportar as chaves manualmente Proteja seu backup com uma frase secreta. Armazenaremos uma cópia criptografada de suas chaves em nosso servidor. Proteja seu backup com uma frase secreta para mantê-lo seguro. -\n -\nPara segurança máxima, isso deve ser diferente da senha da sua conta. +\n +\nPara segurança máxima, a frase secreta deve ser diferente da senha da sua conta. Criar frase secreta - Criar Backup + Criando backup Ou proteja seu backup com uma chave de recuperação, salvando-a em algum lugar seguro. (Avançado) Configurar a chave de recuperação Parabéns ! - Está sendo feito backup das suas chaves. + O backup das suas chaves está sendo feito. Sua chave de recuperação é uma rede de proteção - você pode usá-la para restaurar o acesso às suas mensagens criptografadas se você esquecer sua frase de recuperação. \nMantenha a sua chave de recuperação em algum lugar muito seguro, como um gerenciador de senhas (ou um cofre) Mantenha sua chave de recuperação em algum lugar muito seguro, como um gerenciador de senhas (ou um cofre) @@ -1482,8 +1482,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr \nAtenção: este arquivo pode ser removido se o aplicativo for desinstalado. A chave de recuperação foi guardada. - Já existe uma cópia de segurança no servidor - Parece que você já tem configuração backup da chave de outra sessão. Queres substituí-lo pela nova que estás criando \? + Já existe um backup no seu servidor + Parece que você já configurou um backup de chaves em outra sessão. Deseja substituí-lo por um novo backup\? Substituir Parar @@ -1492,14 +1492,14 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Gerando Chave de Recuperação usando a frase secreta, este processo pode levar alguns segundos. Chave de recuperação Erro inesperado - A Cópia de Segurança foi iniciada - As suas chaves de encriptação estão sendo copiadas em segundo plano para o seu servidor. O backup inicial pode demorar vários minutos. + Começando o backup + O backup de suas chaves está sendo feito. O primeiro backup pode demorar vários minutos. Você tem certeza\? Você pode perder o acesso às suas mensagens se você sair do Element ou perder este aparelho. - Obtendo versão do backup… + Obtendo a versão do backup… Use sua frase secreta de recuperação para desbloquear seu histórico de mensagens seguras use sua chave de recuperação Não sabe sua frase secreta de recuperação, você pode %s. @@ -1510,7 +1510,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Recuperação de Mensagem Perdeu sua chave de recuperação\? Você pode configurar uma nova nas configurações. - O backup não pôde ser descriptografado com essa frase secreta: verifique se você digitou a frase secreta de recuperação correta. + O backup não pôde ser descriptografado com essa frase secreta: verifique se você digitou corretamente a frase secreta de recuperação. Erro de rede: verifique a sua conexão e tente de novo, por favor. Restaurando o backup: @@ -1523,9 +1523,9 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Backup restaurado %s ! - Restaurou um backup com chave %d. - Restaurou um backup com chaves %d. - + O backup restaurou %d chave. + O backup restaurou %d chaves. + %d nova chave foi adicionada a esta sessão. %d novas chaves foram adicionadas a esta sessão. @@ -1536,56 +1536,56 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Restaurar do backup - Excluir Backup + Remover backup - A chave do backup foi configurada correctamente para esta sessão. - A chave do backup não está activa nesta sessão. - Não está sendo feito backup das suas chaves nesta sessão. + O backup da chave foi configurado corretamente para esta sessão. + O backup da chave não está configurado nesta sessão. + O backup das suas chaves não está sendo feito nesta sessão. - O backup tem uma assinatura da sessão desconhecida com o ID %s. + O backup tem uma assinatura de uma sessão desconhecida com ID %s. O backup tem uma assinatura válida desta sessão. O backup tem uma assinatura válida da sessão confirmada %s. O backup tem uma assinatura válida da sessão não confirmada %s O backup tem uma assinatura inválida da sessão confirmada %s O backup tem uma assinatura inválida da sessão não confirmada %s - Não foi possível obter a informação de confiança para o backup (%s). + Não foi possível saber se o backup é confiável (%s). Para usar o Backup de Chaves nesta sessão, restaure com a sua frase secreta ou chave de recuperação agora. - Excluindo o backup… - Não foi possível excluir o backup (%s) + Removendo o backup… + Não foi possível remover o backup (%s) Verificando a situação do backup - Excluir Backup + Remover backup Excluir as chaves de criptografia do servidor\? Você não será mais capaz de usar a sua chave de recuperação para ler o histórico de mensagens criptografadas. - Novo Backup da Chave - Foi detectado um novo backup da chave de mensagem. -\n + Novo backup de chave + Foi detectado um novo backup de chave. +\n \nSe você não definiu o novo método de recuperação, um invasor pode estar tentando acessar sua conta. Altere a senha da sua conta e defina um novo método de recuperação imediatamente nas Configurações. Foi eu Nunca perca mensagens criptografadas - Comece a usar o Backup da Chave + Comece a fazer o backup da chave - Backup Seguro + Backup online Proteja-se contra a perda de acesso a mensagens e dados criptografados Nunca perca mensagens criptografadas - Use o backup da chave + Fazer o backup da chave Novas chaves de mensagens seguras - Gerenciar Backup das Chaves + Configurar o backup das chaves - Fazendo backup das chaves. Isto pode demorar vários minutos.… + Fazendo backup das chaves. Isso pode demorar vários minutos… - Configurar Backup Seguro + Configurar o backup online O backup de todas as chaves foi concluído - Fazendo o backup da chave %d … - Fazendo o backup das chaves %d … - + Fazendo o backup de %d chave… + Fazendo o backup de %d chaves… + Versão Algoritmo @@ -1655,10 +1655,10 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Enviou um convite Convidado por %s - Vocês estão todos tão envolvidos em tudo aquilo! + Tudo em dia! Você não tem mais mensagens não lidas - Bem-vindo a casa! - Encarregar-se de mensagens não lidas + Boas-vindas! + Leia mensagens não lidas aqui Conversas Suas conversas serão exibidas aqui Salas @@ -1784,7 +1784,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Termos de serviço Revisar termos Seja descoberto por outros - Use bots, pontes, widgets e pacotes de figurinhas + Use bots, integrações, widgets e pacotes de figurinhas Leia em @@ -1962,7 +1962,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Nova senha Atenção! - Alterar a sua senha redefinirá todas as chaves de criptografia de ponta a ponta existentes em todas as suas sessões, tornando o histórico de mensagens criptografadas ilegível. Faça uma cópia (backup) das suas chaves, ou exporte as chaves de outra sessão antes de alterar a sua senha. + Alterar a sua senha redefinirá todas as chaves de criptografia de ponta a ponta existentes em todas as suas sessões, tornando o histórico de mensagens criptografadas ilegível. Faça um backup das suas chaves, ou exporte as chaves de outra sessão antes de alterar a sua senha. Continuar Este e-mail não está associado a nenhuma conta @@ -2098,7 +2098,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Relatar imediatamente as falhas Element poderá quebrar com mais frequência quando ocorrer um erro inesperado - Adicionar ¯\\_(ツ)_/¯ para uma mensagem de texto simples + Adiciona ¯\\_(ツ)_/¯ a uma mensagem de texto Ativar criptografia Uma vez ativada, a criptografia não poderá ser desativada. @@ -2210,7 +2210,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Uma vez ativada, a criptografia não poderá ser desativada. Ativar criptografia\? - Uma vez ativada, a criptografia de uma sala não pode ser desativada. As mensagens enviadas em uma sala criptografada não podem ser lidas pelo servidor, apenas pelos participantes desta sala. A ativação da criptografia pode impedir que muitos bots e pontes funcionem corretamente. + Uma vez ativada, a criptografia de uma sala não pode ser desativada. As mensagens enviadas em uma sala criptografada não podem ser lidas pelo servidor, apenas pelos participantes desta sala. A ativação da criptografia pode impedir que muitos bots e integrações funcionem corretamente. Ativar criptografia Para ficar seguro, confirme %s comparando um código único. @@ -2381,7 +2381,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Sincronização da chave Geral Sincronização da chave do Usuário Sincronizando a chave de Auto-Assinatura - Criando o Backup da Chave + Criando o backup da chave Suas %2$s & %1$s estão agora definidas. @@ -2389,7 +2389,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr \nSalva arquivos em local seguro! Você precisará deles para desbloquear mensagens criptografadas e proteger informações se perder todas as suas sessões ativas. Imprime e armazena em local seguro - Salva em uma chave USB ou HDD de backup + Salve isto em uma chave USB ou unidade de backup Copia para sua nuvem pessoal Você não pode fazer isso por celular @@ -2406,14 +2406,14 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Digite %s Frase Secreta de Recuperação - Verificando a chave de backup + Verificando o backup de chave Criando uma Frase Secreta de Recuperação permite proteger e desbloquear mensagens criptografadas e estabelecer confiança. \n \nSe você não quiser definir uma Senha de Mensagem, crie antes uma Chave de Mensagem. Criar uma Frase Secreta de Recuperação permite proteger e desbloquear mensagens criptografadas e estabelecer confiança. - Se você cancelar agora, poderá perder mensagens e dados criptografados para sempre se esquecer seus credenciais. -\n -\nTambém pode configurar o Backup Seguro e gerenciar suas chaves em Configurações. + Se você cancelar agora, poderá perder mensagens e dados criptografados para sempre se esquecer suas credenciais. +\n +\nVocê também pode configurar o Backup online e gerenciar suas chaves em Configurações. As mensagens nesta sala estão criptografadas de ponta a ponta. Confirme os usuários em seus perfis. A criptografia usada por esta sala não é suportada @@ -2444,18 +2444,18 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Não é uma chave de recuperação válida Digite uma chave de recuperação - Verificando a chave de backup (%s) + Verificando o backup da chave (%s) Obtendo a chave da curva Gerando a chave SSSS a partir de uma frase secreta Gerando a chave SSSS a partir de uma frase secreta (%s) Gerando a chave SSSS a partir da chave de recuperação - Armazenando secreto de chave do backup em SSSS + Armazenando backup secreto de chave em SSSS %1$s (%2$s) Digite sua Frase Secreta de Chave do Backup para continuar. - use sua chave de recuperação de Chave do Backup - Não conheça sua Frase Secreta de Chave do Backup, você pode %s. - Chave de recuperação de Chave do Backup + use sua chave de recuperação da Chave do Backup + Se não se lembrar de sua Frase Secreta do backup de chave, você pode %s. + Chave de recuperação do backup de chave Impedir a captura de tela do aplicativo Ativando esta opção acrescenta FLAG_SECURE a todas as atividades. Reinicie o aplicativo para que a alteração tenha efeito. @@ -2477,7 +2477,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Use seu %1$s ou %2$s para continuar. Usar a chave de recuperação Selecione sua Chave de Recuperação, ou insira manualmente digitando-a ou colando-a da sua área de transferência - O backup não pôde ser descriptografado com essa Chave de Recuperação: verifique se você digitou a Chave de Recuperação correta. + O backup não pôde ser descriptografado com essa Chave de Recuperação: verifique se você digitou corretamente a Chave de Recuperação. Falha ao acessar o armazenamento seguro Não criptografado @@ -2540,10 +2540,10 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Desligue a câmera Ativar a câmera - Configure um Backup Seguro + Configure o backup online - Backup Seguro - Previna-se contra perda de acesso a mensagens e dados criptografados, fazendo backup das chaves de encriptação no seu servidor. + Backup online + Previna-se contra perda de acesso a mensagens e dados criptografados, fazendo backup das chaves de criptografia no seu servidor. Configure Use uma Chave de Segurança Gere uma chave de segurança para armazenar num local seguro, como um gerenciador de senhas ou um cofre. @@ -2667,4 +2667,17 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Não foi possível encontrar esta sala. Certifique-se de que ela existe. O link não está correto - +Este número de telefone já foi adicionado. + Mostrar eventos de status dos integrantes da sala + Votação + Botões do bot + Reagiu com: %s + Confirmação concluída + + Remover os dados de %1$s desta conta\? +\n +\nProssiga com cuidado, pois não há como reverter esta escolha. + + Desculpe, esta funcionalidade ainda não está disponível para contas conectadas via acesso único. + + From 19b6898568e8eba19be5ea53ebe56b86a76d6fa2 Mon Sep 17 00:00:00 2001 From: Rob Johnson Date: Thu, 8 Oct 2020 18:22:57 +0000 Subject: [PATCH 35/55] Translated using Weblate (Spanish) Currently translated at 99.4% (1863 of 1874 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.riot.im/projects/element-android/element-app/es/ --- vector/src/main/res/values-es/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 4687fffa77..4f80aaf32c 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -1811,7 +1811,7 @@ La visibilidad de mensajes en Matrix es similar a la del correo electrónico. Qu Empieza Selecciona un servidor - Como el correo electrónico, las cuantas tienen un hogar, aunque se puede hablar con cualquiera + Como el correo electrónico, las cuentas tienen un hogar, aunque se puede hablar con cualquiera Alojamiento de pago para organizaciones Saber más Otro From cb40485aad6fae818e4d7e570994138cc72dcea5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 18:53:07 +0200 Subject: [PATCH 36/55] Format strings --- .../src/main/res/values-cs/strings.xml | 34 +++---- .../src/main/res/values-fa/strings.xml | 16 ++-- .../src/main/res/values-sq/strings.xml | 16 ++-- vector/src/main/res/values-cs/strings.xml | 4 +- vector/src/main/res/values-de/strings.xml | 10 +-- vector/src/main/res/values-el/strings.xml | 4 +- vector/src/main/res/values-et/strings.xml | 4 +- vector/src/main/res/values-fa/strings.xml | 88 +++++++++---------- vector/src/main/res/values-fr/strings.xml | 4 +- vector/src/main/res/values-it/strings.xml | 8 +- vector/src/main/res/values-ja/strings.xml | 4 +- vector/src/main/res/values-kab/strings.xml | 4 +- vector/src/main/res/values-pt-rBR/strings.xml | 24 ++--- vector/src/main/res/values-ru/strings.xml | 36 ++++---- vector/src/main/res/values-sq/strings.xml | 34 +++---- vector/src/main/res/values-sv/strings.xml | 4 +- vector/src/main/res/values-uk/strings.xml | 38 ++++---- vector/src/main/res/values-zh-rCN/strings.xml | 6 +- vector/src/main/res/values-zh-rTW/strings.xml | 4 +- 19 files changed, 171 insertions(+), 171 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-cs/strings.xml b/matrix-sdk-android/src/main/res/values-cs/strings.xml index 57828ac182..2ea2112b45 100644 --- a/matrix-sdk-android/src/main/res/values-cs/strings.xml +++ b/matrix-sdk-android/src/main/res/values-cs/strings.xml @@ -105,7 +105,7 @@ %1$s opustil místnost. Důvod: %2$s Zpráva odstraněna Zprávu odstranil/a %1$s -Poslali jste obrázek. + Poslali jste obrázek. Poslali jste nálepku. Vaše pozvání @@ -188,28 +188,28 @@ Zrušili jste pozvání od %1$s. Důvod: %2$s - %1$s přidali %2$s jako adresu pro tuto místnost. - %1$s přidali %2$s jako adresy pro tuto místnost. - %1$s přidali %2$s jako adresy pro tuto místnost. - + %1$s přidali %2$s jako adresu pro tuto místnost. + %1$s přidali %2$s jako adresy pro tuto místnost. + %1$s přidali %2$s jako adresy pro tuto místnost. + - Přidali jste %1$s jako adresu pro tuto místnost. - Přidali jste %1$s jako adresy pro tuto místnost. - Přidali jste %1$s jako adresy pro tuto místnost. - + Přidali jste %1$s jako adresu pro tuto místnost. + Přidali jste %1$s jako adresy pro tuto místnost. + Přidali jste %1$s jako adresy pro tuto místnost. + - %1$s odstranili %2$s jako adresu pro tuto místnost. - %1$s odstranili %2$s jako adresy pro tuto místnost. - %1$s odstranili %2$s jako adresy pro tuto místnost. - + %1$s odstranili %2$s jako adresu pro tuto místnost. + %1$s odstranili %2$s jako adresy pro tuto místnost. + %1$s odstranili %2$s jako adresy pro tuto místnost. + - Odstranili jste %2$s jako adresu pro tuto místnost. - Odstranili jste %2$s jako adresuy pro tuto místnost. - Odstranili jste %2$s jako adresy pro tuto místnost. - + Odstranili jste %2$s jako adresu pro tuto místnost. + Odstranili jste %2$s jako adresuy pro tuto místnost. + Odstranili jste %2$s jako adresy pro tuto místnost. + %1$s přidali %2$ a odstranili %3$s jako adresy pro tuto místnost. Přidali jste %1$s a odstranili %2$s jako adresy pro tuto místnost. diff --git a/matrix-sdk-android/src/main/res/values-fa/strings.xml b/matrix-sdk-android/src/main/res/values-fa/strings.xml index 72610aa31c..25d92b4abe 100644 --- a/matrix-sdk-android/src/main/res/values-fa/strings.xml +++ b/matrix-sdk-android/src/main/res/values-fa/strings.xml @@ -137,7 +137,7 @@ %1$s اتاق را ایجاد کرد %1$s نمایه‌اش را به‌روز کرد %2$s نمی‌توان ویرایش کرد -تصویری فرستادید. + تصویری فرستادید. برچسبی فرستادید. دعوتتان @@ -209,14 +209,14 @@ دعوت %1$s را رد کردید. دلیل: %2$s - نشانی %1$s را به این اتاق افزودید. - نشانی‌های %1$s را به این اتاق افزودید. - + نشانی %1$s را به این اتاق افزودید. + نشانی‌های %1$s را به این اتاق افزودید. + - نشانی %1$s ار از این اتاق برداشتید. - نشانی‌های %1$s ار از این اتاق برداشتید. - + نشانی %1$s ار از این اتاق برداشتید. + نشانی‌های %1$s ار از این اتاق برداشتید. + نشانی %1$s ار افزوده و %2$s را از این اتاق برداشتید. @@ -229,4 +229,4 @@ رمزنگاری سرتاسری را روشن کردید. رمزنگاری سرتاسری را روشن کردید (الگوریتم ناشناخته %1$s). - + diff --git a/matrix-sdk-android/src/main/res/values-sq/strings.xml b/matrix-sdk-android/src/main/res/values-sq/strings.xml index 4dc7f910d8..9756a11762 100644 --- a/matrix-sdk-android/src/main/res/values-sq/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sq/strings.xml @@ -138,7 +138,7 @@ %s po kërkon të verifikojë kyçin tuaj, por klienti juaj nuk mbulon verifikim kyçesh brenda fjalosjeje. Që të verifikoni kyça, do t’ju duhet të përdorni verifikim të dikurshëm kyçesh. %1$s krijo dhomën -Dërguat një figurë. + Dërguat një figurë. Dërguat një ngjitës. Ftesa juaj @@ -210,14 +210,14 @@ Tërhoqët mbrapsht ftesën për %1$s. Arsye: %2$s - Shtuat %1$s si një adresë për këtë dhomë. - Shtuat %1$s si adresa për këtë dhomë. - + Shtuat %1$s si një adresë për këtë dhomë. + Shtuat %1$s si adresa për këtë dhomë. + - Hoqët %1$s si një adresë për këtë dhomë. - Hoqët %1$s si adresa për këtë dhomë. - + Hoqët %1$s si një adresë për këtë dhomë. + Hoqët %1$s si adresa për këtë dhomë. + Shtuat %1$s dhe hoqët %2$s si adresa për këtë dhomë. @@ -230,4 +230,4 @@ Aktivizuat fshehtëzimin skaj-më-skaj. Aktivizuat fshehtëzimin skaj-më-skaj (algoritëm %1$s i panjohur). - + diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 919acc53b7..e330295004 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2623,9 +2623,9 @@ Vaši e-mailovou adresu můžete přidat k profilu v nastavení. Výsledek ověření Odkaz byl chybně zformován -K zahájení hovoru v této místnosti nemáte oprávnění + K zahájení hovoru v této místnosti nemáte oprávnění Smazat údaje účtu typu %1$s\? \n \nOpatrně, může vést k neočekávanému chování. - + diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index 1b653375cc..fcbe068476 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -96,9 +96,9 @@ Keine Räume Keine öffentl. Räume verfügbar - 1 Benutzer - %d Benutzer/in - + 1 Benutzer + %d Benutzer/in + Logdateien übermitteln Absturzberichte übermitteln @@ -2683,11 +2683,11 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Bot-Schaltflächen Reagierte mit: %s Der Link war fehlerhaft -Du bist nicht berechtigt, einen Anruf in diesem Raum zu starten + Du bist nicht berechtigt, einen Anruf in diesem Raum zu starten Ergebnis der Überprüfung Kontodaten vom Typ %1$s löschen\? \n \nVorsicht! Es kann zu unerwartetem Verhalten führen. - + diff --git a/vector/src/main/res/values-el/strings.xml b/vector/src/main/res/values-el/strings.xml index 14580a49f8..87d1089b7a 100644 --- a/vector/src/main/res/values-el/strings.xml +++ b/vector/src/main/res/values-el/strings.xml @@ -338,7 +338,7 @@ Άτομα Αναζήτηση ατόμων ΑΤΟΜΑ -Λτνκ + Λτνκ Αρχικοποίηση υπηρεσίας Αναμονή για συμβάντα @@ -363,4 +363,4 @@ Αποσύνδεση Παύση Прямі повідомлення - + diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 5a35f77cdf..1e6a5edf23 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2557,9 +2557,9 @@ Verifitseerimise tulemus Link oli vigane -Sul ei ole õigusi siin jututoas helistamiseks + Sul ei ole õigusi siin jututoas helistamiseks Kas kustutame %1$s tüüpi kasutajakonto andmed\? \n \nKuna nii mõndagi ootamatut võib juhtuda, siis kasuta seda võimalust mõningase ettevaatusega. - + diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index a08650c539..e290c78e6a 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -750,7 +750,7 @@ موفقیت اعلان‌ها -خاتمه + خاتمه اجازهٔ شروع تماس کنفرانسی در این اتاق را ندارید @@ -781,9 +781,9 @@ این شماره تلفن از پیش تعریف شده. خطای SSL. - ۱ عضویت تغییر کرد - %d عضویت تغییر کردند - + ۱ عضویت تغییر کرد + %d عضویت تغییر کردند + پیش‌گیری از تماس تصادفی خواستن تأیید پیش از شروع تماس @@ -833,9 +833,9 @@ پرونده پیدا نشد اجازهٔ فرستادن در این اتاق را ندارید - ۱ پیام جدید - %d پیام جدید - + ۱ پیام جدید + %d پیام جدید + اعتماد کردن اعتماد نکردن @@ -938,9 +938,9 @@ پایان زمان درخواست همگام‌سازی دورهٔ همگام‌سازی ترجیحی - %d ثانیه - %d ثانیه - + %d ثانیه + %d ثانیه + برای مدیریت بات‌ها، پل‌ها، ابزارک‌ها و بسته‌های برچسب از یک مدیر یکپارچگی استفاده کنید. \nمدیرهای یکپارچگی، داده‌های پیکربندی را دریافت کرده و می‌توانند از طرف شما ابزارک‌ها را تغییر داده، دعوت‌های اتاق فرستاده و سطوح قدرت را تنظیم کنند. @@ -997,9 +997,9 @@ فقط اعضا (از زمان پیوستنشان) - %d کاربر مسدود - %d کاربر مسدود - + %d کاربر مسدود + %d کاربر مسدود + این‌ها ویژگی‌های آزمایشی‌ای هستند که ممکن است به روش‌های نامنتظره‌ای حراب شوندا. با احتیاط استفاده کنید. هرگز پیام‌های رمزشده از این نشست به نشست‌های تأییدنشده در این اتاق فرستاده نشود. @@ -1052,17 +1052,17 @@ این‌جا بنویسید… - ۱ پیام آگاهی نخوانده - %d پیام آگاهی نخوانده - + ۱ پیام آگاهی نخوانده + %d پیام آگاهی نخوانده + - ۱ پیام آگاهی نخوانده - %d پیام آگاهی نخوانده - + ۱ پیام آگاهی نخوانده + %d پیام آگاهی نخوانده + - %1$s: ۱ پیام - %1$s: %2$d پیام - + %1$s: ۱ پیام + %1$s: %2$d پیام + %1$s در %2$s رویداد جدید اتاق @@ -1087,9 +1087,9 @@ ایجاد تماس کنفرانسی با جیتسی مطمئنید که می‌خواهید ابزارک را از این اتاق حذف کنید؟ - ۱ ابزارک فعّال - %d ابزارک فعّال - + ۱ ابزارک فعّال + %d ابزارک فعّال + نما ابزارک‌های فعّال @@ -1162,9 +1162,9 @@ پیوست دعوت شد - ۱ عضو - %d عضو - + ۱ عضو + %d عضو + غیرفعّال‌سازی حساب غیرفعّال‌سازی حساب @@ -1405,9 +1405,9 @@ کنش‌های مدیر تنظمیات اتاق - ۱ نفر - %1$d نفر - + ۱ نفر + %1$d نفر + بارگذاری‌ها ترک اتاق ترک کردن اتاق… @@ -1471,13 +1471,13 @@ داده‌های حساب - %d رأی - %d رأی - + %d رأی + %d رأی + - %d رأی - نتایج نهایی - %d رأی - نتایج نهایی - + %d رأی - نتایج نهایی + %d رأی - نتایج نهایی + انتخاب گزیده ایجاد نظرسنجی‌ای ساده استفاده از یک کلید یا عبارت بازیابی @@ -1489,9 +1489,9 @@ برداشتن… می‌خواهید این پیوست را به %1$s بفرستید؟ - فرستادن تصویر با اندازهٔ اصلی - فرستادن تصویرها با اندازهٔ اصلی - + فرستادن تصویر با اندازهٔ اصلی + فرستادن تصویرها با اندازهٔ اصلی + تأیید برداشت آوردن دلیل @@ -1564,9 +1564,9 @@ دعوت برای %1$s فرستاده شد دعوت برای %1$s و %2$s فرستاده شد - دعوت برای %1$s و یک نفر دیگر فرستاده شد - دعوت برای %1$s و %2$d نفر دیگر فرستاده شد - + دعوت برای %1$s و یک نفر دیگر فرستاده شد + دعوت برای %1$s و %2$d نفر دیگر فرستاده شد + زبان جاری دیگر زبان‌های موجود بار کردن زبان‌های موچود… @@ -1587,4 +1587,4 @@ المنت - + diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 48df26c6d8..70b1772fd3 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -2377,7 +2377,7 @@ Si vous n’avez pas configuré de nouvelle méthode de récupération, un attaq Renseignez l’URL d’un serveur d’identité Valider -Lancer + Lancer Pause Ignorer @@ -2427,4 +2427,4 @@ Si vous n’avez pas configuré de nouvelle méthode de récupération, un attaq Bloquer l\'utilisateur Motif du blocage Débloquer l\'utilisateur - + diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 3ea31027a4..f91a328fbd 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -2669,11 +2669,11 @@ Impossibile aprire una stanza dove sei stato bandito. Impossibile trovare questa stanza. Assicurati che esista. -Non hai il permesso di avviare una chiamata in questa stanza + Non hai il permesso di avviare una chiamata in questa stanza - %d secondo - %d secondi - + %d secondo + %d secondi + Mostra eventi di stato dei membri della stanza Includi eventi di invito/entrata/uscita/kick/ban e modifiche di avatar/nome. diff --git a/vector/src/main/res/values-ja/strings.xml b/vector/src/main/res/values-ja/strings.xml index 9f98d6f7e3..165ff49f7a 100644 --- a/vector/src/main/res/values-ja/strings.xml +++ b/vector/src/main/res/values-ja/strings.xml @@ -1227,7 +1227,7 @@ Matrixでのメッセージの可視性は電子メールと同様です。メ 自分自身には通話できません -マークダウン書式 + マークダウン書式 メッセージ送信前にマークダウン書式を適用します。これにより、アスタリスクを使用して斜体のテキストを表示するなどの高度な書式設定が利用できます。 音声とビデオ - + diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index 9b4f2a512e..efe5ea787f 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -2549,6 +2549,6 @@ Taggrayt n usenqed Aseɣwen ur yemsil ara akken iwata -Ur tesɛiḍ ara tasiregt ad tebduḍ asiwel deg texxamt-a + Ur tesɛiḍ ara tasiregt ad tebduḍ asiwel deg texxamt-a Issedmer s: %s - + diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 5e66462496..74a92178ac 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -1523,9 +1523,9 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Backup restaurado %s ! - O backup restaurou %d chave. - O backup restaurou %d chaves. - + O backup restaurou %d chave. + O backup restaurou %d chaves. + %d nova chave foi adicionada a esta sessão. %d novas chaves foram adicionadas a esta sessão. @@ -1583,9 +1583,9 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr O backup de todas as chaves foi concluído - Fazendo o backup de %d chave… - Fazendo o backup de %d chaves… - + Fazendo o backup de %d chave… + Fazendo o backup de %d chaves… + Versão Algoritmo @@ -2643,7 +2643,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Atenção! Última tentativa restante antes de você ser desconectada/o! Muitos erros, você foi desconectada/o -Você não tem permissão para iniciar uma chamada nesta sala + Você não tem permissão para iniciar uma chamada nesta sala Nenhum número de telefone foi adicionado à sua conta Endereços de e-mail Nenhum e-mail foi adicionado à sua conta @@ -2652,9 +2652,9 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Certifique-se de ter clicado no link do e-mail que enviamos para você. - %d segundo - %d segundos - + %d segundo + %d segundos + Mostrar quando alguém for convidado/entrar/sair/banido e mostrar alterações de foto de perfil e de nome e sobrenome. E-mails e números de telefone @@ -2667,7 +2667,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Não foi possível encontrar esta sala. Certifique-se de que ela existe. O link não está correto -Este número de telefone já foi adicionado. + Este número de telefone já foi adicionado. Mostrar eventos de status dos integrantes da sala Votação Botões do bot @@ -2680,4 +2680,4 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Desculpe, esta funcionalidade ainda não está disponível para contas conectadas via acesso único. - + diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index f3665caded..feb85b3c59 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -99,7 +99,7 @@ %d пользователь %d пользователя %d пользователей - + Отправить логи @@ -833,13 +833,13 @@ %d комната %d комнаты %d комнат - + %d комната %d комнаты %d комнат - + %1$s в %2$s @@ -847,7 +847,7 @@ %d активный виджет %d активных виджета %d активных виджетов - + @@ -857,45 +857,45 @@ %d активный участник %d активных участника %d активных участников - + %d участник %d участника %d участников - + %d новое сообщение %d новых сообщения %d новых сообщений - + %1$s комната найдена для %2$s %1$s комнаты найдено для %2$s %1$s комнат найдено для %2$s - + %d изменение членства %d изменения членства %d изменений членства - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + %d непрочитанное уведомление %d непрочитанных уведомления %d непрочитанных уведомлений - + Получить аватар Заметка аватара @@ -1030,20 +1030,20 @@ %d выбран %d выбрано %d выбраны - + %d участник %d участника %d участников - + %d комната %d комнаты %d комнат - + Системные оповещения @@ -1304,7 +1304,7 @@ %d новый ключ был добавлен к этому устройству. %d новых ключа были добавлены к этому устройству. %d новых ключей были добавлены к этому устройству. - + @@ -1355,7 +1355,7 @@ Резервное копирование %d ключа… Резервное копирование %d ключей… Резервное копирование %d ключей… - + Все ключи сохранены @@ -2730,9 +2730,9 @@ Результат проверки Ссылка была искажена -У вас нет разрешения на запуск звонка в этой комнате + У вас нет разрешения на запуск звонка в этой комнате Удалить данные учетной записи типа %1$s\? \n \nИспользуйте с осторожностью, это может привести к неожиданному поведению. - + diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index af5708143f..aa677f0b41 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2207,7 +2207,7 @@ Emër përdoruesi dhe/ose fjalëkalim i pasaktë. Fjalëkalimi i dhënë fillon ose mbaron me hapësirë, ju lutemi, kontrollojeni. - + Po publikohen kyçe të krijuar identiteti Mesazh… @@ -2333,7 +2333,7 @@ Parashtroje Hap termat e %s -Luaje + Luaje Pauzë Hidhe poshtë @@ -2409,9 +2409,9 @@ Sigurohuni që keni klikuar te lidhja në email-in që ju kemi dërguar. - %d sekondë - %d sekonda - + %d sekondë + %d sekonda + Shfaq akte gjendjeje përdoruesish të dhomës Përfshin akte ftimi/pjesëmarrjeje/ikjeje/përzënieje/dëbimi dhe ndryshime emri avatari/shfaqjeje. @@ -2431,16 +2431,16 @@ Administroni email-e dhe numra telefonash të lidhur me llogarinë tuaj Matrix - %d përdorues i dëbuar - %d përdorues të dëbuar - + %d përdorues i dëbuar + %d përdorues të dëbuar + Kyçet u eksportuan me sukses - %1$d/%2$d kyç i importuar me sukses. - %1$d/%2$d kyçe të importuar me sukses. - + %1$d/%2$d kyç i importuar me sukses. + %1$d/%2$d kyçe të importuar me sukses. + SHIHENI Widget-e aktivë @@ -2463,9 +2463,9 @@ Kod - %1$s, %2$s dhe %3$d tjetër i lexuar - %1$s, %2$s dhe %3$d të tjerë të lexuar - + %1$s, %2$s dhe %3$d tjetër i lexuar + %1$s, %2$s dhe %3$d të tjerë të lexuar + Shtoje te të parapëlqyerit Hiqe prej të parapëlqyerve S’bëtë ndryshime @@ -2572,9 +2572,9 @@ Njoftimet push janë të çaktivizuar Që të aktivizoni njoftimet push, shihni te rregullimet tuaja - Kod i gabuar, edhe %d provë - Kod i gabuar, edhe %d prova - + Kod i gabuar, edhe %d provë + Kod i gabuar, edhe %d prova + Kujdes! Prova e fundit e mbetur, përpara daljes! Shumë gabime, u nxorët nga llogaria Zgjidhni një PIN për siguri diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index 96385b4cc3..a359eb58cf 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2560,9 +2560,9 @@ Verifieringsavslutning Länken var felformaterad -Du har inte behörighet att starta ett samtal i det här rummet + Du har inte behörighet att starta ett samtal i det här rummet Radera kontodata av typen %1$s\? \n \nAnvänd varsamt, det kan leda till oväntat beteende. - + diff --git a/vector/src/main/res/values-uk/strings.xml b/vector/src/main/res/values-uk/strings.xml index ce34bf8ddb..f2434c6af3 100644 --- a/vector/src/main/res/values-uk/strings.xml +++ b/vector/src/main/res/values-uk/strings.xml @@ -772,7 +772,7 @@ %d зміна членства %d зміни членства %d змін членства - + Список учасників @@ -797,13 +797,13 @@ %d активний участник %d активних участника %d активних участників - + %d участник %d участника %d участників - + Ви впевнені, що хочете забанити цього користувача в цьому чаті? @@ -811,7 +811,7 @@ %d нове повідомлення %d нових повідомленя %d нових повідомлень - + Обмежена конфіденційність @@ -863,25 +863,25 @@ %d сек. %d сек. %d сек. - + %d хв. %d хв. %d хв. - + %d год. %d год. %d год. - + %d день %d днів %d дні - + Зараз %1$s @@ -897,19 +897,19 @@ %d обрано "%d обрано" "%d обрано" - + %d кімната %d кімнати %d кімнат - + %1$s кімнату знайдено для %2$s %1$s кімнати знайдено для %2$s %1$s кімнат знайдено для %2$s - + Версія %s • Сповіщення містять метадані та дані повідомлення @@ -938,19 +938,19 @@ %d непрочитане сповіщення %d непрочитані сповіщення %d непрочитаних сповіщень - + %d непрочитане сповіщення %d непрочитані сповіщення %d непрочитаних сповіщень - + %d кімната %d кімнати %d кімнат - + %1$s у %2$s @@ -958,7 +958,7 @@ %d активний віджет %d активні віджети %d активних віджетів - + Пропущено обов’язковий параметр. @@ -1004,14 +1004,14 @@ %d учасник %d учасника %d учасників - + %d кімната %d кімнати %d кімнат - + Адміністратор спільноти не вказав для неї детальної інформації. @@ -1110,7 +1110,7 @@ Будь ласка, ознайомтесь та прийміть правила цього серверу: Позначити як прочитане -Cyrl + Cyrl Запуск сервісу Резервна копія ключа @@ -1134,4 +1134,4 @@ Ви не маєте доступу до цього повідомлення Очікуємо повідомлення, це може тривати певний час - + diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 5a9e3a9066..c5668da75a 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -2578,10 +2578,10 @@ Element 在后台时的工作将被显著的限制,这可能会影响消息通 无法打开您被封禁的聊天室。 无法找到此聊天室。请确认它存在。 -您没有权限在此聊天室发起通话 + 您没有权限在此聊天室发起通话 - %d 秒 - + %d 秒 + 显示聊天室成员状态事件 包括邀请/加入/离开/踢掉/封禁事件和头像/昵称变更。 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index dac6b366ce..1d415b8878 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2574,9 +2574,9 @@ Matrix 中的消息可見度類似于電子郵件。我們忘記您的郵件意 驗證結論 連結格式錯誤 -您沒有在此聊天室開始通話的權限 + 您沒有在此聊天室開始通話的權限 刪除類型為 %1$s 的帳號資料? \n \n小心使用,它可能會導致意料之外的行為。 - + From 648462f7f4dc97c16d4b33a2e20471fe27bb33e1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 19:02:54 +0200 Subject: [PATCH 37/55] Remove unused string `labs_merge_e2e_in_timeline` --- vector/src/main/res/values-cs/strings.xml | 1 - vector/src/main/res/values-de/strings.xml | 1 - vector/src/main/res/values-es/strings.xml | 1 - vector/src/main/res/values-et/strings.xml | 1 - vector/src/main/res/values-fa/strings.xml | 1 - vector/src/main/res/values-hu/strings.xml | 1 - vector/src/main/res/values-it/strings.xml | 1 - vector/src/main/res/values-kab/strings.xml | 1 - vector/src/main/res/values-pt-rBR/strings.xml | 1 - vector/src/main/res/values-ru/strings.xml | 1 - vector/src/main/res/values-sk/strings.xml | 1 - vector/src/main/res/values-sv/strings.xml | 1 - vector/src/main/res/values-zh-rCN/strings.xml | 1 - vector/src/main/res/values-zh-rTW/strings.xml | 1 - vector/src/main/res/values/strings.xml | 1 - 15 files changed, 15 deletions(-) diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index e330295004..d64bb4d16e 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2483,7 +2483,6 @@ Vaši e-mailovou adresu můžete přidat k profilu v nastavení. \n \n%s - Sloučení nemohlo dešifrovat zprávy v časové ose Přidat panel věnovaný nepřečteným oznámením na hlavní obrazovku. Kód diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index fcbe068476..358609bc2e 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2620,7 +2620,6 @@ Verwahre deinen Wiederherstellungsschlüssel an einem sehr sicheren Ort wie eine Aktiviere PIN Wenn du deine PIN zurücksetzen möchtest, tippe \"PIN vergessen\" um dich abzumelden und sie anschließend zurückzusetzen. Bestätige PIN um die PIN zu deaktivieren - \"Nicht entschlüsselbar\"-Fehler im Chatverlauf zusammenfassen Verhindere versehentliche Anrufe Bitte um Bestätigung, bevor du einen Anruf tätigst Konfiguration diff --git a/vector/src/main/res/values-es/strings.xml b/vector/src/main/res/values-es/strings.xml index 4f80aaf32c..c5ca0d5f1a 100644 --- a/vector/src/main/res/values-es/strings.xml +++ b/vector/src/main/res/values-es/strings.xml @@ -1930,7 +1930,6 @@ La visibilidad de mensajes en Matrix es similar a la del correo electrónico. Qu Desbanear usuario y permitir entrar a la sala nuevamente. nombre_session: - Error al descifrar el mensaje en la línea de tiempo Adicionar pestaña dedicada para notificaciones no leidas en la pantalla principal. Descripcion muy corta diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 1e6a5edf23..4a7f5ddbed 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2217,7 +2217,6 @@ \n \n%s - Ei õnnestunud dekrüptida ajajoonel leiduvat sõnumit Sa parasjagu jagad oma e-posti aadressi ja telefoninumbrit isikutuvastusserveriga %1$s. Selleks, et lõpetada see jagamine, pead uuesti looma ühenduse isikutuvastusserveriga %2$s. Detailne logimine võimaldab arendajatel saada rohkem teadet kui sa peale nutiseadme tõsist raputamist saadad veateate. Kui ka detailne logimine on kasutusel, siis rakendus ei logi sõnumite sisu ega isiklikke andmeid. diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index e290c78e6a..9dec816e0c 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -1222,7 +1222,6 @@ نمی‌توانید کسی که به دنبالش هستید را بیابید؟ مشاهدهٔ شاخهٔ اتاق - ادغام پیام‌های شکست‌خورده در رمزگشایی در خط زمانی افزودن زبانه‌ای اختصاصی روی صفحهٔ اصلی برای آگاهی‌های خوانده‌نشده. پیوند در تخته‌گیره رونشت شد diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index 2516d203e0..657f661264 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -2481,7 +2481,6 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró \n \n%s - Az egyesítésnek nem sikerült visszafejtenie egy üzenetet az idővonalon Külön lap hozzáadása az olvasatlan értesítések számára a főképernyőn. diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index f91a328fbd..9852e714a1 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -2512,7 +2512,6 @@ Imposta il Backup Sicuro - Decifrazione del messaggio nella timeline fallita Aggiungi una scheda dedicata per le notifiche non lette nella schermata principale. Aggiungi ai preferiti diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index efe5ea787f..e213ae3f03 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -2527,7 +2527,6 @@ Tuzna n tenfult (%1$s / %2$s) Rmed afraḍ i tririt deg tesnakudt - Asdukkel ur yeddi ara i tukksa n uwgelhen n yiznan deg tesnakudt Aqeddac n timagit i tferneḍ ulac ɣer-s akk tiwtilin n yimeẓla. Ur ttkemmil ara ala ma yella tettekleḍ ɣef umeẓlu Iɣmisen ɣezzifen ad ɛawnen ineflayen s umuddu n wugar n yiɣemisen mi ara tazneḍ aneqqis RageShake, ula ma yili yermed asnas ur yettazen ara agbur n yiznan neɣ isefka-nniḍen usligen. diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 74a92178ac..97da7a8a82 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -1766,7 +1766,6 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr Nome ou ID (#example:matrix.org) Ativar o recurso de deslizar para responder nas conversas - Alertar apenas uma vez em uma conversa de que não é possível descriptografar as mensagens, em vez de alertar para cada mensagem Adicione uma aba dedicada para notificações não lidas na tela principal. Link copiado para a memória diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index feb85b3c59..c88a1162fa 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -2163,7 +2163,6 @@ Настроить безопасное резервное копирование - Слиянию не удаётся расшифровать сообщение на временной шкале Добавьте специальную вкладку для непрочитанных уведомлений на главном экране. diff --git a/vector/src/main/res/values-sk/strings.xml b/vector/src/main/res/values-sk/strings.xml index 66ba1f354d..13c8612e23 100644 --- a/vector/src/main/res/values-sk/strings.xml +++ b/vector/src/main/res/values-sk/strings.xml @@ -1757,7 +1757,6 @@ Na ďalšej obrazovke vás systém požiada o povolenie vždy bežať na pozadí Názov alebo ID (#priklad:matrix.org) Povoliť odpovedať švihnutím na časovej osy - Zlúčiť správy nepodarilo sa dešifrovať na časovej osy Zobrazovať záložku oznámenia na hlavnej obrazovke. Odkaz skopírovaný do schránky diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index a359eb58cf..fe80632d99 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -1046,7 +1046,6 @@ Filen %1$s har laddats ner! Meddelanderedigeringar - Sammanfogaren misslyckades med att avkryptera ett meddelande i tidslinjen Lägg till med Matrix-ID Inga resultat hittade, använd \"Lägg till med Matrix-ID\" för att söka på servern. Använd bottar, bryggor, widgets och dekalpaket diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index c5668da75a..5504dbc81f 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -1696,7 +1696,6 @@ Element 在后台时的工作将被显著的限制,这可能会影响消息通 名称或 ID (#example:matrix.org) 在时间线中启用滑动回复 - 在时间线中合并解密失败消息 在主屏幕上添加未读通知选项卡。 链接已复制到剪贴板 diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index 1d415b8878..07f1303554 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2408,7 +2408,6 @@ Matrix 中的消息可見度類似于電子郵件。我們忘記您的郵件意 設定安全備份 - 合併未能在時間軸中解密訊息 在主畫面上新增專用的未讀通知分頁。 新增到最愛 diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index e400f7fe64..ec916d1daf 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1750,7 +1750,6 @@ Name or ID (#example:matrix.org) Enable swipe to reply in timeline - Merge failed to decrypt message in timeline Add a dedicated tab for unread notifications on main screen. Link copied to clipboard From 17e7aedcbaee47a21547d57000620ca21da9a9c6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 19:09:04 +0200 Subject: [PATCH 38/55] Move store data to `/fastlane/metadata/android` (#812) --- CHANGES.md | 2 +- .../metadata/android}/de/full_description.txt | 0 .../metadata/android}/de/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/de/title.txt | 0 .../metadata/android}/en-US/full_description.txt | 0 .../metadata/android}/en-US/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/en-US/title.txt | 0 .../metadata/android}/es/full_description.txt | 0 .../metadata/android}/es/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/es/title.txt | 0 .../metadata/android}/fi/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/fi/title.txt | 0 .../play/listings => fastlane/metadata/android}/fr/title.txt | 0 .../metadata/android}/hu/full_description.txt | 0 .../metadata/android}/hu/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/hu/title.txt | 0 .../metadata/android}/kab/full_description.txt | 0 .../metadata/android}/kab/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/kab/title.txt | 0 .../metadata/android}/pt_BR/full_description.txt | 0 .../metadata/android}/pt_BR/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/pt_BR/title.txt | 0 .../metadata/android}/ru/full_description.txt | 0 .../metadata/android}/ru/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/ru/title.txt | 0 .../metadata/android}/sk/full_description.txt | 0 .../metadata/android}/sk/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/sk/title.txt | 0 .../metadata/android}/sv/full_description.txt | 0 .../metadata/android}/sv/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/sv/title.txt | 0 .../metadata/android}/th/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/th/title.txt | 0 .../metadata/android}/tr/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/tr/title.txt | 0 .../metadata/android}/uk/full_description.txt | 0 .../metadata/android}/uk/short_description.txt | 0 .../play/listings => fastlane/metadata/android}/uk/title.txt | 0 .../metadata/android}/zh_Hans/full_description.txt | 0 .../metadata/android}/zh_Hans/short_description.txt | 0 .../listings => fastlane/metadata/android}/zh_Hans/title.txt | 0 41 files changed, 1 insertion(+), 1 deletion(-) rename {vector/src/main/play/listings => fastlane/metadata/android}/de/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/de/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/de/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/en-US/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/en-US/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/en-US/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/es/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/es/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/es/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/fi/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/fi/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/fr/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/hu/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/hu/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/hu/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/kab/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/kab/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/kab/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/pt_BR/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/pt_BR/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/pt_BR/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/ru/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/ru/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/ru/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/sk/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/sk/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/sk/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/sv/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/sv/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/sv/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/th/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/th/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/tr/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/tr/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/uk/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/uk/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/uk/title.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/zh_Hans/full_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/zh_Hans/short_description.txt (100%) rename {vector/src/main/play/listings => fastlane/metadata/android}/zh_Hans/title.txt (100%) diff --git a/CHANGES.md b/CHANGES.md index 534194c2a9..a3e2500635 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -30,7 +30,7 @@ Bugfix 🐛: - Very long topic cannot be fully visible (#1957) Translations 🗣: - - + - Move store data to `/fastlane/metadata/android` (#812) SDK API changes ⚠️: - Search messages in a room by using Session.searchService() or Room.search() diff --git a/vector/src/main/play/listings/de/full_description.txt b/fastlane/metadata/android/de/full_description.txt similarity index 100% rename from vector/src/main/play/listings/de/full_description.txt rename to fastlane/metadata/android/de/full_description.txt diff --git a/vector/src/main/play/listings/de/short_description.txt b/fastlane/metadata/android/de/short_description.txt similarity index 100% rename from vector/src/main/play/listings/de/short_description.txt rename to fastlane/metadata/android/de/short_description.txt diff --git a/vector/src/main/play/listings/de/title.txt b/fastlane/metadata/android/de/title.txt similarity index 100% rename from vector/src/main/play/listings/de/title.txt rename to fastlane/metadata/android/de/title.txt diff --git a/vector/src/main/play/listings/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt similarity index 100% rename from vector/src/main/play/listings/en-US/full_description.txt rename to fastlane/metadata/android/en-US/full_description.txt diff --git a/vector/src/main/play/listings/en-US/short_description.txt b/fastlane/metadata/android/en-US/short_description.txt similarity index 100% rename from vector/src/main/play/listings/en-US/short_description.txt rename to fastlane/metadata/android/en-US/short_description.txt diff --git a/vector/src/main/play/listings/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt similarity index 100% rename from vector/src/main/play/listings/en-US/title.txt rename to fastlane/metadata/android/en-US/title.txt diff --git a/vector/src/main/play/listings/es/full_description.txt b/fastlane/metadata/android/es/full_description.txt similarity index 100% rename from vector/src/main/play/listings/es/full_description.txt rename to fastlane/metadata/android/es/full_description.txt diff --git a/vector/src/main/play/listings/es/short_description.txt b/fastlane/metadata/android/es/short_description.txt similarity index 100% rename from vector/src/main/play/listings/es/short_description.txt rename to fastlane/metadata/android/es/short_description.txt diff --git a/vector/src/main/play/listings/es/title.txt b/fastlane/metadata/android/es/title.txt similarity index 100% rename from vector/src/main/play/listings/es/title.txt rename to fastlane/metadata/android/es/title.txt diff --git a/vector/src/main/play/listings/fi/short_description.txt b/fastlane/metadata/android/fi/short_description.txt similarity index 100% rename from vector/src/main/play/listings/fi/short_description.txt rename to fastlane/metadata/android/fi/short_description.txt diff --git a/vector/src/main/play/listings/fi/title.txt b/fastlane/metadata/android/fi/title.txt similarity index 100% rename from vector/src/main/play/listings/fi/title.txt rename to fastlane/metadata/android/fi/title.txt diff --git a/vector/src/main/play/listings/fr/title.txt b/fastlane/metadata/android/fr/title.txt similarity index 100% rename from vector/src/main/play/listings/fr/title.txt rename to fastlane/metadata/android/fr/title.txt diff --git a/vector/src/main/play/listings/hu/full_description.txt b/fastlane/metadata/android/hu/full_description.txt similarity index 100% rename from vector/src/main/play/listings/hu/full_description.txt rename to fastlane/metadata/android/hu/full_description.txt diff --git a/vector/src/main/play/listings/hu/short_description.txt b/fastlane/metadata/android/hu/short_description.txt similarity index 100% rename from vector/src/main/play/listings/hu/short_description.txt rename to fastlane/metadata/android/hu/short_description.txt diff --git a/vector/src/main/play/listings/hu/title.txt b/fastlane/metadata/android/hu/title.txt similarity index 100% rename from vector/src/main/play/listings/hu/title.txt rename to fastlane/metadata/android/hu/title.txt diff --git a/vector/src/main/play/listings/kab/full_description.txt b/fastlane/metadata/android/kab/full_description.txt similarity index 100% rename from vector/src/main/play/listings/kab/full_description.txt rename to fastlane/metadata/android/kab/full_description.txt diff --git a/vector/src/main/play/listings/kab/short_description.txt b/fastlane/metadata/android/kab/short_description.txt similarity index 100% rename from vector/src/main/play/listings/kab/short_description.txt rename to fastlane/metadata/android/kab/short_description.txt diff --git a/vector/src/main/play/listings/kab/title.txt b/fastlane/metadata/android/kab/title.txt similarity index 100% rename from vector/src/main/play/listings/kab/title.txt rename to fastlane/metadata/android/kab/title.txt diff --git a/vector/src/main/play/listings/pt_BR/full_description.txt b/fastlane/metadata/android/pt_BR/full_description.txt similarity index 100% rename from vector/src/main/play/listings/pt_BR/full_description.txt rename to fastlane/metadata/android/pt_BR/full_description.txt diff --git a/vector/src/main/play/listings/pt_BR/short_description.txt b/fastlane/metadata/android/pt_BR/short_description.txt similarity index 100% rename from vector/src/main/play/listings/pt_BR/short_description.txt rename to fastlane/metadata/android/pt_BR/short_description.txt diff --git a/vector/src/main/play/listings/pt_BR/title.txt b/fastlane/metadata/android/pt_BR/title.txt similarity index 100% rename from vector/src/main/play/listings/pt_BR/title.txt rename to fastlane/metadata/android/pt_BR/title.txt diff --git a/vector/src/main/play/listings/ru/full_description.txt b/fastlane/metadata/android/ru/full_description.txt similarity index 100% rename from vector/src/main/play/listings/ru/full_description.txt rename to fastlane/metadata/android/ru/full_description.txt diff --git a/vector/src/main/play/listings/ru/short_description.txt b/fastlane/metadata/android/ru/short_description.txt similarity index 100% rename from vector/src/main/play/listings/ru/short_description.txt rename to fastlane/metadata/android/ru/short_description.txt diff --git a/vector/src/main/play/listings/ru/title.txt b/fastlane/metadata/android/ru/title.txt similarity index 100% rename from vector/src/main/play/listings/ru/title.txt rename to fastlane/metadata/android/ru/title.txt diff --git a/vector/src/main/play/listings/sk/full_description.txt b/fastlane/metadata/android/sk/full_description.txt similarity index 100% rename from vector/src/main/play/listings/sk/full_description.txt rename to fastlane/metadata/android/sk/full_description.txt diff --git a/vector/src/main/play/listings/sk/short_description.txt b/fastlane/metadata/android/sk/short_description.txt similarity index 100% rename from vector/src/main/play/listings/sk/short_description.txt rename to fastlane/metadata/android/sk/short_description.txt diff --git a/vector/src/main/play/listings/sk/title.txt b/fastlane/metadata/android/sk/title.txt similarity index 100% rename from vector/src/main/play/listings/sk/title.txt rename to fastlane/metadata/android/sk/title.txt diff --git a/vector/src/main/play/listings/sv/full_description.txt b/fastlane/metadata/android/sv/full_description.txt similarity index 100% rename from vector/src/main/play/listings/sv/full_description.txt rename to fastlane/metadata/android/sv/full_description.txt diff --git a/vector/src/main/play/listings/sv/short_description.txt b/fastlane/metadata/android/sv/short_description.txt similarity index 100% rename from vector/src/main/play/listings/sv/short_description.txt rename to fastlane/metadata/android/sv/short_description.txt diff --git a/vector/src/main/play/listings/sv/title.txt b/fastlane/metadata/android/sv/title.txt similarity index 100% rename from vector/src/main/play/listings/sv/title.txt rename to fastlane/metadata/android/sv/title.txt diff --git a/vector/src/main/play/listings/th/short_description.txt b/fastlane/metadata/android/th/short_description.txt similarity index 100% rename from vector/src/main/play/listings/th/short_description.txt rename to fastlane/metadata/android/th/short_description.txt diff --git a/vector/src/main/play/listings/th/title.txt b/fastlane/metadata/android/th/title.txt similarity index 100% rename from vector/src/main/play/listings/th/title.txt rename to fastlane/metadata/android/th/title.txt diff --git a/vector/src/main/play/listings/tr/short_description.txt b/fastlane/metadata/android/tr/short_description.txt similarity index 100% rename from vector/src/main/play/listings/tr/short_description.txt rename to fastlane/metadata/android/tr/short_description.txt diff --git a/vector/src/main/play/listings/tr/title.txt b/fastlane/metadata/android/tr/title.txt similarity index 100% rename from vector/src/main/play/listings/tr/title.txt rename to fastlane/metadata/android/tr/title.txt diff --git a/vector/src/main/play/listings/uk/full_description.txt b/fastlane/metadata/android/uk/full_description.txt similarity index 100% rename from vector/src/main/play/listings/uk/full_description.txt rename to fastlane/metadata/android/uk/full_description.txt diff --git a/vector/src/main/play/listings/uk/short_description.txt b/fastlane/metadata/android/uk/short_description.txt similarity index 100% rename from vector/src/main/play/listings/uk/short_description.txt rename to fastlane/metadata/android/uk/short_description.txt diff --git a/vector/src/main/play/listings/uk/title.txt b/fastlane/metadata/android/uk/title.txt similarity index 100% rename from vector/src/main/play/listings/uk/title.txt rename to fastlane/metadata/android/uk/title.txt diff --git a/vector/src/main/play/listings/zh_Hans/full_description.txt b/fastlane/metadata/android/zh_Hans/full_description.txt similarity index 100% rename from vector/src/main/play/listings/zh_Hans/full_description.txt rename to fastlane/metadata/android/zh_Hans/full_description.txt diff --git a/vector/src/main/play/listings/zh_Hans/short_description.txt b/fastlane/metadata/android/zh_Hans/short_description.txt similarity index 100% rename from vector/src/main/play/listings/zh_Hans/short_description.txt rename to fastlane/metadata/android/zh_Hans/short_description.txt diff --git a/vector/src/main/play/listings/zh_Hans/title.txt b/fastlane/metadata/android/zh_Hans/title.txt similarity index 100% rename from vector/src/main/play/listings/zh_Hans/title.txt rename to fastlane/metadata/android/zh_Hans/title.txt From 5ef97362cb041b68ef60c9a0f46c23da94df232d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 14:59:34 +0200 Subject: [PATCH 39/55] Fix gravity on topic --- vector/src/main/res/layout/item_expandable_textview.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/vector/src/main/res/layout/item_expandable_textview.xml b/vector/src/main/res/layout/item_expandable_textview.xml index b0c232d77e..8fd04a5bb8 100644 --- a/vector/src/main/res/layout/item_expandable_textview.xml +++ b/vector/src/main/res/layout/item_expandable_textview.xml @@ -25,7 +25,6 @@ android:layout_marginTop="4dp" android:autoLink="web" android:fontFamily="sans-serif" - android:gravity="center" android:src="@drawable/ic_expand_more" android:textSize="14sp" android:textStyle="normal" From 4ac62bcf51d1569cf0679d2f340bf642d17704d0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 15:54:58 +0200 Subject: [PATCH 40/55] Display filter only if there are more than 2 members in this room --- .../app/features/roomprofile/members/RoomMemberListFragment.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt index 77337d7208..a00bcf02fc 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt @@ -88,7 +88,6 @@ class RoomMemberListFragment @Inject constructor( } private fun setupSearchView() { - searchViewAppBarLayout.isVisible = true searchView.queryHint = getString(R.string.search_members_hint) searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { @@ -111,6 +110,8 @@ class RoomMemberListFragment @Inject constructor( roomMemberListController.setData(viewState) renderRoomSummary(viewState) inviteUsersButton.isVisible = viewState.actionsPermissions.canInvite + // Display filter only if there are more than 2 members in this room + searchViewAppBarLayout.isVisible = viewState.roomSummary()?.otherMemberIds.orEmpty().size > 1 } override fun onRoomMemberClicked(roomMember: RoomMemberSummary) { From b1625838edf22f07a27349cd6fa2fa69fcb960da Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 16:00:25 +0200 Subject: [PATCH 41/55] Move the attibute to the correct View --- vector/src/main/res/layout/item_expandable_textview.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vector/src/main/res/layout/item_expandable_textview.xml b/vector/src/main/res/layout/item_expandable_textview.xml index 8fd04a5bb8..9f61a3c4d4 100644 --- a/vector/src/main/res/layout/item_expandable_textview.xml +++ b/vector/src/main/res/layout/item_expandable_textview.xml @@ -10,7 +10,11 @@ android:id="@+id/expandableContent" android:layout_width="match_parent" android:layout_height="wrap_content" + android:autoLink="web" android:ellipsize="end" + android:fontFamily="sans-serif" + android:textSize="14sp" + android:textStyle="normal" app:layout_constraintBottom_toTopOf="@+id/expandableArrow" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -23,11 +27,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" - android:autoLink="web" - android:fontFamily="sans-serif" android:src="@drawable/ic_expand_more" - android:textSize="14sp" - android:textStyle="normal" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/expandableContent" From 67f1fe69faeb7e6fde49760660be44d11cb87b6d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 16:05:16 +0200 Subject: [PATCH 42/55] We are now API 21+ --- tools/check/forbidden_strings_in_resources.txt | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tools/check/forbidden_strings_in_resources.txt b/tools/check/forbidden_strings_in_resources.txt index 0bbe90b31f..6fb6b184ba 100644 --- a/tools/check/forbidden_strings_in_resources.txt +++ b/tools/check/forbidden_strings_in_resources.txt @@ -79,9 +79,5 @@ layout_constraintLeft_ ### Use im.vector.app.core.preference.VectorPreference to support multiline of the title Date: Mon, 12 Oct 2020 18:18:50 +0200 Subject: [PATCH 43/55] There is no more menu in this Fragment --- .../app/features/roomprofile/members/RoomMemberListFragment.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt index a00bcf02fc..66745fef25 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListFragment.kt @@ -58,9 +58,6 @@ class RoomMemberListFragment @Inject constructor( setupSearchView() setupInviteUsersButton() recyclerView.configureWith(roomMemberListController, hasFixedSize = true) - viewModel.selectSubscribe(this, RoomMemberListViewState::actionsPermissions) { - invalidateOptionsMenu() - } } private fun setupInviteUsersButton() { From 63eb119df6441a42a76999664f292cdf957b4504 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 21:12:48 +0200 Subject: [PATCH 44/55] Inject userId and deviceId instead of sessionParam --- .../crypto/store/db/RealmCryptoStore.kt | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt index 9065da47b9..b25349cba9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStore.kt @@ -23,7 +23,6 @@ import io.realm.Realm import io.realm.RealmConfiguration import io.realm.Sort import io.realm.kotlin.where -import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.session.crypto.crosssigning.MXCrossSigningInfo import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.LocalEcho @@ -86,7 +85,9 @@ import org.matrix.android.sdk.internal.crypto.store.db.query.getById import org.matrix.android.sdk.internal.crypto.store.db.query.getOrCreate import org.matrix.android.sdk.internal.database.mapper.ContentMapper import org.matrix.android.sdk.internal.di.CryptoDatabase +import org.matrix.android.sdk.internal.di.DeviceId import org.matrix.android.sdk.internal.di.MoshiProvider +import org.matrix.android.sdk.internal.di.UserId import org.matrix.android.sdk.internal.session.SessionScope import org.matrix.olm.OlmAccount import org.matrix.olm.OlmException @@ -98,7 +99,9 @@ import kotlin.collections.set internal class RealmCryptoStore @Inject constructor( @CryptoDatabase private val realmConfiguration: RealmConfiguration, private val crossSigningKeysMapper: CrossSigningKeysMapper, - private val credentials: Credentials) : IMXCryptoStore { + @UserId private val userId: String, + @DeviceId private val deviceId: String? +) : IMXCryptoStore { /* ========================================================================================== * Memory cache, to correctly release JNI objects @@ -141,8 +144,8 @@ internal class RealmCryptoStore @Inject constructor( // Check credentials // The device id may not have been provided in credentials. // Check it only if provided, else trust the stored one. - if (currentMetadata.userId != credentials.userId - || (credentials.deviceId != null && credentials.deviceId != currentMetadata.deviceId)) { + if (currentMetadata.userId != userId + || (deviceId != null && deviceId != currentMetadata.deviceId)) { Timber.w("## open() : Credentials do not match, close this store and delete data") deleteAll = true currentMetadata = null @@ -155,8 +158,8 @@ internal class RealmCryptoStore @Inject constructor( } // Metadata not found, or database cleaned, create it - realm.createObject(CryptoMetadataEntity::class.java, credentials.userId).apply { - deviceId = credentials.deviceId + realm.createObject(CryptoMetadataEntity::class.java, userId).apply { + deviceId = this@RealmCryptoStore.deviceId } } } @@ -312,7 +315,7 @@ internal class RealmCryptoStore @Inject constructor( Timber.d("## CrossSigning MSK change for $userId") val keyEntity = crossSigningKeysMapper.map(masterKey) signingInfo.setMasterKey(keyEntity) - if (userId == credentials.userId) { + if (userId == this.userId) { shouldResetMyDevicesLocalTrust = true // my msk has changed! clear my private key // Could we have some race here? e.g I am the one that did change the keys @@ -331,7 +334,7 @@ internal class RealmCryptoStore @Inject constructor( Timber.d("## CrossSigning SSK change for $userId") val keyEntity = crossSigningKeysMapper.map(selfSigningKey) signingInfo.setSelfSignedKey(keyEntity) - if (userId == credentials.userId) { + if (userId == this.userId) { shouldResetMyDevicesLocalTrust = true // my ssk has changed! clear my private key realm.where().findFirst()?.apply { @@ -349,7 +352,7 @@ internal class RealmCryptoStore @Inject constructor( Timber.d("## CrossSigning USK change for $userId") val keyEntity = crossSigningKeysMapper.map(userSigningKey) signingInfo.setUserSignedKey(keyEntity) - if (userId == credentials.userId) { + if (userId == this.userId) { shouldResetMyDevicesLocalTrust = true // my usk has changed! clear my private key realm.where().findFirst()?.apply { @@ -362,11 +365,11 @@ internal class RealmCryptoStore @Inject constructor( // When my cross signing keys are reset, we consider clearing all existing device trust if (shouldResetMyDevicesLocalTrust) { realm.where() - .equalTo(UserEntityFields.USER_ID, credentials.userId) + .equalTo(UserEntityFields.USER_ID, this.userId) .findFirst() ?.devices?.forEach { it?.trustLevelEntity?.crossSignedVerified = false - it?.trustLevelEntity?.locallyVerified = it.deviceId == credentials.deviceId + it?.trustLevelEntity?.locallyVerified = it.deviceId == deviceId } } userEntity.crossSigningInfoEntity = signingInfo @@ -1355,7 +1358,7 @@ internal class RealmCryptoStore @Inject constructor( .findAll() xInfoEntities?.forEach { info -> // Need to ignore mine - if (info.userId != credentials.userId) { + if (info.userId != userId) { info.crossSigningKeys.forEach { it.trustLevelEntity = null } @@ -1370,7 +1373,7 @@ internal class RealmCryptoStore @Inject constructor( .findAll() xInfoEntities?.forEach { xInfoEntity -> // Need to ignore mine - if (xInfoEntity.userId == credentials.userId) return@forEach + if (xInfoEntity.userId == userId) return@forEach val mapped = mapCrossSigningInfoEntity(xInfoEntity) val currentTrust = mapped.isTrusted() val newTrust = check(mapped.userId) From 778c5aee32ec971f9cb76f12cc4fbd2ef7aefa33 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 18:45:19 +0200 Subject: [PATCH 45/55] Add param to `when` --- .../sdk/internal/crypto/DefaultCryptoService.kt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index c77ac70124..21aafda9ef 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -194,18 +194,18 @@ internal class DefaultCryptoService @Inject constructor( private val lastNewSessionForcedDates = MXUsersDevicesMap() fun onStateEvent(roomId: String, event: Event) { - when { - event.getClearType() == EventType.STATE_ROOM_ENCRYPTION -> onRoomEncryptionEvent(roomId, event) - event.getClearType() == EventType.STATE_ROOM_MEMBER -> onRoomMembershipEvent(roomId, event) - event.getClearType() == EventType.STATE_ROOM_HISTORY_VISIBILITY -> onRoomHistoryVisibilityEvent(roomId, event) + when (event.getClearType()) { + EventType.STATE_ROOM_ENCRYPTION -> onRoomEncryptionEvent(roomId, event) + EventType.STATE_ROOM_MEMBER -> onRoomMembershipEvent(roomId, event) + EventType.STATE_ROOM_HISTORY_VISIBILITY -> onRoomHistoryVisibilityEvent(roomId, event) } } fun onLiveEvent(roomId: String, event: Event) { - when { - event.getClearType() == EventType.STATE_ROOM_ENCRYPTION -> onRoomEncryptionEvent(roomId, event) - event.getClearType() == EventType.STATE_ROOM_MEMBER -> onRoomMembershipEvent(roomId, event) - event.getClearType() == EventType.STATE_ROOM_HISTORY_VISIBILITY -> onRoomHistoryVisibilityEvent(roomId, event) + when (event.getClearType()) { + EventType.STATE_ROOM_ENCRYPTION -> onRoomEncryptionEvent(roomId, event) + EventType.STATE_ROOM_MEMBER -> onRoomMembershipEvent(roomId, event) + EventType.STATE_ROOM_HISTORY_VISIBILITY -> onRoomHistoryVisibilityEvent(roomId, event) } } From 0fc92889c14b823f951ce725b49da9fa861d9032 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 22:14:46 +0200 Subject: [PATCH 46/55] Fix test compilation issue --- .../sdk/internal/crypto/CryptoStoreHelper.kt | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreHelper.kt index 6e6a11d568..75ccce0db9 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreHelper.kt @@ -16,7 +16,6 @@ package org.matrix.android.sdk.internal.crypto -import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.internal.crypto.store.IMXCryptoStore import org.matrix.android.sdk.internal.crypto.store.db.RealmCryptoStore import org.matrix.android.sdk.internal.crypto.store.db.RealmCryptoStoreModule @@ -34,14 +33,8 @@ internal class CryptoStoreHelper { .modules(RealmCryptoStoreModule()) .build(), crossSigningKeysMapper = CrossSigningKeysMapper(MoshiProvider.providesMoshi()), - credentials = createCredential()) + userId = "userId_" + Random.nextInt(), + deviceId = "deviceId_sample" + ) } - - fun createCredential() = Credentials( - userId = "userId_" + Random.nextInt(), - homeServer = "http://matrix.org", - accessToken = "access_token", - refreshToken = null, - deviceId = "deviceId_sample" - ) } From 68947588d7af6c188683f4b8bfccc1f3c225be3d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 22:30:18 +0200 Subject: [PATCH 47/55] Replace deprecated shouldEqual and shouldEqualTo by shouldBeEqualTo --- .../crypto/verification/qrcode/QrCodeTest.kt | 53 +++++++++---------- .../session/room/timeline/ChunkEntityTest.kt | 28 +++++----- .../sdk/session/room/timeline/TimelineTest.kt | 2 +- .../verification/qrcode/BinaryStringTest.kt | 12 ++--- 4 files changed, 47 insertions(+), 48 deletions(-) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeTest.kt index 92afd3ee47..ee604fc9ab 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeTest.kt @@ -17,15 +17,14 @@ package org.matrix.android.sdk.internal.crypto.verification.qrcode import androidx.test.ext.junit.runners.AndroidJUnit4 -import org.matrix.android.sdk.InstrumentedTest +import org.amshove.kluent.shouldBeEqualTo import org.amshove.kluent.shouldBeNull -import org.amshove.kluent.shouldEqual -import org.amshove.kluent.shouldEqualTo import org.amshove.kluent.shouldNotBeNull import org.junit.FixMethodOrder import org.junit.Test import org.junit.runner.RunWith import org.junit.runners.MethodSorters +import org.matrix.android.sdk.InstrumentedTest @RunWith(AndroidJUnit4::class) @FixMethodOrder(MethodSorters.JVM) @@ -66,32 +65,32 @@ class QrCodeTest : InstrumentedTest { @Test fun testEncoding1() { - qrCode1.toEncodedString() shouldEqual value1 + qrCode1.toEncodedString() shouldBeEqualTo value1 } @Test fun testEncoding2() { - qrCode2.toEncodedString() shouldEqual value2 + qrCode2.toEncodedString() shouldBeEqualTo value2 } @Test fun testEncoding3() { - qrCode3.toEncodedString() shouldEqual value3 + qrCode3.toEncodedString() shouldBeEqualTo value3 } @Test fun testSymmetry1() { - qrCode1.toEncodedString().toQrCodeData() shouldEqual qrCode1 + qrCode1.toEncodedString().toQrCodeData() shouldBeEqualTo qrCode1 } @Test fun testSymmetry2() { - qrCode2.toEncodedString().toQrCodeData() shouldEqual qrCode2 + qrCode2.toEncodedString().toQrCodeData() shouldBeEqualTo qrCode2 } @Test fun testSymmetry3() { - qrCode3.toEncodedString().toQrCodeData() shouldEqual qrCode3 + qrCode3.toEncodedString().toQrCodeData() shouldBeEqualTo qrCode3 } @Test @@ -102,7 +101,7 @@ class QrCodeTest : InstrumentedTest { checkHeader(byteArray) // Mode - byteArray[7] shouldEqualTo 0 + byteArray[7] shouldBeEqualTo 0 checkSizeAndTransaction(byteArray) @@ -120,7 +119,7 @@ class QrCodeTest : InstrumentedTest { checkHeader(byteArray) // Mode - byteArray[7] shouldEqualTo 1 + byteArray[7] shouldBeEqualTo 1 checkSizeAndTransaction(byteArray) compareArray(byteArray.copyOfRange(23, 23 + 32), kte_byteArray) @@ -137,7 +136,7 @@ class QrCodeTest : InstrumentedTest { checkHeader(byteArray) // Mode - byteArray[7] shouldEqualTo 2 + byteArray[7] shouldBeEqualTo 2 checkSizeAndTransaction(byteArray) compareArray(byteArray.copyOfRange(23, 23 + 32), tlx_byteArray) @@ -156,10 +155,10 @@ class QrCodeTest : InstrumentedTest { val result = qrCode.toEncodedString() val expected = value1.replace("\u0000\u000DMaTransaction", "\u0007\u00D0$longTransactionId") - result shouldEqual expected + result shouldBeEqualTo expected // Reverse operation - expected.toQrCodeData() shouldEqual qrCode + expected.toQrCodeData() shouldBeEqualTo qrCode } @Test @@ -170,7 +169,7 @@ class QrCodeTest : InstrumentedTest { val qrCode = qrCode1.copy(transactionId = longTransactionId) // Symmetric operation - qrCode.toEncodedString().toQrCodeData() shouldEqual qrCode + qrCode.toEncodedString().toQrCodeData() shouldBeEqualTo qrCode } } @@ -218,32 +217,32 @@ class QrCodeTest : InstrumentedTest { } private fun compareArray(actual: ByteArray, expected: ByteArray) { - actual.size shouldEqual expected.size + actual.size shouldBeEqualTo expected.size for (i in actual.indices) { - actual[i] shouldEqualTo expected[i] + actual[i] shouldBeEqualTo expected[i] } } private fun checkHeader(byteArray: ByteArray) { // MATRIX - byteArray[0] shouldEqualTo 'M'.toByte() - byteArray[1] shouldEqualTo 'A'.toByte() - byteArray[2] shouldEqualTo 'T'.toByte() - byteArray[3] shouldEqualTo 'R'.toByte() - byteArray[4] shouldEqualTo 'I'.toByte() - byteArray[5] shouldEqualTo 'X'.toByte() + byteArray[0] shouldBeEqualTo 'M'.toByte() + byteArray[1] shouldBeEqualTo 'A'.toByte() + byteArray[2] shouldBeEqualTo 'T'.toByte() + byteArray[3] shouldBeEqualTo 'R'.toByte() + byteArray[4] shouldBeEqualTo 'I'.toByte() + byteArray[5] shouldBeEqualTo 'X'.toByte() // Version - byteArray[6] shouldEqualTo 2 + byteArray[6] shouldBeEqualTo 2 } private fun checkSizeAndTransaction(byteArray: ByteArray) { // Size - byteArray[8] shouldEqualTo 0 - byteArray[9] shouldEqualTo 13 + byteArray[8] shouldBeEqualTo 0 + byteArray[9] shouldBeEqualTo 13 // Transaction - byteArray.copyOfRange(10, 10 + "MaTransaction".length).toString(Charsets.ISO_8859_1) shouldEqual "MaTransaction" + byteArray.copyOfRange(10, 10 + "MaTransaction".length).toString(Charsets.ISO_8859_1) shouldBeEqualTo "MaTransaction" } } diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt index 237386832c..7c55143096 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt @@ -18,6 +18,14 @@ package org.matrix.android.sdk.session.room.timeline import androidx.test.ext.junit.runners.AndroidJUnit4 import com.zhuinden.monarchy.Monarchy +import io.realm.Realm +import io.realm.RealmConfiguration +import io.realm.kotlin.createObject +import org.amshove.kluent.shouldBeEqualTo +import org.amshove.kluent.shouldBeTrue +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith import org.matrix.android.sdk.InstrumentedTest import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.room.send.SendState @@ -29,14 +37,6 @@ import org.matrix.android.sdk.internal.database.model.SessionRealmModule import org.matrix.android.sdk.internal.session.room.timeline.PaginationDirection import org.matrix.android.sdk.session.room.timeline.RoomDataHelper.createFakeListOfEvents import org.matrix.android.sdk.session.room.timeline.RoomDataHelper.createFakeMessageEvent -import io.realm.Realm -import io.realm.RealmConfiguration -import io.realm.kotlin.createObject -import org.amshove.kluent.shouldBeTrue -import org.amshove.kluent.shouldEqual -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) internal class ChunkEntityTest : InstrumentedTest { @@ -63,7 +63,7 @@ internal class ChunkEntityTest : InstrumentedTest { realm.copyToRealmOrUpdate(it) } chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap()) - chunk.timelineEvents.size shouldEqual 1 + chunk.timelineEvents.size shouldBeEqualTo 1 } } @@ -76,7 +76,7 @@ internal class ChunkEntityTest : InstrumentedTest { } chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap()) chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap()) - chunk.timelineEvents.size shouldEqual 1 + chunk.timelineEvents.size shouldBeEqualTo 1 } } @@ -88,7 +88,7 @@ internal class ChunkEntityTest : InstrumentedTest { chunk1.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS) chunk2.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS) chunk1.merge(ROOM_ID, chunk2, PaginationDirection.BACKWARDS) - chunk1.timelineEvents.size shouldEqual 60 + chunk1.timelineEvents.size shouldBeEqualTo 60 } } @@ -104,7 +104,7 @@ internal class ChunkEntityTest : InstrumentedTest { chunk1.addAll(ROOM_ID, eventsForChunk1, PaginationDirection.FORWARDS) chunk2.addAll(ROOM_ID, eventsForChunk2, PaginationDirection.BACKWARDS) chunk1.merge(ROOM_ID, chunk2, PaginationDirection.BACKWARDS) - chunk1.timelineEvents.size shouldEqual 40 + chunk1.timelineEvents.size shouldBeEqualTo 40 chunk1.isLastForward.shouldBeTrue() } } @@ -119,7 +119,7 @@ internal class ChunkEntityTest : InstrumentedTest { chunk1.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS) chunk2.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS) chunk1.merge(ROOM_ID, chunk2, PaginationDirection.FORWARDS) - chunk1.prevToken shouldEqual prevToken + chunk1.prevToken shouldBeEqualTo prevToken } } @@ -133,7 +133,7 @@ internal class ChunkEntityTest : InstrumentedTest { chunk1.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS) chunk2.addAll(ROOM_ID, createFakeListOfEvents(30), PaginationDirection.BACKWARDS) chunk1.merge(ROOM_ID, chunk2, PaginationDirection.BACKWARDS) - chunk1.nextToken shouldEqual nextToken + chunk1.nextToken shouldBeEqualTo nextToken } } diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt index 91016f7d01..9be0a5d5af 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineTest.kt @@ -78,7 +78,7 @@ internal class TimelineTest : InstrumentedTest { // } // } // latch.await() -// timelineEvents.size shouldEqual initialLoad + paginationCount +// timelineEvents.size shouldBeEqualTo initialLoad + paginationCount // timeline.dispose() // } } diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt index a56426688d..b04834f9f4 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/BinaryStringTest.kt @@ -17,13 +17,13 @@ package org.matrix.android.sdk.internal.crypto.verification.qrcode import org.matrix.android.sdk.MatrixTest -import org.amshove.kluent.shouldEqualTo +import org.amshove.kluent.shouldBeEqualTo import org.junit.FixMethodOrder import org.junit.Test import org.junit.runners.MethodSorters @FixMethodOrder(MethodSorters.JVM) -class BinaryStringTest: MatrixTest { +class BinaryStringTest : MatrixTest { /** * I want to put bytes to a String, and vice versa @@ -37,17 +37,17 @@ class BinaryStringTest: MatrixTest { val str = byteArray.toString(Charsets.ISO_8859_1) - str.length shouldEqualTo 256 + str.length shouldBeEqualTo 256 // Ok convert back to bytearray val result = str.toByteArray(Charsets.ISO_8859_1) - result.size shouldEqualTo 256 + result.size shouldBeEqualTo 256 for (i in 0..255) { - result[i] shouldEqualTo i.toByte() - result[i] shouldEqualTo byteArray[i] + result[i] shouldBeEqualTo i.toByte() + result[i] shouldBeEqualTo byteArray[i] } } } From 9dc103489185c46c2c6fa422278dde59e54ae97e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 13 Oct 2020 09:47:34 +0200 Subject: [PATCH 48/55] Fix some of the non-passing tests --- .../java/org/matrix/android/sdk/api/Matrix.kt | 8 +++++++- .../sdk/session/room/timeline/ChunkEntityTest.kt | 6 +++--- .../sdk/session/room/timeline/RoomDataHelper.kt | 16 ++++++++-------- matrix-sdk-android/src/main/AndroidManifest.xml | 2 ++ 4 files changed, 20 insertions(+), 12 deletions(-) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/api/Matrix.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/api/Matrix.kt index 053b4e19bd..0d71af864b 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/api/Matrix.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/api/Matrix.kt @@ -17,6 +17,8 @@ package org.matrix.android.sdk.api import android.content.Context +import android.os.Handler +import android.os.Looper import androidx.lifecycle.ProcessLifecycleOwner import androidx.work.Configuration import androidx.work.WorkManager @@ -48,13 +50,17 @@ class Matrix private constructor(context: Context, matrixConfiguration: MatrixCo @Inject internal lateinit var olmManager: OlmManager @Inject internal lateinit var sessionManager: SessionManager + private val uiHandler = Handler(Looper.getMainLooper()) + init { Monarchy.init(context) DaggerTestMatrixComponent.factory().create(context, matrixConfiguration).inject(this) if (context.applicationContext !is Configuration.Provider) { WorkManager.initialize(context, Configuration.Builder().setExecutor(Executors.newCachedThreadPool()).build()) } - ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver) + uiHandler.post { + ProcessLifecycleOwner.get().lifecycle.addObserver(backgroundDetectionObserver) + } } fun getUserAgent() = userAgentHolder.userAgent diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt index 7c55143096..69ae57e644 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/ChunkEntityTest.kt @@ -60,7 +60,7 @@ internal class ChunkEntityTest : InstrumentedTest { val chunk: ChunkEntity = realm.createObject() val fakeEvent = createFakeMessageEvent().toEntity(ROOM_ID, SendState.SYNCED, System.currentTimeMillis()).let { - realm.copyToRealmOrUpdate(it) + realm.copyToRealm(it) } chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap()) chunk.timelineEvents.size shouldBeEqualTo 1 @@ -72,7 +72,7 @@ internal class ChunkEntityTest : InstrumentedTest { monarchy.runTransactionSync { realm -> val chunk: ChunkEntity = realm.createObject() val fakeEvent = createFakeMessageEvent().toEntity(ROOM_ID, SendState.SYNCED, System.currentTimeMillis()).let { - realm.copyToRealmOrUpdate(it) + realm.copyToRealm(it) } chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap()) chunk.addTimelineEvent(ROOM_ID, fakeEvent, PaginationDirection.FORWARDS, emptyMap()) @@ -142,7 +142,7 @@ internal class ChunkEntityTest : InstrumentedTest { direction: PaginationDirection) { events.forEach { event -> val fakeEvent = event.toEntity(roomId, SendState.SYNCED, System.currentTimeMillis()).let { - realm.copyToRealmOrUpdate(it) + realm.copyToRealm(it) } addTimelineEvent(roomId, fakeEvent, direction, emptyMap()) } diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt index 0dace9bd4c..1adf31be5f 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/RoomDataHelper.kt @@ -21,7 +21,7 @@ import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toContent import org.matrix.android.sdk.api.session.room.model.Membership -import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary +import org.matrix.android.sdk.api.session.room.model.RoomMemberContent import org.matrix.android.sdk.api.session.room.model.message.MessageTextContent import org.matrix.android.sdk.api.session.room.model.message.MessageType import kotlin.random.Random @@ -41,11 +41,11 @@ object RoomDataHelper { } } - fun createFakeEvent(type: String, - content: Content? = null, - prevContent: Content? = null, - sender: String = FAKE_TEST_SENDER, - stateKey: String = FAKE_TEST_SENDER + private fun createFakeEvent(type: String, + content: Content? = null, + prevContent: Content? = null, + sender: String = FAKE_TEST_SENDER, + stateKey: String = FAKE_TEST_SENDER ): Event { return Event( type = type, @@ -62,8 +62,8 @@ object RoomDataHelper { return createFakeEvent(EventType.MESSAGE, message) } - fun createFakeRoomMemberEvent(): Event { - val roomMember = RoomMemberSummary(Membership.JOIN, "Fake name #${Random.nextLong()}").toContent() + private fun createFakeRoomMemberEvent(): Event { + val roomMember = RoomMemberContent(Membership.JOIN, "Fake name #${Random.nextLong()}").toContent() return createFakeEvent(EventType.STATE_ROOM_MEMBER, roomMember) } } diff --git a/matrix-sdk-android/src/main/AndroidManifest.xml b/matrix-sdk-android/src/main/AndroidManifest.xml index eeb944d955..220a168f60 100644 --- a/matrix-sdk-android/src/main/AndroidManifest.xml +++ b/matrix-sdk-android/src/main/AndroidManifest.xml @@ -2,8 +2,10 @@ xmlns:tools="http://schemas.android.com/tools" package="org.matrix.android.sdk"> + + From db1f129034eb1192e5c012e55af067c2dd73a3dc Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 13 Oct 2020 11:27:30 +0200 Subject: [PATCH 49/55] Improve detection of encrypted rooms --- .../crypto/encryption/EncryptionTest.kt | 111 ++++++++++++++++++ .../internal/crypto/DefaultCryptoService.kt | 6 + .../room/summary/RoomSummaryUpdater.kt | 1 + .../timeline/factory/EncryptionItemFactory.kt | 3 + .../factory/MergedHeaderItemFactory.kt | 2 +- .../timeline/format/NoticeEventFormatter.kt | 3 + .../helper/TimelineDisplayableEvents.kt | 2 +- 7 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/encryption/EncryptionTest.kt diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/encryption/EncryptionTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/encryption/EncryptionTest.kt new file mode 100644 index 0000000000..e42059c639 --- /dev/null +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/encryption/EncryptionTest.kt @@ -0,0 +1,111 @@ +/* + * Copyright 2020 The Matrix.org Foundation C.I.C. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.matrix.android.sdk.internal.crypto.encryption + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.amshove.kluent.shouldBe +import org.junit.FixMethodOrder +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.MethodSorters +import org.matrix.android.sdk.InstrumentedTest +import org.matrix.android.sdk.api.NoOpMatrixCallback +import org.matrix.android.sdk.api.session.events.model.EventType +import org.matrix.android.sdk.api.session.events.model.toContent +import org.matrix.android.sdk.api.session.room.Room +import org.matrix.android.sdk.api.session.room.send.SendState +import org.matrix.android.sdk.api.session.room.timeline.Timeline +import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent +import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings +import org.matrix.android.sdk.common.CommonTestHelper +import org.matrix.android.sdk.common.CryptoTestHelper +import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM +import org.matrix.android.sdk.internal.crypto.model.event.EncryptionEventContent +import java.util.concurrent.CountDownLatch + +@RunWith(AndroidJUnit4::class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +class EncryptionTest : InstrumentedTest { + private val mTestHelper = CommonTestHelper(context()) + private val mCryptoTestHelper = CryptoTestHelper(mTestHelper) + + @Test + fun test_EncryptionEvent() { + performTest(roomShouldBeEncrypted = false) { room -> + // Send an encryption Event as an Event (and not as a state event) + room.sendEvent( + eventType = EventType.STATE_ROOM_ENCRYPTION, + content = EncryptionEventContent(algorithm = MXCRYPTO_ALGORITHM_MEGOLM).toContent() + ) + } + } + + @Test + fun test_EncryptionStateEvent() { + performTest(roomShouldBeEncrypted = true) { room -> + // Send an encryption Event as a State Event + room.sendStateEvent( + eventType = EventType.STATE_ROOM_ENCRYPTION, + stateKey = null, + body = EncryptionEventContent(algorithm = MXCRYPTO_ALGORITHM_MEGOLM).toContent(), + callback = NoOpMatrixCallback() + ) + } + } + + private fun performTest(roomShouldBeEncrypted: Boolean, action: (Room) -> Unit) { + val cryptoTestData = mCryptoTestHelper.doE2ETestWithAliceInARoom(encryptedRoom = false) + + val aliceSession = cryptoTestData.firstSession + val room = aliceSession.getRoom(cryptoTestData.roomId)!! + + room.isEncrypted() shouldBe false + + val timeline = room.createTimeline(null, TimelineSettings(10)) + val latch = CountDownLatch(1) + val timelineListener = object : Timeline.Listener { + override fun onTimelineFailure(throwable: Throwable) { + } + + override fun onNewTimelineEvents(eventIds: List) { + // noop + } + + override fun onTimelineUpdated(snapshot: List) { + val newMessages = snapshot + .filter { it.root.sendState == SendState.SYNCED } + .filter { it.root.getClearType() == EventType.STATE_ROOM_ENCRYPTION } + + if (newMessages.isNotEmpty()) { + timeline.removeListener(this) + latch.countDown() + } + } + } + timeline.start() + timeline.addListener(timelineListener) + + action.invoke(room) + + mTestHelper.await(latch) + timeline.dispose() + + room.isEncrypted() shouldBe roomShouldBeEncrypted + + cryptoTestData.cleanUp(mTestHelper) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 21aafda9ef..b78afe6d41 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -615,6 +615,7 @@ internal class DefaultCryptoService @Inject constructor( val encryptionEvent = monarchy.fetchCopied { realm -> EventEntity.whereType(realm, roomId = roomId, type = EventType.STATE_ROOM_ENCRYPTION) .contains(EventEntityFields.CONTENT, "\"algorithm\":\"$MXCRYPTO_ALGORITHM_MEGOLM\"") + .isNotNull(EventEntityFields.STATE_KEY) .findFirst() } return encryptionEvent != null @@ -915,6 +916,11 @@ internal class DefaultCryptoService @Inject constructor( * @param event the encryption event. */ private fun onRoomEncryptionEvent(roomId: String, event: Event) { + if (!event.isStateEvent()) { + // Ignore + Timber.w("Invalid encryption event") + return + } cryptoCoroutineScope.launch(coroutineDispatchers.crypto) { val params = LoadRoomMembersTask.Params(roomId) try { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt index f58059d6f2..f9a27c367c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt @@ -94,6 +94,7 @@ internal class RoomSummaryUpdater @Inject constructor( // Don't use current state for this one as we are only interested in having MXCRYPTO_ALGORITHM_MEGOLM event in the room val encryptionEvent = EventEntity.whereType(realm, roomId = roomId, type = EventType.STATE_ROOM_ENCRYPTION) .contains(EventEntityFields.CONTENT, "\"algorithm\":\"$MXCRYPTO_ALGORITHM_MEGOLM\"") + .isNotNull(EventEntityFields.STATE_KEY) .findFirst() val latestPreviewableEvent = RoomSummaryEventsHelper.getLatestPreviewableEvent(realm, roomId) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/EncryptionItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/EncryptionItemFactory.kt index 4f2c8ea63a..1eb09f2e7a 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/EncryptionItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/EncryptionItemFactory.kt @@ -44,6 +44,9 @@ class EncryptionItemFactory @Inject constructor( fun create(event: TimelineEvent, highlight: Boolean, callback: TimelineEventController.Callback?): StatusTileTimelineItem? { + if (!event.root.isStateEvent()) { + return null + } val algorithm = event.root.getClearContent().toModel()?.algorithm val informationData = informationDataFactory.create(event, null) val attributes = messageItemAttributesFactory.create(null, informationData, callback) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MergedHeaderItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MergedHeaderItemFactory.kt index 35db7fe469..e7a911ceb1 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MergedHeaderItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MergedHeaderItemFactory.kt @@ -148,7 +148,7 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde var hasEncryption = false var encryptionAlgorithm: String? = null while (prevEvent != null && prevEvent.isRoomConfiguration(null)) { - if (prevEvent.root.getClearType() == EventType.STATE_ROOM_ENCRYPTION) { + if (prevEvent.root.isStateEvent() && prevEvent.root.getClearType() == EventType.STATE_ROOM_ENCRYPTION) { hasEncryption = true encryptionAlgorithm = prevEvent.root.getClearContent()?.toModel()?.algorithm } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt index e26472feb0..1a5f820831 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/NoticeEventFormatter.kt @@ -428,6 +428,9 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } private fun formatRoomEncryptionEvent(event: Event, senderName: String?): CharSequence? { + if (!event.isStateEvent()) { + return null + } val content = event.content.toModel() ?: return null return when (content.algorithm) { MXCRYPTO_ALGORITHM_MEGOLM -> diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineDisplayableEvents.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineDisplayableEvents.kt index b1b1109580..14b8c12fee 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineDisplayableEvents.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/TimelineDisplayableEvents.kt @@ -55,7 +55,7 @@ fun TimelineEvent.canBeMerged(): Boolean { } fun TimelineEvent.isRoomConfiguration(roomCreatorUserId: String?): Boolean { - return when (root.getClearType()) { + return root.isStateEvent() && when (root.getClearType()) { EventType.STATE_ROOM_GUEST_ACCESS, EventType.STATE_ROOM_HISTORY_VISIBILITY, EventType.STATE_ROOM_JOIN_RULES, From 0345ca47dddd778c4975b8defeee00c175cdaad7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 13 Oct 2020 14:35:33 +0200 Subject: [PATCH 50/55] protected --- .../main/java/im/vector/app/core/platform/VectorBaseFragment.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt b/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt index 4ce4d210b0..f221c29215 100644 --- a/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt +++ b/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt @@ -58,7 +58,7 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), HasScreenInjector { // Butterknife unbinder private var mUnBinder: Unbinder? = null - val vectorBaseActivity: VectorBaseActivity by lazy { + protected val vectorBaseActivity: VectorBaseActivity by lazy { activity as VectorBaseActivity } From ca99a52545c565b37a610498ccd9df7df9d1b94d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 13 Oct 2020 14:40:23 +0200 Subject: [PATCH 51/55] Remove dead code --- vector/src/main/AndroidManifest.xml | 2 - .../im/vector/app/core/di/ScreenComponent.kt | 4 - .../media/ImageMediaViewerActivity.kt | 256 ------------------ .../media/VideoMediaViewerActivity.kt | 115 -------- .../layout/activity_image_media_viewer.xml | 62 ----- .../layout/activity_video_media_viewer.xml | 71 ----- 6 files changed, 510 deletions(-) delete mode 100644 vector/src/main/java/im/vector/app/features/media/ImageMediaViewerActivity.kt delete mode 100644 vector/src/main/java/im/vector/app/features/media/VideoMediaViewerActivity.kt delete mode 100644 vector/src/main/res/layout/activity_image_media_viewer.xml delete mode 100644 vector/src/main/res/layout/activity_video_media_viewer.xml diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 23e483f50b..c905f83113 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -92,7 +92,6 @@ - - diff --git a/vector/src/main/java/im/vector/app/core/di/ScreenComponent.kt b/vector/src/main/java/im/vector/app/core/di/ScreenComponent.kt index 17ec00952b..fde40f9195 100644 --- a/vector/src/main/java/im/vector/app/core/di/ScreenComponent.kt +++ b/vector/src/main/java/im/vector/app/core/di/ScreenComponent.kt @@ -51,9 +51,7 @@ import im.vector.app.features.invite.VectorInviteView import im.vector.app.features.link.LinkHandlerActivity import im.vector.app.features.login.LoginActivity import im.vector.app.features.media.BigImageViewerActivity -import im.vector.app.features.media.ImageMediaViewerActivity import im.vector.app.features.media.VectorAttachmentViewerActivity -import im.vector.app.features.media.VideoMediaViewerActivity import im.vector.app.features.navigation.Navigator import im.vector.app.features.permalink.PermalinkHandlerActivity import im.vector.app.features.pin.PinLocker @@ -125,10 +123,8 @@ interface ScreenComponent { fun inject(activity: MainActivity) fun inject(activity: RoomDirectoryActivity) fun inject(activity: BugReportActivity) - fun inject(activity: ImageMediaViewerActivity) fun inject(activity: FilteredRoomsActivity) fun inject(activity: CreateRoomActivity) - fun inject(activity: VideoMediaViewerActivity) fun inject(activity: CreateDirectRoomActivity) fun inject(activity: IncomingShareActivity) fun inject(activity: SoftLogoutActivity) diff --git a/vector/src/main/java/im/vector/app/features/media/ImageMediaViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/ImageMediaViewerActivity.kt deleted file mode 100644 index fa7f397b8f..0000000000 --- a/vector/src/main/java/im/vector/app/features/media/ImageMediaViewerActivity.kt +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright 2019 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package im.vector.app.features.media - -import android.content.Context -import android.content.Intent -import android.graphics.drawable.Drawable -import android.os.Bundle -import android.view.MenuItem -import android.view.View -import android.view.ViewTreeObserver -import androidx.appcompat.widget.Toolbar -import androidx.core.net.toUri -import androidx.core.transition.addListener -import androidx.core.view.ViewCompat -import androidx.core.view.isInvisible -import androidx.core.view.isVisible -import androidx.transition.Transition -import com.bumptech.glide.load.DataSource -import com.bumptech.glide.load.engine.GlideException -import com.bumptech.glide.request.RequestListener -import com.bumptech.glide.request.target.Target -import com.github.piasy.biv.indicator.progresspie.ProgressPieIndicator -import com.github.piasy.biv.view.GlideImageViewFactory -import im.vector.app.R -import im.vector.app.core.di.ScreenComponent -import im.vector.app.core.glide.GlideApp -import im.vector.app.core.intent.getMimeTypeFromUri -import im.vector.app.core.platform.VectorBaseActivity -import im.vector.app.core.utils.shareMedia -import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.session.Session -import org.matrix.android.sdk.api.session.file.FileService -import kotlinx.android.synthetic.main.activity_image_media_viewer.* -import timber.log.Timber -import java.io.File -import javax.inject.Inject - -class ImageMediaViewerActivity : VectorBaseActivity() { - - @Inject lateinit var session: Session - @Inject lateinit var imageContentRenderer: ImageContentRenderer - - private lateinit var mediaData: ImageContentRenderer.Data - - override fun injectWith(injector: ScreenComponent) { - injector.inject(this) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(im.vector.app.R.layout.activity_image_media_viewer) - - if (intent.hasExtra(EXTRA_MEDIA_DATA)) { - mediaData = intent.getParcelableExtra(EXTRA_MEDIA_DATA)!! - } else { - finish() - } - - intent.extras?.getString(EXTRA_SHARED_TRANSITION_NAME)?.let { - ViewCompat.setTransitionName(imageTransitionView, it) - } - - if (mediaData.url.isNullOrEmpty()) { - supportFinishAfterTransition() - return - } - - configureToolbar(imageMediaViewerToolbar, mediaData) - - if (isFirstCreation() && addTransitionListener()) { - // Encrypted image - imageTransitionView.isVisible = true - imageMediaViewerImageView.isVisible = false - encryptedImageView.isVisible = false - // Postpone transaction a bit until thumbnail is loaded - supportPostponeEnterTransition() - - // We are not passing the exact same image that in the - imageContentRenderer.renderFitTarget(mediaData, ImageContentRenderer.Mode.THUMBNAIL, imageTransitionView) { - // Proceed with transaction - scheduleStartPostponedTransition(imageTransitionView) - } - } else { - imageTransitionView.isVisible = false - - if (mediaData.elementToDecrypt != null) { - // Encrypted image - imageMediaViewerImageView.isVisible = false - encryptedImageView.isVisible = true - - GlideApp - .with(this) - .load(mediaData) - .dontAnimate() - .into(encryptedImageView) - } else { - // Clear image - imageMediaViewerImageView.isVisible = true - encryptedImageView.isVisible = false - - imageMediaViewerImageView.setImageViewFactory(GlideImageViewFactory()) - imageMediaViewerImageView.setProgressIndicator(ProgressPieIndicator()) - imageContentRenderer.render(mediaData, imageMediaViewerImageView) - } - } - } - - override fun getMenuRes() = R.menu.vector_media_viewer - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - R.id.mediaViewerShareAction -> { - onShareActionClicked() - return true - } - } - return super.onOptionsItemSelected(item) - } - - private fun onShareActionClicked() { - session.fileService().downloadFile( - downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE, - id = mediaData.eventId, - fileName = mediaData.filename, - mimeType = mediaData.mimeType, - url = mediaData.url, - elementToDecrypt = mediaData.elementToDecrypt, - callback = object : MatrixCallback { - override fun onSuccess(data: File) { - shareMedia(this@ImageMediaViewerActivity, data, getMimeTypeFromUri(this@ImageMediaViewerActivity, data.toUri())) - } - } - ) - } - - private fun configureToolbar(toolbar: Toolbar, mediaData: ImageContentRenderer.Data) { - setSupportActionBar(toolbar) - supportActionBar?.apply { - title = mediaData.filename - setHomeButtonEnabled(true) - setDisplayHomeAsUpEnabled(true) - } - } - - override fun onBackPressed() { - // show again for exit animation - imageTransitionView.isVisible = true - super.onBackPressed() - } - - private fun scheduleStartPostponedTransition(sharedElement: View) { - sharedElement.viewTreeObserver.addOnPreDrawListener( - object : ViewTreeObserver.OnPreDrawListener { - override fun onPreDraw(): Boolean { - sharedElement.viewTreeObserver.removeOnPreDrawListener(this) - supportStartPostponedEnterTransition() - return true - } - }) - } - - /** - * Try and add a [Transition.TransitionListener] to the entering shared element - * [Transition]. We do this so that we can load the full-size image after the transition - * has completed. - * - * @return true if we were successful in adding a listener to the enter transition - */ - private fun addTransitionListener(): Boolean { - val transition = window.sharedElementEnterTransition - - if (transition != null) { - // There is an entering shared element transition so add a listener to it - transition.addListener( - onEnd = { - if (mediaData.elementToDecrypt != null) { - // Encrypted image - GlideApp - .with(this) - .load(mediaData) - .dontAnimate() - .listener(object : RequestListener { - override fun onLoadFailed(e: GlideException?, - model: Any?, - target: Target?, - isFirstResource: Boolean): Boolean { - // TODO ? - Timber.e("TRANSITION onLoadFailed") - imageMediaViewerImageView.isVisible = false - encryptedImageView.isVisible = true - return false - } - - override fun onResourceReady(resource: Drawable?, - model: Any?, - target: Target?, - dataSource: DataSource?, - isFirstResource: Boolean): Boolean { - Timber.e("TRANSITION onResourceReady") - imageTransitionView.isInvisible = true - imageMediaViewerImageView.isVisible = false - encryptedImageView.isVisible = true - return false - } - }) - .into(encryptedImageView) - } else { - imageTransitionView.isInvisible = true - // Clear image - imageMediaViewerImageView.isVisible = true - encryptedImageView.isVisible = false - - imageMediaViewerImageView.setImageViewFactory(GlideImageViewFactory()) - imageMediaViewerImageView.setProgressIndicator(ProgressPieIndicator()) - imageContentRenderer.render(mediaData, imageMediaViewerImageView) - } - }, - onCancel = { - // Something to do? - } - ) - return true - } - - // If we reach here then we have not added a listener - return false - } - - companion object { - - private const val EXTRA_MEDIA_DATA = "EXTRA_MEDIA_DATA" - private const val EXTRA_SHARED_TRANSITION_NAME = "EXTRA_SHARED_TRANSITION_NAME" - - fun newIntent(context: Context, mediaData: ImageContentRenderer.Data, shareTransitionName: String?): Intent { - return Intent(context, ImageMediaViewerActivity::class.java).apply { - putExtra(EXTRA_MEDIA_DATA, mediaData) - putExtra(EXTRA_SHARED_TRANSITION_NAME, shareTransitionName) - } - } - } -} diff --git a/vector/src/main/java/im/vector/app/features/media/VideoMediaViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/VideoMediaViewerActivity.kt deleted file mode 100644 index 5bdda9b0be..0000000000 --- a/vector/src/main/java/im/vector/app/features/media/VideoMediaViewerActivity.kt +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Copyright 2019 New Vector Ltd - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package im.vector.app.features.media - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import android.view.MenuItem -import androidx.appcompat.widget.Toolbar -import androidx.core.net.toUri -import im.vector.app.R -import im.vector.app.core.di.ScreenComponent -import im.vector.app.core.intent.getMimeTypeFromUri -import im.vector.app.core.platform.VectorBaseActivity -import im.vector.app.core.utils.shareMedia -import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.session.Session -import org.matrix.android.sdk.api.session.file.FileService -import kotlinx.android.synthetic.main.activity_video_media_viewer.* -import java.io.File -import javax.inject.Inject - -class VideoMediaViewerActivity : VectorBaseActivity() { - - @Inject lateinit var session: Session - @Inject lateinit var imageContentRenderer: ImageContentRenderer - @Inject lateinit var videoContentRenderer: VideoContentRenderer - - private lateinit var mediaData: VideoContentRenderer.Data - - override fun injectWith(injector: ScreenComponent) { - injector.inject(this) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(im.vector.app.R.layout.activity_video_media_viewer) - - if (intent.hasExtra(EXTRA_MEDIA_DATA)) { - mediaData = intent.getParcelableExtra(EXTRA_MEDIA_DATA)!! - - configureToolbar(videoMediaViewerToolbar, mediaData) - imageContentRenderer.render(mediaData.thumbnailMediaData, ImageContentRenderer.Mode.FULL_SIZE, videoMediaViewerThumbnailView) - videoContentRenderer.render(mediaData, - videoMediaViewerThumbnailView, - videoMediaViewerLoading, - videoMediaViewerVideoView, - videoMediaViewerErrorView) - } else { - finish() - } - } - - override fun getMenuRes() = R.menu.vector_media_viewer - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - R.id.mediaViewerShareAction -> { - onShareActionClicked() - return true - } - } - return super.onOptionsItemSelected(item) - } - - private fun onShareActionClicked() { - session.fileService().downloadFile( - downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE, - id = mediaData.eventId, - fileName = mediaData.filename, - mimeType = mediaData.mimeType, - url = mediaData.url, - elementToDecrypt = mediaData.elementToDecrypt, - callback = object : MatrixCallback { - override fun onSuccess(data: File) { - shareMedia(this@VideoMediaViewerActivity, data, getMimeTypeFromUri(this@VideoMediaViewerActivity, data.toUri())) - } - } - ) - } - - private fun configureToolbar(toolbar: Toolbar, mediaData: VideoContentRenderer.Data) { - setSupportActionBar(toolbar) - supportActionBar?.apply { - title = mediaData.filename - setHomeButtonEnabled(true) - setDisplayHomeAsUpEnabled(true) - } - } - - companion object { - - private const val EXTRA_MEDIA_DATA = "EXTRA_MEDIA_DATA" - - fun newIntent(context: Context, mediaData: VideoContentRenderer.Data): Intent { - return Intent(context, VideoMediaViewerActivity::class.java).apply { - putExtra(EXTRA_MEDIA_DATA, mediaData) - } - } - } -} diff --git a/vector/src/main/res/layout/activity_image_media_viewer.xml b/vector/src/main/res/layout/activity_image_media_viewer.xml deleted file mode 100644 index cfcfa6702b..0000000000 --- a/vector/src/main/res/layout/activity_image_media_viewer.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/vector/src/main/res/layout/activity_video_media_viewer.xml b/vector/src/main/res/layout/activity_video_media_viewer.xml deleted file mode 100644 index c68577bcd5..0000000000 --- a/vector/src/main/res/layout/activity_video_media_viewer.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file From ff56414695f9a4c4988b32eddd12d58fc2f28c28 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 13 Oct 2020 14:44:04 +0200 Subject: [PATCH 52/55] Cleanup and log onResume and onPause for VectorAttachmentViewerActivity --- .../vector/app/core/platform/VectorBaseActivity.kt | 8 ++++---- .../platform/VectorBaseBottomSheetDialogFragment.kt | 2 +- .../vector/app/core/platform/VectorBaseFragment.kt | 6 +++--- .../features/media/VectorAttachmentViewerActivity.kt | 12 +++++++++++- .../features/settings/VectorSettingsBaseFragment.kt | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt b/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt index cdba5b2ef2..79021902c4 100644 --- a/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt +++ b/vector/src/main/java/im/vector/app/core/platform/VectorBaseActivity.kt @@ -177,7 +177,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { } override fun onCreate(savedInstanceState: Bundle?) { - Timber.i("onCreate Activity ${this.javaClass.simpleName}") + Timber.i("onCreate Activity ${javaClass.simpleName}") val vectorComponent = getVectorComponent() screenComponent = DaggerScreenComponent.factory().create(vectorComponent, this) val timeForInjection = measureTimeMillis { @@ -305,7 +305,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { override fun onDestroy() { super.onDestroy() - Timber.i("onDestroy Activity ${this.javaClass.simpleName}") + Timber.i("onDestroy Activity ${javaClass.simpleName}") unBinder?.unbind() unBinder = null @@ -333,7 +333,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { override fun onResume() { super.onResume() - Timber.i("onResume Activity ${this.javaClass.simpleName}") + Timber.i("onResume Activity ${javaClass.simpleName}") configurationViewModel.onActivityResumed() @@ -373,7 +373,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { override fun onPause() { super.onPause() - Timber.i("onPause Activity ${this.javaClass.simpleName}") + Timber.i("onPause Activity ${javaClass.simpleName}") rageShake.stop() diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt index 9f4924ebb2..4a251de1a3 100644 --- a/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/app/core/platform/VectorBaseBottomSheetDialogFragment.kt @@ -141,7 +141,7 @@ abstract class VectorBaseBottomSheetDialogFragment : BottomSheetDialogFragment() override fun onResume() { super.onResume() - Timber.i("onResume BottomSheet ${this.javaClass.simpleName}") + Timber.i("onResume BottomSheet ${javaClass.simpleName}") } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt b/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt index f221c29215..179e21a6d8 100644 --- a/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt +++ b/vector/src/main/java/im/vector/app/core/platform/VectorBaseFragment.kt @@ -112,7 +112,7 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), HasScreenInjector { } final override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - Timber.i("onCreateView Fragment ${this.javaClass.simpleName}") + Timber.i("onCreateView Fragment ${javaClass.simpleName}") return inflater.inflate(getLayoutResId(), container, false) } @@ -122,7 +122,7 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), HasScreenInjector { @CallSuper override fun onResume() { super.onResume() - Timber.i("onResume Fragment ${this.javaClass.simpleName}") + Timber.i("onResume Fragment ${javaClass.simpleName}") } @CallSuper @@ -142,7 +142,7 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), HasScreenInjector { @CallSuper override fun onDestroyView() { super.onDestroyView() - Timber.i("onDestroyView Fragment ${this.javaClass.simpleName}") + Timber.i("onDestroyView Fragment ${javaClass.simpleName}") mUnBinder?.unbind() mUnBinder = null uiDisposables.clear() diff --git a/vector/src/main/java/im/vector/app/features/media/VectorAttachmentViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/VectorAttachmentViewerActivity.kt index 74f4c7148f..9302be502d 100644 --- a/vector/src/main/java/im/vector/app/features/media/VectorAttachmentViewerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/media/VectorAttachmentViewerActivity.kt @@ -74,7 +74,7 @@ class VectorAttachmentViewerActivity : AttachmentViewerActivity(), BaseAttachmen override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - Timber.i("onCreate Activity ${this.javaClass.simpleName}") + Timber.i("onCreate Activity ${javaClass.simpleName}") val vectorComponent = getVectorComponent() screenComponent = DaggerScreenComponent.factory().create(vectorComponent, this) val timeForInjection = measureTimeMillis { @@ -154,6 +154,16 @@ class VectorAttachmentViewerActivity : AttachmentViewerActivity(), BaseAttachmen window.navigationBarColor = ContextCompat.getColor(this, R.color.black_alpha) } + override fun onResume() { + super.onResume() + Timber.i("onResume Activity ${javaClass.simpleName}") + } + + override fun onPause() { + super.onPause() + Timber.i("onPause Activity ${javaClass.simpleName}") + } + private fun getOtherThemes() = ActivityOtherThemes.VectorAttachmentsPreview override fun shouldAnimateDismiss(): Boolean { diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsBaseFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsBaseFragment.kt index 512545afe2..add6fba38c 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsBaseFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsBaseFragment.kt @@ -70,7 +70,7 @@ abstract class VectorSettingsBaseFragment : PreferenceFragmentCompat(), HasScree override fun onResume() { super.onResume() - Timber.i("onResume Fragment ${this.javaClass.simpleName}") + Timber.i("onResume Fragment ${javaClass.simpleName}") vectorActivity.supportActionBar?.setTitle(titleRes) // find the view from parent activity mLoadingView = vectorActivity.findViewById(R.id.vector_settings_spinner_views) From ede5bb0e90b4fad3fd6b72eb0baa5f610a639f3d Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 13 Oct 2020 14:57:45 +0200 Subject: [PATCH 53/55] Format files, in particular align `->` --- .idea/codeStyles/Project.xml | 11 +-- .../matrix/android/sdk/api/MatrixCallback.kt | 2 +- .../android/sdk/api/failure/MatrixError.kt | 36 +++++++ .../android/sdk/api/pushrules/Action.kt | 14 +-- .../android/sdk/api/raw/RawCacheStrategy.kt | 6 +- .../api/session/call/CallSignalingService.kt | 2 +- .../android/sdk/api/session/call/MxCall.kt | 1 + .../sdk/api/session/crypto/CryptoService.kt | 8 +- .../crypto/keysbackup/KeysBackupService.kt | 2 +- .../crypto/keysbackup/KeysBackupState.kt | 8 ++ .../keyshare/GossipingRequestListener.kt | 2 +- .../crypto/verification/VerificationMethod.kt | 2 + .../sdk/api/session/events/model/Event.kt | 1 + .../api/session/events/model/RelationType.kt | 3 + .../events/model/UnsignedRelationInfo.kt | 2 +- .../IntegrationManagerConfig.kt | 2 + .../room/members/ChangeMembershipState.kt | 2 +- .../session/room/model/PollSummaryContent.kt | 2 +- .../room/model/RoomGuestAccessContent.kt | 1 + .../room/model/RoomHistoryVisibility.kt | 3 + .../room/model/message/MessageAudioContent.kt | 4 +- .../room/model/message/MessageImageContent.kt | 4 +- .../model/message/MessageStickerContent.kt | 4 +- .../session/room/model/message/MessageType.kt | 1 + .../room/model/message/MessageVideoContent.kt | 4 +- .../sdk/api/session/room/send/SendState.kt | 7 ++ .../sdk/api/session/room/timeline/Timeline.kt | 1 + .../session/room/timeline/TimelineService.kt | 2 +- .../sdk/api/session/sync/FilterService.kt | 1 + .../matrix/android/sdk/api/util/Optional.kt | 2 +- .../sdk/internal/crypto/CryptoConstants.kt | 1 + .../internal/crypto/GossipingRequestState.kt | 3 +- .../crypto/MXMegolmExportEncryption.kt | 1 + .../crypto/OutgoingGossipingRequestManager.kt | 4 +- .../crypto/algorithms/IMXDecrypting.kt | 2 +- .../algorithms/megolm/MXMegolmDecryption.kt | 2 +- .../crypto/crosssigning/ShieldTrustUpdater.kt | 2 +- .../model/OlmInboundGroupSessionWrapper2.kt | 1 + .../model/event/RoomKeyWithHeldContent.kt | 4 + .../crypto/store/SavedKeyBackupKeyInfo.kt | 2 +- .../crypto/store/db/model/OlmSessionEntity.kt | 8 +- ...tgoingSASDefaultVerificationTransaction.kt | 6 +- .../DefaultVerificationTransaction.kt | 2 +- .../SASDefaultVerificationTransaction.kt | 4 + .../VerificationTransportRoomMessage.kt | 4 +- .../sdk/internal/database/RealmKeysUtils.kt | 2 +- .../sdk/internal/database/RealmQueryLatch.kt | 4 +- .../internal/database/model/ChunkEntity.kt | 4 +- .../sdk/internal/database/model/SyncEntity.kt | 2 +- .../EventAnnotationsSummaryEntityQuery.kt | 1 + .../riot/HomeServerConnectionConfig.java | 2 +- .../legacy/riot/WellKnownManagerConfig.kt | 2 +- .../internal/network/UnitConverterFactory.kt | 18 ++-- .../sdk/internal/raw/DefaultGetUrlTask.kt | 4 +- .../session/content/ImageCompressor.kt | 12 +-- .../session/content/UploadContentWorker.kt | 2 +- .../session/profile/AddThreePidTask.kt | 2 +- .../membership/RoomDisplayNameResolver.kt | 6 +- .../session/room/send/DefaultSendService.kt | 2 +- .../room/send/LocalEchoEventFactory.kt | 2 +- .../session/room/send/MarkdownParser.kt | 6 +- .../session/room/timeline/DefaultTimeline.kt | 8 +- .../room/timeline/TimelineEventDecryptor.kt | 1 + .../room/typing/DefaultTypingService.kt | 1 + .../session/sync/ReadReceiptHandler.kt | 6 +- .../internal/session/sync/RoomTagHandler.kt | 2 +- .../widgets/DefaultWidgetPostAPIMediator.kt | 1 + .../im/vector/app/EmojiCompatFontProvider.kt | 2 +- .../java/im/vector/app/EmojiCompatWrapper.kt | 2 +- .../dialogs/UnrecognizedCertificateDialog.kt | 12 +-- .../app/core/epoxy/VectorEpoxyHolder.kt | 2 +- .../bottomsheet/BottomSheetActionItem.kt | 7 ++ .../BottomSheetMessagePreviewItem.kt | 5 + .../BottomSheetQuickReactionsItem.kt | 3 + .../bottomsheet/BottomSheetSendStateItem.kt | 2 + .../epoxy/profiles/BaseProfileMatrixItem.kt | 1 + .../core/epoxy/profiles/ProfileActionItem.kt | 1 + .../core/epoxy/profiles/ProfileSectionItem.kt | 2 +- .../vector/app/core/error/ErrorFormatter.kt | 24 ++--- .../im/vector/app/core/files/FileSaver.kt | 18 ++-- .../app/core/glide/VectorGlideModelLoader.kt | 2 +- .../app/core/intent/ExternalIntentAnalyser.kt | 2 +- .../vector/app/core/linkify/VectorLinkify.kt | 2 +- .../app/core/platform/CheckableFrameLayout.kt | 6 +- .../VectorBaseBottomSheetDialogFragment.kt | 2 +- .../app/core/resources/DrawableProvider.kt | 1 + .../app/core/ui/views/PasswordStrengthBar.kt | 4 + .../preview/AttachmentPreviewItems.kt | 2 + .../preview/AttachmentsPreviewAction.kt | 4 +- .../preview/AttachmentsPreviewFragment.kt | 2 +- .../autocomplete/RecyclerViewPresenter.kt | 1 + .../command/AutocompleteCommandItem.kt | 3 + .../command/CommandAutocompletePolicy.kt | 2 +- .../app/features/call/SdpObserverAdapter.kt | 2 +- .../call/WebRtcPeerConnectionManager.kt | 2 +- .../app/features/command/ParsedCommand.kt | 2 +- .../contactsbook/ContactsBookViewModel.kt | 2 +- .../createdirect/CreateDirectRoomActivity.kt | 4 +- .../createdirect/CreateDirectRoomViewModel.kt | 2 +- .../createdirect/CreateDirectRoomViewState.kt | 2 +- .../KeysBackupRestoreSuccessFragment.kt | 1 + .../recover/BootstrapSharedViewModel.kt | 4 +- .../crypto/recover/BootstrapViewEvents.kt | 4 +- .../VerificationConclusionController.kt | 4 +- .../BottomSheetVerificationActionItem.kt | 4 + .../request/VerificationRequestController.kt | 4 +- .../app/features/home/LoadingFragment.kt | 2 +- .../app/features/home/RoomListDisplayMode.kt | 10 +- .../home/room/detail/RoomDetailAction.kt | 8 +- .../home/room/detail/RoomDetailFragment.kt | 4 +- .../home/room/detail/RoomDetailViewEvents.kt | 15 +-- .../home/room/detail/RoomDetailViewModel.kt | 98 +++++++++---------- .../home/room/detail/RoomDetailViewState.kt | 1 + .../room/detail/composer/TextComposerView.kt | 7 ++ .../home/room/detail/search/SearchFragment.kt | 2 +- .../room/detail/search/SearchViewModel.kt | 4 +- .../action/MessageSharedActionViewModel.kt | 2 +- .../timeline/factory/TimelineItemFactory.kt | 16 +-- .../format/DisplayableEventFormatter.kt | 10 +- .../timeline/format/NoticeEventFormatter.kt | 2 +- .../timeline/item/AbsBaseMessageItem.kt | 2 + .../detail/timeline/item/BaseEventItem.kt | 1 + .../timeline/item/MessageBlockCodeItem.kt | 1 + .../timeline/item/MessageImageVideoItem.kt | 5 + .../timeline/item/MessageInformationData.kt | 4 +- .../detail/timeline/item/MessageTextItem.kt | 3 + .../reactions/ReactionInfoSimpleItem.kt | 3 + .../home/room/detail/widget/RoomWidgetItem.kt | 1 + .../room/list/RoomListDisplayModeFilter.kt | 4 +- .../home/room/list/RoomListFragment.kt | 18 ++-- .../home/room/list/RoomListViewModel.kt | 8 +- .../home/room/list/RoomListViewState.kt | 4 +- .../home/room/list/RoomSummaryItem.kt | 2 + .../invite/InviteUsersToRoomActivity.kt | 2 +- .../invite/InviteUsersToRoomViewEvents.kt | 2 +- .../vector/app/features/login/LoginAction.kt | 1 + .../im/vector/app/features/login/SignMode.kt | 3 + .../features/media/ImageContentRenderer.kt | 5 +- .../features/notifications/NotifiableEvent.kt | 3 + .../NotificationDrawerManager.kt | 4 +- .../notifications/RoomEventGroupInfo.kt | 1 + .../app/features/roomdirectory/JoinState.kt | 1 + .../features/roomprofile/RoomProfileAction.kt | 4 +- .../roomprofile/RoomProfileViewModel.kt | 8 +- .../banned/RoomBannedMemberListFragment.kt | 2 +- .../settings/RoomSettingsViewModel.kt | 4 +- .../uploads/RoomUploadsFragment.kt | 4 +- .../uploads/media/UploadsVideoItem.kt | 6 +- .../settings/VectorSettingsActivity.kt | 4 +- ...ttingsNotificationsTroubleshootFragment.kt | 14 +-- .../VectorSettingsSecurityPrivacyFragment.kt | 2 +- .../threepids/ThreePidsSettingsController.kt | 4 +- .../threepids/ThreePidsSettingsFragment.kt | 2 +- .../threepids/ThreePidsSettingsViewModel.kt | 12 +-- ...ficationTroubleshootRecyclerViewAdapter.kt | 12 ++- .../troubleshoot/TestAccountSettings.kt | 16 +-- .../features/share/IncomingShareFragment.kt | 4 +- .../vector/app/features/share/SharedData.kt | 6 +- .../app/features/widgets/WidgetViewEvents.kt | 2 +- .../RoomWidgetPermissionActions.kt | 6 +- .../SignOutBottomSheetDialogFragment.kt | 4 +- 161 files changed, 477 insertions(+), 325 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 89a7c466fd..b3719669fd 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -4,16 +4,7 @@ -