From 3442ebc1c32a85d5b055a235b78d8d18d70797ec Mon Sep 17 00:00:00 2001 From: dkanada Date: Wed, 26 Aug 2020 12:47:04 +0900 Subject: [PATCH 001/278] improve gallery intent for certain apps --- CHANGES.md | 1 + .../src/main/java/im/vector/lib/multipicker/ImagePicker.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index db98189499..d2026678e7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -23,6 +23,7 @@ Bugfix 🐛: - Can't handle ongoing call events in background (#1992) - Crash / Attachment viewer: Cannot draw a recycled Bitmap #2034 - Login with Matrix-Id | Autodiscovery fails if identity server is invalid and Homeserver ok (#2027) + - Improve support for image selection with intent changes (#1376) Translations đŸ—Ŗ: - diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt index 39bd0c27cc..ec87e027f9 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt @@ -82,7 +82,7 @@ class ImagePicker(override val requestCode: Int) : Picker( } override fun createIntent(): Intent { - return Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + return Intent(Intent.ACTION_GET_CONTENT).apply { addCategory(Intent.CATEGORY_OPENABLE) putExtra(Intent.EXTRA_ALLOW_MULTIPLE, !single) type = "image/*" From ebc1725f5b9848e4c633427ae91b09d8a6206439 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 23 Sep 2020 02:12:04 +0000 Subject: [PATCH 002/278] 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 003/278] 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 004/278] 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 005/278] 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 006/278] 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 007/278] 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 008/278] 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 009/278] 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 62f620f79be278397ebaad25b0d3007e5f460e17 Mon Sep 17 00:00:00 2001 From: Cristian Greco Date: Wed, 23 Sep 2020 20:21:43 +0200 Subject: [PATCH 010/278] Add workflow for Update Gradle Wrapper Action. This action keeps Gradle Wrapper up-to-date to the latest release. It will run every day at midnight (UTC) and create a pull request if a new Gradle version is available. The updated Wrapper script is validated (with checksum verification) during the update process, and the Wrapper is setup so that it will validate the Gradle binary itself on first run of the new version. Signed-off-by: Cristian Greco --- .github/workflows/update-gradle-wrapper.yml | 18 ++++++++++++++++++ CHANGES.md | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/update-gradle-wrapper.yml diff --git a/.github/workflows/update-gradle-wrapper.yml b/.github/workflows/update-gradle-wrapper.yml new file mode 100644 index 0000000000..4a786a9339 --- /dev/null +++ b/.github/workflows/update-gradle-wrapper.yml @@ -0,0 +1,18 @@ +name: Update Gradle Wrapper + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + update-gradle-wrapper: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + + - name: Update Gradle Wrapper + uses: gradle-update/update-gradle-wrapper-action@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + target-branch: develop diff --git a/CHANGES.md b/CHANGES.md index a4d1976a04..294747619c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -27,7 +27,7 @@ SDK API changes ⚠ī¸: - Rename `tryThis` to `tryOrNull` Build 🧱: - - + - Update Gradle Wrapper Action Other changes: - Add an advanced action to reset an account data entry From 6958d114a9299e32cd325367701d2a0af06d9500 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 25 Sep 2020 14:09:25 +0200 Subject: [PATCH 011/278] Version++ --- CHANGES.md | 24 ++++++++++++++++++++++++ vector/build.gradle | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 6837fa8313..aa319bf0c9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,27 @@ +Changes in Element 1.0.9 (2020-XX-XX) +=================================================== + +Features ✨: + - + +Improvements 🙌: + - + +Bugfix 🐛: + - + +Translations đŸ—Ŗ: + - + +SDK API changes ⚠ī¸: + - + +Build 🧱: + - + +Other changes: + - + Changes in Element 1.0.8 (2020-09-25) =================================================== diff --git a/vector/build.gradle b/vector/build.gradle index ef0124dcc7..0c7985b45d 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -17,7 +17,7 @@ androidExtensions { // Note: 2 digits max for each value ext.versionMajor = 1 ext.versionMinor = 0 -ext.versionPatch = 8 +ext.versionPatch = 9 static def getGitTimestamp() { def cmd = 'git show -s --format=%ct' From 21f1848499536eac69c62de02a179c03d258cefb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sat, 26 Sep 2020 11:30:08 +0200 Subject: [PATCH 012/278] Fix Splash screen layout, especially on small screens --- CHANGES.md | 2 +- .../main/res/layout/fragment_login_splash.xml | 285 ++++++++++-------- vector/src/main/res/values/styles_login.xml | 7 - 3 files changed, 165 insertions(+), 129 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index aa319bf0c9..813450fd0c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,7 @@ Improvements 🙌: - Bugfix 🐛: - - + - Fix Splash layout on small screens Translations đŸ—Ŗ: - diff --git a/vector/src/main/res/layout/fragment_login_splash.xml b/vector/src/main/res/layout/fragment_login_splash.xml index 2a43ece5ec..62e61a4219 100644 --- a/vector/src/main/res/layout/fragment_login_splash.xml +++ b/vector/src/main/res/layout/fragment_login_splash.xml @@ -3,144 +3,187 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:background="?riotx_background"> + android:background="?riotx_background" + android:paddingStart="36dp" + android:paddingTop="@dimen/layout_vertical_margin" + android:paddingEnd="36dp" + android:paddingBottom="@dimen/layout_vertical_margin"> - + + + + + app:layout_constraintTop_toBottomOf="@+id/loginSplashSpace1"> - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + diff --git a/vector/src/main/res/values/styles_login.xml b/vector/src/main/res/values/styles_login.xml index 6dab3fac51..8cba34daf3 100644 --- a/vector/src/main/res/values/styles_login.xml +++ b/vector/src/main/res/values/styles_login.xml @@ -1,13 +1,6 @@ - - From 1ed0ef094839deee12fff57c4fba407d2fb640ac Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sat, 26 Sep 2020 12:02:22 +0200 Subject: [PATCH 013/278] Disable animation on title --- .../main/java/im/vector/app/features/login/LoginActivity.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt index 2a692c2d53..0eb4ef3e32 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt @@ -146,8 +146,10 @@ open class LoginActivity : VectorBaseActivity(), ToolbarConfigurable, UnlockedAc LoginServerSelectionFragment::class.java, option = { ft -> findViewById(R.id.loginSplashLogo)?.let { ft.addSharedElement(it, ViewCompat.getTransitionName(it) ?: "") } - findViewById(R.id.loginSplashTitle)?.let { ft.addSharedElement(it, ViewCompat.getTransitionName(it) ?: "") } - findViewById(R.id.loginSplashSubmit)?.let { ft.addSharedElement(it, ViewCompat.getTransitionName(it) ?: "") } + // Disable transition of text + // findViewById(R.id.loginSplashTitle)?.let { ft.addSharedElement(it, ViewCompat.getTransitionName(it) ?: "") } + // No transition here now actually + // findViewById(R.id.loginSplashSubmit)?.let { ft.addSharedElement(it, ViewCompat.getTransitionName(it) ?: "") } // TODO Disabled because it provokes a flickering // ft.setCustomAnimations(enterAnim, exitAnim, popEnterAnim, popExitAnim) }) From ae84a0bbe96e47a7f2bb8f87d9d60a34651060ae Mon Sep 17 00:00:00 2001 From: linsui Date: Fri, 25 Sep 2020 04:48:20 +0000 Subject: [PATCH 014/278] 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 015/278] 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 016/278] 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 017/278] 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 77f06b962d85e88ce00ca61060d9209353a9b3be Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 28 Sep 2020 16:57:36 +0200 Subject: [PATCH 018/278] PIN code: request PIN code if phone has been locked --- CHANGES.md | 2 +- .../java/im/vector/app/VectorApplication.kt | 18 ++++++++++++++++++ .../im/vector/app/features/pin/PinLocker.kt | 5 +++++ 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 813450fd0c..25da8f0108 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,7 +5,7 @@ Features ✨: - Improvements 🙌: - - + - PIN code: request PIN code if phone has been locked Bugfix 🐛: - Fix Splash layout on small screens diff --git a/vector/src/main/java/im/vector/app/VectorApplication.kt b/vector/src/main/java/im/vector/app/VectorApplication.kt index 4b0ef66459..4f89763cda 100644 --- a/vector/src/main/java/im/vector/app/VectorApplication.kt +++ b/vector/src/main/java/im/vector/app/VectorApplication.kt @@ -17,7 +17,10 @@ package im.vector.app import android.app.Application +import android.content.BroadcastReceiver import android.content.Context +import android.content.Intent +import android.content.IntentFilter import android.content.res.Configuration import android.os.Handler import android.os.HandlerThread @@ -92,6 +95,15 @@ class VectorApplication : // font thread handler private var fontThreadHandler: Handler? = null + private val powerKeyReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent) { + if (intent.action == Intent.ACTION_SCREEN_OFF + && vectorPreferences.useFlagPinCode()) { + pinLocker.screenIsOff() + } + } + } + override fun onCreate() { enableStrictModeIfNeeded() super.onCreate() @@ -163,6 +175,12 @@ class VectorApplication : ProcessLifecycleOwner.get().lifecycle.addObserver(pinLocker) // This should be done as early as possible // initKnownEmojiHashSet(appContext) + + applicationContext.registerReceiver(powerKeyReceiver, IntentFilter().apply { + // Looks like i cannot receive OFF, if i don't have both ON and OFF + addAction(Intent.ACTION_SCREEN_OFF) + addAction(Intent.ACTION_SCREEN_ON) + }) } private fun enableStrictModeIfNeeded() { diff --git a/vector/src/main/java/im/vector/app/features/pin/PinLocker.kt b/vector/src/main/java/im/vector/app/features/pin/PinLocker.kt index 3fc4152ee6..adc618d82e 100644 --- a/vector/src/main/java/im/vector/app/features/pin/PinLocker.kt +++ b/vector/src/main/java/im/vector/app/features/pin/PinLocker.kt @@ -81,6 +81,11 @@ class PinLocker @Inject constructor( computeState() } + fun screenIsOff() { + shouldBeLocked = true + computeState() + } + @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) fun entersForeground() { val timeElapsedSinceBackground = SystemClock.elapsedRealtime() - entersBackgroundTs From 7bf510880f026d4f4974dea02cda5a8b1261f607 Mon Sep 17 00:00:00 2001 From: OLIVIER Thomas Date: Sun, 27 Sep 2020 09:36:13 +0000 Subject: [PATCH 019/278] 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 020/278] 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 577f0e0d9a59f4320614961066645e1fa260638b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 29 Sep 2020 11:38:19 +0200 Subject: [PATCH 021/278] Create a script to help getting public information form any homeserver --- CHANGES.md | 2 +- tools/hs_diag.py | 69 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100755 tools/hs_diag.py diff --git a/CHANGES.md b/CHANGES.md index 813450fd0c..e5a46891d7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,7 +20,7 @@ Build 🧱: - Other changes: - - + - Create a script to help getting public information form any homeserver Changes in Element 1.0.8 (2020-09-25) =================================================== diff --git a/tools/hs_diag.py b/tools/hs_diag.py new file mode 100755 index 0000000000..ded10a562d --- /dev/null +++ b/tools/hs_diag.py @@ -0,0 +1,69 @@ +#!/usr/bin/env python3 + +# Copyright (c) 2020 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. + +import argparse +import os + +### Arguments + +parser = argparse.ArgumentParser(description='Get some information about a homeserver.') +parser.add_argument('-s', + '--homeserver', + required=True, + help="homeserver URL") +parser.add_argument('-v', + '--verbose', + help="increase output verbosity.", + action="store_true") + +args = parser.parse_args() + +if args.verbose: + print("Argument:") + print(args) + +baseUrl = args.homeserver + +if not baseUrl.startswith("http"): + baseUrl = "https://" + baseUrl + +if not baseUrl.endswith("/"): + baseUrl = baseUrl + "/" + +print("Get information from " + baseUrl) + +items = [ + # [Title, URL, True for GET request and False for POST request] + ["Well-known", baseUrl + ".well-known/matrix/client", True] + , ["Version", baseUrl + "_matrix/client/versions", True] + , ["Login flow", baseUrl + "_matrix/client/r0/login", True] + , ["Registration flow", baseUrl + "_matrix/client/r0/register", False] + # Useless , ["Username availability", baseUrl + "_matrix/client/r0/register/available?username=benoit", True] + # Useless , ["Public rooms", baseUrl + "_matrix/client/r0/publicRooms?limit=1", True] + # Useless , ["Profile", baseUrl + "_matrix/client/r0/profile/@benoit.marty:matrix.org", True] + # Need token , ["Capability", baseUrl + "_matrix/client/r0/capabilities", True] + # Need token , ["Media config", baseUrl + "_matrix/media/r0/config", True] + # Need token , ["Turn", baseUrl + "_matrix/client/r0/voip/turnServer", True] +] + +for item in items: + print("====================================================================================================") + print("# " + item[0] + " (" + item[1] + ")") + print("====================================================================================================") + if item[2]: + os.system("curl -s -X GET '" + item[1] + "' | python -m json.tool") + else: + os.system("curl -s -X POST --data $'{}' '" + item[1] + "' | python -m json.tool") From bc2c345e215dfeca0725db923c6e23fc9b9e920a Mon Sep 17 00:00:00 2001 From: Valere Date: Fri, 25 Sep 2020 08:58:48 +0200 Subject: [PATCH 022/278] First automated UI tests --- .../crypto/OutgoingGossipingRequestManager.kt | 2 +- .../crypto/store/db/RealmCryptoStore.kt | 4 + vector/build.gradle | 27 +- .../java/im/vector/app/ExpressoExt.kt | 205 +++++++++++++ .../java/im/vector/app/RegistrationTest.kt | 120 ++++++++ .../java/im/vector/app/SleepViewAction.java | 49 ++++ .../java/im/vector/app/TestMatrixCallback.kt | 48 ++++ .../im/vector/app/VerificationTestBase.kt | 225 +++++++++++++++ .../app/VerifySessionInteractiveTest.kt | 272 ++++++++++++++++++ .../vector/app/VerifySessionPassphraseTest.kt | 161 +++++++++++ .../app/features/popup/PopupAlertManager.kt | 8 +- 11 files changed, 1114 insertions(+), 7 deletions(-) create mode 100644 vector/src/androidTest/java/im/vector/app/ExpressoExt.kt create mode 100644 vector/src/androidTest/java/im/vector/app/RegistrationTest.kt create mode 100644 vector/src/androidTest/java/im/vector/app/SleepViewAction.java create mode 100644 vector/src/androidTest/java/im/vector/app/TestMatrixCallback.kt create mode 100644 vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt create mode 100644 vector/src/androidTest/java/im/vector/app/VerifySessionInteractiveTest.kt create mode 100644 vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt index 030560b77f..d1aeed7da1 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt @@ -126,7 +126,7 @@ internal class OutgoingGossipingRequestManager @Inject constructor( * @param request the request */ private fun sendOutgoingGossipingRequest(request: OutgoingGossipingRequest) { - Timber.v("## CRYPTO - GOSSIP sendOutgoingRoomKeyRequest() : Requesting keys $request") + Timber.v("## CRYPTO - GOSSIP sendOutgoingGossipingRequest() : Requesting keys $request") val params = SendGossipRequestWorker.Params( sessionId = sessionId, 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 4f3f06beac..24de3cfe63 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 @@ -372,6 +372,7 @@ internal class RealmCryptoStore @Inject constructor( } override fun storePrivateKeysInfo(msk: String?, usk: String?, ssk: String?) { + Timber.v("## CRYPTO | *** storePrivateKeysInfo ${msk != null} ") doRealmTransaction(realmConfiguration) { realm -> realm.where().findFirst()?.apply { xSignMasterPrivateKey = msk @@ -407,6 +408,7 @@ internal class RealmCryptoStore @Inject constructor( } override fun storeMSKPrivateKey(msk: String?) { + Timber.v("## CRYPTO | *** storeMSKPrivateKey ${msk != null} ") doRealmTransaction(realmConfiguration) { realm -> realm.where().findFirst()?.apply { xSignMasterPrivateKey = msk @@ -415,6 +417,7 @@ internal class RealmCryptoStore @Inject constructor( } override fun storeSSKPrivateKey(ssk: String?) { + Timber.v("## CRYPTO | *** storeSSKPrivateKey ${ssk != null} ") doRealmTransaction(realmConfiguration) { realm -> realm.where().findFirst()?.apply { xSignSelfSignedPrivateKey = ssk @@ -423,6 +426,7 @@ internal class RealmCryptoStore @Inject constructor( } override fun storeUSKPrivateKey(usk: String?) { + Timber.v("## CRYPTO | *** storeUSKPrivateKey ${usk != null} ") doRealmTransaction(realmConfiguration) { realm -> realm.where().findFirst()?.apply { xSignUserPrivateKey = usk diff --git a/vector/build.gradle b/vector/build.gradle index 0c7985b45d..f9e485a0f9 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -172,6 +172,22 @@ android { output.versionCodeOverride = variant.versionCode * 10 + baseAbiVersionCode } } + + + // The following argument makes the Android Test Orchestrator run its + // "pm clear" command after each test invocation. This command ensures + // that the app's state is completely cleared between tests. + testInstrumentationRunnerArguments clearPackageData: 'true' + + } + + + testOptions { + // Disables animations during instrumented tests you run from the command lineâ€Ļ + // This property does not affect tests that you run using Android Studio.” + animationsDisabled = true + + execution 'ANDROIDX_TEST_ORCHESTRATOR' } signingConfigs { @@ -428,11 +444,12 @@ dependencies { // Activate when you want to check for leaks, from time to time. //debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.3' - androidTestImplementation 'androidx.test:core:1.2.0' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test:rules:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + androidTestImplementation 'androidx.test:core:1.3.0' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0' androidTestImplementation 'org.amshove.kluent:kluent-android:1.44' androidTestImplementation "androidx.arch.core:core-testing:$arch_version" // Plant Timber tree for test diff --git a/vector/src/androidTest/java/im/vector/app/ExpressoExt.kt b/vector/src/androidTest/java/im/vector/app/ExpressoExt.kt new file mode 100644 index 0000000000..5bd42bda39 --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/ExpressoExt.kt @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2020 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 + +import android.app.Activity +import android.view.View +import androidx.lifecycle.Observer +import androidx.test.espresso.IdlingRegistry +import androidx.test.espresso.IdlingResource +import androidx.test.espresso.PerformException +import androidx.test.espresso.UiController +import androidx.test.espresso.ViewAction +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.util.HumanReadables +import androidx.test.espresso.util.TreeIterables +import androidx.test.internal.runner.junit4.statement.UiThreadStatement.runOnUiThread +import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation +import androidx.test.runner.lifecycle.ActivityLifecycleCallback +import androidx.test.runner.lifecycle.ActivityLifecycleMonitorRegistry +import androidx.test.runner.lifecycle.Stage +import org.hamcrest.Matcher +import org.hamcrest.Matchers +import org.hamcrest.StringDescription +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.sync.SyncState +import org.matrix.android.sdk.api.util.Optional +import org.matrix.android.sdk.internal.crypto.store.PrivateKeysInfo +import java.util.concurrent.TimeoutException + +object EspressoHelper { + fun getCurrentActivity(): Activity? { + var currentActivity: Activity? = null + getInstrumentation().runOnMainSync { run { currentActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) } } + return currentActivity + } +} + +fun waitForView(viewMatcher: Matcher, timeout: Long = 10000, waitForDisplayed: Boolean = true): ViewAction { + return object : ViewAction { + override fun getConstraints(): Matcher { + return Matchers.any(View::class.java) + } + + override fun getDescription(): String { + val matcherDescription = StringDescription() + viewMatcher.describeTo(matcherDescription) + return "wait for a specific view <$matcherDescription> to be ${if (waitForDisplayed) "displayed" else "not displayed during $timeout millis."}" + } + + override fun perform(uiController: UiController, view: View) { + System.out.println("*** waitForView 1 $view") + uiController.loopMainThreadUntilIdle() + val startTime = System.currentTimeMillis() + val endTime = startTime + timeout + val visibleMatcher = isDisplayed() + + do { + System.out.println("*** waitForView loop $view end:$endTime currrent:${System.currentTimeMillis()}") + val viewVisible = TreeIterables.breadthFirstViewTraversal(view) + .any { viewMatcher.matches(it) && visibleMatcher.matches(it) } + + System.out.println("*** waitForView loop viewVisible:$viewVisible") + if (viewVisible == waitForDisplayed) return + System.out.println("*** waitForView loop loopMainThreadForAtLeast...") + uiController.loopMainThreadForAtLeast(50) + System.out.println("*** waitForView loop ...loopMainThreadForAtLeast") + } while (System.currentTimeMillis() < endTime) + + System.out.println("*** waitForView timeout $view") + // Timeout happens. + throw PerformException.Builder() + .withActionDescription(this.description) + .withViewDescription(HumanReadables.describe(view)) + .withCause(TimeoutException()) + .build() + } + } +} + +fun initialSyncIdlingResource(session: Session): IdlingResource { + val res = object : IdlingResource, Observer { + private var callback: IdlingResource.ResourceCallback? = null + + override fun getName() = "InitialSyncIdlingResource for ${session.myUserId}" + + override fun isIdleNow(): Boolean { + val isIdle = session.hasAlreadySynced() + return isIdle + } + + override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { + this.callback = callback + } + + override fun onChanged(t: SyncState?) { + val isIdle = session.hasAlreadySynced() + if (isIdle) { + callback?.onTransitionToIdle() + session.getSyncStateLive().removeObserver(this) + } + } + } + + runOnUiThread { + session.getSyncStateLive().observeForever(res) + } + + return res +} + +fun activityIdlingResource(activityClass: Class<*>): IdlingResource { + val res = object : IdlingResource, ActivityLifecycleCallback { + private var callback: IdlingResource.ResourceCallback? = null + + var hasResumed = false + private var currentActivity : Activity? = null + + val uniqTS = System.currentTimeMillis() + override fun getName() = "activityIdlingResource_${activityClass.name}_$uniqTS" + + override fun isIdleNow(): Boolean { + val currentActivity = currentActivity ?: ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) + + val isIdle = hasResumed || currentActivity?.javaClass?.let { activityClass.isAssignableFrom(it) } ?: false + System.out.println("*** [$name] isIdleNow activityIdlingResource $currentActivity isIdle:$isIdle") + return isIdle + } + + override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { + System.out.println("*** [$name] registerIdleTransitionCallback $callback") + this.callback = callback + // if (hasResumed) callback?.onTransitionToIdle() + } + + override fun onActivityLifecycleChanged(activity: Activity?, stage: Stage?) { + System.out.println("*** [$name] onActivityLifecycleChanged $activity $stage") + currentActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) + val isIdle = currentActivity?.javaClass?.let { activityClass.isAssignableFrom(it) } ?: false + System.out.println("*** [$name] onActivityLifecycleChanged $currentActivity isIdle:$isIdle") + if (isIdle) { + hasResumed = true + System.out.println("*** [$name] onActivityLifecycleChanged callback: $callback") + callback?.onTransitionToIdle() + ActivityLifecycleMonitorRegistry.getInstance().removeLifecycleCallback(this) + } + } + } + ActivityLifecycleMonitorRegistry.getInstance().addLifecycleCallback(res) + return res +} + +fun withIdlingResource(idlingResource: IdlingResource, block: (() -> Unit)) { + System.out.println("*** withIdlingResource register") + IdlingRegistry.getInstance().register(idlingResource) + block.invoke() + System.out.println("*** withIdlingResource unregister") + IdlingRegistry.getInstance().unregister(idlingResource) +} + +fun allSecretsKnownIdling(session: Session): IdlingResource { + val res = object : IdlingResource, Observer> { + private var callback: IdlingResource.ResourceCallback? = null + + var privateKeysInfo: PrivateKeysInfo? = session.cryptoService().crossSigningService().getCrossSigningPrivateKeys() + override fun getName() = "AllSecretsKnownIdling_${session.myUserId}" + + override fun isIdleNow(): Boolean { + System.out.println("*** [$name]/isIdleNow allSecretsKnownIdling ${privateKeysInfo?.allKnown()}") + return privateKeysInfo?.allKnown() == true + } + + override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { + this.callback = callback + } + + override fun onChanged(t: Optional?) { + System.out.println("*** [$name] allSecretsKnownIdling ${t?.getOrNull()}") + privateKeysInfo = t?.getOrNull() + if (t?.getOrNull()?.allKnown() == true) { + session.cryptoService().crossSigningService().getLiveCrossSigningPrivateKeys().removeObserver(this) + callback?.onTransitionToIdle() + } + } + } + + runOnUiThread { + session.cryptoService().crossSigningService().getLiveCrossSigningPrivateKeys().observeForever(res) + } + + return res +} diff --git a/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt b/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt new file mode 100644 index 0000000000..016d25da78 --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2020 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 + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.closeSoftKeyboard +import androidx.test.espresso.action.ViewActions.typeText +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.isEnabled +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import im.vector.app.features.MainActivity +import im.vector.app.features.home.HomeActivity +import org.hamcrest.CoreMatchers.not +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +@LargeTest +class RegistrationTest { + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Test + fun simpleRegister() { + val userId: String = "UiAutoTest_${System.currentTimeMillis()}" + val password: String = "password" + val homeServerUrl: String = "http://10.0.2.2:8080" + + // Check splashcreen is there + onView(withId(R.id.loginSplashSubmit)) + .check(matches(isDisplayed())) + .check(matches(withText(R.string.login_splash_submit))) + + // Click on get started + onView(withId(R.id.loginSplashSubmit)) + .perform(click()) + + // Check that home server options are showned + onView(withId(R.id.loginServerTitle)) + .check(matches(isDisplayed())) + .check(matches(withText(R.string.login_server_title))) + + // Chose custom server + onView(withId(R.id.loginServerChoiceOther)) + .perform(click()) + + // Enter local synapse + onView((withId(R.id.loginServerUrlFormHomeServerUrl))) + .perform(typeText(homeServerUrl)) + + // Click on continue + onView(withId(R.id.loginServerUrlFormSubmit)) + .check(matches(isEnabled())) + .perform(closeSoftKeyboard(), click()) + + // Click on the signup button + onView(withId(R.id.loginSignupSigninSubmit)) + .check(matches(isDisplayed())) + .perform(click()) + + // Ensure password flow supported + onView(withId(R.id.loginField)) + .check(matches(isDisplayed())) + onView(withId(R.id.passwordField)) + .check(matches(isDisplayed())) + + // Ensure user id + onView((withId(R.id.loginField))) + .perform(typeText(userId)) + + // Ensure login button not yet enabled + onView(withId(R.id.loginSubmit)) + .check(matches(not(isEnabled()))) + + // Ensure password + onView((withId(R.id.passwordField))) + .perform(typeText(password)) + + // Submit + onView(withId(R.id.loginSubmit)) + .check(matches(isEnabled())) + .perform(closeSoftKeyboard(), click()) + + withIdlingResource(activityIdlingResource(HomeActivity::class.java)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + } + + val activity = EspressoHelper.getCurrentActivity()!! + val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession() + + // Wait for initial sync and check room list is there + withIdlingResource(initialSyncIdlingResource(uiSession)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + } + } +} diff --git a/vector/src/androidTest/java/im/vector/app/SleepViewAction.java b/vector/src/androidTest/java/im/vector/app/SleepViewAction.java new file mode 100644 index 0000000000..8623f24756 --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/SleepViewAction.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2020 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; + +import android.view.View; + +import androidx.test.espresso.UiController; +import androidx.test.espresso.ViewAction; + +import org.hamcrest.Matcher; + +import static androidx.test.espresso.matcher.ViewMatchers.isRoot; + +public class SleepViewAction { + + public static ViewAction sleep(final long millis) { + return new ViewAction() { + @Override + public Matcher getConstraints() { + return isRoot(); + } + + @Override + public String getDescription() { + return "Wait for at least " + millis + " millis"; + } + + @Override + public void perform(final UiController uiController, final View view) { + uiController.loopMainThreadUntilIdle(); + uiController.loopMainThreadForAtLeast(millis); + } + }; + } +} \ No newline at end of file diff --git a/vector/src/androidTest/java/im/vector/app/TestMatrixCallback.kt b/vector/src/androidTest/java/im/vector/app/TestMatrixCallback.kt new file mode 100644 index 0000000000..2e254d48ef --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/TestMatrixCallback.kt @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2020 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 + +import androidx.annotation.CallSuper +import junit.framework.TestCase.fail +import org.matrix.android.sdk.api.MatrixCallback +import timber.log.Timber +import java.util.concurrent.CountDownLatch + +/** + * Simple implementation of MatrixCallback, which count down the CountDownLatch on each API callback + * @param onlySuccessful true to fail if an error occurs. This is the default behavior + * @param + */ +open class TestMatrixCallback(private val countDownLatch: CountDownLatch, + private val onlySuccessful: Boolean = true) : MatrixCallback { + + @CallSuper + override fun onSuccess(data: T) { + countDownLatch.countDown() + } + + @CallSuper + override fun onFailure(failure: Throwable) { + Timber.e(failure, "TestApiCallback") + + if (onlySuccessful) { + fail("onFailure " + failure.localizedMessage) + } + + countDownLatch.countDown() + } +} diff --git a/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt b/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt new file mode 100644 index 0000000000..015f561920 --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2020 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 + +import android.net.Uri +import androidx.lifecycle.Observer +import androidx.test.espresso.Espresso +import androidx.test.espresso.action.ViewActions +import androidx.test.espresso.assertion.ViewAssertions +import androidx.test.espresso.matcher.ViewMatchers +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import org.hamcrest.CoreMatchers +import org.junit.Assert +import org.matrix.android.sdk.api.Matrix +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.auth.data.HomeServerConnectionConfig +import org.matrix.android.sdk.api.auth.data.LoginFlowResult +import org.matrix.android.sdk.api.auth.registration.RegistrationResult +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.sync.SyncState +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit + +abstract class VerificationTestBase { + + val password = "password" + val homeServerUrl: String = "http://10.0.2.2:8080" + + fun doLogin(homeServerUrl: String, userId: String, password: String) { + Espresso.onView(ViewMatchers.withId(R.id.loginSplashSubmit)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(ViewAssertions.matches(ViewMatchers.withText(R.string.login_splash_submit))) + + Espresso.onView(ViewMatchers.withId(R.id.loginSplashSubmit)) + .perform(ViewActions.click()) + + Espresso.onView(ViewMatchers.withId(R.id.loginServerTitle)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(ViewAssertions.matches(ViewMatchers.withText(R.string.login_server_title))) + + // Chose custom server + Espresso.onView(ViewMatchers.withId(R.id.loginServerChoiceOther)) + .perform(ViewActions.click()) + + // Enter local synapse + Espresso.onView((ViewMatchers.withId(R.id.loginServerUrlFormHomeServerUrl))) + .perform(ViewActions.typeText(homeServerUrl)) + + Espresso.onView(ViewMatchers.withId(R.id.loginServerUrlFormSubmit)) + .check(ViewAssertions.matches(ViewMatchers.isEnabled())) + .perform(ViewActions.closeSoftKeyboard(), ViewActions.click()) + + // Click on the signin button + Espresso.onView(ViewMatchers.withId(R.id.loginSignupSigninSignIn)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .perform(ViewActions.click()) + + // Ensure password flow supported + Espresso.onView(ViewMatchers.withId(R.id.loginField)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + Espresso.onView(ViewMatchers.withId(R.id.passwordField)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + + Espresso.onView((ViewMatchers.withId(R.id.loginField))) + .perform(ViewActions.typeText(userId)) + Espresso.onView(ViewMatchers.withId(R.id.loginSubmit)) + .check(ViewAssertions.matches(CoreMatchers.not(ViewMatchers.isEnabled()))) + + Espresso.onView((ViewMatchers.withId(R.id.passwordField))) + .perform(ViewActions.typeText(password)) + + Espresso.onView(ViewMatchers.withId(R.id.loginSubmit)) + .check(ViewAssertions.matches(ViewMatchers.isEnabled())) + .perform(ViewActions.closeSoftKeyboard(), ViewActions.click()) + } + + private fun createAccount(userId: String = "UiAutoTest", password: String = "password", homeServerUrl: String = "http://10.0.2.2:8080") { + Espresso.onView(ViewMatchers.withId(R.id.loginSplashSubmit)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(ViewAssertions.matches(ViewMatchers.withText(R.string.login_splash_submit))) + + Espresso.onView(ViewMatchers.withId(R.id.loginSplashSubmit)) + .perform(ViewActions.click()) + + Espresso.onView(ViewMatchers.withId(R.id.loginServerTitle)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .check(ViewAssertions.matches(ViewMatchers.withText(R.string.login_server_title))) + + // Chose custom server + Espresso.onView(ViewMatchers.withId(R.id.loginServerChoiceOther)) + .perform(ViewActions.click()) + + // Enter local synapse + Espresso.onView((ViewMatchers.withId(R.id.loginServerUrlFormHomeServerUrl))) + .perform(ViewActions.typeText(homeServerUrl)) + + Espresso.onView(ViewMatchers.withId(R.id.loginServerUrlFormSubmit)) + .check(ViewAssertions.matches(ViewMatchers.isEnabled())) + .perform(ViewActions.closeSoftKeyboard(), ViewActions.click()) + + // Click on the signup button + Espresso.onView(ViewMatchers.withId(R.id.loginSignupSigninSubmit)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + .perform(ViewActions.click()) + + // Ensure password flow supported + Espresso.onView(ViewMatchers.withId(R.id.loginField)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + Espresso.onView(ViewMatchers.withId(R.id.passwordField)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + + Espresso.onView((ViewMatchers.withId(R.id.loginField))) + .perform(ViewActions.typeText(userId)) + Espresso.onView(ViewMatchers.withId(R.id.loginSubmit)) + .check(ViewAssertions.matches(CoreMatchers.not(ViewMatchers.isEnabled()))) + + Espresso.onView((ViewMatchers.withId(R.id.passwordField))) + .perform(ViewActions.typeText(password)) + + Espresso.onView(ViewMatchers.withId(R.id.loginSubmit)) + .check(ViewAssertions.matches(ViewMatchers.isEnabled())) + .perform(ViewActions.closeSoftKeyboard(), ViewActions.click()) + + Espresso.onView(ViewMatchers.withId(R.id.homeDrawerFragmentContainer)) + .check(ViewAssertions.matches(ViewMatchers.isDisplayed())) + } + + fun createAccountAndSync(matrix: Matrix, userName: String, + password: String, + withInitialSync: Boolean): Session { + val hs = createHomeServerConfig() + + doSync { + matrix.authenticationService() + .getLoginFlow(hs, it) + } + + doSync { + matrix.authenticationService() + .getRegistrationWizard() + .createAccount(userName, password, null, it) + } + + // Preform dummy step + val registrationResult = doSync { + matrix.authenticationService() + .getRegistrationWizard() + .dummy(it) + } + + Assert.assertTrue(registrationResult is RegistrationResult.Success) + val session = (registrationResult as RegistrationResult.Success).session + if (withInitialSync) { + syncSession(session) + } + + return session + } + + fun createHomeServerConfig(): HomeServerConnectionConfig { + return HomeServerConnectionConfig.Builder() + .withHomeServerUri(Uri.parse(homeServerUrl)) + .build() + } + + // Transform a method with a MatrixCallback to a synchronous method + inline fun doSync(block: (MatrixCallback) -> Unit): T { + val lock = CountDownLatch(1) + var result: T? = null + + val callback = object : TestMatrixCallback(lock) { + override fun onSuccess(data: T) { + result = data + super.onSuccess(data) + } + } + + block.invoke(callback) + + lock.await(20_000, TimeUnit.MILLISECONDS) + + Assert.assertNotNull(result) + return result!! + } + + fun syncSession(session: Session) { + val lock = CountDownLatch(1) + + GlobalScope.launch(Dispatchers.Main) { session.open() } + + session.startSync(true) + + val syncLiveData = runBlocking(Dispatchers.Main) { + session.getSyncStateLive() + } + val syncObserver = object : Observer { + override fun onChanged(t: SyncState?) { + if (session.hasAlreadySynced()) { + lock.countDown() + syncLiveData.removeObserver(this) + } + } + } + GlobalScope.launch(Dispatchers.Main) { syncLiveData.observeForever(syncObserver) } + + lock.await(20_000, TimeUnit.MILLISECONDS) + } +} diff --git a/vector/src/androidTest/java/im/vector/app/VerifySessionInteractiveTest.kt b/vector/src/androidTest/java/im/vector/app/VerifySessionInteractiveTest.kt new file mode 100644 index 0000000000..d218b6ef7e --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/VerifySessionInteractiveTest.kt @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2020 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 + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.IdlingRegistry +import androidx.test.espresso.IdlingResource +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.closeSoftKeyboard +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem +import androidx.test.espresso.matcher.ViewMatchers.hasDescendant +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.isRoot +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import androidx.test.platform.app.InstrumentationRegistry +import im.vector.app.features.MainActivity +import im.vector.app.features.home.HomeActivity +import org.hamcrest.CoreMatchers.not +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.matrix.android.sdk.api.Matrix +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.crypto.verification.SasVerificationTransaction +import org.matrix.android.sdk.api.session.crypto.verification.VerificationMethod +import org.matrix.android.sdk.api.session.crypto.verification.VerificationService +import org.matrix.android.sdk.api.session.crypto.verification.VerificationTransaction +import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState +import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth + +@RunWith(AndroidJUnit4::class) +@LargeTest +class VerifySessionInteractiveTest : VerificationTestBase() { + + var existingSession: Session? = null + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Before + fun createSessionWithCrossSigning() { + val context = InstrumentationRegistry.getInstrumentation().targetContext + val matrix = Matrix.getInstance(context) + val userName = "foobar_${System.currentTimeMillis()}" + existingSession = createAccountAndSync(matrix, userName, password, true) + doSync { + existingSession!!.cryptoService().crossSigningService() + .initializeCrossSigning(UserPasswordAuth( + user = existingSession!!.myUserId, + password = "password" + ), it) + } + } + + @Test + fun checkVerifyPopup() { + val userId: String = existingSession!!.myUserId + + doLogin(homeServerUrl, userId, password) + + // Thread.sleep(6000) + withIdlingResource(activityIdlingResource(HomeActivity::class.java)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + .perform(closeSoftKeyboard()) + } + + val activity = EspressoHelper.getCurrentActivity()!! + val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession() + + withIdlingResource(initialSyncIdlingResource(uiSession)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + } + + // THIS IS THE ONLY WAY I FOUND TO CLICK ON ALERTERS... :( + // Cannot wait for view because of alerter animation? ... + onView(isRoot()) + .perform(waitForView(withId(com.tapadoo.alerter.R.id.llAlertBackground))) +// Thread.sleep(1000) +// onView(withId(com.tapadoo.alerter.R.id.llAlertBackground)) +// .perform(click()) + Thread.sleep(1000) + val popup = activity.findViewById(com.tapadoo.alerter.R.id.llAlertBackground) + activity.runOnUiThread { + popup.performClick() + } + + onView(isRoot()) + .perform(waitForView(withId(R.id.bottomSheetFragmentContainer))) +// .check() +// onView(withId(R.id.bottomSheetFragmentContainer)) +// .check(matches(isDisplayed())) + +// onView(isRoot()).perform(SleepViewAction.sleep(2000)) + + onView(withText(R.string.use_latest_app)) + .check(matches(isDisplayed())) + + // 4S is not setup so passphrase option should be hidden + onView(withId(R.id.bottomSheetFragmentContainer)) + .check(matches(not(hasDescendant(withText(R.string.verification_cannot_access_other_session))))) + + val request = existingSession!!.cryptoService().verificationService().requestKeyVerification( + listOf(VerificationMethod.SAS, VerificationMethod.QR_CODE_SCAN, VerificationMethod.QR_CODE_SHOW), + existingSession!!.myUserId, + listOf(uiSession.sessionParams.deviceId!!) + ) + + val transactionId = request.transactionId!! + val sasReadyIdle = verificationStateIdleResource(transactionId, VerificationTxState.ShortCodeReady, uiSession) + val otherSessionSasReadyIdle = verificationStateIdleResource(transactionId, VerificationTxState.ShortCodeReady, existingSession!!) + + onView(isRoot()).perform(SleepViewAction.sleep(1000)) + + // Assert QR code option is there and available + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .check(matches(hasDescendant(withText(R.string.verification_scan_their_code)))) + + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .check(matches(hasDescendant(withId(R.id.itemVerificationQrCodeImage)))) + + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .perform( + actionOnItem( + hasDescendant(withText(R.string.verification_scan_emoji_title)), + click() + ) + ) + + val firstSessionTr = existingSession!!.cryptoService().verificationService().getExistingTransaction( + existingSession!!.myUserId, + transactionId + ) as SasVerificationTransaction + + IdlingRegistry.getInstance().register(sasReadyIdle) + IdlingRegistry.getInstance().register(otherSessionSasReadyIdle) + onView(isRoot()).perform(SleepViewAction.sleep(300)) + // will only execute when Idle is ready + val expectedEmojis = firstSessionTr.getEmojiCodeRepresentation() + val targets = listOf(R.id.emoji0, R.id.emoji1, R.id.emoji2, R.id.emoji3, R.id.emoji4, R.id.emoji5, R.id.emoji6) + targets.forEachIndexed { index, res -> + onView(withId(res)) + .check( + matches(hasDescendant(withText(expectedEmojis[index].nameResId))) + ) + } + + IdlingRegistry.getInstance().unregister(sasReadyIdle) + IdlingRegistry.getInstance().unregister(otherSessionSasReadyIdle) + + val verificationSuccessIdle = + verificationStateIdleResource(transactionId, VerificationTxState.Verified, uiSession) + + // CLICK ON THEY MATCH + + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .perform( + actionOnItem( + hasDescendant(withText(R.string.verification_sas_match)), + click() + ) + ) + + firstSessionTr.userHasVerifiedShortCode() + + onView(isRoot()).perform(SleepViewAction.sleep(1000)) + + withIdlingResource(verificationSuccessIdle) { + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .check( + matches(hasDescendant(withText(R.string.verification_conclusion_ok_self_notice))) + ) + } + + // Wait a bit before done (to delay a bit sending of secrets to let other have time + // to mark as verified :/ + Thread.sleep(5_000) + // Click on done + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .perform( + actionOnItem( + hasDescendant(withText(R.string.done)), + click() + ) + ) + + // Wait until local secrets are known (gossip) + withIdlingResource(allSecretsKnownIdling(uiSession)) { + onView(withId(R.id.groupToolbarAvatarImageView)) + .perform(click()) + } + } + + fun signout() { + onView((withId(R.id.groupToolbarAvatarImageView))) + .perform(click()) + + onView((withId(R.id.homeDrawerHeaderSettingsView))) + .perform(click()) + + onView(withText("General")) + .perform(click()) + } + + fun verificationStateIdleResource(transactionId: String, checkForState: VerificationTxState, session: Session): IdlingResource { + val idle = object : IdlingResource, VerificationService.Listener { + private var callback: IdlingResource.ResourceCallback? = null + + private var currentState: VerificationTxState? = null + + override fun getName() = "verificationSuccessIdle" + + override fun isIdleNow(): Boolean { + return currentState == checkForState + } + + override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { + this.callback = callback + } + + fun update(state: VerificationTxState) { + currentState = state + if (state == checkForState) { + session.cryptoService().verificationService().removeListener(this) + callback?.onTransitionToIdle() + } + } + + /** + * Called when a transaction is created, either by the user or initiated by the other user. + */ + override fun transactionCreated(tx: VerificationTransaction) { + if (tx.transactionId == transactionId) update(tx.state) + } + + /** + * Called when a transaction is updated. You may be interested to track the state of the VerificationTransaction. + */ + override fun transactionUpdated(tx: VerificationTransaction) { + if (tx.transactionId == transactionId) update(tx.state) + } + } + + session.cryptoService().verificationService().addListener(idle) + return idle + } + + object UITestVerificationUtils +} diff --git a/vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt b/vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt new file mode 100644 index 0000000000..5405c086eb --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2020 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 + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.closeSoftKeyboard +import androidx.test.espresso.action.ViewActions.typeText +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem +import androidx.test.espresso.matcher.ViewMatchers.hasDescendant +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.isRoot +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import androidx.test.platform.app.InstrumentationRegistry +import im.vector.app.core.resources.StringProvider +import im.vector.app.features.MainActivity +import im.vector.app.features.crypto.quads.SharedSecureStorageActivity +import im.vector.app.features.crypto.recover.BootstrapCrossSigningTask +import im.vector.app.features.crypto.recover.Params +import im.vector.app.features.home.HomeActivity +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.matrix.android.sdk.api.Matrix +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth + +@RunWith(AndroidJUnit4::class) +@LargeTest +class VerifySessionPassphraseTest : VerificationTestBase() { + + var existingSession: Session? = null + val passphrase = "person woman camera tv" + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Before + fun createSessionWithCrossSigningAnd4S() { + val context = InstrumentationRegistry.getInstrumentation().targetContext + val matrix = Matrix.getInstance(context) + val userName = "foobar_${System.currentTimeMillis()}" + existingSession = createAccountAndSync(matrix, userName, password, true) + doSync { + existingSession!!.cryptoService().crossSigningService() + .initializeCrossSigning(UserPasswordAuth( + user = existingSession!!.myUserId, + password = "password" + ), it) + } + + val task = BootstrapCrossSigningTask(existingSession!!, StringProvider(context.resources)) + + runBlocking { + task.execute(Params( + userPasswordAuth = UserPasswordAuth(password = password), + passphrase = passphrase + )) + } + } + + @Test + fun checkVerifyWithPassphrase() { + val userId: String = existingSession!!.myUserId + + doLogin(homeServerUrl, userId, password) + + // Thread.sleep(6000) + withIdlingResource(activityIdlingResource(HomeActivity::class.java)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + .perform(closeSoftKeyboard()) + } + + val activity = EspressoHelper.getCurrentActivity()!! + val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession() + + withIdlingResource(initialSyncIdlingResource(uiSession)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + } + + // THIS IS THE ONLY WAY I FOUND TO CLICK ON ALERTERS... :( + // Cannot wait for view because of alerter animation? ... + Thread.sleep(6000) + val popup = activity.findViewById(com.tapadoo.alerter.R.id.llAlertBackground) + activity.runOnUiThread { + popup.performClick() + } + + onView(withId(R.id.bottomSheetFragmentContainer)) + .check(matches(isDisplayed())) + + onView(isRoot()).perform(SleepViewAction.sleep(2000)) + + onView(withText(R.string.use_latest_app)) + .check(matches(isDisplayed())) + + // 4S is not setup so passphrase option should be hidden + onView(withId(R.id.bottomSheetFragmentContainer)) + .check(matches(hasDescendant(withText(R.string.verification_cannot_access_other_session)))) + + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .perform( + actionOnItem( + hasDescendant(withText(R.string.verification_cannot_access_other_session)), + click() + ) + ) + + withIdlingResource(activityIdlingResource(SharedSecureStorageActivity::class.java)) { + onView(withId(R.id.ssss__root)).check(matches(isDisplayed())) + } + + onView((withId(R.id.ssss_passphrase_enter_edittext))) + .perform(typeText(passphrase)) + + onView((withId(R.id.ssss_passphrase_submit))) + .perform(click()) + + System.out.println("*** passphrase 1") + + withIdlingResource(activityIdlingResource(HomeActivity::class.java)) { + System.out.println("*** passphrase 1.1") + onView(withId(R.id.bottomSheetVerificationRecyclerView)) + .check( + matches(hasDescendant(withText(R.string.verification_conclusion_ok_self_notice))) + ) + } + + System.out.println("*** passphrase 2") + // check that all secrets are known? + assert(uiSession.cryptoService().crossSigningService().canCrossSign()) + assert(uiSession.cryptoService().crossSigningService().allPrivateKeysKnown()) + + Thread.sleep(10_000) + } +} diff --git a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt index 593527448b..814a7ca16e 100644 --- a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt +++ b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt @@ -20,6 +20,7 @@ import android.app.Activity import android.os.Build import android.os.Handler import android.os.Looper +import android.provider.Settings import android.view.View import android.widget.ImageView import com.tapadoo.alerter.Alerter @@ -172,6 +173,10 @@ class PopupAlertManager @Inject constructor(private val avatarRenderer: Lazy Date: Fri, 25 Sep 2020 09:34:13 +0200 Subject: [PATCH 023/278] Doc + change log --- CHANGES.md | 1 + docs/ui-tests.md | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 docs/ui-tests.md diff --git a/CHANGES.md b/CHANGES.md index 25da8f0108..e5542996ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -49,6 +49,7 @@ SDK API changes ⚠ī¸: Other changes: - Add an advanced action to reset an account data entry + - Added registration/verification automated UI tests Changes in Element 1.0.7 (2020-09-17) =================================================== diff --git a/docs/ui-tests.md b/docs/ui-tests.md new file mode 100644 index 0000000000..9757481991 --- /dev/null +++ b/docs/ui-tests.md @@ -0,0 +1,87 @@ +# Automate user interface tests + +Element Android ensures that some fundamental flows are properly working by running automated user interface tests. +Ui tests are using the android [Espresso](https://developer.android.com/training/testing/espresso) library. + +Tests can be run on a real device, or on a virtual device (such as the emulator in Android Studio). + +Currently the test are covering a small set of application flows: + - Registration + - Self verification via emoji + - Self verification via passphrase + +## Prerequisites: + +Out of the box, the tests use one of the homeservers (located at http://localhost:8080) of the "Demo Federation of Homeservers" (https://github.com/matrix-org/synapse#running-a-demo-federation-of-synapses). + +You first need to follow instructions to set up Synapse in development mode at https://github.com/matrix-org/synapse#synapse-development. If you have already installed all dependencies, the steps are: + +``` +$ git clone https://github.com/matrix-org/synapse.git +$ cd synapse +$ virtualenv -p python3 env +$ source env/bin/activate +(env) $ python -m pip install --no-use-pep517 -e .` +``` + +Every time you want to launch these test homeservers, type: + +``` +$ virtualenv -p python3 env +$ source env/bin/activate +(env) $ demo/start.sh --no-rate-limit` +``` + +**Emulator/Device set up** + +When running the test via android studio on a device, you have to disable system animations in order for the test to work properly. + +First, ensure developer mode is enabled: + +- To enable developer options, tap the **Build Number** option 7 times. You can find this option in one of the following locations, depending on your Android version: + + - Android 9 (API level 28) and higher: **Settings > About Phone > Build Number** + - Android 8.0.0 (API level 26) and Android 8.1.0 (API level 26): **Settings > System > About Phone > Build Number** + - Android 7.1 (API level 25) and lower: **Settings > About Phone > Build Number** + +On your device, under **Settings > Developer options**, disable the following 3 settings: + +- Window animation scale +- Transition animation scale +- Animator duration scale + + +## Recipes + +We added some specific Espresso IdlingResources, and other utilities for matrix related tests + +### Wait for initial sync + +```` +// Wait for initial sync and check room list is there +withIdlingResource(initialSyncIdlingResource(uiSession)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) +} +```` + +### Accessing current activity + +```` + val activity = EspressoHelper.getCurrentActivity()!! + val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession() +```` + +### Interact with other session + +It's possible to create a session via the SDK, and then use this session to interact with the one that the emulator is using (to check verifications for example) + +```` +@Before +fun initAccount() { + val context = InstrumentationRegistry.getInstrumentation().targetContext + val matrix = Matrix.getInstance(context) + val userName = "foobar_${System.currentTimeMillis()}" + existingSession = createAccountAndSync(matrix, userName, password, true) +} +````` From f79784bc8c2bb91a6cad0b199bf0c9eec4f884e4 Mon Sep 17 00:00:00 2001 From: Valere Date: Fri, 25 Sep 2020 09:45:34 +0200 Subject: [PATCH 024/278] Stabilisation Hide keyboard before entering text --- vector/src/androidTest/java/im/vector/app/RegistrationTest.kt | 2 +- .../src/androidTest/java/im/vector/app/VerificationTestBase.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt b/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt index 016d25da78..a290aeec80 100644 --- a/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt +++ b/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt @@ -96,7 +96,7 @@ class RegistrationTest { // Ensure password onView((withId(R.id.passwordField))) - .perform(typeText(password)) + .perform(closeSoftKeyboard(), typeText(password)) // Submit onView(withId(R.id.loginSubmit)) diff --git a/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt b/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt index 015f561920..20d0053a9f 100644 --- a/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt +++ b/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt @@ -84,7 +84,7 @@ abstract class VerificationTestBase { .check(ViewAssertions.matches(CoreMatchers.not(ViewMatchers.isEnabled()))) Espresso.onView((ViewMatchers.withId(R.id.passwordField))) - .perform(ViewActions.typeText(password)) + .perform(ViewActions.closeSoftKeyboard(), ViewActions.typeText(password)) Espresso.onView(ViewMatchers.withId(R.id.loginSubmit)) .check(ViewAssertions.matches(ViewMatchers.isEnabled())) From b14d22550bd161594407ff06826ce8371a1dd075 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 29 Sep 2020 15:12:25 +0200 Subject: [PATCH 025/278] PR Review Cleanup and Add command line to run the UI tests --- CHANGES.md | 3 +- docs/ui-tests.md | 40 ++++++++++++++----- .../android/sdk/common/CommonTestHelper.kt | 2 +- .../crypto/store/db/RealmCryptoStore.kt | 2 +- vector/build.gradle | 22 +++++----- .../app/{ExpressoExt.kt => EspressoExt.kt} | 36 +++++++++-------- .../java/im/vector/app/RegistrationTest.kt | 4 +- .../im/vector/app/VerificationTestBase.kt | 2 +- .../im/vector/app/core/utils/SystemUtils.kt | 4 ++ .../app/features/popup/PopupAlertManager.kt | 10 ++--- 10 files changed, 75 insertions(+), 50 deletions(-) rename vector/src/androidTest/java/im/vector/app/{ExpressoExt.kt => EspressoExt.kt} (82%) diff --git a/CHANGES.md b/CHANGES.md index e5542996ff..efbab5bd27 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,7 +20,7 @@ Build 🧱: - Other changes: - - + - Added registration/verification automated UI tests Changes in Element 1.0.8 (2020-09-25) =================================================== @@ -49,7 +49,6 @@ SDK API changes ⚠ī¸: Other changes: - Add an advanced action to reset an account data entry - - Added registration/verification automated UI tests Changes in Element 1.0.7 (2020-09-17) =================================================== diff --git a/docs/ui-tests.md b/docs/ui-tests.md index 9757481991..ff01da0b31 100644 --- a/docs/ui-tests.md +++ b/docs/ui-tests.md @@ -16,20 +16,20 @@ Out of the box, the tests use one of the homeservers (located at http://localhos You first need to follow instructions to set up Synapse in development mode at https://github.com/matrix-org/synapse#synapse-development. If you have already installed all dependencies, the steps are: -``` +```shell script $ git clone https://github.com/matrix-org/synapse.git $ cd synapse $ virtualenv -p python3 env $ source env/bin/activate -(env) $ python -m pip install --no-use-pep517 -e .` +(env) $ python -m pip install --no-use-pep517 -e . ``` Every time you want to launch these test homeservers, type: -``` +```shell script $ virtualenv -p python3 env $ source env/bin/activate -(env) $ demo/start.sh --no-rate-limit` +(env) $ demo/start.sh --no-rate-limit ``` **Emulator/Device set up** @@ -50,33 +50,53 @@ On your device, under **Settings > Developer options**, disable the following 3 - Transition animation scale - Animator duration scale +## Run the tests +Once Synapse is running, and an emulator is running, you can run the UI tests. + +### From the source code + +Click on the green arrow in front of each test. Clicking on the arrow in front of the test class, or from the package directory does not always work (Tests not found issue). + +### From command line + +````shell script +./gradlew vector:connectedGplayDebugAndroidTest +```` + +To run all the tests from the `vector` module. + +In case of trouble, you can try to uninstall the previous installed test APK first with this command: + +```shell script +adb uninstall im.vector.app.debug.test +``` ## Recipes We added some specific Espresso IdlingResources, and other utilities for matrix related tests ### Wait for initial sync -```` +```kotlin // Wait for initial sync and check room list is there withIdlingResource(initialSyncIdlingResource(uiSession)) { onView(withId(R.id.roomListContainer)) .check(matches(isDisplayed())) } -```` +``` ### Accessing current activity -```` +```kotlin val activity = EspressoHelper.getCurrentActivity()!! val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession() -```` +``` ### Interact with other session It's possible to create a session via the SDK, and then use this session to interact with the one that the emulator is using (to check verifications for example) -```` +```kotlin @Before fun initAccount() { val context = InstrumentationRegistry.getInstrumentation().targetContext @@ -84,4 +104,4 @@ fun initAccount() { val userName = "foobar_${System.currentTimeMillis()}" existingSession = createAccountAndSync(matrix, userName, password, true) } -````` +``` diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt index fdbfa57b5c..84e76cbe52 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt @@ -218,7 +218,7 @@ class CommonTestHelper(context: Context) { .createAccount(userName, password, null, it) } - // Preform dummy step + // Perform dummy step val registrationResult = doSync { matrix.authenticationService .getRegistrationWizard() 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 24de3cfe63..df71ef9eba 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 @@ -372,7 +372,7 @@ internal class RealmCryptoStore @Inject constructor( } override fun storePrivateKeysInfo(msk: String?, usk: String?, ssk: String?) { - Timber.v("## CRYPTO | *** storePrivateKeysInfo ${msk != null} ") + Timber.v("## CRYPTO | *** storePrivateKeysInfo ${msk != null}, ${usk != null}, ${ssk != null}") doRealmTransaction(realmConfiguration) { realm -> realm.where().findFirst()?.apply { xSignMasterPrivateKey = msk diff --git a/vector/build.gradle b/vector/build.gradle index f9e485a0f9..9191ce640c 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -173,15 +173,12 @@ android { } } - // The following argument makes the Android Test Orchestrator run its // "pm clear" command after each test invocation. This command ensures // that the app's state is completely cleared between tests. testInstrumentationRunnerArguments clearPackageData: 'true' - } - testOptions { // Disables animations during instrumented tests you run from the command lineâ€Ļ // This property does not affect tests that you run using Android Studio.” @@ -297,6 +294,11 @@ dependencies { def arch_version = '2.1.0' def lifecycle_version = '2.2.0' + // Tests + def kluent_version = '1.44' + def androidxTest_version = '1.3.0' + def espresso_version = '3.3.0' + implementation project(":matrix-sdk-android") implementation project(":matrix-sdk-android-rx") implementation project(":diff-match-patch") @@ -437,20 +439,20 @@ dependencies { // TESTS testImplementation 'junit:junit:4.12' - testImplementation 'org.amshove.kluent:kluent-android:1.44' + testImplementation "org.amshove.kluent:kluent-android:$kluent_version" // Plant Timber tree for test testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' // Activate when you want to check for leaks, from time to time. //debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.3' - androidTestImplementation 'androidx.test:core:1.3.0' - androidTestImplementation 'androidx.test:runner:1.3.0' - androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation "androidx.test:core:$androidxTest_version" + androidTestImplementation "androidx.test:runner:$androidxTest_version" + androidTestImplementation "androidx.test:rules:$androidxTest_version" androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0' - androidTestImplementation 'org.amshove.kluent:kluent-android:1.44' + androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version" + androidTestImplementation "androidx.test.espresso:espresso-contrib:$espresso_version" + androidTestImplementation "org.amshove.kluent:kluent-android:$kluent_version" androidTestImplementation "androidx.arch.core:core-testing:$arch_version" // Plant Timber tree for test androidTestImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' diff --git a/vector/src/androidTest/java/im/vector/app/ExpressoExt.kt b/vector/src/androidTest/java/im/vector/app/EspressoExt.kt similarity index 82% rename from vector/src/androidTest/java/im/vector/app/ExpressoExt.kt rename to vector/src/androidTest/java/im/vector/app/EspressoExt.kt index 5bd42bda39..d247d88caa 100644 --- a/vector/src/androidTest/java/im/vector/app/ExpressoExt.kt +++ b/vector/src/androidTest/java/im/vector/app/EspressoExt.kt @@ -44,12 +44,14 @@ import java.util.concurrent.TimeoutException object EspressoHelper { fun getCurrentActivity(): Activity? { var currentActivity: Activity? = null - getInstrumentation().runOnMainSync { run { currentActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) } } + getInstrumentation().runOnMainSync { + currentActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) + } return currentActivity } } -fun waitForView(viewMatcher: Matcher, timeout: Long = 10000, waitForDisplayed: Boolean = true): ViewAction { +fun waitForView(viewMatcher: Matcher, timeout: Long = 10_000, waitForDisplayed: Boolean = true): ViewAction { return object : ViewAction { override fun getConstraints(): Matcher { return Matchers.any(View::class.java) @@ -62,25 +64,25 @@ fun waitForView(viewMatcher: Matcher, timeout: Long = 10000, waitForDispla } override fun perform(uiController: UiController, view: View) { - System.out.println("*** waitForView 1 $view") + println("*** waitForView 1 $view") uiController.loopMainThreadUntilIdle() val startTime = System.currentTimeMillis() val endTime = startTime + timeout val visibleMatcher = isDisplayed() do { - System.out.println("*** waitForView loop $view end:$endTime currrent:${System.currentTimeMillis()}") + println("*** waitForView loop $view end:$endTime current:${System.currentTimeMillis()}") val viewVisible = TreeIterables.breadthFirstViewTraversal(view) .any { viewMatcher.matches(it) && visibleMatcher.matches(it) } - System.out.println("*** waitForView loop viewVisible:$viewVisible") + println("*** waitForView loop viewVisible:$viewVisible") if (viewVisible == waitForDisplayed) return - System.out.println("*** waitForView loop loopMainThreadForAtLeast...") + println("*** waitForView loop loopMainThreadForAtLeast...") uiController.loopMainThreadForAtLeast(50) - System.out.println("*** waitForView loop ...loopMainThreadForAtLeast") + println("*** waitForView loop ...loopMainThreadForAtLeast") } while (System.currentTimeMillis() < endTime) - System.out.println("*** waitForView timeout $view") + println("*** waitForView timeout $view") // Timeout happens. throw PerformException.Builder() .withActionDescription(this.description) @@ -136,24 +138,24 @@ fun activityIdlingResource(activityClass: Class<*>): IdlingResource { val currentActivity = currentActivity ?: ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) val isIdle = hasResumed || currentActivity?.javaClass?.let { activityClass.isAssignableFrom(it) } ?: false - System.out.println("*** [$name] isIdleNow activityIdlingResource $currentActivity isIdle:$isIdle") + println("*** [$name] isIdleNow activityIdlingResource $currentActivity isIdle:$isIdle") return isIdle } override fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) { - System.out.println("*** [$name] registerIdleTransitionCallback $callback") + println("*** [$name] registerIdleTransitionCallback $callback") this.callback = callback // if (hasResumed) callback?.onTransitionToIdle() } override fun onActivityLifecycleChanged(activity: Activity?, stage: Stage?) { - System.out.println("*** [$name] onActivityLifecycleChanged $activity $stage") + println("*** [$name] onActivityLifecycleChanged $activity $stage") currentActivity = ActivityLifecycleMonitorRegistry.getInstance().getActivitiesInStage(Stage.RESUMED).elementAtOrNull(0) val isIdle = currentActivity?.javaClass?.let { activityClass.isAssignableFrom(it) } ?: false - System.out.println("*** [$name] onActivityLifecycleChanged $currentActivity isIdle:$isIdle") + println("*** [$name] onActivityLifecycleChanged $currentActivity isIdle:$isIdle") if (isIdle) { hasResumed = true - System.out.println("*** [$name] onActivityLifecycleChanged callback: $callback") + println("*** [$name] onActivityLifecycleChanged callback: $callback") callback?.onTransitionToIdle() ActivityLifecycleMonitorRegistry.getInstance().removeLifecycleCallback(this) } @@ -164,10 +166,10 @@ fun activityIdlingResource(activityClass: Class<*>): IdlingResource { } fun withIdlingResource(idlingResource: IdlingResource, block: (() -> Unit)) { - System.out.println("*** withIdlingResource register") + println("*** withIdlingResource register") IdlingRegistry.getInstance().register(idlingResource) block.invoke() - System.out.println("*** withIdlingResource unregister") + println("*** withIdlingResource unregister") IdlingRegistry.getInstance().unregister(idlingResource) } @@ -179,7 +181,7 @@ fun allSecretsKnownIdling(session: Session): IdlingResource { override fun getName() = "AllSecretsKnownIdling_${session.myUserId}" override fun isIdleNow(): Boolean { - System.out.println("*** [$name]/isIdleNow allSecretsKnownIdling ${privateKeysInfo?.allKnown()}") + println("*** [$name]/isIdleNow allSecretsKnownIdling ${privateKeysInfo?.allKnown()}") return privateKeysInfo?.allKnown() == true } @@ -188,7 +190,7 @@ fun allSecretsKnownIdling(session: Session): IdlingResource { } override fun onChanged(t: Optional?) { - System.out.println("*** [$name] allSecretsKnownIdling ${t?.getOrNull()}") + println("*** [$name] allSecretsKnownIdling ${t?.getOrNull()}") privateKeysInfo = t?.getOrNull() if (t?.getOrNull()?.allKnown() == true) { session.cryptoService().crossSigningService().getLiveCrossSigningPrivateKeys().removeObserver(this) diff --git a/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt b/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt index a290aeec80..b88356db59 100644 --- a/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt +++ b/vector/src/androidTest/java/im/vector/app/RegistrationTest.kt @@ -48,7 +48,7 @@ class RegistrationTest { val password: String = "password" val homeServerUrl: String = "http://10.0.2.2:8080" - // Check splashcreen is there + // Check splashscreen is there onView(withId(R.id.loginSplashSubmit)) .check(matches(isDisplayed())) .check(matches(withText(R.string.login_splash_submit))) @@ -57,7 +57,7 @@ class RegistrationTest { onView(withId(R.id.loginSplashSubmit)) .perform(click()) - // Check that home server options are showned + // Check that home server options are shown onView(withId(R.id.loginServerTitle)) .check(matches(isDisplayed())) .check(matches(withText(R.string.login_server_title))) diff --git a/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt b/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt index 20d0053a9f..2a1b6d802f 100644 --- a/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt +++ b/vector/src/androidTest/java/im/vector/app/VerificationTestBase.kt @@ -158,7 +158,7 @@ abstract class VerificationTestBase { .createAccount(userName, password, null, it) } - // Preform dummy step + // Perform dummy step val registrationResult = doSync { matrix.authenticationService() .getRegistrationWizard() diff --git a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt index 0e722da34a..c1253e76d3 100644 --- a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt +++ b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt @@ -55,6 +55,10 @@ fun isAirplaneModeOn(context: Context): Boolean { return Settings.Global.getInt(context.contentResolver, Settings.Global.AIRPLANE_MODE_ON, 0) != 0 } +fun isAnimationDisabled(context: Context): Boolean { + return Settings.Global.getFloat(context.contentResolver, Settings.Global.ANIMATOR_DURATION_SCALE, 1f) == 0f +} + /** * display the system dialog for granting this permission. If previously granted, the * system will not show it (so you should call this method). diff --git a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt index 814a7ca16e..59386ffff0 100644 --- a/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt +++ b/vector/src/main/java/im/vector/app/features/popup/PopupAlertManager.kt @@ -20,7 +20,6 @@ import android.app.Activity import android.os.Build import android.os.Handler import android.os.Looper -import android.provider.Settings import android.view.View import android.widget.ImageView import com.tapadoo.alerter.Alerter @@ -28,6 +27,7 @@ import com.tapadoo.alerter.OnHideAlertListener import dagger.Lazy import im.vector.app.R import im.vector.app.core.platform.VectorBaseActivity +import im.vector.app.core.utils.isAnimationDisabled import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.pin.PinActivity import im.vector.app.features.themes.ThemeUtils @@ -173,9 +173,7 @@ class PopupAlertManager @Inject constructor(private val avatarRenderer: Lazy Date: Thu, 24 Sep 2020 11:26:08 +0200 Subject: [PATCH 026/278] Timeline: add a prefetch backward item --- .../detail/timeline/TimelineEventController.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index be59128c26..a04057882e 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -116,6 +116,7 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec private var unreadState: UnreadState = UnreadState.Unknown private var positionOfReadMarker: Int? = null private var eventIdToHighlight: String? = null + private var previousModelsSize = 0 var callback: Callback? = null var timeline: Timeline? = null @@ -191,6 +192,20 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec models.add(position, readMarker) } } + val shouldAdd = timeline?.hasMoreToLoad(Timeline.Direction.BACKWARDS) ?: false + if (shouldAdd) { + val indexOfPrefetchBackward = (previousModelsSize - 1) + .coerceAtLeast(0) + .coerceAtMost(models.size - 1) + + val loadingItem = LoadingItem_() + .id("prefetch_backward_loading${System.currentTimeMillis()}") + .showLoader(false) + .setVisibilityStateChangedListener(Timeline.Direction.BACKWARDS) + + models.add(indexOfPrefetchBackward, loadingItem) + } + previousModelsSize = models.size } fun update(viewState: RoomDetailViewState) { From 8bc0afa75e5cd601650b8ac60bafc608a5de421f Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 24 Sep 2020 11:29:07 +0200 Subject: [PATCH 027/278] Timeline: add glide preloading --- vector/build.gradle | 1 + .../home/room/detail/RoomDetailFragment.kt | 17 ++++++++++++++++- .../app/features/media/ImageContentRenderer.kt | 18 +++++++++--------- 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/vector/build.gradle b/vector/build.gradle index 0c7985b45d..30ca90e1d8 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -326,6 +326,7 @@ dependencies { implementation 'com.jakewharton.rxbinding3:rxbinding-material:3.0.0' implementation("com.airbnb.android:epoxy:$epoxy_version") + implementation "com.airbnb.android:epoxy-glide-preloading:$epoxy_version" kapt "com.airbnb.android:epoxy-processor:$epoxy_version" implementation "com.airbnb.android:epoxy-paging:$epoxy_version" implementation 'com.airbnb.android:mvrx:1.3.0' diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 7c3ac6011e..d03e6bad1e 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -53,6 +53,8 @@ import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.epoxy.EpoxyModel import com.airbnb.epoxy.OnModelBuildFinishedListener +import com.airbnb.epoxy.addGlidePreloader +import com.airbnb.epoxy.glidePreloader import com.airbnb.mvrx.Async import com.airbnb.mvrx.Fail import com.airbnb.mvrx.Loading @@ -75,9 +77,11 @@ import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.extensions.showKeyboard import im.vector.app.core.extensions.trackItemsVisibilityChange import im.vector.app.core.glide.GlideApp +import im.vector.app.core.glide.GlideRequests import im.vector.app.core.intent.getMimeTypeFromUri import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider +import im.vector.app.core.ui.model.Size import im.vector.app.core.ui.views.ActiveCallView import im.vector.app.core.ui.views.ActiveCallViewHolder import im.vector.app.core.ui.views.ActiveConferenceView @@ -218,7 +222,8 @@ class RoomDetailFragment @Inject constructor( private val colorProvider: ColorProvider, private val notificationUtils: NotificationUtils, private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager, - private val matrixItemColorProvider: MatrixItemColorProvider + private val matrixItemColorProvider: MatrixItemColorProvider, + private val imageContentRenderer: ImageContentRenderer ) : VectorBaseFragment(), TimelineEventController.Callback, @@ -921,6 +926,16 @@ class RoomDetailFragment @Inject constructor( val touchHelper = ItemTouchHelper(swipeCallback) touchHelper.attachToRecyclerView(recyclerView) } + recyclerView.addGlidePreloader( + epoxyController = timelineEventController, + requestManager = GlideApp.with(this), + preloader = glidePreloader { requestManager, epoxyModel: MessageImageVideoItem, _ -> + imageContentRenderer.createGlideRequest( + epoxyModel.mediaData, + ImageContentRenderer.Mode.THUMBNAIL, + requestManager as GlideRequests + ) + }) } private fun updateJumpToReadMarkerViewVisibility() { diff --git a/vector/src/main/java/im/vector/app/features/media/ImageContentRenderer.kt b/vector/src/main/java/im/vector/app/features/media/ImageContentRenderer.kt index 0336e2d03c..d6ab24bfbd 100644 --- a/vector/src/main/java/im/vector/app/features/media/ImageContentRenderer.kt +++ b/vector/src/main/java/im/vector/app/features/media/ImageContentRenderer.kt @@ -33,6 +33,7 @@ import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.glide.GlideApp import im.vector.app.core.glide.GlideRequest +import im.vector.app.core.glide.GlideRequests import im.vector.app.core.ui.model.Size import im.vector.app.core.utils.DimensionConverter import im.vector.app.core.utils.isLocalFile @@ -206,12 +207,14 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: .into(imageView) } - private fun createGlideRequest(data: Data, mode: Mode, imageView: ImageView, size: Size): GlideRequest { + fun createGlideRequest(data: Data, mode: Mode, imageView: ImageView, size: Size): GlideRequest { + return createGlideRequest(data, mode, GlideApp.with(imageView), size) + } + + fun createGlideRequest(data: Data, mode: Mode, glideRequests: GlideRequests, size: Size = processSize(data, mode)): GlideRequest { return if (data.elementToDecrypt != null) { // Encrypted image - GlideApp - .with(imageView) - .load(data) + glideRequests.load(data) } else { // Clear image val contentUrlResolver = activeSessionHolder.getActiveSession().contentUrlResolver() @@ -223,15 +226,12 @@ class ImageContentRenderer @Inject constructor(private val activeSessionHolder: // Fallback to base url ?: data.url.takeIf { it?.startsWith("content://") == true } - GlideApp - .with(imageView) + glideRequests .load(resolvedUrl) .apply { if (mode == Mode.THUMBNAIL) { error( - GlideApp - .with(imageView) - .load(resolveUrl(data)) + glideRequests.load(resolveUrl(data)) ) } } From 11a47041618fb251fa1c43e2ac01621717729df5 Mon Sep 17 00:00:00 2001 From: ganfra Date: Thu, 24 Sep 2020 17:48:42 +0200 Subject: [PATCH 028/278] Clean files and update CHANGES --- CHANGES.md | 1 + .../home/room/detail/RoomDetailFragment.kt | 1 - .../detail/timeline/TimelineEventController.kt | 17 ++++++++++++++--- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 23bc0427e9..9971ee6d65 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,6 +6,7 @@ Features ✨: Improvements 🙌: - PIN code: request PIN code if phone has been locked + - Small optimisation of scrolling experience in timeline Bugfix 🐛: - Fix Splash layout on small screens diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index d03e6bad1e..e7140f06f4 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -81,7 +81,6 @@ import im.vector.app.core.glide.GlideRequests import im.vector.app.core.intent.getMimeTypeFromUri import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider -import im.vector.app.core.ui.model.Size import im.vector.app.core.ui.views.ActiveCallView import im.vector.app.core.ui.views.ActiveCallViewHolder import im.vector.app.core.ui.views.ActiveConferenceView diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index a04057882e..c266337520 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -56,6 +56,8 @@ import org.matrix.android.sdk.api.session.room.timeline.Timeline import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import javax.inject.Inject +private const val DEFAULT_PREFETCH_THRESHOLD = 30 + class TimelineEventController @Inject constructor(private val dateFormatter: VectorDateFormatter, private val contentUploadStateTrackerBinder: ContentUploadStateTrackerBinder, private val contentDownloadStateTrackerBinder: ContentDownloadStateTrackerBinder, @@ -192,11 +194,11 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec models.add(position, readMarker) } } - val shouldAdd = timeline?.hasMoreToLoad(Timeline.Direction.BACKWARDS) ?: false - if (shouldAdd) { + val shouldAddBackwardPrefetch = timeline?.hasMoreToLoad(Timeline.Direction.BACKWARDS) ?: false + if (shouldAddBackwardPrefetch) { val indexOfPrefetchBackward = (previousModelsSize - 1) + .coerceAtMost(models.size - DEFAULT_PREFETCH_THRESHOLD) .coerceAtLeast(0) - .coerceAtMost(models.size - 1) val loadingItem = LoadingItem_() .id("prefetch_backward_loading${System.currentTimeMillis()}") @@ -205,6 +207,15 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec models.add(indexOfPrefetchBackward, loadingItem) } + val shouldAddForwardPrefetch = timeline?.hasMoreToLoad(Timeline.Direction.FORWARDS) ?: false + if (shouldAddForwardPrefetch) { + val indexOfPrefetchForward = DEFAULT_PREFETCH_THRESHOLD.coerceAtMost(models.size - 1) + val loadingItem = LoadingItem_() + .id("prefetch_forward_loading${System.currentTimeMillis()}") + .showLoader(false) + .setVisibilityStateChangedListener(Timeline.Direction.FORWARDS) + models.add(indexOfPrefetchForward, loadingItem) + } previousModelsSize = models.size } From 2def7f3910c505931e97eab36ac43bb2f0152692 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 29 Sep 2020 16:10:54 +0200 Subject: [PATCH 029/278] PR Review --- CHANGES.md | 2 +- .../home/room/detail/timeline/TimelineEventController.kt | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9971ee6d65..a6f8982a27 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -6,7 +6,7 @@ Features ✨: Improvements 🙌: - PIN code: request PIN code if phone has been locked - - Small optimisation of scrolling experience in timeline + - Small optimisation of scrolling experience in timeline (#2114) Bugfix 🐛: - Fix Splash layout on small screens diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index c266337520..56de0f7829 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -381,9 +381,6 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec return shouldAdd } - /** - * Return true if added - */ private fun LoadingItem_.setVisibilityStateChangedListener(direction: Timeline.Direction): LoadingItem_ { return onVisibilityStateChanged { _, _, visibilityState -> if (visibilityState == VisibilityState.VISIBLE) { From 0bb75eed1fae04e1be317bcd52aa1cc6ada90a7b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 29 Sep 2020 16:41:55 +0200 Subject: [PATCH 030/278] Finish what has been started on #1376: use Intent.ACTION_GET_CONTENT instead of Intent.ACTION_OPEN_DOCUMENT for other pickers --- CHANGES.md | 2 +- .../src/main/java/im/vector/lib/multipicker/AudioPicker.kt | 2 +- .../src/main/java/im/vector/lib/multipicker/FilePicker.kt | 2 +- .../src/main/java/im/vector/lib/multipicker/VideoPicker.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 56f22bd4a9..488bc5ca32 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,7 +9,7 @@ Improvements 🙌: - Small optimisation of scrolling experience in timeline (#2114) Bugfix 🐛: - - Improve support for image selection with intent changes (#1376) + - Improve support for image/audio/video/file selection with intent changes (#1376) - Fix Splash layout on small screens Translations đŸ—Ŗ: diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt index 17c01bc8e3..c51084dd39 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt @@ -84,7 +84,7 @@ class AudioPicker(override val requestCode: Int) : Picker( } override fun createIntent(): Intent { - return Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + return Intent(Intent.ACTION_GET_CONTENT).apply { addCategory(Intent.CATEGORY_OPENABLE) putExtra(Intent.EXTRA_ALLOW_MULTIPLE, !single) type = "audio/*" diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt index 296685886d..d5718b9951 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt @@ -64,7 +64,7 @@ class FilePicker(override val requestCode: Int) : Picker(re } override fun createIntent(): Intent { - return Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + return Intent(Intent.ACTION_GET_CONTENT).apply { addCategory(Intent.CATEGORY_OPENABLE) putExtra(Intent.EXTRA_ALLOW_MULTIPLE, !single) type = "*/*" diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt index 7127e9defd..965c8e08e0 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt @@ -93,7 +93,7 @@ class VideoPicker(override val requestCode: Int) : Picker( } override fun createIntent(): Intent { - return Intent(Intent.ACTION_OPEN_DOCUMENT).apply { + return Intent(Intent.ACTION_GET_CONTENT).apply { addCategory(Intent.CATEGORY_OPENABLE) putExtra(Intent.EXTRA_ALLOW_MULTIPLE, !single) type = "video/*" From c20517599ed111e76d92d14980894a9820f2d055 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 29 Sep 2020 17:04:45 +0200 Subject: [PATCH 031/278] Add option to reset 4S if lost pass/key --- .../im/vector/app/core/di/FragmentModule.kt | 6 + .../VectorBaseBottomSheetDialogFragment.kt | 19 +++ .../core/ui/views/BottomSheetActionButton.kt | 8 ++ .../crypto/quads/SharedSecureStorageAction.kt | 3 + .../quads/SharedSecureStorageActivity.kt | 38 ++++-- .../quads/SharedSecureStorageViewModel.kt | 84 ++++++++++--- .../quads/SharedSecuredStorageKeyFragment.kt | 6 +- .../SharedSecuredStoragePassphraseFragment.kt | 4 + .../SharedSecuredStorageResetAllFragment.kt | 69 +++++++++++ .../crypto/recover/BootstrapBottomSheet.kt | 25 ++-- .../recover/BootstrapCrossSigningTask.kt | 35 ++++-- .../recover/BootstrapSharedViewModel.kt | 94 +++++++------- .../crypto/recover/BootstrapViewEvents.kt | 2 +- .../app/features/crypto/recover/SetupMode.kt | 50 ++++++++ .../crypto/verification/VerificationAction.kt | 1 + .../verification/VerificationBottomSheet.kt | 24 +++- .../VerificationBottomSheetViewModel.kt | 14 ++- .../features/navigation/DefaultNavigator.kt | 17 ++- .../app/features/navigation/Navigator.kt | 4 + .../devices/DeviceListBottomSheet.kt | 12 +- .../devices/DeviceListBottomSheetViewModel.kt | 21 ++-- .../VectorSettingsSecurityPrivacyFragment.kt | 5 +- .../SignOutBottomSheetDialogFragment.kt | 3 +- .../layout/fragment_ssss_access_from_key.xml | 26 +++- .../fragment_ssss_access_from_passphrase.xml | 21 +++- .../res/layout/fragment_ssss_reset_all.xml | 116 ++++++++++++++++++ vector/src/main/res/values/attrs.xml | 1 + vector/src/main/res/values/strings.xml | 10 ++ 28 files changed, 595 insertions(+), 123 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt create mode 100644 vector/src/main/java/im/vector/app/features/crypto/recover/SetupMode.kt create mode 100644 vector/src/main/res/layout/fragment_ssss_reset_all.xml diff --git a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt index 75f61a7b01..86d59b630b 100644 --- a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt +++ b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt @@ -27,6 +27,7 @@ import im.vector.app.features.contactsbook.ContactsBookFragment import im.vector.app.features.crypto.keysbackup.settings.KeysBackupSettingsFragment import im.vector.app.features.crypto.quads.SharedSecuredStorageKeyFragment import im.vector.app.features.crypto.quads.SharedSecuredStoragePassphraseFragment +import im.vector.app.features.crypto.quads.SharedSecuredStorageResetAllFragment import im.vector.app.features.crypto.recover.BootstrapAccountPasswordFragment import im.vector.app.features.crypto.recover.BootstrapConclusionFragment import im.vector.app.features.crypto.recover.BootstrapConfirmPassphraseFragment @@ -530,6 +531,11 @@ interface FragmentModule { @FragmentKey(SharedSecuredStorageKeyFragment::class) fun bindSharedSecuredStorageKeyFragment(fragment: SharedSecuredStorageKeyFragment): Fragment + @Binds + @IntoMap + @FragmentKey(SharedSecuredStorageResetAllFragment::class) + fun bindSharedSecuredStorageResetAllFragment(fragment: SharedSecuredStorageResetAllFragment): Fragment + @Binds @IntoMap @FragmentKey(SetIdentityServerFragment::class) 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 9ed5c5c455..761bb7227c 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 @@ -17,6 +17,7 @@ package im.vector.app.core.platform import android.app.Dialog import android.content.Context +import android.content.DialogInterface import android.os.Bundle import android.os.Parcelable import android.view.LayoutInflater @@ -86,6 +87,24 @@ abstract class VectorBaseBottomSheetDialogFragment : BottomSheetDialogFragment() open val showExpanded = false + interface ResultListener { + fun onBottomSheetResult(resultCode: Int, data: Any?) + + companion object { + const val RESULT_OK = 1 + const val RESULT_CANCEL = 0 + } + } + + var resultListener : ResultListener? = null + var bottomSheetResult: Int = ResultListener.RESULT_OK + var bottomSheetResultData: Any? = null + + override fun onDismiss(dialog: DialogInterface) { + super.onDismiss(dialog) + resultListener?.onBottomSheetResult(bottomSheetResult, bottomSheetResultData) + } + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(getLayoutResId(), container, false) unBinder = ButterKnife.bind(this, view) diff --git a/vector/src/main/java/im/vector/app/core/ui/views/BottomSheetActionButton.kt b/vector/src/main/java/im/vector/app/core/ui/views/BottomSheetActionButton.kt index 0259898ee3..d418822b7f 100644 --- a/vector/src/main/java/im/vector/app/core/ui/views/BottomSheetActionButton.kt +++ b/vector/src/main/java/im/vector/app/core/ui/views/BottomSheetActionButton.kt @@ -24,6 +24,7 @@ import android.view.View import android.widget.FrameLayout import android.widget.ImageView import android.widget.TextView +import androidx.core.content.ContextCompat import androidx.core.content.withStyledAttributes import androidx.core.view.isGone import androidx.core.view.isInvisible @@ -107,6 +108,12 @@ class BottomSheetActionButton @JvmOverloads constructor( leftIconImageView.imageTintList = value?.let { ColorStateList.valueOf(value) } } + var titleTextColor: Int? = null + set(value) { + field = value + value?.let { actionTextView.setTextColor(it) } + } + init { inflate(context, R.layout.item_verification_action, this) ButterKnife.bind(this) @@ -120,6 +127,7 @@ class BottomSheetActionButton @JvmOverloads constructor( rightIcon = getDrawable(R.styleable.BottomSheetActionButton_rightIcon) tint = getColor(R.styleable.BottomSheetActionButton_tint, ThemeUtils.getColor(context, android.R.attr.textColor)) + titleTextColor = getColor(R.styleable.BottomSheetActionButton_titleTextColor, ContextCompat.getColor(context, R.color.riotx_accent)) } } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageAction.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageAction.kt index b47b7dc3a9..30a7ab3cc0 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageAction.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageAction.kt @@ -28,6 +28,8 @@ sealed class SharedSecureStorageAction : VectorViewModelAction { object Cancel : SharedSecureStorageAction() data class SubmitPassphrase(val passphrase: String) : SharedSecureStorageAction() data class SubmitKey(val recoveryKey: String) : SharedSecureStorageAction() + object ForgotResetAll : SharedSecureStorageAction() + object DoResetAll : SharedSecureStorageAction() } sealed class SharedSecureStorageViewEvent : VectorViewEvents { @@ -40,4 +42,5 @@ sealed class SharedSecureStorageViewEvent : VectorViewEvents { object ShowModalLoading : SharedSecureStorageViewEvent() object HideModalLoading : SharedSecureStorageViewEvent() data class UpdateLoadingState(val waitingData: WaitingViewData) : SharedSecureStorageViewEvent() + object ShowResetBottomSheet : SharedSecureStorageViewEvent() } diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt index bca7a63470..0cc28609c9 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt @@ -31,12 +31,14 @@ import im.vector.app.core.di.ScreenComponent import im.vector.app.core.error.ErrorFormatter import im.vector.app.core.extensions.commitTransaction import im.vector.app.core.platform.SimpleFragmentActivity +import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment +import im.vector.app.features.crypto.recover.SetupMode import kotlinx.android.parcel.Parcelize import kotlinx.android.synthetic.main.activity.* import javax.inject.Inject import kotlin.reflect.KClass -class SharedSecureStorageActivity : SimpleFragmentActivity() { +class SharedSecureStorageActivity : SimpleFragmentActivity(), VectorBaseBottomSheetDialogFragment.ResultListener { @Parcelize data class Args( @@ -69,18 +71,22 @@ class SharedSecureStorageActivity : SimpleFragmentActivity() { private fun renderState(state: SharedSecureStorageViewState) { if (!state.ready) return - val fragment = if (state.hasPassphrase) { - if (state.useKey) SharedSecuredStorageKeyFragment::class else SharedSecuredStoragePassphraseFragment::class - } else SharedSecuredStorageKeyFragment::class + val fragment = + when (state.step) { + SharedSecureStorageViewState.Step.EnterPassphrase -> SharedSecuredStoragePassphraseFragment::class + SharedSecureStorageViewState.Step.EnterKey -> SharedSecuredStorageKeyFragment::class + SharedSecureStorageViewState.Step.ResetAll -> SharedSecuredStorageResetAllFragment::class + } + showFragment(fragment, Bundle()) } private fun observeViewEvents(it: SharedSecureStorageViewEvent?) { when (it) { - is SharedSecureStorageViewEvent.Dismiss -> { + is SharedSecureStorageViewEvent.Dismiss -> { finish() } - is SharedSecureStorageViewEvent.Error -> { + is SharedSecureStorageViewEvent.Error -> { AlertDialog.Builder(this) .setTitle(getString(R.string.dialog_title_error)) .setMessage(it.message) @@ -92,21 +98,24 @@ class SharedSecureStorageActivity : SimpleFragmentActivity() { } .show() } - is SharedSecureStorageViewEvent.ShowModalLoading -> { + is SharedSecureStorageViewEvent.ShowModalLoading -> { showWaitingView() } - is SharedSecureStorageViewEvent.HideModalLoading -> { + is SharedSecureStorageViewEvent.HideModalLoading -> { hideWaitingView() } - is SharedSecureStorageViewEvent.UpdateLoadingState -> { + is SharedSecureStorageViewEvent.UpdateLoadingState -> { updateWaitingView(it.waitingData) } - is SharedSecureStorageViewEvent.FinishSuccess -> { + is SharedSecureStorageViewEvent.FinishSuccess -> { val dataResult = Intent() dataResult.putExtra(EXTRA_DATA_RESULT, it.cypherResult) setResult(Activity.RESULT_OK, dataResult) finish() } + is SharedSecureStorageViewEvent.ShowResetBottomSheet -> { + navigator.open4SSetup(this, SetupMode.HARD_RESET, this) + } } } @@ -124,6 +133,7 @@ class SharedSecureStorageActivity : SimpleFragmentActivity() { companion object { const val EXTRA_DATA_RESULT = "EXTRA_DATA_RESULT" + const val EXTRA_DATA_RESET = "EXTRA_DATA_RESET" const val DEFAULT_RESULT_KEYSTORE_ALIAS = "SharedSecureStorageActivity" fun newIntent(context: Context, @@ -140,4 +150,12 @@ class SharedSecureStorageActivity : SimpleFragmentActivity() { } } } + + override fun onBottomSheetResult(resultCode: Int, data: Any?) { + if (resultCode == VectorBaseBottomSheetDialogFragment.ResultListener.RESULT_OK) { + // the 4S has been reset + setResult(Activity.RESULT_OK, Intent().apply { putExtra(EXTRA_DATA_RESET, true) }) + finish() + } + } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageViewModel.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageViewModel.kt index 5bc87dfce7..951ff4ede6 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageViewModel.kt @@ -33,6 +33,9 @@ import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.WaitingViewData import im.vector.app.core.resources.StringProvider +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.matrix.android.sdk.api.listeners.ProgressListener import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.securestorage.IntegrityResult @@ -40,19 +43,26 @@ import org.matrix.android.sdk.api.session.securestorage.KeyInfoResult import org.matrix.android.sdk.api.session.securestorage.RawBytesKeySpec import org.matrix.android.sdk.internal.crypto.crosssigning.toBase64NoPadding import org.matrix.android.sdk.internal.util.awaitCallback -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext +import org.matrix.android.sdk.rx.rx import timber.log.Timber import java.io.ByteArrayOutputStream data class SharedSecureStorageViewState( val ready: Boolean = false, val hasPassphrase: Boolean = true, - val useKey: Boolean = false, val passphraseVisible: Boolean = false, - val checkingSSSSAction: Async = Uninitialized -) : MvRxState + val checkingSSSSAction: Async = Uninitialized, + val step: Step = Step.EnterPassphrase, + val activeDeviceCount: Int = 0, + val showResetAllAction: Boolean = false, + val userId: String = "" +) : MvRxState { + enum class Step { + EnterPassphrase, + EnterKey, + ResetAll + } +} class SharedSecureStorageViewModel @AssistedInject constructor( @Assisted initialState: SharedSecureStorageViewState, @@ -67,6 +77,10 @@ class SharedSecureStorageViewModel @AssistedInject constructor( } init { + + setState { + copy(userId = session.myUserId) + } val isValid = session.sharedSecretStorageService.checkShouldBeAbleToAccessSecrets(args.requestedSecrets, args.keyId) is IntegrityResult.Success if (!isValid) { _viewEvents.post( @@ -86,20 +100,30 @@ class SharedSecureStorageViewModel @AssistedInject constructor( if (info.content.passphrase != null) { setState { copy( - ready = true, hasPassphrase = true, - useKey = false + ready = true, + step = SharedSecureStorageViewState.Step.EnterPassphrase ) } } else { setState { copy( + hasPassphrase = false, ready = true, - hasPassphrase = false + step = SharedSecureStorageViewState.Step.EnterKey ) } } } + + session.rx() + .liveUserCryptoDevices(session.myUserId) + .distinctUntilChanged() + .execute { + copy( + activeDeviceCount = it.invoke()?.size ?: 0 + ) + } } override fun handle(action: SharedSecureStorageAction) = withState { @@ -110,27 +134,52 @@ class SharedSecureStorageViewModel @AssistedInject constructor( SharedSecureStorageAction.UseKey -> handleUseKey() is SharedSecureStorageAction.SubmitKey -> handleSubmitKey(action) SharedSecureStorageAction.Back -> handleBack() + SharedSecureStorageAction.ForgotResetAll -> handleResetAll() + SharedSecureStorageAction.DoResetAll -> handleDoResetAll() }.exhaustive } + private fun handleDoResetAll() { + _viewEvents.post(SharedSecureStorageViewEvent.ShowResetBottomSheet) + } + + private fun handleResetAll() { + setState { + copy( + step = SharedSecureStorageViewState.Step.ResetAll + ) + } + } + private fun handleUseKey() { setState { copy( - useKey = true + step = SharedSecureStorageViewState.Step.EnterKey ) } } private fun handleBack() = withState { state -> if (state.checkingSSSSAction is Loading) return@withState // ignore - if (state.hasPassphrase && state.useKey) { - setState { - copy( - useKey = false - ) + when (state.step) { + SharedSecureStorageViewState.Step.EnterKey -> { + setState { + copy( + step = SharedSecureStorageViewState.Step.EnterPassphrase + ) + } + } + SharedSecureStorageViewState.Step.ResetAll -> { + setState { + copy( + step = if (state.hasPassphrase) SharedSecureStorageViewState.Step.EnterPassphrase + else SharedSecureStorageViewState.Step.EnterKey + ) + } + } + else -> { + _viewEvents.post(SharedSecureStorageViewEvent.Dismiss) } - } else { - _viewEvents.post(SharedSecureStorageViewEvent.Dismiss) } } @@ -158,6 +207,7 @@ class SharedSecureStorageViewModel @AssistedInject constructor( val keySpec = RawBytesKeySpec.fromRecoveryKey(recoveryKey) ?: return@launch Unit.also { _viewEvents.post(SharedSecureStorageViewEvent.KeyInlineError(stringProvider.getString(R.string.bootstrap_invalid_recovery_key))) _viewEvents.post(SharedSecureStorageViewEvent.HideModalLoading) + setState { copy(checkingSSSSAction = Fail(IllegalArgumentException(stringProvider.getString(R.string.bootstrap_invalid_recovery_key)))) } } withContext(Dispatchers.IO) { diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt index ee47a4d8e9..366c979155 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt @@ -27,9 +27,9 @@ import com.jakewharton.rxbinding3.widget.textChanges import im.vector.app.R import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.startImportTextFromFileIntent -import org.matrix.android.sdk.api.extensions.tryOrNull import io.reactivex.android.schedulers.AndroidSchedulers import kotlinx.android.synthetic.main.fragment_ssss_access_from_key.* +import org.matrix.android.sdk.api.extensions.tryOrNull import java.util.concurrent.TimeUnit import javax.inject.Inject @@ -63,6 +63,10 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment ssss_key_use_file.debouncedClicks { startImportTextFromFileIntent(this, IMPORT_FILE_REQ) } + ssss_key_reset.clickableView.debouncedClicks { + sharedViewModel.handle(SharedSecureStorageAction.ForgotResetAll) + } + sharedViewModel.observeViewEvents { when (it) { is SharedSecureStorageViewEvent.KeyInlineError -> { diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStoragePassphraseFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStoragePassphraseFragment.kt index 09e67948d0..97047fbc65 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStoragePassphraseFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStoragePassphraseFragment.kt @@ -74,6 +74,10 @@ class SharedSecuredStoragePassphraseFragment @Inject constructor( } .disposeOnDestroyView() + ssss_passphrase_reset.clickableView.debouncedClicks { + sharedViewModel.handle(SharedSecureStorageAction.ForgotResetAll) + } + sharedViewModel.observeViewEvents { when (it) { is SharedSecureStorageViewEvent.InlineError -> { diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt new file mode 100644 index 0000000000..314abda38c --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2020 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.crypto.quads + +import android.os.Bundle +import android.view.View +import androidx.core.view.isVisible +import com.airbnb.mvrx.activityViewModel +import com.airbnb.mvrx.withState +import im.vector.app.R +import im.vector.app.core.platform.VectorBaseFragment +import im.vector.app.core.resources.StringProvider +import im.vector.app.features.roommemberprofile.devices.DeviceListBottomSheet +import kotlinx.android.synthetic.main.fragment_ssss_reset_all.* +import javax.inject.Inject + +class SharedSecuredStorageResetAllFragment @Inject constructor( + private val stringProvider: StringProvider +) : VectorBaseFragment() { + + override fun getLayoutResId() = R.layout.fragment_ssss_reset_all + + val sharedViewModel: SharedSecureStorageViewModel by activityViewModel() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + ssss_reset_button_reset.debouncedClicks { + sharedViewModel.handle(SharedSecureStorageAction.DoResetAll) + } + + ssss_reset_button_cancel.debouncedClicks { + sharedViewModel.handle(SharedSecureStorageAction.Back) + } + + ssss_reset_other_devices.debouncedClicks { + withState(sharedViewModel) { + DeviceListBottomSheet.newInstance(it.userId, false).show(childFragmentManager, "DEV_LIST") + } + } + + sharedViewModel.subscribe(this) { + if (it.activeDeviceCount == 0) { + ssss_reset_other_devices.isVisible = false + } else { + ssss_reset_other_devices.isVisible = true + ssss_reset_other_devices.text = stringProvider.getQuantityString( + R.plurals.secure_backup_reset_devices_you_can_verify, + it.activeDeviceCount, + it.activeDeviceCount + ) + } + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt index 1b9beabe9c..5b5b4e1931 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt @@ -45,8 +45,10 @@ class BootstrapBottomSheet : VectorBaseBottomSheetDialogFragment() { @Parcelize data class Args( - val initCrossSigningOnly: Boolean, - val forceReset4S: Boolean +// val initCrossSigningOnly: Boolean, + val setUpMode: SetupMode = SetupMode.NORMAL +// val forceReset4S: Boolean, +// val resetAllUnknownSecrets: Boolean ) : Parcelable override val showExpanded = true @@ -66,7 +68,10 @@ class BootstrapBottomSheet : VectorBaseBottomSheetDialogFragment() { super.onViewCreated(view, savedInstanceState) viewModel.observeViewEvents { event -> when (event) { - is BootstrapViewEvents.Dismiss -> dismiss() + is BootstrapViewEvents.Dismiss -> { + bottomSheetResult = if (event.success) ResultListener.RESULT_OK else ResultListener.RESULT_CANCEL + dismiss() + } is BootstrapViewEvents.ModalError -> { AlertDialog.Builder(requireActivity()) .setTitle(R.string.dialog_title_error) @@ -90,6 +95,7 @@ class BootstrapBottomSheet : VectorBaseBottomSheetDialogFragment() { .setMessage(R.string.bootstrap_cancel_text) .setPositiveButton(R.string._continue, null) .setNegativeButton(R.string.skip) { _, _ -> + bottomSheetResult = ResultListener.RESULT_CANCEL dismiss() } .show() @@ -181,16 +187,15 @@ class BootstrapBottomSheet : VectorBaseBottomSheetDialogFragment() { const val EXTRA_ARGS = "EXTRA_ARGS" - fun show(fragmentManager: FragmentManager, initCrossSigningOnly: Boolean, forceReset4S: Boolean) { - BootstrapBottomSheet().apply { + fun show(fragmentManager: FragmentManager, mode: SetupMode): BootstrapBottomSheet { + return BootstrapBottomSheet().apply { isCancelable = false arguments = Bundle().apply { - this.putParcelable(EXTRA_ARGS, Args( - initCrossSigningOnly, - forceReset4S - )) + this.putParcelable(EXTRA_ARGS, Args(setUpMode = mode)) } - }.show(fragmentManager, "BootstrapBottomSheet") + }.also { + it.show(fragmentManager, "BootstrapBottomSheet") + } } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt index 5da788583e..05e9a836f6 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt @@ -69,10 +69,12 @@ interface BootstrapProgressListener { data class Params( val userPasswordAuth: UserPasswordAuth? = null, - val initOnlyCrossSigning: Boolean = false, +// val initOnlyCrossSigning: Boolean = false, val progressListener: BootstrapProgressListener? = null, val passphrase: String?, - val keySpec: SsssKeySpec? = null + val keySpec: SsssKeySpec? = null, +// val resetAllIfNeeded: Boolean = false, + val setupMode: SetupMode ) // TODO Rename to CreateServerRecovery @@ -84,9 +86,13 @@ class BootstrapCrossSigningTask @Inject constructor( override suspend fun execute(params: Params): BootstrapResult { val crossSigningService = session.cryptoService().crossSigningService() - Timber.d("## BootstrapCrossSigningTask: initXSOnly:${params.initOnlyCrossSigning} Starting...") + Timber.d("## BootstrapCrossSigningTask: mode:${params.setupMode} Starting...") // Ensure cross-signing is initialized. Due to migration it is maybe not always correctly initialized - if (!crossSigningService.isCrossSigningInitialized()) { + + val shouldSetCrossSigning = !crossSigningService.isCrossSigningInitialized() + || (params.setupMode == SetupMode.PASSPHRASE_AND_NEEDED_SECRETS_RESET && !crossSigningService.allPrivateKeysKnown()) + || (params.setupMode == SetupMode.HARD_RESET) + if (shouldSetCrossSigning) { Timber.d("## BootstrapCrossSigningTask: Cross signing not enabled, so initialize") params.progressListener?.onProgress( WaitingViewData( @@ -99,7 +105,7 @@ class BootstrapCrossSigningTask @Inject constructor( awaitCallback { crossSigningService.initializeCrossSigning(params.userPasswordAuth, it) } - if (params.initOnlyCrossSigning) { + if (params.setupMode == SetupMode.CROSS_SIGNING_ONLY) { return BootstrapResult.SuccessCrossSigningOnly } } catch (failure: Throwable) { @@ -107,7 +113,7 @@ class BootstrapCrossSigningTask @Inject constructor( } } else { Timber.d("## BootstrapCrossSigningTask: Cross signing already setup, go to 4S setup") - if (params.initOnlyCrossSigning) { + if (params.setupMode == SetupMode.CROSS_SIGNING_ONLY) { // not sure how this can happen?? return handleInitializeXSigningError(IllegalArgumentException("Cross signing already setup")) } @@ -236,7 +242,13 @@ class BootstrapCrossSigningTask @Inject constructor( val serverVersion = awaitCallback { session.cryptoService().keysBackupService().getCurrentVersion(it) } - if (serverVersion == null) { + + val knownMegolmSecret = session.cryptoService().keysBackupService().getKeyBackupRecoveryKeyInfo() + val isMegolmBackupSecretKnown = knownMegolmSecret != null && knownMegolmSecret.version == serverVersion?.version + val shouldCreateKeyBackup = serverVersion == null + || (params.setupMode == SetupMode.PASSPHRASE_AND_NEEDED_SECRETS_RESET && !isMegolmBackupSecretKnown) + || (params.setupMode == SetupMode.HARD_RESET) + if (shouldCreateKeyBackup) { Timber.d("## BootstrapCrossSigningTask: Creating 4S - Create megolm backup") val creationInfo = awaitCallback { session.cryptoService().keysBackupService().prepareKeysBackupVersion(null, null, it) @@ -260,16 +272,15 @@ class BootstrapCrossSigningTask @Inject constructor( } else { Timber.d("## BootstrapCrossSigningTask: Creating 4S - Existing megolm backup found") // ensure we store existing backup secret if we have it! - val knownSecret = session.cryptoService().keysBackupService().getKeyBackupRecoveryKeyInfo() - if (knownSecret != null && knownSecret.version == serverVersion.version) { + if (isMegolmBackupSecretKnown) { // check it matches val isValid = awaitCallback { - session.cryptoService().keysBackupService().isValidRecoveryKeyForCurrentVersion(knownSecret.recoveryKey, it) + session.cryptoService().keysBackupService().isValidRecoveryKeyForCurrentVersion(knownMegolmSecret!!.recoveryKey, it) } if (isValid) { Timber.d("## BootstrapCrossSigningTask: Creating 4S - Megolm key valid and known") awaitCallback { - extractCurveKeyFromRecoveryKey(knownSecret.recoveryKey)?.toBase64NoPadding()?.let { secret -> + extractCurveKeyFromRecoveryKey(knownMegolmSecret!!.recoveryKey)?.toBase64NoPadding()?.let { secret -> ssssService.storeSecret( KEYBACKUP_SECRET_SSSS_NAME, secret, @@ -286,7 +297,7 @@ class BootstrapCrossSigningTask @Inject constructor( Timber.e("## BootstrapCrossSigningTask: Failed to init keybackup") } - Timber.d("## BootstrapCrossSigningTask: initXSOnly:${params.initOnlyCrossSigning} Finished") + Timber.d("## BootstrapCrossSigningTask: mode:${params.setupMode} Finished") return BootstrapResult.Success(keyInfo) } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt index 32b4771286..7f3f7c0667 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt @@ -34,6 +34,8 @@ import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.platform.WaitingViewData import im.vector.app.core.resources.StringProvider import im.vector.app.features.login.ReAuthHelper +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.securestorage.RawBytesKeySpec @@ -41,8 +43,6 @@ import org.matrix.android.sdk.internal.crypto.keysbackup.model.rest.KeysVersionR import org.matrix.android.sdk.internal.crypto.keysbackup.util.extractCurveKeyFromRecoveryKey import org.matrix.android.sdk.internal.crypto.model.rest.UserPasswordAuth import org.matrix.android.sdk.internal.util.awaitCallback -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import java.io.OutputStream class BootstrapSharedViewModel @AssistedInject constructor( @@ -69,46 +69,52 @@ class BootstrapSharedViewModel @AssistedInject constructor( init { - if (args.forceReset4S) { - setState { - copy(step = BootstrapStep.FirstForm(keyBackUpExist = false, reset = true)) - } - } else if (args.initCrossSigningOnly) { - // Go straight to account password - setState { - copy(step = BootstrapStep.AccountPassword(false)) - } - } else { - // need to check if user have an existing keybackup - setState { - copy(step = BootstrapStep.CheckingMigration) - } - - // We need to check if there is an existing backup - viewModelScope.launch(Dispatchers.IO) { - val version = awaitCallback { - session.cryptoService().keysBackupService().getCurrentVersion(it) + when (args.setUpMode) { + SetupMode.PASSPHRASE_RESET, + SetupMode.PASSPHRASE_AND_NEEDED_SECRETS_RESET, + SetupMode.HARD_RESET -> { + setState { + copy(step = BootstrapStep.FirstForm(keyBackUpExist = false, reset = true)) } - if (version == null) { - // we just resume plain bootstrap - doesKeyBackupExist = false - setState { - copy(step = BootstrapStep.FirstForm(keyBackUpExist = doesKeyBackupExist)) + } + SetupMode.CROSS_SIGNING_ONLY -> { + // Go straight to account password + setState { + copy(step = BootstrapStep.AccountPassword(false)) + } + } + SetupMode.NORMAL -> { + // need to check if user have an existing keybackup + setState { + copy(step = BootstrapStep.CheckingMigration) + } + + // We need to check if there is an existing backup + viewModelScope.launch(Dispatchers.IO) { + val version = awaitCallback { + session.cryptoService().keysBackupService().getCurrentVersion(it) } - } else { - // we need to get existing backup passphrase/key and convert to SSSS - val keyVersion = awaitCallback { - session.cryptoService().keysBackupService().getVersion(version.version ?: "", it) - } - if (keyVersion == null) { - // strange case... just finish? - _viewEvents.post(BootstrapViewEvents.Dismiss) - } else { - doesKeyBackupExist = true - isBackupCreatedFromPassphrase = keyVersion.getAuthDataAsMegolmBackupAuthData()?.privateKeySalt != null + if (version == null) { + // we just resume plain bootstrap + doesKeyBackupExist = false setState { copy(step = BootstrapStep.FirstForm(keyBackUpExist = doesKeyBackupExist)) } + } else { + // we need to get existing backup passphrase/key and convert to SSSS + val keyVersion = awaitCallback { + session.cryptoService().keysBackupService().getVersion(version.version ?: "", it) + } + if (keyVersion == null) { + // strange case... just finish? + _viewEvents.post(BootstrapViewEvents.Dismiss(false)) + } else { + doesKeyBackupExist = true + isBackupCreatedFromPassphrase = keyVersion.getAuthDataAsMegolmBackupAuthData()?.privateKeySalt != null + setState { + copy(step = BootstrapStep.FirstForm(keyBackUpExist = doesKeyBackupExist)) + } + } } } } @@ -234,7 +240,7 @@ class BootstrapSharedViewModel @AssistedInject constructor( } } BootstrapActions.Completed -> { - _viewEvents.post(BootstrapViewEvents.Dismiss) + _viewEvents.post(BootstrapViewEvents.Dismiss(true)) } BootstrapActions.GoToCompleted -> { setState { @@ -395,16 +401,16 @@ class BootstrapSharedViewModel @AssistedInject constructor( bootstrapTask.invoke(this, Params( userPasswordAuth = userPasswordAuth, - initOnlyCrossSigning = args.initCrossSigningOnly, progressListener = progressListener, passphrase = state.passphrase, - keySpec = state.migrationRecoveryKey?.let { extractCurveKeyFromRecoveryKey(it)?.let { RawBytesKeySpec(it) } } + keySpec = state.migrationRecoveryKey?.let { extractCurveKeyFromRecoveryKey(it)?.let { RawBytesKeySpec(it) } }, + setupMode = args.setUpMode ) ) { bootstrapResult -> when (bootstrapResult) { - is BootstrapResult.SuccessCrossSigningOnly -> { + is BootstrapResult.SuccessCrossSigningOnly -> { // TPD - _viewEvents.post(BootstrapViewEvents.Dismiss) + _viewEvents.post(BootstrapViewEvents.Dismiss(true)) } is BootstrapResult.Success -> { setState { @@ -428,7 +434,7 @@ class BootstrapSharedViewModel @AssistedInject constructor( } is BootstrapResult.UnsupportedAuthFlow -> { _viewEvents.post(BootstrapViewEvents.ModalError(stringProvider.getString(R.string.auth_flow_not_supported))) - _viewEvents.post(BootstrapViewEvents.Dismiss) + _viewEvents.post(BootstrapViewEvents.Dismiss(false)) } is BootstrapResult.InvalidPasswordError -> { // it's a bad password @@ -558,7 +564,7 @@ class BootstrapSharedViewModel @AssistedInject constructor( override fun create(viewModelContext: ViewModelContext, state: BootstrapViewState): BootstrapSharedViewModel? { val fragment: BootstrapBottomSheet = (viewModelContext as FragmentViewModelContext).fragment() val args: BootstrapBottomSheet.Args = fragment.arguments?.getParcelable(BootstrapBottomSheet.EXTRA_ARGS) - ?: BootstrapBottomSheet.Args(initCrossSigningOnly = true, forceReset4S = false) + ?: BootstrapBottomSheet.Args(SetupMode.CROSS_SIGNING_ONLY) return fragment.bootstrapViewModelFactory.create(state, args) } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapViewEvents.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapViewEvents.kt index 58bc64a9ad..be523a0ce3 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapViewEvents.kt @@ -19,7 +19,7 @@ package im.vector.app.features.crypto.recover import im.vector.app.core.platform.VectorViewEvents sealed class BootstrapViewEvents : VectorViewEvents { - object Dismiss : BootstrapViewEvents() + data class Dismiss(val success: Boolean) : BootstrapViewEvents() data class ModalError(val error: String) : BootstrapViewEvents() object RecoveryKeySaved: BootstrapViewEvents() data class SkipBootstrap(val genKeyOption: Boolean = true): BootstrapViewEvents() diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/SetupMode.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/SetupMode.kt new file mode 100644 index 0000000000..0879490e79 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/SetupMode.kt @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020 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.crypto.recover + +enum class SetupMode { + + /** + * Only setup cross signing, no 4S or megolm backup + */ + CROSS_SIGNING_ONLY, + + /** + * Normal setup mode. + */ + NORMAL, + + /** + * Only reset the 4S passphrase/key, but do not touch + * to existing cross-signing or megolm backup + * It take the local known secrets and put them in 4S + */ + PASSPHRASE_RESET, + + /** + * Resets the passphrase/key, and all missing secrets + * are re-created. Meaning that if cross signing is setup and the secrets + * keys are not known, cross signing will be reset (if secret is known we just keep same cross signing) + * Same apply to megolm + */ + PASSPHRASE_AND_NEEDED_SECRETS_RESET, + + /** + * Resets the passphrase/key, cross signing and megolm backup + */ + HARD_RESET +} diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt index 1c6ea413cb..d0fd825ebb 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt @@ -31,4 +31,5 @@ sealed class VerificationAction : VectorViewModelAction { object SkipVerification : VerificationAction() object VerifyFromPassphrase : VerificationAction() data class GotResultFromSsss(val cypherData: String, val alias: String) : VerificationAction() + object SecuredStorageHasBeenReseted : VerificationAction() } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt index f979539f2e..c170809b51 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt @@ -48,6 +48,7 @@ import im.vector.app.features.crypto.verification.qrconfirmation.VerificationQrS import im.vector.app.features.crypto.verification.request.VerificationRequestFragment import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.settings.VectorSettingsActivity +import kotlinx.android.parcel.Parcelize import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME import org.matrix.android.sdk.api.session.crypto.crosssigning.MASTER_KEY_SSSS_NAME @@ -55,7 +56,6 @@ import org.matrix.android.sdk.api.session.crypto.crosssigning.SELF_SIGNING_KEY_S import org.matrix.android.sdk.api.session.crypto.crosssigning.USER_SIGNING_KEY_SSSS_NAME import org.matrix.android.sdk.api.session.crypto.verification.CancelCode import org.matrix.android.sdk.api.session.crypto.verification.VerificationTxState -import kotlinx.android.parcel.Parcelize import timber.log.Timber import javax.inject.Inject import kotlin.reflect.KClass @@ -76,6 +76,7 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { @Inject lateinit var verificationViewModelFactory: VerificationBottomSheetViewModel.Factory + @Inject lateinit var avatarRenderer: AvatarRenderer @@ -146,8 +147,13 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (resultCode == Activity.RESULT_OK && requestCode == SECRET_REQUEST_CODE) { - data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT)?.let { - viewModel.handle(VerificationAction.GotResultFromSsss(it, SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS)) + val result = data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) + val reseted = data?.getBooleanExtra(SharedSecureStorageActivity.EXTRA_DATA_RESET, false) ?: false + if (result != null) { + viewModel.handle(VerificationAction.GotResultFromSsss(result, SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS)) + } else if (reseted) { + // all have been reset, so we are verified? + viewModel.handle(VerificationAction.SecuredStorageHasBeenReseted) } } super.onActivityResult(requestCode, resultCode, data) @@ -182,6 +188,17 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { } } + if (state.quadsHasBeenReseted) { + showFragment(VerificationConclusionFragment::class, Bundle().apply { + putParcelable(MvRx.KEY_ARG, VerificationConclusionFragment.Args( + isSuccessFull = true, + isMe = true, + cancelReason = null + )) + }) + return@withState + } + if (state.userThinkItsNotHim) { otherUserNameText.text = getString(R.string.dialog_title_warning) showFragment(VerificationNotMeFragment::class, Bundle()) @@ -356,6 +373,7 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { } } } + fun forSelfVerification(session: Session, outgoingRequest: String): VerificationBottomSheet { return VerificationBottomSheet().apply { arguments = Bundle().apply { 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 a4ce9bd38d..1638450725 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 @@ -31,6 +31,7 @@ import im.vector.app.R import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.resources.StringProvider +import kotlinx.coroutines.Dispatchers import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME @@ -74,7 +75,8 @@ data class VerificationBottomSheetViewState( val currentDeviceCanCrossSign: Boolean = false, val userWantsToCancel: Boolean = false, val userThinkItsNotHim: Boolean = false, - val quadSContainsSecrets: Boolean = true + val quadSContainsSecrets: Boolean = true, + val quadsHasBeenReseted: Boolean = false ) : MvRxState class VerificationBottomSheetViewModel @AssistedInject constructor( @@ -349,6 +351,14 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( is VerificationAction.GotResultFromSsss -> { handleSecretBackFromSSSS(action) } + VerificationAction.SecuredStorageHasBeenReseted -> { + if (session.cryptoService().crossSigningService().allPrivateKeysKnown()) { + setState { + copy(quadsHasBeenReseted = true) + } + } + Unit + } }.exhaustive } @@ -393,7 +403,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( } private fun tentativeRestoreBackup(res: Map?) { - viewModelScope.launch { + viewModelScope.launch(Dispatchers.IO) { try { val secret = res?.get(KEYBACKUP_SECRET_SSSS_NAME) ?: return@launch Unit.also { Timber.v("## Keybackup secret not restored from SSSS") diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 5de8796c06..66dd9544b4 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -30,6 +30,7 @@ import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.error.fatalError import im.vector.app.core.platform.VectorBaseActivity +import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.core.utils.toast import im.vector.app.features.call.conference.JitsiCallViewModel import im.vector.app.features.call.conference.VectorJitsiActivity @@ -37,6 +38,7 @@ import im.vector.app.features.createdirect.CreateDirectRoomActivity import im.vector.app.features.crypto.keysbackup.settings.KeysBackupManageActivity import im.vector.app.features.crypto.keysbackup.setup.KeysBackupSetupActivity import im.vector.app.features.crypto.recover.BootstrapBottomSheet +import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.crypto.verification.SupportedVerificationMethodsProvider import im.vector.app.features.crypto.verification.VerificationBottomSheet import im.vector.app.features.debug.DebugMenuActivity @@ -153,7 +155,10 @@ class DefaultNavigator @Inject constructor( override fun upgradeSessionSecurity(context: Context, initCrossSigningOnly: Boolean) { if (context is VectorBaseActivity) { - BootstrapBottomSheet.show(context.supportFragmentManager, initCrossSigningOnly, false) + BootstrapBottomSheet.show( + context.supportFragmentManager, + if (initCrossSigningOnly) SetupMode.CROSS_SIGNING_ONLY else SetupMode.NORMAL + ) } } @@ -226,13 +231,21 @@ class DefaultNavigator @Inject constructor( // if cross signing is enabled we should propose full 4S sessionHolder.getSafeActiveSession()?.let { session -> if (session.cryptoService().crossSigningService().canCrossSign() && context is VectorBaseActivity) { - BootstrapBottomSheet.show(context.supportFragmentManager, initCrossSigningOnly = false, forceReset4S = false) + BootstrapBottomSheet.show(context.supportFragmentManager, SetupMode.NORMAL) } else { context.startActivity(KeysBackupSetupActivity.intent(context, showManualExport)) } } } + override fun open4SSetup(context: Context, setupMode: SetupMode, listener: VectorBaseBottomSheetDialogFragment.ResultListener?) { + if (context is VectorBaseActivity) { + BootstrapBottomSheet.show(context.supportFragmentManager, setupMode).also { + it.resultListener = listener + } + } + } + override fun openKeysBackupManager(context: Context) { context.startActivity(KeysBackupManageActivity.intent(context)) } diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index ed710a124f..3f255f72ef 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -21,6 +21,8 @@ import android.content.Context import android.view.View import androidx.core.util.Pair import androidx.fragment.app.Fragment +import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment +import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.home.room.detail.widget.WidgetRequestCodes import im.vector.app.features.media.AttachmentData import im.vector.app.features.pin.PinActivity @@ -71,6 +73,8 @@ interface Navigator { fun openKeysBackupSetup(context: Context, showManualExport: Boolean) + fun open4SSetup(context: Context, setupMode: SetupMode, listener: VectorBaseBottomSheetDialogFragment.ResultListener?) + fun openKeysBackupManager(context: Context) fun openGroupDetail(groupId: String, context: Context, buildTask: Boolean = false) diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt index a8c6842c08..9ba1c59983 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt @@ -18,6 +18,7 @@ package im.vector.app.features.roommemberprofile.devices import android.content.DialogInterface import android.os.Bundle +import android.os.Parcelable import android.view.KeyEvent import androidx.fragment.app.Fragment import com.airbnb.mvrx.MvRx @@ -29,6 +30,7 @@ import im.vector.app.core.extensions.commitTransaction import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.features.crypto.verification.VerificationBottomSheet +import kotlinx.android.parcel.Parcelize import javax.inject.Inject import kotlin.reflect.KClass @@ -104,10 +106,16 @@ class DeviceListBottomSheet : VectorBaseBottomSheetDialogFragment() { } } + @Parcelize + data class Args( + val userId: String, + val allowDeviceAction: Boolean + ) : Parcelable + companion object { - fun newInstance(userId: String): DeviceListBottomSheet { + fun newInstance(userId: String, allowDeviceAction: Boolean = true): DeviceListBottomSheet { val args = Bundle() - args.putString(MvRx.KEY_ARG, userId) + args.putParcelable(MvRx.KEY_ARG, Args(userId, allowDeviceAction)) return DeviceListBottomSheet().apply { arguments = args } } } diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheetViewModel.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheetViewModel.kt index db97399f1b..28af45797e 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheetViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheetViewModel.kt @@ -22,6 +22,7 @@ import com.airbnb.mvrx.Loading import com.airbnb.mvrx.MvRxState import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.ViewModelContext +import com.airbnb.mvrx.args import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject import im.vector.app.core.di.HasScreenInjector @@ -44,24 +45,24 @@ data class DeviceListViewState( ) : MvRxState class DeviceListBottomSheetViewModel @AssistedInject constructor(@Assisted private val initialState: DeviceListViewState, - @Assisted private val userId: String, + @Assisted private val args: DeviceListBottomSheet.Args, private val session: Session) : VectorViewModel(initialState) { @AssistedInject.Factory interface Factory { - fun create(initialState: DeviceListViewState, userId: String): DeviceListBottomSheetViewModel + fun create(initialState: DeviceListViewState, args: DeviceListBottomSheet.Args): DeviceListBottomSheetViewModel } init { - session.rx().liveUserCryptoDevices(userId) + session.rx().liveUserCryptoDevices(args.userId) .execute { copy(cryptoDevices = it).also { refreshSelectedId() } } - session.rx().liveCrossSigningInfo(userId) + session.rx().liveCrossSigningInfo(args.userId) .execute { copy(memberCrossSigningKey = it.invoke()?.getOrNull()) } @@ -88,6 +89,7 @@ class DeviceListBottomSheetViewModel @AssistedInject constructor(@Assisted priva } private fun selectDevice(action: DeviceListAction.SelectDevice) { + if (!args.allowDeviceAction) return setState { copy(selectedDevice = action.device) } @@ -100,8 +102,9 @@ class DeviceListBottomSheetViewModel @AssistedInject constructor(@Assisted priva } private fun manuallyVerify(action: DeviceListAction.ManuallyVerify) { - session.cryptoService().verificationService().beginKeyVerification(VerificationMethod.SAS, userId, action.deviceId, null)?.let { txID -> - _viewEvents.post(DeviceListBottomSheetViewEvents.Verify(userId, txID)) + if (!args.allowDeviceAction) return + session.cryptoService().verificationService().beginKeyVerification(VerificationMethod.SAS, args.userId, action.deviceId, null)?.let { txID -> + _viewEvents.post(DeviceListBottomSheetViewEvents.Verify(args.userId, txID)) } } @@ -109,12 +112,12 @@ class DeviceListBottomSheetViewModel @AssistedInject constructor(@Assisted priva @JvmStatic override fun create(viewModelContext: ViewModelContext, state: DeviceListViewState): DeviceListBottomSheetViewModel? { val fragment: DeviceListBottomSheet = (viewModelContext as FragmentViewModelContext).fragment() - val userId = viewModelContext.args() - return fragment.viewModelFactory.create(state, userId) + val args = viewModelContext.args() + return fragment.viewModelFactory.create(state, args) } override fun initialState(viewModelContext: ViewModelContext): DeviceListViewState? { - val userId = viewModelContext.args() + val userId = viewModelContext.args().userId val session = (viewModelContext.activity as HasScreenInjector).injector().activeSessionHolder().getActiveSession() return session.getUser(userId)?.toMatrixItem()?.let { DeviceListViewState( diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt index 44cef8f974..b0ec7426a7 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt @@ -53,6 +53,7 @@ import im.vector.app.features.crypto.keys.KeysExporter import im.vector.app.features.crypto.keys.KeysImporter import im.vector.app.features.crypto.keysbackup.settings.KeysBackupManageActivity import im.vector.app.features.crypto.recover.BootstrapBottomSheet +import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.navigation.Navigator import im.vector.app.features.pin.PinActivity import im.vector.app.features.pin.PinCodeStore @@ -193,7 +194,7 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( secureBackupCategory.isVisible = true secureBackupPreference.title = getString(R.string.settings_secure_backup_setup) secureBackupPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { - BootstrapBottomSheet.show(parentFragmentManager, initCrossSigningOnly = false, forceReset4S = false) + BootstrapBottomSheet.show(parentFragmentManager, SetupMode.NORMAL) true } } else { @@ -212,7 +213,7 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( secureBackupCategory.isVisible = true secureBackupPreference.title = getString(R.string.settings_secure_backup_reset) secureBackupPreference.onPreferenceClickListener = Preference.OnPreferenceClickListener { - BootstrapBottomSheet.show(parentFragmentManager, initCrossSigningOnly = false, forceReset4S = true) + BootstrapBottomSheet.show(parentFragmentManager, SetupMode.PASSPHRASE_RESET) true } } else if (!info.megolmSecretKnown) { diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt index c17c1a1cf8..ac4d495a8c 100644 --- a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt @@ -44,6 +44,7 @@ import im.vector.app.core.extensions.queryExportKeys import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.features.crypto.keysbackup.setup.KeysBackupSetupActivity import im.vector.app.features.crypto.recover.BootstrapBottomSheet +import im.vector.app.features.crypto.recover.SetupMode import timber.log.Timber import javax.inject.Inject @@ -121,7 +122,7 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), super.onActivityCreated(savedInstanceState) setupRecoveryButton.action = { - BootstrapBottomSheet.show(parentFragmentManager, initCrossSigningOnly = false, forceReset4S = false) + BootstrapBottomSheet.show(parentFragmentManager, SetupMode.NORMAL) } exitAnywayButton.action = { diff --git a/vector/src/main/res/layout/fragment_ssss_access_from_key.xml b/vector/src/main/res/layout/fragment_ssss_access_from_key.xml index b6bdb2586a..bbe9282cc1 100644 --- a/vector/src/main/res/layout/fragment_ssss_access_from_key.xml +++ b/vector/src/main/res/layout/fragment_ssss_access_from_key.xml @@ -15,11 +15,11 @@ android:layout_width="24dp" android:layout_height="24dp" android:layout_marginStart="16dp" + android:src="@drawable/ic_security_key_24dp" android:tint="?riotx_text_primary" app:layout_constraintBottom_toBottomOf="@+id/ssss_restore_with_key" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@+id/ssss_restore_with_key" - android:src="@drawable/ic_security_key_24dp" /> + app:layout_constraintTop_toTopOf="@+id/ssss_restore_with_key" /> + + + + app:layout_constraintTop_toBottomOf="@id/ssss_key_flow" + app:leftIcon="@drawable/ic_alert_triangle" + app:tint="@color/vector_error_color" + app:titleTextColor="?riotx_text_secondary" /> + \ No newline at end of file diff --git a/vector/src/main/res/layout/fragment_ssss_access_from_passphrase.xml b/vector/src/main/res/layout/fragment_ssss_access_from_passphrase.xml index e5482f0ec7..09bd823257 100644 --- a/vector/src/main/res/layout/fragment_ssss_access_from_passphrase.xml +++ b/vector/src/main/res/layout/fragment_ssss_access_from_passphrase.xml @@ -109,16 +109,33 @@ tools:ignore="MissingConstraints" /> + + + app:layout_constraintTop_toBottomOf="@id/ssss_passphrase_flow" + app:leftIcon="@drawable/ic_alert_triangle" + app:tint="@color/vector_error_color" + app:titleTextColor="?riotx_text_secondary" /> + \ No newline at end of file diff --git a/vector/src/main/res/layout/fragment_ssss_reset_all.xml b/vector/src/main/res/layout/fragment_ssss_reset_all.xml new file mode 100644 index 0000000000..6caef9fe66 --- /dev/null +++ b/vector/src/main/res/layout/fragment_ssss_reset_all.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vector/src/main/res/values/attrs.xml b/vector/src/main/res/values/attrs.xml index 8c71fb26b2..bf393b779a 100644 --- a/vector/src/main/res/values/attrs.xml +++ b/vector/src/main/res/values/attrs.xml @@ -52,6 +52,7 @@ + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index a5d9bae0ae..3233fb2b22 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -78,6 +78,7 @@ Play Pause Dismiss + Reset @@ -2434,6 +2435,15 @@ Select your Recovery Key, or input it manually by typing it or pasting from your clipboard Backup could not be decrypted with this Recovery Key: please verify that you entered the correct Recovery Key. Failed to access secure storage + Forgot or lost all recovery options? Reset everything + Reset everything + Only do this if you have no other device you can verify this device with. + If you reset everything + You will restart with no history, no messages, trusted devices or trusted users + + Show the device you can verify with now + Show %d devices you can verify with now + Unencrypted Encrypted by an unverified device From 9f26d015ba0092912b12d0eb4d761b884db7c72b Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 29 Sep 2020 17:07:56 +0200 Subject: [PATCH 032/278] Update change log Fixes #2052 --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 56f22bd4a9..d7fd9f6598 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -7,6 +7,7 @@ Features ✨: Improvements 🙌: - PIN code: request PIN code if phone has been locked - Small optimisation of scrolling experience in timeline (#2114) + - Allow user to reset cross signing if he has no way to recover (#2052) Bugfix 🐛: - Improve support for image selection with intent changes (#1376) From 1e3bdd6a2eb264f03f9eeddecc22a883dae45b65 Mon Sep 17 00:00:00 2001 From: Valere Date: Tue, 29 Sep 2020 18:00:15 +0200 Subject: [PATCH 033/278] Fix test --- .../java/im/vector/app/VerifySessionPassphraseTest.kt | 4 +++- vector/src/main/res/layout/fragment_ssss_reset_all.xml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt b/vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt index 5405c086eb..f8c2a89ea8 100644 --- a/vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt +++ b/vector/src/androidTest/java/im/vector/app/VerifySessionPassphraseTest.kt @@ -38,6 +38,7 @@ import im.vector.app.features.MainActivity import im.vector.app.features.crypto.quads.SharedSecureStorageActivity import im.vector.app.features.crypto.recover.BootstrapCrossSigningTask import im.vector.app.features.crypto.recover.Params +import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.home.HomeActivity import kotlinx.coroutines.runBlocking import org.junit.Before @@ -77,7 +78,8 @@ class VerifySessionPassphraseTest : VerificationTestBase() { runBlocking { task.execute(Params( userPasswordAuth = UserPasswordAuth(password = password), - passphrase = passphrase + passphrase = passphrase, + setupMode = SetupMode.NORMAL )) } } diff --git a/vector/src/main/res/layout/fragment_ssss_reset_all.xml b/vector/src/main/res/layout/fragment_ssss_reset_all.xml index 6caef9fe66..a1851f3728 100644 --- a/vector/src/main/res/layout/fragment_ssss_reset_all.xml +++ b/vector/src/main/res/layout/fragment_ssss_reset_all.xml @@ -48,7 +48,7 @@ android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="16dp" - android:drawableLeft="@drawable/ic_smartphone" + android:drawableStart="@drawable/ic_smartphone" android:drawablePadding="8dp" app:layout_constraintTop_toBottomOf="@id/ssss_reset_all_description" tools:text="Show 2 devices you can verify with now" /> From 24fcb3f58f3866cd259c48feae9eec09698d2063 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 11:18:51 +0300 Subject: [PATCH 034/278] Differentiate wordings for direct rooms. --- .../src/main/res/values/strings.xml | 22 +++ .../home/room/detail/RoomDetailFragment.kt | 12 +- .../timeline/factory/EncryptionItemFactory.kt | 11 +- .../factory/MergedHeaderItemFactory.kt | 18 +- .../timeline/format/NoticeEventFormatter.kt | 183 ++++++++++++------ .../detail/timeline/item/BasedMergedItem.kt | 3 +- .../timeline/item/MergedRoomCreationItem.kt | 18 +- vector/src/main/res/values/strings.xml | 7 + 8 files changed, 206 insertions(+), 68 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml index f64ec9926e..70a7461fe9 100644 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ b/matrix-sdk-android/src/main/res/values/strings.xml @@ -10,13 +10,19 @@ Your invitation %1$s created the room You created the room + %1$s joined + You joined %1$s invited %2$s You invited %1$s %1$s invited you %1$s joined the room You joined the room + %1$s joined + You joined %1$s left the room You left the room + %1$s left the room + You left the room %1$s rejected the invitation You rejected the invitation %1$s kicked %2$s @@ -53,6 +59,8 @@ You ended the call. %1$s made future room history visible to %2$s You made future room history visible to %1$s + %1$s made future messages visible to %2$s + You made future messages visible to %1$s all room members, from the point they are invited. all room members, from the point they joined. all room members. @@ -62,6 +70,8 @@ You turned on end-to-end encryption (%1$s) %s upgraded this room. You upgraded this room. + %s upgraded here. + You upgraded here. %1$s requested a VoIP conference You requested a VoIP conference @@ -83,8 +93,12 @@ You updated your profile %1$s %1$s sent an invitation to %2$s to join the room You sent an invitation to %1$s to join the room + %1$s invited %2$s + You invited %1$s %1$s revoked the invitation for %2$s to join the room You revoked the invitation for %1$s to join the room + %1$s revoked the invitation for %2$s + You revoked the invitation for %1$s %1$s accepted the invitation for %2$s You accepted the invitation for %1$s @@ -171,8 +185,12 @@ %1$s invited you. Reason: %2$s %1$s joined the room. Reason: %2$s You joined the room. Reason: %1$s + %1$s joined. Reason: %2$s + You joined. Reason: %1$s %1$s left the room. Reason: %2$s You left the room. Reason: %1$s + %1$s left. Reason: %2$s + You left. Reason: %1$s %1$s rejected the invitation. Reason: %2$s You rejected the invitation. Reason: %1$s %1$s kicked %2$s. Reason: %3$s @@ -220,8 +238,12 @@ "%1$s has allowed guests to join the room." "You have allowed guests to join the room." + "%1$s has allowed guests to join here." + "You have allowed guests to join here." "%1$s has prevented guests from joining the room." "You have prevented guests from joining the room." + "%1$s has prevented guests from joining the room." + "You have prevented guests from joining the room." %1$s turned on end-to-end encryption. You turned on end-to-end encryption. diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index e7140f06f4..b31af30609 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -704,7 +704,11 @@ class RoomDetailFragment @Inject constructor( // safeStartCall(it, isVideoCall) // } } else if (!state.isAllowedToStartWebRTCCall) { - showDialogWithMessage(getString(R.string.no_permissions_to_start_webrtc_call)) + if (session.getRoom(state.roomId)?.roomSummary()?.isDirect == true) { + showDialogWithMessage(getString(R.string.no_permissions_to_start_webrtc_call_in_direct_room)) + } else { + showDialogWithMessage(getString(R.string.no_permissions_to_start_webrtc_call)) + } } else { safeStartCall(isVideoCall) } @@ -714,7 +718,11 @@ class RoomDetailFragment @Inject constructor( // can you add widgets?? if (!state.isAllowedToManageWidgets) { // You do not have permission to start a conference call in this room - showDialogWithMessage(getString(R.string.no_permissions_to_start_conf_call)) + if (session.getRoom(state.roomId)?.roomSummary()?.isDirect == true) { + showDialogWithMessage(getString(R.string.no_permissions_to_start_conf_call_in_direct_room)) + } else { + showDialogWithMessage(getString(R.string.no_permissions_to_start_conf_call)) + } } else { if (state.activeRoomWidgets()?.filter { it.type == WidgetType.Jitsi }?.any() == true) { // A conference is already in progress! 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 5374b4792a..2ed88cbae9 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 @@ -25,6 +25,8 @@ import im.vector.app.features.home.room.detail.timeline.helper.MessageInformatio import im.vector.app.features.home.room.detail.timeline.helper.MessageItemAttributesFactory import im.vector.app.features.home.room.detail.timeline.item.StatusTileTimelineItem import im.vector.app.features.home.room.detail.timeline.item.StatusTileTimelineItem_ +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM @@ -36,7 +38,8 @@ class EncryptionItemFactory @Inject constructor( private val messageColorProvider: MessageColorProvider, private val stringProvider: StringProvider, private val informationDataFactory: MessageInformationDataFactory, - private val avatarSizeProvider: AvatarSizeProvider) { + private val avatarSizeProvider: AvatarSizeProvider, + private val session: Session) { fun create(event: TimelineEvent, highlight: Boolean, @@ -51,7 +54,11 @@ class EncryptionItemFactory @Inject constructor( val shield: StatusTileTimelineItem.ShieldUIState if (isSafeAlgorithm) { title = stringProvider.getString(R.string.encryption_enabled) - description = stringProvider.getString(R.string.encryption_enabled_tile_description) + description = if (session.getRoomSummary(event.root.roomId ?: "")?.isDirect.orFalse()) { + stringProvider.getString(R.string.direct_room_encryption_enabled_tile_description) + } else { + stringProvider.getString(R.string.encryption_enabled_tile_description) + } shield = StatusTileTimelineItem.ShieldUIState.BLACK } else { title = stringProvider.getString(R.string.encryption_not_enabled) 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 0ba3b4d47e..41a961dee0 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 @@ -33,6 +33,7 @@ import im.vector.app.features.home.room.detail.timeline.item.MergedRoomCreationI import im.vector.app.features.home.room.detail.timeline.item.MergedUTDItem import im.vector.app.features.home.room.detail.timeline.item.MergedUTDItem_ import im.vector.app.features.settings.VectorPreferences +import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent @@ -78,6 +79,12 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde } } + private fun isDirectRoom(roomId: String?): Boolean { + return roomId?.let { + activeSessionHolder.getSafeActiveSession()?.getRoom(roomId)?.roomSummary()?.isDirect + }.orFalse() + } + private fun buildMembershipEventsMergedSummary(currentPosition: Int, items: List, event: TimelineEvent, @@ -100,7 +107,8 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde avatarUrl = mergedEvent.senderInfo.avatarUrl, memberName = mergedEvent.senderInfo.disambiguatedDisplayName, localId = mergedEvent.localId, - eventId = mergedEvent.root.eventId ?: "" + eventId = mergedEvent.root.eventId ?: "", + isDirectRoom = isDirectRoom(mergedEvent.root.roomId) ) mergedData.add(data) } @@ -157,7 +165,7 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde items: List, event: TimelineEvent, eventIdToHighlight: String?, - // requestModelBuild: () -> Unit, + // requestModelBuild: () -> Unit, callback: TimelineEventController.Callback?): MergedUTDItem_? { Timber.v("## MERGE: buildUTDMergedSummary from position $currentPosition") var prevEvent = items.prevOrNull(currentPosition) @@ -187,7 +195,8 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde avatarUrl = senderAvatar, memberName = senderName, localId = mergedEvent.localId, - eventId = mergedEvent.root.eventId ?: "" + eventId = mergedEvent.root.eventId ?: "", + isDirectRoom = isDirectRoom(mergedEvent.root.roomId) ) mergedData.add(data) } @@ -247,7 +256,8 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde avatarUrl = mergedEvent.senderInfo.avatarUrl, memberName = mergedEvent.senderInfo.disambiguatedDisplayName, localId = mergedEvent.localId, - eventId = mergedEvent.root.eventId ?: "" + eventId = mergedEvent.root.eventId ?: "", + isDirectRoom = isDirectRoom(mergedEvent.root.roomId) ) mergedData.add(data) } 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 9a4729abee..64d0fdd127 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 @@ -16,6 +16,7 @@ package im.vector.app.features.home.room.detail.timeline.format +import androidx.annotation.StringRes import im.vector.app.ActiveSessionDataSource import im.vector.app.R import im.vector.app.core.resources.StringProvider @@ -56,6 +57,27 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour private fun Event.isSentByCurrentUser() = senderId != null && senderId == currentUserId + private fun isDirectRoom(roomId: String?): Boolean { + return roomId?.let { + activeSessionDataSource.currentValue?.orNull()?.getRoom(roomId)?.roomSummary()?.isDirect + }.orFalse() + } + + private fun chooseResourceByRoomType(event: Event, + @StringRes directRoomResId: Int, + @StringRes directRoomByUserResId: Int, + @StringRes publicRoomResId: Int, + @StringRes publicRoomByUserResId: Int, + userResArgs: Any? = null, + vararg thirdPartyResArgs: Any? + ): String { + return if (isDirectRoom(event.roomId)) { + if (event.isSentByCurrentUser()) sp.getString(directRoomByUserResId, userResArgs) else sp.getString(directRoomResId, *thirdPartyResArgs) + } else { + if (event.isSentByCurrentUser()) sp.getString(publicRoomByUserResId, userResArgs) else sp.getString(publicRoomResId, *thirdPartyResArgs) + } + } + fun format(timelineEvent: TimelineEvent): CharSequence? { return when (val type = timelineEvent.root.getClearType()) { EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) @@ -179,11 +201,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return event.getClearContent().toModel() ?.takeIf { it.creator.isNullOrBlank().not() } ?.let { - if (event.isSentByCurrentUser()) { - sp.getString(R.string.notice_room_created_by_you) - } else { - sp.getString(R.string.notice_room_created, it.creator) - } + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_room_created_by_you, + directRoomByUserResId = R.string.notice_direct_room_created_by_you, + publicRoomResId = R.string.notice_room_created, + publicRoomByUserResId = R.string.notice_room_created_by_you, + thirdPartyResArgs = *arrayOf(it.creator) + ) } } @@ -205,11 +230,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } private fun formatRoomTombstoneEvent(event: Event, senderName: String?): CharSequence? { - return if (event.isSentByCurrentUser()) { - sp.getString(R.string.notice_room_update_by_you) - } else { - sp.getString(R.string.notice_room_update, senderName) - } + return chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_update, + directRoomByUserResId = R.string.notice_direct_room_update_by_you, + publicRoomResId = R.string.notice_room_update, + publicRoomByUserResId = R.string.notice_room_update_by_you, + thirdPartyResArgs = *arrayOf(senderName) + ) } private fun formatRoomTopicEvent(event: Event, senderName: String?): CharSequence? { @@ -250,11 +278,15 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val historyVisibility = event.getClearContent().toModel()?.historyVisibility ?: return null val formattedVisibility = roomHistoryVisibilityFormatter.format(historyVisibility) - return if (event.isSentByCurrentUser()) { - sp.getString(R.string.notice_made_future_room_visibility_by_you, formattedVisibility) - } else { - sp.getString(R.string.notice_made_future_room_visibility, senderName, formattedVisibility) - } + return chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_made_future_direct_room_visibility, + directRoomByUserResId = R.string.notice_made_future_direct_room_visibility_by_you, + publicRoomResId = R.string.notice_made_future_room_visibility, + publicRoomByUserResId = R.string.notice_made_future_room_visibility_by_you, + userResArgs = formattedVisibility, + thirdPartyResArgs = *arrayOf(senderName, formattedVisibility) + ) } private fun formatRoomThirdPartyInvite(event: Event, senderName: String?): CharSequence? { @@ -264,19 +296,27 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return when { prevContent != null -> { // Revoke case - if (event.isSentByCurrentUser()) { - sp.getString(R.string.notice_room_third_party_revoked_invite_by_you, prevContent.displayName) - } else { - sp.getString(R.string.notice_room_third_party_revoked_invite, senderName, prevContent.displayName) - } + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_third_party_revoked_invite, + directRoomByUserResId = R.string.notice_direct_room_third_party_revoked_invite_by_you, + publicRoomResId = R.string.notice_room_third_party_revoked_invite, + publicRoomByUserResId = R.string.notice_room_third_party_revoked_invite_by_you, + userResArgs = prevContent.displayName, + thirdPartyResArgs = *arrayOf(senderName, prevContent.displayName) + ) } content != null -> { // Invitation case - if (event.isSentByCurrentUser()) { - sp.getString(R.string.notice_room_third_party_invite_by_you, content.displayName) - } else { - sp.getString(R.string.notice_room_third_party_invite, senderName, content.displayName) - } + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_third_party_invite, + directRoomByUserResId = R.string.notice_direct_room_third_party_invite_by_you, + publicRoomResId = R.string.notice_room_third_party_invite, + publicRoomByUserResId = R.string.notice_room_third_party_invite_by_you, + userResArgs = content.displayName, + thirdPartyResArgs = *arrayOf(senderName, content.displayName) + ) } else -> null } @@ -391,17 +431,23 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val eventContent: RoomGuestAccessContent? = event.getClearContent().toModel() return when (eventContent?.guestAccess) { GuestAccess.CanJoin -> - if (event.isSentByCurrentUser()) { - sp.getString(R.string.notice_room_guest_access_can_join_by_you) - } else { - sp.getString(R.string.notice_room_guest_access_can_join, senderName) - } + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_guest_access_can_join, + directRoomByUserResId = R.string.notice_direct_room_guest_access_can_join_by_you, + publicRoomResId = R.string.notice_room_guest_access_can_join, + publicRoomByUserResId = R.string.notice_room_guest_access_can_join_by_you, + thirdPartyResArgs = *arrayOf(senderName) + ) GuestAccess.Forbidden -> - if (event.isSentByCurrentUser()) { - sp.getString(R.string.notice_room_guest_access_forbidden_by_you) - } else { - sp.getString(R.string.notice_room_guest_access_forbidden, senderName) - } + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_guest_access_forbidden, + directRoomByUserResId = R.string.notice_direct_room_guest_access_forbidden_by_you, + publicRoomResId = R.string.notice_room_guest_access_forbidden, + publicRoomByUserResId = R.string.notice_room_guest_access_forbidden_by_you, + thirdPartyResArgs = *arrayOf(senderName) + ) else -> null } } @@ -524,14 +570,25 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } Membership.JOIN -> - if (event.isSentByCurrentUser()) { - eventContent.safeReason?.let { reason -> - sp.getString(R.string.notice_room_join_with_reason_by_you, reason) - } ?: sp.getString(R.string.notice_room_join_by_you) - } else { - eventContent.safeReason?.let { reason -> - sp.getString(R.string.notice_room_join_with_reason, senderDisplayName, reason) - } ?: sp.getString(R.string.notice_room_join, senderDisplayName) + eventContent.safeReason?.let { reason -> + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_join_with_reason, + directRoomByUserResId = R.string.notice_direct_room_join_with_reason_by_you, + publicRoomResId = R.string.notice_room_join_with_reason, + publicRoomByUserResId = R.string.notice_room_join_with_reason_by_you, + userResArgs = reason, + thirdPartyResArgs = *arrayOf(senderDisplayName, reason) + ) + } ?: run { + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_join, + directRoomByUserResId = R.string.notice_direct_room_join_by_you, + publicRoomResId = R.string.notice_room_join, + publicRoomByUserResId = R.string.notice_room_join_by_you, + thirdPartyResArgs = *arrayOf(senderDisplayName) + ) } Membership.LEAVE -> // 2 cases here: this member may have left voluntarily or they may have been "left" by someone else ie. kicked @@ -548,14 +605,25 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } ?: sp.getString(R.string.notice_room_reject, senderDisplayName) } else -> - if (event.isSentByCurrentUser()) { - eventContent.safeReason?.let { reason -> - sp.getString(R.string.notice_room_leave_with_reason_by_you, reason) - } ?: sp.getString(R.string.notice_room_leave_by_you) - } else { - eventContent.safeReason?.let { reason -> - sp.getString(R.string.notice_room_leave_with_reason, senderDisplayName, reason) - } ?: sp.getString(R.string.notice_room_leave, senderDisplayName) + eventContent.safeReason?.let { reason -> + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_leave_with_reason, + directRoomByUserResId = R.string.notice_direct_room_leave_with_reason_by_you, + publicRoomResId = R.string.notice_room_leave_with_reason, + publicRoomByUserResId = R.string.notice_room_leave_with_reason_by_you, + userResArgs = reason, + thirdPartyResArgs = *arrayOf(senderDisplayName, reason) + ) + } ?: run { + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.notice_direct_room_leave, + directRoomByUserResId = R.string.notice_direct_room_leave_by_you, + publicRoomResId = R.string.notice_room_leave, + publicRoomByUserResId = R.string.notice_room_leave_by_you, + thirdPartyResArgs = *arrayOf(senderDisplayName) + ) } } } else { @@ -622,11 +690,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val content = event.getClearContent().toModel() ?: return null return when (content.joinRules) { RoomJoinRules.INVITE -> - if (event.isSentByCurrentUser()) { - sp.getString(R.string.room_join_rules_invite_by_you) - } else { - sp.getString(R.string.room_join_rules_invite, senderName) - } + chooseResourceByRoomType( + event = event, + directRoomResId = R.string.direct_room_join_rules_invite, + directRoomByUserResId = R.string.direct_room_join_rules_invite_by_you, + publicRoomResId = R.string.room_join_rules_invite, + publicRoomByUserResId = R.string.room_join_rules_invite_by_you, + thirdPartyResArgs = *arrayOf(senderName) + ) RoomJoinRules.PUBLIC -> if (event.isSentByCurrentUser()) { sp.getString(R.string.room_join_rules_public_by_you) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BasedMergedItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BasedMergedItem.kt index d9dcc98ed1..1f8ad3df1b 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BasedMergedItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/BasedMergedItem.kt @@ -62,7 +62,8 @@ abstract class BasedMergedItem : BaseEventItem() val eventId: String, val userId: String, val memberName: String, - val avatarUrl: String? + val avatarUrl: String?, + val isDirectRoom: Boolean ) fun Data.toMatrixItem() = MatrixItem.UserItem(userId, memberName, avatarUrl) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedRoomCreationItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedRoomCreationItem.kt index dad5f99eeb..1896a812fc 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedRoomCreationItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedRoomCreationItem.kt @@ -48,9 +48,17 @@ abstract class MergedRoomCreationItem : BasedMergedItem"Due to missing permissions, this action is not possible. You need permission to invite to start a conference in this room You do not have permission to start a conference call in this room + You do not have permission to start a conference call You do not have permission to start a call in this room + You do not have permission to start a call A conference is already in progress! Start video meeting Start audio meeting @@ -1881,6 +1883,8 @@ You made the room public to whoever knows the link. %1$s made the room invite only. You made the room invite only. + %1$s made this invite only. + You made this invite only. Unread messages It\'s your conversation. Own it. @@ -2355,11 +2359,14 @@ Encryption enabled Messages in this room are end-to-end encrypted. Learn more & verify users in their profile. + Messages in this room are end-to-end encrypted. Encryption not enabled The encryption used by this room is not supported %s created and configured the room. You created and configured the room. + %s joined. + You joined. Almost there! Is the other device showing the same shield? Almost there! Waiting for confirmationâ€Ļ From 3a9e6fa97fbbfa034889ec25fd8645fa7992ed10 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 11:21:07 +0300 Subject: [PATCH 035/278] Changelog added. --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index fd076e27ea..1a01d46964 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -59,6 +59,7 @@ Changes in Element 1.0.7 (2020-09-17) Improvements 🙌: - Handle date formatting properly (show time am/pm if needed, display year when needed) - Improve F-Droid Notification (#2055) + - Wording differentiation for direct rooms (#2176) Bugfix 🐛: - Clear the notification when the event is read elsewhere (#1822) From 2a96b2c68e9a142587a237f2d721c08bd993a352 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 11:35:02 +0300 Subject: [PATCH 036/278] Differentiate wordings for the room profile screen. --- .../features/roomprofile/RoomProfileController.kt | 12 +++++++++--- vector/src/main/res/values/strings.xml | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 815478b46b..13efaf0d10 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -57,7 +57,7 @@ class RoomProfileController @Inject constructor( // Security buildProfileSection(stringProvider.getString(R.string.room_profile_section_security)) val learnMoreSubtitle = if (roomSummary.isEncrypted) { - R.string.room_profile_encrypted_subtitle + if (roomSummary.isDirect) R.string.direct_room_profile_encrypted_subtitle else R.string.room_profile_encrypted_subtitle } else { R.string.room_profile_not_encrypted_subtitle } @@ -71,7 +71,10 @@ class RoomProfileController @Inject constructor( buildProfileSection(stringProvider.getString(R.string.room_profile_section_more)) buildProfileAction( id = "settings", - title = stringProvider.getString(R.string.room_profile_section_more_settings), + title = if (roomSummary.isDirect) + stringProvider.getString(R.string.direct_room_profile_section_more_settings) + else + stringProvider.getString(R.string.room_profile_section_more_settings), dividerColor = dividerColor, icon = R.drawable.ic_room_profile_settings, action = { callback?.onSettingsClicked() } @@ -112,7 +115,10 @@ class RoomProfileController @Inject constructor( ) buildProfileAction( id = "leave", - title = stringProvider.getString(R.string.room_profile_section_more_leave), + title = if (roomSummary.isDirect) + stringProvider.getString(R.string.direct_room_profile_section_more_leave) + else + stringProvider.getString(R.string.room_profile_section_more_leave), dividerColor = dividerColor, divider = false, destructive = true, diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 887e78d102..d71195bf13 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2118,11 +2118,13 @@ For extra security, verify %s by checking a one-time code on both your devices.\n\nFor maximum security, do this in person. Messages in this room are not end-to-end encrypted. Messages in this room are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. + Messages here are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. Security Learn more More Admin Actions Room settings + Settings Notifications "One person" @@ -2130,6 +2132,7 @@ Uploads Leave Room + Leave "Leaving the roomâ€Ļ" Admins From 07976988d9dad7eb4ad50d63ca2636363910f63e Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 11:37:17 +0300 Subject: [PATCH 037/278] Use RoomSummary to check if the room is direct. --- .../home/room/detail/timeline/format/NoticeEventFormatter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 64d0fdd127..4b95fd4436 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 @@ -59,7 +59,7 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour private fun isDirectRoom(roomId: String?): Boolean { return roomId?.let { - activeSessionDataSource.currentValue?.orNull()?.getRoom(roomId)?.roomSummary()?.isDirect + activeSessionDataSource.currentValue?.orNull()?.getRoomSummary(roomId)?.isDirect }.orFalse() } From 5d18a7cc829426aae44e592e5e1cb3e5a181864f Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 12:27:06 +0300 Subject: [PATCH 038/278] Lint fixes. --- .../features/roomprofile/RoomProfileController.kt | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 13efaf0d10..2c71a11136 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -71,10 +71,11 @@ class RoomProfileController @Inject constructor( buildProfileSection(stringProvider.getString(R.string.room_profile_section_more)) buildProfileAction( id = "settings", - title = if (roomSummary.isDirect) + title = if (roomSummary.isDirect) { stringProvider.getString(R.string.direct_room_profile_section_more_settings) - else - stringProvider.getString(R.string.room_profile_section_more_settings), + } else { + stringProvider.getString(R.string.room_profile_section_more_settings) + }, dividerColor = dividerColor, icon = R.drawable.ic_room_profile_settings, action = { callback?.onSettingsClicked() } @@ -115,10 +116,11 @@ class RoomProfileController @Inject constructor( ) buildProfileAction( id = "leave", - title = if (roomSummary.isDirect) + title = if (roomSummary.isDirect) { stringProvider.getString(R.string.direct_room_profile_section_more_leave) - else - stringProvider.getString(R.string.room_profile_section_more_leave), + } else { + stringProvider.getString(R.string.room_profile_section_more_leave) + }, dividerColor = dividerColor, divider = false, destructive = true, From d225fb7df02f285ce65512abdb9b10c7c9c730ef Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 10:08:26 +0200 Subject: [PATCH 039/278] Update Changelog --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 1a01d46964..9348717fb5 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,7 @@ Features ✨: - Improvements 🙌: + - Wording differentiation for direct rooms (#2176) - PIN code: request PIN code if phone has been locked - Small optimisation of scrolling experience in timeline (#2114) @@ -59,7 +60,6 @@ Changes in Element 1.0.7 (2020-09-17) Improvements 🙌: - Handle date formatting properly (show time am/pm if needed, display year when needed) - Improve F-Droid Notification (#2055) - - Wording differentiation for direct rooms (#2176) Bugfix 🐛: - Clear the notification when the event is read elsewhere (#1822) From 2908a5d3455a958fe93a159c6110d26d43852d8d Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 30 Sep 2020 10:13:59 +0200 Subject: [PATCH 040/278] Added first ui bootstrap test --- vector/build.gradle | 1 + .../im/vector/app/SecurityBootstrapTest.kt | 181 ++++++++++++++++++ 2 files changed, 182 insertions(+) create mode 100644 vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt diff --git a/vector/build.gradle b/vector/build.gradle index 222c0c5cb3..87c8696b02 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -453,6 +453,7 @@ dependencies { androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation "androidx.test.espresso:espresso-core:$espresso_version" androidTestImplementation "androidx.test.espresso:espresso-contrib:$espresso_version" + androidTestImplementation "androidx.test.espresso:espresso-intents:$espresso_version" androidTestImplementation "org.amshove.kluent:kluent-android:$kluent_version" androidTestImplementation "androidx.arch.core:core-testing:$arch_version" // Plant Timber tree for test diff --git a/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt b/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt new file mode 100644 index 0000000000..a71af59edf --- /dev/null +++ b/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2020 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 + +import android.app.Activity +import android.app.Instrumentation.ActivityResult +import android.content.Intent +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.closeSoftKeyboard +import androidx.test.espresso.action.ViewActions.pressBack +import androidx.test.espresso.action.ViewActions.replaceText +import androidx.test.espresso.action.ViewActions.typeText +import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.intent.Intents +import androidx.test.espresso.intent.Intents.intending +import androidx.test.espresso.intent.matcher.IntentMatchers.hasAction +import androidx.test.espresso.intent.matcher.IntentMatchers.isInternal +import androidx.test.espresso.matcher.RootMatchers +import androidx.test.espresso.matcher.ViewMatchers.isDisplayed +import androidx.test.espresso.matcher.ViewMatchers.isRoot +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.espresso.matcher.ViewMatchers.withText +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.LargeTest +import androidx.test.platform.app.InstrumentationRegistry +import im.vector.app.features.MainActivity +import im.vector.app.features.crypto.recover.SetupMode +import im.vector.app.features.home.HomeActivity +import org.hamcrest.CoreMatchers.not +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.matrix.android.sdk.api.Matrix +import org.matrix.android.sdk.api.session.Session + +@RunWith(AndroidJUnit4::class) +@LargeTest +class SecurityBootstrapTest : VerificationTestBase() { + + var existingSession: Session? = null + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Before + fun createSessionWithCrossSigning() { + val context = InstrumentationRegistry.getInstrumentation().targetContext + val matrix = Matrix.getInstance(context) + val userName = "foobar_${System.currentTimeMillis()}" + existingSession = createAccountAndSync(matrix, userName, password, true) + stubAllExternalIntents() + } + + private fun stubAllExternalIntents() { + // By default Espresso Intents does not stub any Intents. Stubbing needs to be setup before + // every test run. In this case all external Intents will be blocked. + Intents.init() + intending(not(isInternal())).respondWith(ActivityResult(Activity.RESULT_OK, null)) + } + + @Test + fun testBasicBootstrap() { + val userId: String = existingSession!!.myUserId + + doLogin(homeServerUrl, userId, password) + + // Thread.sleep(6000) + withIdlingResource(activityIdlingResource(HomeActivity::class.java)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + .perform(closeSoftKeyboard()) + } + + val activity = EspressoHelper.getCurrentActivity()!! + val uiSession = (activity as HomeActivity).activeSessionHolder.getActiveSession() + + withIdlingResource(initialSyncIdlingResource(uiSession)) { + onView(withId(R.id.roomListContainer)) + .check(matches(isDisplayed())) + } + + activity.navigator.open4SSetup(activity, SetupMode.NORMAL, null) + + Thread.sleep(1000) + + onView(withId(R.id.bootstrapSetupSecureUseSecurityKey)) + .check(matches(isDisplayed())) + + onView(withId(R.id.bootstrapSetupSecureUseSecurityPassphrase)) + .check(matches(isDisplayed())) + .perform(click()) + + onView(isRoot()) + .perform(waitForView(withText(R.string.bootstrap_info_text_2))) + + // test back + onView(isRoot()).perform(pressBack()) + + + Thread.sleep(1000) + + onView(withId(R.id.bootstrapSetupSecureUseSecurityKey)) + .check(matches(isDisplayed())) + + onView(withId(R.id.bootstrapSetupSecureUseSecurityPassphrase)) + .check(matches(isDisplayed())) + .perform(click()) + + onView(isRoot()) + .perform(waitForView(withText(R.string.bootstrap_info_text_2))) + + onView(withId(R.id.ssss_passphrase_enter_edittext)) + .perform(typeText("person woman man camera tv")) + + onView(withId(R.id.bootstrapSubmit)) + .perform(closeSoftKeyboard(), click()) + + // test bad pass + onView(withId(R.id.ssss_passphrase_enter_edittext)) + .perform(typeText("person woman man cmera tv")) + + onView(withId(R.id.bootstrapSubmit)) + .perform(closeSoftKeyboard(), click()) + + onView(withText(R.string.passphrase_passphrase_does_not_match)).check(matches(isDisplayed())) + + onView(withId(R.id.ssss_passphrase_enter_edittext)) + .perform(replaceText("person woman man camera tv")) + + + onView(withId(R.id.bootstrapSubmit)) + .perform(closeSoftKeyboard(), click()) + + onView(withId(R.id.bottomSheetScrollView)) + .perform(waitForView(withText(R.string.bottom_sheet_save_your_recovery_key_content))) + + + + intending(hasAction(Intent.ACTION_SEND)).respondWith(ActivityResult(Activity.RESULT_OK, null)) + + onView(withId(R.id.recoveryCopy)) + .perform(click()) + + Thread.sleep(1000) + + // Dismiss dialog + onView(withText(R.string.ok)).inRoot(RootMatchers.isDialog()).perform(click()) + + + onView(withId(R.id.bottomSheetScrollView)) + .perform(waitForView(withText(R.string.bottom_sheet_save_your_recovery_key_content))) + + onView(withText(R.string._continue)).perform(click()) + + // Assert that all is configured + assert(uiSession.cryptoService().crossSigningService().isCrossSigningInitialized()) + assert(uiSession.cryptoService().crossSigningService().canCrossSign()) + assert(uiSession.cryptoService().crossSigningService().allPrivateKeysKnown()) + assert(uiSession.cryptoService().keysBackupService().isEnabled) + assert(uiSession.cryptoService().keysBackupService().currentBackupVersion != null) + assert(uiSession.sharedSecretStorageService.isRecoverySetup()) + assert(uiSession.sharedSecretStorageService.isMegolmKeyInBackup()) + } +} From 3642ca5b4a1a6943ca5bcc77c2b7ec8e85f5ba3d Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 30 Sep 2020 11:05:06 +0200 Subject: [PATCH 041/278] cleaning --- tools/check/forbidden_strings_in_code.txt | 2 +- .../androidTest/java/im/vector/app/SecurityBootstrapTest.kt | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/tools/check/forbidden_strings_in_code.txt b/tools/check/forbidden_strings_in_code.txt index 3ced7de7e2..1d3aaa9f69 100644 --- a/tools/check/forbidden_strings_in_code.txt +++ b/tools/check/forbidden_strings_in_code.txt @@ -164,7 +164,7 @@ Formatter\.formatShortFileSize===1 # android\.text\.TextUtils ### This is not a rule, but a warning: the number of "enum class" has changed. For Json classes, it is mandatory that they have `@JsonClass(generateAdapter = false)`. If it is ok, change the value in file forbidden_strings_in_code.txt -enum class===78 +enum class===80 ### Do not import temporary legacy classes import org.matrix.android.sdk.internal.legacy.riot===3 diff --git a/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt b/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt index a71af59edf..3bf17aa043 100644 --- a/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt +++ b/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt @@ -113,7 +113,6 @@ class SecurityBootstrapTest : VerificationTestBase() { // test back onView(isRoot()).perform(pressBack()) - Thread.sleep(1000) onView(withId(R.id.bootstrapSetupSecureUseSecurityKey)) @@ -144,15 +143,12 @@ class SecurityBootstrapTest : VerificationTestBase() { onView(withId(R.id.ssss_passphrase_enter_edittext)) .perform(replaceText("person woman man camera tv")) - onView(withId(R.id.bootstrapSubmit)) .perform(closeSoftKeyboard(), click()) onView(withId(R.id.bottomSheetScrollView)) .perform(waitForView(withText(R.string.bottom_sheet_save_your_recovery_key_content))) - - intending(hasAction(Intent.ACTION_SEND)).respondWith(ActivityResult(Activity.RESULT_OK, null)) onView(withId(R.id.recoveryCopy)) @@ -163,7 +159,6 @@ class SecurityBootstrapTest : VerificationTestBase() { // Dismiss dialog onView(withText(R.string.ok)).inRoot(RootMatchers.isDialog()).perform(click()) - onView(withId(R.id.bottomSheetScrollView)) .perform(waitForView(withText(R.string.bottom_sheet_save_your_recovery_key_content))) From b5311aa3df8a483b4ab71d14b05b692181c902fe Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 11:42:07 +0200 Subject: [PATCH 042/278] Simple code --- .../timeline/format/NoticeEventFormatter.kt | 188 ++++++------------ 1 file changed, 66 insertions(+), 122 deletions(-) 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 4b95fd4436..baa00ef3e5 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 @@ -16,7 +16,6 @@ package im.vector.app.features.home.room.detail.timeline.format -import androidx.annotation.StringRes import im.vector.app.ActiveSessionDataSource import im.vector.app.R import im.vector.app.core.resources.StringProvider @@ -57,26 +56,9 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour private fun Event.isSentByCurrentUser() = senderId != null && senderId == currentUserId - private fun isDirectRoom(roomId: String?): Boolean { - return roomId?.let { - activeSessionDataSource.currentValue?.orNull()?.getRoomSummary(roomId)?.isDirect - }.orFalse() - } - - private fun chooseResourceByRoomType(event: Event, - @StringRes directRoomResId: Int, - @StringRes directRoomByUserResId: Int, - @StringRes publicRoomResId: Int, - @StringRes publicRoomByUserResId: Int, - userResArgs: Any? = null, - vararg thirdPartyResArgs: Any? - ): String { - return if (isDirectRoom(event.roomId)) { - if (event.isSentByCurrentUser()) sp.getString(directRoomByUserResId, userResArgs) else sp.getString(directRoomResId, *thirdPartyResArgs) - } else { - if (event.isSentByCurrentUser()) sp.getString(publicRoomByUserResId, userResArgs) else sp.getString(publicRoomResId, *thirdPartyResArgs) - } - } + private fun Event.isDm() = roomId?.let { + activeSessionDataSource.currentValue?.orNull()?.getRoomSummary(it)?.isDirect + }.orFalse() fun format(timelineEvent: TimelineEvent): CharSequence? { return when (val type = timelineEvent.root.getClearType()) { @@ -201,14 +183,10 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return event.getClearContent().toModel() ?.takeIf { it.creator.isNullOrBlank().not() } ?.let { - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_room_created_by_you, - directRoomByUserResId = R.string.notice_direct_room_created_by_you, - publicRoomResId = R.string.notice_room_created, - publicRoomByUserResId = R.string.notice_room_created_by_you, - thirdPartyResArgs = *arrayOf(it.creator) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_created_by_you else R.string.notice_room_created_by_you) + else + sp.getString(if (event.isDm()) R.string.notice_room_created_by_you else R.string.notice_room_created, it.creator) } } @@ -230,14 +208,10 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } private fun formatRoomTombstoneEvent(event: Event, senderName: String?): CharSequence? { - return chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_update, - directRoomByUserResId = R.string.notice_direct_room_update_by_you, - publicRoomResId = R.string.notice_room_update, - publicRoomByUserResId = R.string.notice_room_update_by_you, - thirdPartyResArgs = *arrayOf(senderName) - ) + return if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_update_by_you else R.string.notice_room_update_by_you) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_update else R.string.notice_room_update, senderName) } private fun formatRoomTopicEvent(event: Event, senderName: String?): CharSequence? { @@ -278,15 +252,12 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val historyVisibility = event.getClearContent().toModel()?.historyVisibility ?: return null val formattedVisibility = roomHistoryVisibilityFormatter.format(historyVisibility) - return chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_made_future_direct_room_visibility, - directRoomByUserResId = R.string.notice_made_future_direct_room_visibility_by_you, - publicRoomResId = R.string.notice_made_future_room_visibility, - publicRoomByUserResId = R.string.notice_made_future_room_visibility_by_you, - userResArgs = formattedVisibility, - thirdPartyResArgs = *arrayOf(senderName, formattedVisibility) - ) + return if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_made_future_direct_room_visibility_by_you else R.string.notice_made_future_room_visibility_by_you, + formattedVisibility) + else + sp.getString(if (event.isDm()) R.string.notice_made_future_direct_room_visibility else R.string.notice_made_future_room_visibility, + senderName, formattedVisibility) } private fun formatRoomThirdPartyInvite(event: Event, senderName: String?): CharSequence? { @@ -296,27 +267,21 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return when { prevContent != null -> { // Revoke case - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_third_party_revoked_invite, - directRoomByUserResId = R.string.notice_direct_room_third_party_revoked_invite_by_you, - publicRoomResId = R.string.notice_room_third_party_revoked_invite, - publicRoomByUserResId = R.string.notice_room_third_party_revoked_invite_by_you, - userResArgs = prevContent.displayName, - thirdPartyResArgs = *arrayOf(senderName, prevContent.displayName) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_revoked_invite_by_you else R.string.notice_room_third_party_revoked_invite_by_you, + prevContent.displayName) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_revoked_invite else R.string.notice_room_third_party_revoked_invite, + senderName, prevContent.displayName) } content != null -> { // Invitation case - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_third_party_invite, - directRoomByUserResId = R.string.notice_direct_room_third_party_invite_by_you, - publicRoomResId = R.string.notice_room_third_party_invite, - publicRoomByUserResId = R.string.notice_room_third_party_invite_by_you, - userResArgs = content.displayName, - thirdPartyResArgs = *arrayOf(senderName, content.displayName) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_invite_by_you else R.string.notice_room_third_party_invite_by_you, + content.displayName) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_invite else R.string.notice_room_third_party_invite, + senderName, content.displayName) } else -> null } @@ -431,23 +396,17 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val eventContent: RoomGuestAccessContent? = event.getClearContent().toModel() return when (eventContent?.guestAccess) { GuestAccess.CanJoin -> - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_guest_access_can_join, - directRoomByUserResId = R.string.notice_direct_room_guest_access_can_join_by_you, - publicRoomResId = R.string.notice_room_guest_access_can_join, - publicRoomByUserResId = R.string.notice_room_guest_access_can_join_by_you, - thirdPartyResArgs = *arrayOf(senderName) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_can_join else R.string.notice_room_guest_access_can_join, + senderName) GuestAccess.Forbidden -> - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_guest_access_forbidden, - directRoomByUserResId = R.string.notice_direct_room_guest_access_forbidden_by_you, - publicRoomResId = R.string.notice_room_guest_access_forbidden, - publicRoomByUserResId = R.string.notice_room_guest_access_forbidden_by_you, - thirdPartyResArgs = *arrayOf(senderName) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden else R.string.notice_room_guest_access_forbidden, + senderName) else -> null } } @@ -571,24 +530,18 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } Membership.JOIN -> eventContent.safeReason?.let { reason -> - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_join_with_reason, - directRoomByUserResId = R.string.notice_direct_room_join_with_reason_by_you, - publicRoomResId = R.string.notice_room_join_with_reason, - publicRoomByUserResId = R.string.notice_room_join_with_reason_by_you, - userResArgs = reason, - thirdPartyResArgs = *arrayOf(senderDisplayName, reason) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_join_with_reason_by_you else R.string.notice_room_join_with_reason_by_you, + reason) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_join_with_reason else R.string.notice_room_join_with_reason, + senderDisplayName, reason) } ?: run { - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_join, - directRoomByUserResId = R.string.notice_direct_room_join_by_you, - publicRoomResId = R.string.notice_room_join, - publicRoomByUserResId = R.string.notice_room_join_by_you, - thirdPartyResArgs = *arrayOf(senderDisplayName) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_join_by_you else R.string.notice_room_join_by_you) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_join else R.string.notice_room_join, + senderDisplayName) } Membership.LEAVE -> // 2 cases here: this member may have left voluntarily or they may have been "left" by someone else ie. kicked @@ -606,24 +559,18 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } else -> eventContent.safeReason?.let { reason -> - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_leave_with_reason, - directRoomByUserResId = R.string.notice_direct_room_leave_with_reason_by_you, - publicRoomResId = R.string.notice_room_leave_with_reason, - publicRoomByUserResId = R.string.notice_room_leave_with_reason_by_you, - userResArgs = reason, - thirdPartyResArgs = *arrayOf(senderDisplayName, reason) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_with_reason_by_you else R.string.notice_room_leave_with_reason_by_you, + reason) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_with_reason else R.string.notice_room_leave_with_reason, + senderDisplayName, reason) } ?: run { - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.notice_direct_room_leave, - directRoomByUserResId = R.string.notice_direct_room_leave_by_you, - publicRoomResId = R.string.notice_room_leave, - publicRoomByUserResId = R.string.notice_room_leave_by_you, - thirdPartyResArgs = *arrayOf(senderDisplayName) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_by_you else R.string.notice_room_leave_by_you) + else + sp.getString(if (event.isDm()) R.string.notice_direct_room_leave else R.string.notice_room_leave, + senderDisplayName) } } } else { @@ -690,14 +637,11 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val content = event.getClearContent().toModel() ?: return null return when (content.joinRules) { RoomJoinRules.INVITE -> - chooseResourceByRoomType( - event = event, - directRoomResId = R.string.direct_room_join_rules_invite, - directRoomByUserResId = R.string.direct_room_join_rules_invite_by_you, - publicRoomResId = R.string.room_join_rules_invite, - publicRoomByUserResId = R.string.room_join_rules_invite_by_you, - thirdPartyResArgs = *arrayOf(senderName) - ) + if (event.isSentByCurrentUser()) + sp.getString(if (event.isDm()) R.string.direct_room_join_rules_invite_by_you else R.string.room_join_rules_invite_by_you) + else + sp.getString(if (event.isDm()) R.string.direct_room_join_rules_invite else R.string.room_join_rules_invite, + senderName) RoomJoinRules.PUBLIC -> if (event.isSentByCurrentUser()) { sp.getString(R.string.room_join_rules_public_by_you) From 2f054cd438579bb6c66c4a5117e5298b08f5a086 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 11:45:21 +0200 Subject: [PATCH 043/278] Fix mistake --- .../home/room/detail/timeline/format/NoticeEventFormatter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 baa00ef3e5..866058c8ba 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 @@ -186,7 +186,7 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour if (event.isSentByCurrentUser()) sp.getString(if (event.isDm()) R.string.notice_direct_room_created_by_you else R.string.notice_room_created_by_you) else - sp.getString(if (event.isDm()) R.string.notice_room_created_by_you else R.string.notice_room_created, it.creator) + sp.getString(if (event.isDm()) R.string.notice_direct_room_created else R.string.notice_room_created, it.creator) } } From 14162ecaa0ef94565abf1f0772b2a938a9a275b8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 11:47:37 +0200 Subject: [PATCH 044/278] Add missing case --- .../im/vector/app/features/roomprofile/RoomProfileController.kt | 2 +- vector/src/main/res/values/strings.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 2c71a11136..0d88563be9 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -59,7 +59,7 @@ class RoomProfileController @Inject constructor( val learnMoreSubtitle = if (roomSummary.isEncrypted) { if (roomSummary.isDirect) R.string.direct_room_profile_encrypted_subtitle else R.string.room_profile_encrypted_subtitle } else { - R.string.room_profile_not_encrypted_subtitle + if (roomSummary.isDirect) R.string.direct_room_profile_not_encrypted_subtitle else R.string.room_profile_not_encrypted_subtitle } genericFooterItem { id("e2e info") diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index d71195bf13..68d42e8356 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2117,6 +2117,7 @@ Waiting for %sâ€Ļ For extra security, verify %s by checking a one-time code on both your devices.\n\nFor maximum security, do this in person. Messages in this room are not end-to-end encrypted. + Messages here are not end-to-end encrypted. Messages in this room are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. Messages here are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. Security From 07446d2d41d0d16d578bfa1b160df77bece5ee16 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 11:50:07 +0200 Subject: [PATCH 045/278] Embedded if --- .../roomprofile/RoomProfileController.kt | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 0d88563be9..ccfbf6d4fa 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -18,7 +18,6 @@ package im.vector.app.features.roomprofile import com.airbnb.epoxy.TypedEpoxyController -import org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel import im.vector.app.R import im.vector.app.core.epoxy.profiles.buildProfileAction import im.vector.app.core.epoxy.profiles.buildProfileSection @@ -26,6 +25,7 @@ import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.StringProvider import im.vector.app.core.ui.list.genericFooterItem import im.vector.app.features.settings.VectorPreferences +import org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel import javax.inject.Inject class RoomProfileController @Inject constructor( @@ -71,11 +71,11 @@ class RoomProfileController @Inject constructor( buildProfileSection(stringProvider.getString(R.string.room_profile_section_more)) buildProfileAction( id = "settings", - title = if (roomSummary.isDirect) { - stringProvider.getString(R.string.direct_room_profile_section_more_settings) + title = stringProvider.getString(if (roomSummary.isDirect) { + R.string.direct_room_profile_section_more_settings } else { - stringProvider.getString(R.string.room_profile_section_more_settings) - }, + R.string.room_profile_section_more_settings + }), dividerColor = dividerColor, icon = R.drawable.ic_room_profile_settings, action = { callback?.onSettingsClicked() } @@ -116,11 +116,11 @@ class RoomProfileController @Inject constructor( ) buildProfileAction( id = "leave", - title = if (roomSummary.isDirect) { - stringProvider.getString(R.string.direct_room_profile_section_more_leave) + title = stringProvider.getString(if (roomSummary.isDirect) { + R.string.direct_room_profile_section_more_leave } else { - stringProvider.getString(R.string.room_profile_section_more_leave) - }, + R.string.room_profile_section_more_leave + }), dividerColor = dividerColor, divider = false, destructive = true, From 84202adc5b3a85aa2418e51d580b5f318ad84ea5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 11:54:23 +0200 Subject: [PATCH 046/278] Add braces to multiline if else --- .../timeline/format/NoticeEventFormatter.kt | 60 +++++++++++-------- 1 file changed, 36 insertions(+), 24 deletions(-) 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 866058c8ba..84cb1d7817 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 @@ -183,10 +183,11 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return event.getClearContent().toModel() ?.takeIf { it.creator.isNullOrBlank().not() } ?.let { - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_created_by_you else R.string.notice_room_created_by_you) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_created else R.string.notice_room_created, it.creator) + } } } @@ -208,10 +209,11 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } private fun formatRoomTombstoneEvent(event: Event, senderName: String?): CharSequence? { - return if (event.isSentByCurrentUser()) + return if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_update_by_you else R.string.notice_room_update_by_you) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_update else R.string.notice_room_update, senderName) + } } private fun formatRoomTopicEvent(event: Event, senderName: String?): CharSequence? { @@ -252,12 +254,13 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val historyVisibility = event.getClearContent().toModel()?.historyVisibility ?: return null val formattedVisibility = roomHistoryVisibilityFormatter.format(historyVisibility) - return if (event.isSentByCurrentUser()) + return if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_made_future_direct_room_visibility_by_you else R.string.notice_made_future_room_visibility_by_you, formattedVisibility) - else + } else { sp.getString(if (event.isDm()) R.string.notice_made_future_direct_room_visibility else R.string.notice_made_future_room_visibility, senderName, formattedVisibility) + } } private fun formatRoomThirdPartyInvite(event: Event, senderName: String?): CharSequence? { @@ -267,21 +270,23 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return when { prevContent != null -> { // Revoke case - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_revoked_invite_by_you else R.string.notice_room_third_party_revoked_invite_by_you, prevContent.displayName) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_revoked_invite else R.string.notice_room_third_party_revoked_invite, senderName, prevContent.displayName) + } } content != null -> { // Invitation case - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_invite_by_you else R.string.notice_room_third_party_invite_by_you, content.displayName) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_invite else R.string.notice_room_third_party_invite, senderName, content.displayName) + } } else -> null } @@ -396,17 +401,19 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val eventContent: RoomGuestAccessContent? = event.getClearContent().toModel() return when (eventContent?.guestAccess) { GuestAccess.CanJoin -> - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_can_join else R.string.notice_room_guest_access_can_join, senderName) + } GuestAccess.Forbidden -> - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden else R.string.notice_room_guest_access_forbidden, senderName) + } else -> null } } @@ -530,18 +537,20 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } Membership.JOIN -> eventContent.safeReason?.let { reason -> - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_join_with_reason_by_you else R.string.notice_room_join_with_reason_by_you, reason) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_join_with_reason else R.string.notice_room_join_with_reason, senderDisplayName, reason) + } } ?: run { - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_join_by_you else R.string.notice_room_join_by_you) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_join else R.string.notice_room_join, senderDisplayName) + } } Membership.LEAVE -> // 2 cases here: this member may have left voluntarily or they may have been "left" by someone else ie. kicked @@ -559,18 +568,20 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } else -> eventContent.safeReason?.let { reason -> - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_with_reason_by_you else R.string.notice_room_leave_with_reason_by_you, reason) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_with_reason else R.string.notice_room_leave_with_reason, senderDisplayName, reason) + } } ?: run { - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_by_you else R.string.notice_room_leave_by_you) - else + } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_leave else R.string.notice_room_leave, senderDisplayName) + } } } } else { @@ -637,11 +648,12 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour val content = event.getClearContent().toModel() ?: return null return when (content.joinRules) { RoomJoinRules.INVITE -> - if (event.isSentByCurrentUser()) + if (event.isSentByCurrentUser()) { sp.getString(if (event.isDm()) R.string.direct_room_join_rules_invite_by_you else R.string.room_join_rules_invite_by_you) - else + } else { sp.getString(if (event.isDm()) R.string.direct_room_join_rules_invite else R.string.room_join_rules_invite, senderName) + } RoomJoinRules.PUBLIC -> if (event.isSentByCurrentUser()) { sp.getString(R.string.room_join_rules_public_by_you) From 1986de36a697c01aabcac4bc409956dd79880ef6 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 12:12:44 +0200 Subject: [PATCH 047/278] Better wording for DM creation (note: this event is hidden in the timeline by default) --- matrix-sdk-android/src/main/res/values/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values/strings.xml b/matrix-sdk-android/src/main/res/values/strings.xml index 70a7461fe9..3f75b715f6 100644 --- a/matrix-sdk-android/src/main/res/values/strings.xml +++ b/matrix-sdk-android/src/main/res/values/strings.xml @@ -10,8 +10,8 @@ Your invitation %1$s created the room You created the room - %1$s joined - You joined + %1$s created the discussion + You created the discussion %1$s invited %2$s You invited %1$s %1$s invited you From 42a3a64b0d596e3765222eeb02685a279ece3435 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 12:26:25 +0200 Subject: [PATCH 048/278] Better way to get direct state of the room (using view state) --- .../home/room/detail/RoomDetailFragment.kt | 24 +++++++++++-------- .../home/room/detail/RoomDetailViewState.kt | 2 ++ 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index b31af30609..3b4795b965 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -704,11 +704,13 @@ class RoomDetailFragment @Inject constructor( // safeStartCall(it, isVideoCall) // } } else if (!state.isAllowedToStartWebRTCCall) { - if (session.getRoom(state.roomId)?.roomSummary()?.isDirect == true) { - showDialogWithMessage(getString(R.string.no_permissions_to_start_webrtc_call_in_direct_room)) - } else { - showDialogWithMessage(getString(R.string.no_permissions_to_start_webrtc_call)) - } + showDialogWithMessage(getString( + if (state.isDm()) { + R.string.no_permissions_to_start_webrtc_call_in_direct_room + } else { + R.string.no_permissions_to_start_webrtc_call + }) + ) } else { safeStartCall(isVideoCall) } @@ -718,11 +720,13 @@ class RoomDetailFragment @Inject constructor( // can you add widgets?? if (!state.isAllowedToManageWidgets) { // You do not have permission to start a conference call in this room - if (session.getRoom(state.roomId)?.roomSummary()?.isDirect == true) { - showDialogWithMessage(getString(R.string.no_permissions_to_start_conf_call_in_direct_room)) - } else { - showDialogWithMessage(getString(R.string.no_permissions_to_start_conf_call)) - } + showDialogWithMessage(getString( + if (state.isDm()) { + R.string.no_permissions_to_start_conf_call_in_direct_room + } else { + R.string.no_permissions_to_start_conf_call + } + )) } else { if (state.activeRoomWidgets()?.filter { it.type == WidgetType.Jitsi }?.any() == true) { // A conference is already in progress! diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt index 16a7379b6a..36acc35148 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt @@ -77,4 +77,6 @@ data class RoomDetailViewState( // Also highlight the target event, if any highlightedEventId = args.eventId ) + + fun isDm() = asyncRoomSummary()?.isDirect == true } From f58829130a4526d084d0a6ad3af3b8744438aa82 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 12:30:21 +0200 Subject: [PATCH 049/278] More cleanup --- .../detail/timeline/factory/EncryptionItemFactory.kt | 12 +++++++----- .../detail/timeline/factory/TimelineItemFactory.kt | 4 +--- 2 files changed, 8 insertions(+), 8 deletions(-) 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 2ed88cbae9..4f2c8ea63a 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 @@ -54,11 +54,13 @@ class EncryptionItemFactory @Inject constructor( val shield: StatusTileTimelineItem.ShieldUIState if (isSafeAlgorithm) { title = stringProvider.getString(R.string.encryption_enabled) - description = if (session.getRoomSummary(event.root.roomId ?: "")?.isDirect.orFalse()) { - stringProvider.getString(R.string.direct_room_encryption_enabled_tile_description) - } else { - stringProvider.getString(R.string.encryption_enabled_tile_description) - } + description = stringProvider.getString( + if (session.getRoomSummary(event.root.roomId ?: "")?.isDirect.orFalse()) { + R.string.direct_room_encryption_enabled_tile_description + } else { + R.string.encryption_enabled_tile_description + } + ) shield = StatusTileTimelineItem.ShieldUIState.BLACK } else { title = stringProvider.getString(R.string.encryption_not_enabled) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt index 1f99efd08e..a2e01e63cd 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt @@ -64,9 +64,7 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me EventType.STATE_ROOM_POWER_LEVELS, EventType.REACTION, EventType.REDACTION -> noticeItemFactory.create(event, highlight, callback) - EventType.STATE_ROOM_ENCRYPTION -> { - encryptionItemFactory.create(event, highlight, callback) - } + EventType.STATE_ROOM_ENCRYPTION -> encryptionItemFactory.create(event, highlight, callback) // State room create EventType.STATE_ROOM_CREATE -> roomCreateItemFactory.create(event, callback) // Crypto From c5459cdde4b537e3df54b0a9472e085b83b4e9eb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 12:39:36 +0200 Subject: [PATCH 050/278] Use RoomSummaryHolder if available --- .../timeline/factory/MergedHeaderItemFactory.kt | 14 ++++++-------- .../timeline/format/NoticeEventFormatter.kt | 15 ++++++++++++--- 2 files changed, 18 insertions(+), 11 deletions(-) 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 41a961dee0..08f93b23cd 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 @@ -22,6 +22,7 @@ import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.home.room.detail.timeline.TimelineEventController import im.vector.app.features.home.room.detail.timeline.helper.AvatarSizeProvider import im.vector.app.features.home.room.detail.timeline.helper.MergedTimelineEventVisibilityStateChangedListener +import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder import im.vector.app.features.home.room.detail.timeline.helper.canBeMerged import im.vector.app.features.home.room.detail.timeline.helper.isRoomConfiguration import im.vector.app.features.home.room.detail.timeline.helper.prevSameTypeEvents @@ -46,6 +47,7 @@ import javax.inject.Inject class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolder: ActiveSessionHolder, private val avatarRenderer: AvatarRenderer, private val avatarSizeProvider: AvatarSizeProvider, + private val roomSummaryHolder: RoomSummaryHolder, private val vectorPreferences: VectorPreferences) { private val collapsedEventIds = linkedSetOf() @@ -79,11 +81,7 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde } } - private fun isDirectRoom(roomId: String?): Boolean { - return roomId?.let { - activeSessionHolder.getSafeActiveSession()?.getRoom(roomId)?.roomSummary()?.isDirect - }.orFalse() - } + private fun isDirectRoom() = roomSummaryHolder.roomSummary?.isDirect.orFalse() private fun buildMembershipEventsMergedSummary(currentPosition: Int, items: List, @@ -108,7 +106,7 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde memberName = mergedEvent.senderInfo.disambiguatedDisplayName, localId = mergedEvent.localId, eventId = mergedEvent.root.eventId ?: "", - isDirectRoom = isDirectRoom(mergedEvent.root.roomId) + isDirectRoom = isDirectRoom() ) mergedData.add(data) } @@ -196,7 +194,7 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde memberName = senderName, localId = mergedEvent.localId, eventId = mergedEvent.root.eventId ?: "", - isDirectRoom = isDirectRoom(mergedEvent.root.roomId) + isDirectRoom = isDirectRoom() ) mergedData.add(data) } @@ -257,7 +255,7 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde memberName = mergedEvent.senderInfo.disambiguatedDisplayName, localId = mergedEvent.localId, eventId = mergedEvent.root.eventId ?: "", - isDirectRoom = isDirectRoom(mergedEvent.root.roomId) + isDirectRoom = isDirectRoom() ) mergedData.add(data) } 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 84cb1d7817..34b4cac5b4 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 @@ -19,6 +19,7 @@ package im.vector.app.features.home.room.detail.timeline.format import im.vector.app.ActiveSessionDataSource import im.vector.app.R import im.vector.app.core.resources.StringProvider +import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType @@ -49,6 +50,7 @@ import javax.inject.Inject class NoticeEventFormatter @Inject constructor(private val activeSessionDataSource: ActiveSessionDataSource, private val roomHistoryVisibilityFormatter: RoomHistoryVisibilityFormatter, + private val roomSummaryHolder: RoomSummaryHolder, private val sp: StringProvider) { private val currentUserId: String? @@ -56,9 +58,16 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour private fun Event.isSentByCurrentUser() = senderId != null && senderId == currentUserId - private fun Event.isDm() = roomId?.let { - activeSessionDataSource.currentValue?.orNull()?.getRoomSummary(it)?.isDirect - }.orFalse() + private fun Event.isDm(): Boolean { + return roomSummaryHolder.roomSummary?.isDirect + ?: run { + // RoomSummaryHolder does not have any RoomSummary (not in the timeline) + roomId?.let { + activeSessionDataSource.currentValue?.orNull()?.getRoomSummary(it)?.isDirect + } + } + .orFalse() + } fun format(timelineEvent: TimelineEvent): CharSequence? { return when (val type = timelineEvent.root.getClearType()) { From 5e2f65ab7abdd15e734bf2f87b797c085e2ed0ba Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 12:46:28 +0200 Subject: [PATCH 051/278] Split long lines --- .../timeline/format/NoticeEventFormatter.kt | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) 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 34b4cac5b4..45567196f9 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 @@ -280,7 +280,12 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour prevContent != null -> { // Revoke case if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_revoked_invite_by_you else R.string.notice_room_third_party_revoked_invite_by_you, + sp.getString( + if (event.isDm()) { + R.string.notice_direct_room_third_party_revoked_invite_by_you + } else { + R.string.notice_room_third_party_revoked_invite_by_you + }, prevContent.displayName) } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_revoked_invite else R.string.notice_room_third_party_revoked_invite, @@ -411,14 +416,18 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return when (eventContent?.guestAccess) { GuestAccess.CanJoin -> if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you) + sp.getString( + if (event.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you + ) } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_can_join else R.string.notice_room_guest_access_can_join, senderName) } GuestAccess.Forbidden -> if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you) + sp.getString( + if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you + ) } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden else R.string.notice_room_guest_access_forbidden, senderName) @@ -578,8 +587,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour else -> eventContent.safeReason?.let { reason -> if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_with_reason_by_you else R.string.notice_room_leave_with_reason_by_you, - reason) + sp.getString( + if (event.isDm()) { + R.string.notice_direct_room_leave_with_reason_by_you + } else { + R.string.notice_room_leave_with_reason_by_you + }, + reason + ) } else { sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_with_reason else R.string.notice_room_leave_with_reason, senderDisplayName, reason) From 6f29d380473494f0148889849c2d6c7d3dfcaacb Mon Sep 17 00:00:00 2001 From: Dmytro Kyrychuk Date: Tue, 29 Sep 2020 17:14:41 +0000 Subject: [PATCH 052/278] 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 053/278] 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 054/278] 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 055/278] 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 7f26dbe260f624a0779cf4000dc7494c775cdcea Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 15:19:23 +0200 Subject: [PATCH 056/278] Fix compil issue --- .../action/MessageActionsViewModel.kt | 2 +- .../timeline/factory/MessageItemFactory.kt | 6 +- .../timeline/factory/NoticeItemFactory.kt | 4 +- .../timeline/factory/RoomCreateItemFactory.kt | 4 +- .../timeline/factory/TimelineItemFactory.kt | 6 +- .../factory/VerificationItemFactory.kt | 4 +- .../format/DisplayableEventFormatter.kt | 5 +- .../timeline/format/NoticeEventFormatter.kt | 108 ++++++++---------- .../home/room/list/RoomSummaryItemFactory.kt | 2 +- .../notifications/NotifiableEventResolver.kt | 6 +- 10 files changed, 74 insertions(+), 73 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt index a49b74c243..8a25e5fc93 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt @@ -190,7 +190,7 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted EventType.CALL_CANDIDATES, EventType.CALL_HANGUP, EventType.CALL_ANSWER -> { - noticeEventFormatter.format(timelineEvent) + noticeEventFormatter.format(timelineEvent, room?.roomSummary()) } else -> null } ?: "" diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt index 97bc693f26..1e809d9ab5 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/MessageItemFactory.kt @@ -38,6 +38,7 @@ import im.vector.app.features.home.room.detail.timeline.helper.ContentDownloadSt import im.vector.app.features.home.room.detail.timeline.helper.ContentUploadStateTrackerBinder import im.vector.app.features.home.room.detail.timeline.helper.MessageInformationDataFactory import im.vector.app.features.home.room.detail.timeline.helper.MessageItemAttributesFactory +import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder import im.vector.app.features.home.room.detail.timeline.helper.TimelineMediaSizeProvider import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem import im.vector.app.features.home.room.detail.timeline.item.MessageBlockCodeItem @@ -101,6 +102,7 @@ class MessageItemFactory @Inject constructor( private val messageItemAttributesFactory: MessageItemAttributesFactory, private val contentUploadStateTrackerBinder: ContentUploadStateTrackerBinder, private val contentDownloadStateTrackerBinder: ContentDownloadStateTrackerBinder, + private val roomSummaryHolder: RoomSummaryHolder, private val defaultItemFactory: DefaultItemFactory, private val noticeItemFactory: NoticeItemFactory, private val avatarSizeProvider: AvatarSizeProvider, @@ -130,7 +132,7 @@ class MessageItemFactory @Inject constructor( || event.isEncrypted() && event.root.content.toModel()?.relatesTo?.type == RelationType.REPLACE ) { // This is an edit event, we should display it when debugging as a notice event - return noticeItemFactory.create(event, highlight, callback) + return noticeItemFactory.create(event, highlight, roomSummaryHolder.roomSummary, callback) } val attributes = messageItemAttributesFactory.create(messageContent, informationData, callback) @@ -146,7 +148,7 @@ class MessageItemFactory @Inject constructor( is MessageAudioContent -> buildAudioMessageItem(messageContent, informationData, highlight, attributes) is MessageVerificationRequestContent -> buildVerificationRequestMessageItem(messageContent, informationData, highlight, callback, attributes) is MessageOptionsContent -> buildOptionsMessageItem(messageContent, informationData, highlight, callback, attributes) - is MessagePollResponseContent -> noticeItemFactory.create(event, highlight, callback) + is MessagePollResponseContent -> noticeItemFactory.create(event, highlight, roomSummaryHolder.roomSummary, callback) else -> buildNotHandledMessageItem(messageContent, informationData, highlight, callback, attributes) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/NoticeItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/NoticeItemFactory.kt index cd8c682f39..ec065543f5 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/NoticeItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/NoticeItemFactory.kt @@ -24,6 +24,7 @@ import im.vector.app.features.home.room.detail.timeline.helper.AvatarSizeProvide import im.vector.app.features.home.room.detail.timeline.helper.MessageInformationDataFactory import im.vector.app.features.home.room.detail.timeline.item.NoticeItem import im.vector.app.features.home.room.detail.timeline.item.NoticeItem_ +import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import javax.inject.Inject @@ -34,8 +35,9 @@ class NoticeItemFactory @Inject constructor(private val eventFormatter: NoticeEv fun create(event: TimelineEvent, highlight: Boolean, + roomSummary: RoomSummary?, callback: TimelineEventController.Callback?): NoticeItem? { - val formattedText = eventFormatter.format(event) ?: return null + val formattedText = eventFormatter.format(event, roomSummary) ?: return null val informationData = informationDataFactory.create(event, null) val attributes = NoticeItem.Attributes( avatarRenderer = avatarRenderer, diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/RoomCreateItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/RoomCreateItemFactory.kt index 31adbdb8a6..25b5fd718b 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/RoomCreateItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/RoomCreateItemFactory.kt @@ -21,6 +21,7 @@ import im.vector.app.core.epoxy.VectorEpoxyModel import im.vector.app.core.resources.StringProvider import im.vector.app.core.resources.UserPreferencesProvider import im.vector.app.features.home.room.detail.timeline.TimelineEventController +import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder import im.vector.app.features.home.room.detail.timeline.item.RoomCreateItem_ import me.gujun.android.span.span import org.matrix.android.sdk.api.session.Session @@ -32,6 +33,7 @@ import javax.inject.Inject class RoomCreateItemFactory @Inject constructor(private val stringProvider: StringProvider, private val userPreferencesProvider: UserPreferencesProvider, private val session: Session, + private val roomSummaryHolder: RoomSummaryHolder, private val noticeItemFactory: NoticeItemFactory) { fun create(event: TimelineEvent, callback: TimelineEventController.Callback?): VectorEpoxyModel<*>? { @@ -52,7 +54,7 @@ class RoomCreateItemFactory @Inject constructor(private val stringProvider: Stri private fun defaultRendering(event: TimelineEvent, callback: TimelineEventController.Callback?): VectorEpoxyModel<*>? { return if (userPreferencesProvider.shouldShowHiddenEvents()) { - noticeItemFactory.create(event, false, callback) + noticeItemFactory.create(event, false, roomSummaryHolder.roomSummary, callback) } else { null } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt index a2e01e63cd..40286678c8 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactory.kt @@ -20,6 +20,7 @@ import im.vector.app.core.epoxy.EmptyItem_ import im.vector.app.core.epoxy.VectorEpoxyModel import im.vector.app.core.resources.UserPreferencesProvider import im.vector.app.features.home.room.detail.timeline.TimelineEventController +import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import timber.log.Timber @@ -31,6 +32,7 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me private val defaultItemFactory: DefaultItemFactory, private val encryptionItemFactory: EncryptionItemFactory, private val roomCreateItemFactory: RoomCreateItemFactory, + private val roomSummaryHolder: RoomSummaryHolder, private val verificationConclusionItemFactory: VerificationItemFactory, private val userPreferencesProvider: UserPreferencesProvider) { @@ -63,7 +65,7 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me EventType.CALL_ANSWER, EventType.STATE_ROOM_POWER_LEVELS, EventType.REACTION, - EventType.REDACTION -> noticeItemFactory.create(event, highlight, callback) + EventType.REDACTION -> noticeItemFactory.create(event, highlight, roomSummaryHolder.roomSummary, callback) EventType.STATE_ROOM_ENCRYPTION -> encryptionItemFactory.create(event, highlight, callback) // State room create EventType.STATE_ROOM_CREATE -> roomCreateItemFactory.create(event, callback) @@ -85,7 +87,7 @@ class TimelineItemFactory @Inject constructor(private val messageItemFactory: Me // TODO These are not filtered out by timeline when encrypted // For now manually ignore if (userPreferencesProvider.shouldShowHiddenEvents()) { - noticeItemFactory.create(event, highlight, callback) + noticeItemFactory.create(event, highlight, roomSummaryHolder.roomSummary, callback) } else { null } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt index 0b623d78f1..59daf5a0a0 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/VerificationItemFactory.kt @@ -24,6 +24,7 @@ import im.vector.app.features.home.room.detail.timeline.TimelineEventController import im.vector.app.features.home.room.detail.timeline.helper.AvatarSizeProvider import im.vector.app.features.home.room.detail.timeline.helper.MessageInformationDataFactory import im.vector.app.features.home.room.detail.timeline.helper.MessageItemAttributesFactory +import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder import im.vector.app.features.home.room.detail.timeline.item.StatusTileTimelineItem import im.vector.app.features.home.room.detail.timeline.item.StatusTileTimelineItem_ import org.matrix.android.sdk.api.session.Session @@ -50,6 +51,7 @@ class VerificationItemFactory @Inject constructor( private val avatarSizeProvider: AvatarSizeProvider, private val noticeItemFactory: NoticeItemFactory, private val userPreferencesProvider: UserPreferencesProvider, + private val roomSummaryHolder: RoomSummaryHolder, private val stringProvider: StringProvider, private val session: Session ) { @@ -151,7 +153,7 @@ class VerificationItemFactory @Inject constructor( highlight: Boolean, callback: TimelineEventController.Callback? ): VectorEpoxyModel<*>? { - if (userPreferencesProvider.shouldShowHiddenEvents()) return noticeItemFactory.create(event, highlight, callback) + if (userPreferencesProvider.shouldShowHiddenEvents()) return noticeItemFactory.create(event, highlight, roomSummaryHolder.roomSummary, callback) return null } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/DisplayableEventFormatter.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/DisplayableEventFormatter.kt index cb9f583a2a..78d9a49c9c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/DisplayableEventFormatter.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/format/DisplayableEventFormatter.kt @@ -23,6 +23,7 @@ import im.vector.app.core.resources.StringProvider import me.gujun.android.span.span import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.model.message.MessageOptionsContent import org.matrix.android.sdk.api.session.room.model.message.MessageType import org.matrix.android.sdk.api.session.room.model.message.OPTION_TYPE_BUTTONS @@ -40,7 +41,7 @@ class DisplayableEventFormatter @Inject constructor( private val noticeEventFormatter: NoticeEventFormatter ) { - fun format(timelineEvent: TimelineEvent, appendAuthor: Boolean): CharSequence { + fun format(timelineEvent: TimelineEvent, appendAuthor: Boolean, roomSummary: RoomSummary?): CharSequence { if (timelineEvent.root.isRedacted()) { return noticeEventFormatter.formatRedactedEvent(timelineEvent.root) } @@ -130,7 +131,7 @@ class DisplayableEventFormatter @Inject constructor( } else -> { return span { - text = noticeEventFormatter.format(timelineEvent) ?: "" + text = noticeEventFormatter.format(timelineEvent, roomSummary) ?: "" textStyle = "italic" } } 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 45567196f9..1d20bc3ad5 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 @@ -19,7 +19,6 @@ package im.vector.app.features.home.room.detail.timeline.format import im.vector.app.ActiveSessionDataSource import im.vector.app.R import im.vector.app.core.resources.StringProvider -import im.vector.app.features.home.room.detail.timeline.helper.RoomSummaryHolder import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.EventType @@ -36,6 +35,7 @@ import org.matrix.android.sdk.api.session.room.model.RoomJoinRules import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesContent import org.matrix.android.sdk.api.session.room.model.RoomMemberContent import org.matrix.android.sdk.api.session.room.model.RoomNameContent +import org.matrix.android.sdk.api.session.room.model.RoomSummary import org.matrix.android.sdk.api.session.room.model.RoomThirdPartyInviteContent import org.matrix.android.sdk.api.session.room.model.RoomTopicContent import org.matrix.android.sdk.api.session.room.model.call.CallInviteContent @@ -50,7 +50,6 @@ import javax.inject.Inject class NoticeEventFormatter @Inject constructor(private val activeSessionDataSource: ActiveSessionDataSource, private val roomHistoryVisibilityFormatter: RoomHistoryVisibilityFormatter, - private val roomSummaryHolder: RoomSummaryHolder, private val sp: StringProvider) { private val currentUserId: String? @@ -58,34 +57,25 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour private fun Event.isSentByCurrentUser() = senderId != null && senderId == currentUserId - private fun Event.isDm(): Boolean { - return roomSummaryHolder.roomSummary?.isDirect - ?: run { - // RoomSummaryHolder does not have any RoomSummary (not in the timeline) - roomId?.let { - activeSessionDataSource.currentValue?.orNull()?.getRoomSummary(it)?.isDirect - } - } - .orFalse() - } + private fun RoomSummary?.isDm() = this?.isDirect.orFalse() - fun format(timelineEvent: TimelineEvent): CharSequence? { + fun format(timelineEvent: TimelineEvent, roomSummary: RoomSummary?): CharSequence? { return when (val type = timelineEvent.root.getClearType()) { - EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_CREATE -> formatRoomCreateEvent(timelineEvent.root) + EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) + EventType.STATE_ROOM_CREATE -> formatRoomCreateEvent(timelineEvent.root, roomSummary) EventType.STATE_ROOM_NAME -> formatRoomNameEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_TOPIC -> formatRoomTopicEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_AVATAR -> formatRoomAvatarEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) + EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) + EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary ) EventType.STATE_ROOM_ALIASES -> formatRoomAliasesEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_CANONICAL_ALIAS -> formatRoomCanonicalAliasEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_HISTORY_VISIBILITY -> formatRoomHistoryVisibilityEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_GUEST_ACCESS -> formatRoomGuestAccessEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) + EventType.STATE_ROOM_HISTORY_VISIBILITY -> formatRoomHistoryVisibilityEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) + EventType.STATE_ROOM_GUEST_ACCESS -> formatRoomGuestAccessEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) EventType.STATE_ROOM_ENCRYPTION -> formatRoomEncryptionEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_WIDGET, EventType.STATE_ROOM_WIDGET_LEGACY -> formatWidgetEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) + EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) EventType.STATE_ROOM_POWER_LEVELS -> formatRoomPowerLevels(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.CALL_INVITE, EventType.CALL_CANDIDATES, @@ -164,19 +154,19 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - fun format(event: Event, senderName: String?): CharSequence? { + fun format(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { return when (val type = event.getClearType()) { - EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(event, senderName) + EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(event, senderName, roomSummary) EventType.STATE_ROOM_NAME -> formatRoomNameEvent(event, senderName) EventType.STATE_ROOM_TOPIC -> formatRoomTopicEvent(event, senderName) EventType.STATE_ROOM_AVATAR -> formatRoomAvatarEvent(event, senderName) - EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(event, senderName) - EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(event, senderName) - EventType.STATE_ROOM_HISTORY_VISIBILITY -> formatRoomHistoryVisibilityEvent(event, senderName) + EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(event, senderName, roomSummary) + EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(event, senderName, roomSummary) + EventType.STATE_ROOM_HISTORY_VISIBILITY -> formatRoomHistoryVisibilityEvent(event, senderName, roomSummary) EventType.CALL_INVITE, EventType.CALL_HANGUP, EventType.CALL_ANSWER -> formatCallEvent(type, event, senderName) - EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(event, senderName) + EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(event, senderName, roomSummary) else -> { Timber.v("Type $type not handled by this formatter") null @@ -188,14 +178,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return "{ \"type\": ${event.getClearType()} }" } - private fun formatRoomCreateEvent(event: Event): CharSequence? { + private fun formatRoomCreateEvent(event: Event, roomSummary: RoomSummary?): CharSequence? { return event.getClearContent().toModel() ?.takeIf { it.creator.isNullOrBlank().not() } ?.let { if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_created_by_you else R.string.notice_room_created_by_you) + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_created_by_you else R.string.notice_room_created_by_you) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_created else R.string.notice_room_created, it.creator) + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_created else R.string.notice_room_created, it.creator) } } } @@ -217,11 +207,11 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomTombstoneEvent(event: Event, senderName: String?): CharSequence? { + private fun formatRoomTombstoneEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { return if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_update_by_you else R.string.notice_room_update_by_you) + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_update_by_you else R.string.notice_room_update_by_you) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_update else R.string.notice_room_update, senderName) + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_update else R.string.notice_room_update, senderName) } } @@ -259,20 +249,20 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomHistoryVisibilityEvent(event: Event, senderName: String?): CharSequence? { + private fun formatRoomHistoryVisibilityEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { val historyVisibility = event.getClearContent().toModel()?.historyVisibility ?: return null val formattedVisibility = roomHistoryVisibilityFormatter.format(historyVisibility) return if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_made_future_direct_room_visibility_by_you else R.string.notice_made_future_room_visibility_by_you, + sp.getString(if (roomSummary.isDm()) R.string.notice_made_future_direct_room_visibility_by_you else R.string.notice_made_future_room_visibility_by_you, formattedVisibility) } else { - sp.getString(if (event.isDm()) R.string.notice_made_future_direct_room_visibility else R.string.notice_made_future_room_visibility, + sp.getString(if (roomSummary.isDm()) R.string.notice_made_future_direct_room_visibility else R.string.notice_made_future_room_visibility, senderName, formattedVisibility) } } - private fun formatRoomThirdPartyInvite(event: Event, senderName: String?): CharSequence? { + private fun formatRoomThirdPartyInvite(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { val content = event.getClearContent().toModel() val prevContent = event.resolvedPrevContent()?.toModel() @@ -281,24 +271,24 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour // Revoke case if (event.isSentByCurrentUser()) { sp.getString( - if (event.isDm()) { + if (roomSummary.isDm()) { R.string.notice_direct_room_third_party_revoked_invite_by_you } else { R.string.notice_room_third_party_revoked_invite_by_you }, prevContent.displayName) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_revoked_invite else R.string.notice_room_third_party_revoked_invite, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_third_party_revoked_invite else R.string.notice_room_third_party_revoked_invite, senderName, prevContent.displayName) } } content != null -> { // Invitation case if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_invite_by_you else R.string.notice_room_third_party_invite_by_you, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_third_party_invite_by_you else R.string.notice_room_third_party_invite_by_you, content.displayName) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_third_party_invite else R.string.notice_room_third_party_invite, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_third_party_invite else R.string.notice_room_third_party_invite, senderName, content.displayName) } } @@ -347,13 +337,13 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomMemberEvent(event: Event, senderName: String?): String? { + private fun formatRoomMemberEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): String? { val eventContent: RoomMemberContent? = event.getClearContent().toModel() val prevEventContent: RoomMemberContent? = event.resolvedPrevContent().toModel() val isMembershipEvent = prevEventContent?.membership != eventContent?.membership || eventContent?.membership == Membership.LEAVE return if (isMembershipEvent) { - buildMembershipNotice(event, senderName, eventContent, prevEventContent) + buildMembershipNotice(event, senderName, eventContent, prevEventContent, roomSummary) } else { buildProfileNotice(event, senderName, eventContent, prevEventContent) } @@ -411,25 +401,25 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomGuestAccessEvent(event: Event, senderName: String?): String? { + private fun formatRoomGuestAccessEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): String? { val eventContent: RoomGuestAccessContent? = event.getClearContent().toModel() return when (eventContent?.guestAccess) { GuestAccess.CanJoin -> if (event.isSentByCurrentUser()) { sp.getString( - if (event.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you + if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you ) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_can_join else R.string.notice_room_guest_access_can_join, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_can_join else R.string.notice_room_guest_access_can_join, senderName) } GuestAccess.Forbidden -> if (event.isSentByCurrentUser()) { sp.getString( - if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you + if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you ) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_guest_access_forbidden else R.string.notice_room_guest_access_forbidden, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_forbidden else R.string.notice_room_guest_access_forbidden, senderName) } else -> null @@ -506,7 +496,7 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return displayText.toString() } - private fun buildMembershipNotice(event: Event, senderName: String?, eventContent: RoomMemberContent?, prevEventContent: RoomMemberContent?): String? { + private fun buildMembershipNotice(event: Event, senderName: String?, eventContent: RoomMemberContent?, prevEventContent: RoomMemberContent?, roomSummary: RoomSummary?): String? { val senderDisplayName = senderName ?: event.senderId ?: "" val targetDisplayName = eventContent?.displayName ?: prevEventContent?.displayName ?: event.stateKey ?: "" return when (eventContent?.membership) { @@ -556,17 +546,17 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour Membership.JOIN -> eventContent.safeReason?.let { reason -> if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_join_with_reason_by_you else R.string.notice_room_join_with_reason_by_you, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join_with_reason_by_you else R.string.notice_room_join_with_reason_by_you, reason) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_join_with_reason else R.string.notice_room_join_with_reason, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join_with_reason else R.string.notice_room_join_with_reason, senderDisplayName, reason) } } ?: run { if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_join_by_you else R.string.notice_room_join_by_you) + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join_by_you else R.string.notice_room_join_by_you) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_join else R.string.notice_room_join, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join else R.string.notice_room_join, senderDisplayName) } } @@ -588,7 +578,7 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour eventContent.safeReason?.let { reason -> if (event.isSentByCurrentUser()) { sp.getString( - if (event.isDm()) { + if (roomSummary.isDm()) { R.string.notice_direct_room_leave_with_reason_by_you } else { R.string.notice_room_leave_with_reason_by_you @@ -596,14 +586,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour reason ) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_with_reason else R.string.notice_room_leave_with_reason, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_leave_with_reason else R.string.notice_room_leave_with_reason, senderDisplayName, reason) } } ?: run { if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.notice_direct_room_leave_by_you else R.string.notice_room_leave_by_you) + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_leave_by_you else R.string.notice_room_leave_by_you) } else { - sp.getString(if (event.isDm()) R.string.notice_direct_room_leave else R.string.notice_room_leave, + sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_leave else R.string.notice_room_leave, senderDisplayName) } } @@ -668,14 +658,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatJoinRulesEvent(event: Event, senderName: String?): CharSequence? { + private fun formatJoinRulesEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { val content = event.getClearContent().toModel() ?: return null return when (content.joinRules) { RoomJoinRules.INVITE -> if (event.isSentByCurrentUser()) { - sp.getString(if (event.isDm()) R.string.direct_room_join_rules_invite_by_you else R.string.room_join_rules_invite_by_you) + sp.getString(if (roomSummary.isDm()) R.string.direct_room_join_rules_invite_by_you else R.string.room_join_rules_invite_by_you) } else { - sp.getString(if (event.isDm()) R.string.direct_room_join_rules_invite else R.string.room_join_rules_invite, + sp.getString(if (roomSummary.isDm()) R.string.direct_room_join_rules_invite else R.string.room_join_rules_invite, senderName) } RoomJoinRules.PUBLIC -> diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomSummaryItemFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomSummaryItemFactory.kt index 06cb0172d0..7bb9940ec4 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomSummaryItemFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomSummaryItemFactory.kt @@ -86,7 +86,7 @@ class RoomSummaryItemFactory @Inject constructor(private val displayableEventFor var latestEventTime: CharSequence = "" val latestEvent = roomSummary.latestPreviewableEvent if (latestEvent != null) { - latestFormattedEvent = displayableEventFormatter.format(latestEvent, roomSummary.isDirect.not()) + latestFormattedEvent = displayableEventFormatter.format(latestEvent, roomSummary.isDirect.not(), roomSummary) latestEventTime = dateFormatter.format(latestEvent.root.originServerTs, DateFormatKind.ROOM_LIST) } val typingMessage = typingHelper.getTypingMessage(roomSummary.typingUsers) diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt b/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt index 649dbd89f9..0740295191 100644 --- a/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotifiableEventResolver.kt @@ -91,7 +91,7 @@ class NotifiableEventResolver @Inject constructor(private val stringProvider: St if (room == null) { Timber.e("## Unable to resolve room for eventId [$event]") // Ok room is not known in store, but we can still display something - val body = displayableEventFormatter.format(event, false) + val body = displayableEventFormatter.format(event, false, null) val roomName = stringProvider.getString(R.string.notification_unknown_room_name) val senderDisplayName = event.senderInfo.disambiguatedDisplayName @@ -124,7 +124,7 @@ class NotifiableEventResolver @Inject constructor(private val stringProvider: St } } - val body = displayableEventFormatter.format(event, false).toString() + val body = displayableEventFormatter.format(event, false, room.roomSummary()).toString() val roomName = room.roomSummary()?.displayName ?: "" val senderDisplayName = event.senderInfo.disambiguatedDisplayName @@ -165,7 +165,7 @@ class NotifiableEventResolver @Inject constructor(private val stringProvider: St val roomId = event.roomId ?: return null val dName = event.senderId?.let { session.getUser(it)?.displayName } if (Membership.INVITE == content.membership) { - val body = noticeEventFormatter.format(event, dName) + val body = noticeEventFormatter.format(event, dName, session.getRoomSummary(roomId)) ?: stringProvider.getString(R.string.notification_new_invitation) return InviteNotifiableEvent( session.myUserId, From 108a31eca338ffe975a490053df95d6cc3096550 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 15:31:33 +0200 Subject: [PATCH 057/278] Avoid long lines --- .../timeline/format/NoticeEventFormatter.kt | 99 ++++++++++--------- 1 file changed, 52 insertions(+), 47 deletions(-) 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 1d20bc3ad5..e26472feb0 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 @@ -59,23 +59,24 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour private fun RoomSummary?.isDm() = this?.isDirect.orFalse() - fun format(timelineEvent: TimelineEvent, roomSummary: RoomSummary?): CharSequence? { + fun format(timelineEvent: TimelineEvent, rs: RoomSummary?): CharSequence? { return when (val type = timelineEvent.root.getClearType()) { - EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) - EventType.STATE_ROOM_CREATE -> formatRoomCreateEvent(timelineEvent.root, roomSummary) + EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, rs) + EventType.STATE_ROOM_CREATE -> formatRoomCreateEvent(timelineEvent.root, rs) EventType.STATE_ROOM_NAME -> formatRoomNameEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_TOPIC -> formatRoomTopicEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_AVATAR -> formatRoomAvatarEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) - EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary ) + EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, rs) + EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, rs) EventType.STATE_ROOM_ALIASES -> formatRoomAliasesEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_CANONICAL_ALIAS -> formatRoomCanonicalAliasEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_HISTORY_VISIBILITY -> formatRoomHistoryVisibilityEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) - EventType.STATE_ROOM_GUEST_ACCESS -> formatRoomGuestAccessEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) + EventType.STATE_ROOM_HISTORY_VISIBILITY -> + formatRoomHistoryVisibilityEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, rs) + EventType.STATE_ROOM_GUEST_ACCESS -> formatRoomGuestAccessEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, rs) EventType.STATE_ROOM_ENCRYPTION -> formatRoomEncryptionEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.STATE_ROOM_WIDGET, EventType.STATE_ROOM_WIDGET_LEGACY -> formatWidgetEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) - EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, roomSummary) + EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName, rs) EventType.STATE_ROOM_POWER_LEVELS -> formatRoomPowerLevels(timelineEvent.root, timelineEvent.senderInfo.disambiguatedDisplayName) EventType.CALL_INVITE, EventType.CALL_CANDIDATES, @@ -154,19 +155,19 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - fun format(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { + fun format(event: Event, senderName: String?, rs: RoomSummary?): CharSequence? { return when (val type = event.getClearType()) { - EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(event, senderName, roomSummary) + EventType.STATE_ROOM_JOIN_RULES -> formatJoinRulesEvent(event, senderName, rs) EventType.STATE_ROOM_NAME -> formatRoomNameEvent(event, senderName) EventType.STATE_ROOM_TOPIC -> formatRoomTopicEvent(event, senderName) EventType.STATE_ROOM_AVATAR -> formatRoomAvatarEvent(event, senderName) - EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(event, senderName, roomSummary) - EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(event, senderName, roomSummary) - EventType.STATE_ROOM_HISTORY_VISIBILITY -> formatRoomHistoryVisibilityEvent(event, senderName, roomSummary) + EventType.STATE_ROOM_MEMBER -> formatRoomMemberEvent(event, senderName, rs) + EventType.STATE_ROOM_THIRD_PARTY_INVITE -> formatRoomThirdPartyInvite(event, senderName, rs) + EventType.STATE_ROOM_HISTORY_VISIBILITY -> formatRoomHistoryVisibilityEvent(event, senderName, rs) EventType.CALL_INVITE, EventType.CALL_HANGUP, EventType.CALL_ANSWER -> formatCallEvent(type, event, senderName) - EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(event, senderName, roomSummary) + EventType.STATE_ROOM_TOMBSTONE -> formatRoomTombstoneEvent(event, senderName, rs) else -> { Timber.v("Type $type not handled by this formatter") null @@ -178,14 +179,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return "{ \"type\": ${event.getClearType()} }" } - private fun formatRoomCreateEvent(event: Event, roomSummary: RoomSummary?): CharSequence? { + private fun formatRoomCreateEvent(event: Event, rs: RoomSummary?): CharSequence? { return event.getClearContent().toModel() ?.takeIf { it.creator.isNullOrBlank().not() } ?.let { if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_created_by_you else R.string.notice_room_created_by_you) + sp.getString(if (rs.isDm()) R.string.notice_direct_room_created_by_you else R.string.notice_room_created_by_you) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_created else R.string.notice_room_created, it.creator) + sp.getString(if (rs.isDm()) R.string.notice_direct_room_created else R.string.notice_room_created, it.creator) } } } @@ -207,11 +208,11 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomTombstoneEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { + private fun formatRoomTombstoneEvent(event: Event, senderName: String?, rs: RoomSummary?): CharSequence? { return if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_update_by_you else R.string.notice_room_update_by_you) + sp.getString(if (rs.isDm()) R.string.notice_direct_room_update_by_you else R.string.notice_room_update_by_you) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_update else R.string.notice_room_update, senderName) + sp.getString(if (rs.isDm()) R.string.notice_direct_room_update else R.string.notice_room_update, senderName) } } @@ -249,20 +250,20 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomHistoryVisibilityEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { + private fun formatRoomHistoryVisibilityEvent(event: Event, senderName: String?, rs: RoomSummary?): CharSequence? { val historyVisibility = event.getClearContent().toModel()?.historyVisibility ?: return null val formattedVisibility = roomHistoryVisibilityFormatter.format(historyVisibility) return if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.notice_made_future_direct_room_visibility_by_you else R.string.notice_made_future_room_visibility_by_you, + sp.getString(if (rs.isDm()) R.string.notice_made_future_direct_room_visibility_by_you else R.string.notice_made_future_room_visibility_by_you, formattedVisibility) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_made_future_direct_room_visibility else R.string.notice_made_future_room_visibility, + sp.getString(if (rs.isDm()) R.string.notice_made_future_direct_room_visibility else R.string.notice_made_future_room_visibility, senderName, formattedVisibility) } } - private fun formatRoomThirdPartyInvite(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { + private fun formatRoomThirdPartyInvite(event: Event, senderName: String?, rs: RoomSummary?): CharSequence? { val content = event.getClearContent().toModel() val prevContent = event.resolvedPrevContent()?.toModel() @@ -271,24 +272,24 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour // Revoke case if (event.isSentByCurrentUser()) { sp.getString( - if (roomSummary.isDm()) { + if (rs.isDm()) { R.string.notice_direct_room_third_party_revoked_invite_by_you } else { R.string.notice_room_third_party_revoked_invite_by_you }, prevContent.displayName) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_third_party_revoked_invite else R.string.notice_room_third_party_revoked_invite, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_third_party_revoked_invite else R.string.notice_room_third_party_revoked_invite, senderName, prevContent.displayName) } } content != null -> { // Invitation case if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_third_party_invite_by_you else R.string.notice_room_third_party_invite_by_you, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_third_party_invite_by_you else R.string.notice_room_third_party_invite_by_you, content.displayName) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_third_party_invite else R.string.notice_room_third_party_invite, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_third_party_invite else R.string.notice_room_third_party_invite, senderName, content.displayName) } } @@ -337,13 +338,13 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomMemberEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): String? { + private fun formatRoomMemberEvent(event: Event, senderName: String?, rs: RoomSummary?): String? { val eventContent: RoomMemberContent? = event.getClearContent().toModel() val prevEventContent: RoomMemberContent? = event.resolvedPrevContent().toModel() val isMembershipEvent = prevEventContent?.membership != eventContent?.membership || eventContent?.membership == Membership.LEAVE return if (isMembershipEvent) { - buildMembershipNotice(event, senderName, eventContent, prevEventContent, roomSummary) + buildMembershipNotice(event, senderName, eventContent, prevEventContent, rs) } else { buildProfileNotice(event, senderName, eventContent, prevEventContent) } @@ -401,25 +402,25 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatRoomGuestAccessEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): String? { + private fun formatRoomGuestAccessEvent(event: Event, senderName: String?, rs: RoomSummary?): String? { val eventContent: RoomGuestAccessContent? = event.getClearContent().toModel() return when (eventContent?.guestAccess) { GuestAccess.CanJoin -> if (event.isSentByCurrentUser()) { sp.getString( - if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you + if (rs.isDm()) R.string.notice_direct_room_guest_access_can_join_by_you else R.string.notice_room_guest_access_can_join_by_you ) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_can_join else R.string.notice_room_guest_access_can_join, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_guest_access_can_join else R.string.notice_room_guest_access_can_join, senderName) } GuestAccess.Forbidden -> if (event.isSentByCurrentUser()) { sp.getString( - if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you + if (rs.isDm()) R.string.notice_direct_room_guest_access_forbidden_by_you else R.string.notice_room_guest_access_forbidden_by_you ) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_guest_access_forbidden else R.string.notice_room_guest_access_forbidden, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_guest_access_forbidden else R.string.notice_room_guest_access_forbidden, senderName) } else -> null @@ -496,7 +497,11 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour return displayText.toString() } - private fun buildMembershipNotice(event: Event, senderName: String?, eventContent: RoomMemberContent?, prevEventContent: RoomMemberContent?, roomSummary: RoomSummary?): String? { + private fun buildMembershipNotice(event: Event, + senderName: String?, + eventContent: RoomMemberContent?, + prevEventContent: RoomMemberContent?, + rs: RoomSummary?): String? { val senderDisplayName = senderName ?: event.senderId ?: "" val targetDisplayName = eventContent?.displayName ?: prevEventContent?.displayName ?: event.stateKey ?: "" return when (eventContent?.membership) { @@ -546,17 +551,17 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour Membership.JOIN -> eventContent.safeReason?.let { reason -> if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join_with_reason_by_you else R.string.notice_room_join_with_reason_by_you, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_join_with_reason_by_you else R.string.notice_room_join_with_reason_by_you, reason) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join_with_reason else R.string.notice_room_join_with_reason, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_join_with_reason else R.string.notice_room_join_with_reason, senderDisplayName, reason) } } ?: run { if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join_by_you else R.string.notice_room_join_by_you) + sp.getString(if (rs.isDm()) R.string.notice_direct_room_join_by_you else R.string.notice_room_join_by_you) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_join else R.string.notice_room_join, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_join else R.string.notice_room_join, senderDisplayName) } } @@ -578,7 +583,7 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour eventContent.safeReason?.let { reason -> if (event.isSentByCurrentUser()) { sp.getString( - if (roomSummary.isDm()) { + if (rs.isDm()) { R.string.notice_direct_room_leave_with_reason_by_you } else { R.string.notice_room_leave_with_reason_by_you @@ -586,14 +591,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour reason ) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_leave_with_reason else R.string.notice_room_leave_with_reason, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_leave_with_reason else R.string.notice_room_leave_with_reason, senderDisplayName, reason) } } ?: run { if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_leave_by_you else R.string.notice_room_leave_by_you) + sp.getString(if (rs.isDm()) R.string.notice_direct_room_leave_by_you else R.string.notice_room_leave_by_you) } else { - sp.getString(if (roomSummary.isDm()) R.string.notice_direct_room_leave else R.string.notice_room_leave, + sp.getString(if (rs.isDm()) R.string.notice_direct_room_leave else R.string.notice_room_leave, senderDisplayName) } } @@ -658,14 +663,14 @@ class NoticeEventFormatter @Inject constructor(private val activeSessionDataSour } } - private fun formatJoinRulesEvent(event: Event, senderName: String?, roomSummary: RoomSummary?): CharSequence? { + private fun formatJoinRulesEvent(event: Event, senderName: String?, rs: RoomSummary?): CharSequence? { val content = event.getClearContent().toModel() ?: return null return when (content.joinRules) { RoomJoinRules.INVITE -> if (event.isSentByCurrentUser()) { - sp.getString(if (roomSummary.isDm()) R.string.direct_room_join_rules_invite_by_you else R.string.room_join_rules_invite_by_you) + sp.getString(if (rs.isDm()) R.string.direct_room_join_rules_invite_by_you else R.string.room_join_rules_invite_by_you) } else { - sp.getString(if (roomSummary.isDm()) R.string.direct_room_join_rules_invite else R.string.room_join_rules_invite, + sp.getString(if (rs.isDm()) R.string.direct_room_join_rules_invite else R.string.room_join_rules_invite, senderName) } RoomJoinRules.PUBLIC -> From a4e163885d8f352c161c2e33564bee3e51a53467 Mon Sep 17 00:00:00 2001 From: Valere Date: Wed, 30 Sep 2020 16:17:28 +0200 Subject: [PATCH 058/278] Better rotation support --- .../core/platform/VectorBaseBottomSheetDialogFragment.kt | 2 +- .../features/crypto/quads/SharedSecureStorageActivity.kt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) 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 761bb7227c..9f4924ebb2 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 @@ -97,7 +97,7 @@ abstract class VectorBaseBottomSheetDialogFragment : BottomSheetDialogFragment() } var resultListener : ResultListener? = null - var bottomSheetResult: Int = ResultListener.RESULT_OK + var bottomSheetResult: Int = ResultListener.RESULT_CANCEL var bottomSheetResultData: Any? = null override fun onDismiss(dialog: DialogInterface) { diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt index 0cc28609c9..6f7ea1fd46 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt @@ -119,6 +119,13 @@ class SharedSecureStorageActivity : SimpleFragmentActivity(), VectorBaseBottomSh } } + override fun onAttachFragment(fragment: Fragment) { + super.onAttachFragment(fragment) + if (fragment is VectorBaseBottomSheetDialogFragment) { + fragment.resultListener = this + } + } + private fun showFragment(fragmentClass: KClass, bundle: Bundle) { if (supportFragmentManager.findFragmentByTag(fragmentClass.simpleName) == null) { supportFragmentManager.commitTransaction { From 18950a6b46fbd71962a08a483065e04d90fbcb62 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 16:36:17 +0200 Subject: [PATCH 059/278] Some cleanup --- .../SharedSecuredStorageResetAllFragment.kt | 24 +++++++------------ .../crypto/recover/BootstrapBottomSheet.kt | 3 --- .../recover/BootstrapCrossSigningTask.kt | 2 -- .../verification/VerificationBottomSheet.kt | 2 +- .../VerificationBottomSheetViewModel.kt | 4 ++-- .../res/layout/fragment_ssss_reset_all.xml | 13 ++++++---- 6 files changed, 19 insertions(+), 29 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt index 314abda38c..d7db779230 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageResetAllFragment.kt @@ -18,19 +18,16 @@ package im.vector.app.features.crypto.quads import android.os.Bundle import android.view.View -import androidx.core.view.isVisible import com.airbnb.mvrx.activityViewModel import com.airbnb.mvrx.withState import im.vector.app.R +import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.platform.VectorBaseFragment -import im.vector.app.core.resources.StringProvider import im.vector.app.features.roommemberprofile.devices.DeviceListBottomSheet import kotlinx.android.synthetic.main.fragment_ssss_reset_all.* import javax.inject.Inject -class SharedSecuredStorageResetAllFragment @Inject constructor( - private val stringProvider: StringProvider -) : VectorBaseFragment() { +class SharedSecuredStorageResetAllFragment @Inject constructor() : VectorBaseFragment() { override fun getLayoutResId() = R.layout.fragment_ssss_reset_all @@ -53,17 +50,12 @@ class SharedSecuredStorageResetAllFragment @Inject constructor( } } - sharedViewModel.subscribe(this) { - if (it.activeDeviceCount == 0) { - ssss_reset_other_devices.isVisible = false - } else { - ssss_reset_other_devices.isVisible = true - ssss_reset_other_devices.text = stringProvider.getQuantityString( - R.plurals.secure_backup_reset_devices_you_can_verify, - it.activeDeviceCount, - it.activeDeviceCount - ) - } + sharedViewModel.subscribe(this) { state -> + ssss_reset_other_devices.setTextOrHide( + state.activeDeviceCount + .takeIf { it > 0 } + ?.let { resources.getQuantityString(R.plurals.secure_backup_reset_devices_you_can_verify, it, it) } + ) } } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt index 5b5b4e1931..e6260b6e7e 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapBottomSheet.kt @@ -45,10 +45,7 @@ class BootstrapBottomSheet : VectorBaseBottomSheetDialogFragment() { @Parcelize data class Args( -// val initCrossSigningOnly: Boolean, val setUpMode: SetupMode = SetupMode.NORMAL -// val forceReset4S: Boolean, -// val resetAllUnknownSecrets: Boolean ) : Parcelable override val showExpanded = true diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt index 05e9a836f6..4dc2b92751 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt @@ -69,11 +69,9 @@ interface BootstrapProgressListener { data class Params( val userPasswordAuth: UserPasswordAuth? = null, -// val initOnlyCrossSigning: Boolean = false, val progressListener: BootstrapProgressListener? = null, val passphrase: String?, val keySpec: SsssKeySpec? = null, -// val resetAllIfNeeded: Boolean = false, val setupMode: SetupMode ) diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt index c170809b51..03c988115c 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt @@ -188,7 +188,7 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { } } - if (state.quadsHasBeenReseted) { + if (state.quadSHasBeenReset) { showFragment(VerificationConclusionFragment::class, Bundle().apply { putParcelable(MvRx.KEY_ARG, VerificationConclusionFragment.Args( isSuccessFull = true, 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 1638450725..a7f47b1172 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,7 @@ data class VerificationBottomSheetViewState( val userWantsToCancel: Boolean = false, val userThinkItsNotHim: Boolean = false, val quadSContainsSecrets: Boolean = true, - val quadsHasBeenReseted: Boolean = false + val quadSHasBeenReset: Boolean = false ) : MvRxState class VerificationBottomSheetViewModel @AssistedInject constructor( @@ -354,7 +354,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( VerificationAction.SecuredStorageHasBeenReseted -> { if (session.cryptoService().crossSigningService().allPrivateKeysKnown()) { setState { - copy(quadsHasBeenReseted = true) + copy(quadSHasBeenReset = true) } } Unit diff --git a/vector/src/main/res/layout/fragment_ssss_reset_all.xml b/vector/src/main/res/layout/fragment_ssss_reset_all.xml index a1851f3728..a3b2984bce 100644 --- a/vector/src/main/res/layout/fragment_ssss_reset_all.xml +++ b/vector/src/main/res/layout/fragment_ssss_reset_all.xml @@ -44,14 +44,18 @@ + tools:text="Show 2 devices you can verify with now" + tools:visibility="visible" /> Date: Wed, 30 Sep 2020 16:47:34 +0200 Subject: [PATCH 060/278] No warning when cancelling the Reset of 4s --- .../features/crypto/recover/BootstrapSharedViewModel.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt index 7f3f7c0667..a3955d561e 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt @@ -528,7 +528,13 @@ class BootstrapSharedViewModel @AssistedInject constructor( } BootstrapStep.CheckingMigration -> Unit is BootstrapStep.FirstForm -> { - _viewEvents.post(BootstrapViewEvents.SkipBootstrap()) + _viewEvents.post( + when (args.setUpMode) { + SetupMode.CROSS_SIGNING_ONLY, + SetupMode.NORMAL -> BootstrapViewEvents.SkipBootstrap() + else -> BootstrapViewEvents.Dismiss(success = false) + } + ) } is BootstrapStep.GetBackupSecretForMigration -> { setState { From 482bb51640ceea8fffbe8a7b1504df7614ef0fe5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 17:50:36 +0200 Subject: [PATCH 061/278] More cleanup --- .../androidTest/java/im/vector/app/SecurityBootstrapTest.kt | 2 +- .../features/crypto/quads/SharedSecureStorageActivity.kt | 2 +- .../app/features/crypto/verification/VerificationAction.kt | 2 +- .../features/crypto/verification/VerificationBottomSheet.kt | 6 +++--- .../crypto/verification/VerificationBottomSheetViewModel.kt | 2 +- .../im/vector/app/features/navigation/DefaultNavigator.kt | 6 ++---- .../java/im/vector/app/features/navigation/Navigator.kt | 3 +-- 7 files changed, 10 insertions(+), 13 deletions(-) diff --git a/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt b/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt index 3bf17aa043..3ab8fe7dd9 100644 --- a/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt +++ b/vector/src/androidTest/java/im/vector/app/SecurityBootstrapTest.kt @@ -96,7 +96,7 @@ class SecurityBootstrapTest : VerificationTestBase() { .check(matches(isDisplayed())) } - activity.navigator.open4SSetup(activity, SetupMode.NORMAL, null) + activity.navigator.open4SSetup(activity, SetupMode.NORMAL) Thread.sleep(1000) diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt index 6f7ea1fd46..42d000ecc3 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt @@ -114,7 +114,7 @@ class SharedSecureStorageActivity : SimpleFragmentActivity(), VectorBaseBottomSh finish() } is SharedSecureStorageViewEvent.ShowResetBottomSheet -> { - navigator.open4SSetup(this, SetupMode.HARD_RESET, this) + navigator.open4SSetup(this, SetupMode.HARD_RESET) } } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt index d0fd825ebb..a32a9de97f 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationAction.kt @@ -31,5 +31,5 @@ sealed class VerificationAction : VectorViewModelAction { object SkipVerification : VerificationAction() object VerifyFromPassphrase : VerificationAction() data class GotResultFromSsss(val cypherData: String, val alias: String) : VerificationAction() - object SecuredStorageHasBeenReseted : VerificationAction() + object SecuredStorageHasBeenReset : VerificationAction() } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt index 03c988115c..c7ce4d6f01 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt @@ -148,12 +148,12 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (resultCode == Activity.RESULT_OK && requestCode == SECRET_REQUEST_CODE) { val result = data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) - val reseted = data?.getBooleanExtra(SharedSecureStorageActivity.EXTRA_DATA_RESET, false) ?: false + val reset = data?.getBooleanExtra(SharedSecureStorageActivity.EXTRA_DATA_RESET, false) ?: false if (result != null) { viewModel.handle(VerificationAction.GotResultFromSsss(result, SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS)) - } else if (reseted) { + } else if (reset) { // all have been reset, so we are verified? - viewModel.handle(VerificationAction.SecuredStorageHasBeenReseted) + viewModel.handle(VerificationAction.SecuredStorageHasBeenReset) } } super.onActivityResult(requestCode, resultCode, data) 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 a7f47b1172..3c00478ab0 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 @@ -351,7 +351,7 @@ class VerificationBottomSheetViewModel @AssistedInject constructor( is VerificationAction.GotResultFromSsss -> { handleSecretBackFromSSSS(action) } - VerificationAction.SecuredStorageHasBeenReseted -> { + VerificationAction.SecuredStorageHasBeenReset -> { if (session.cryptoService().crossSigningService().allPrivateKeysKnown()) { setState { copy(quadSHasBeenReset = true) diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 66dd9544b4..8a60e4a176 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -238,11 +238,9 @@ class DefaultNavigator @Inject constructor( } } - override fun open4SSetup(context: Context, setupMode: SetupMode, listener: VectorBaseBottomSheetDialogFragment.ResultListener?) { + override fun open4SSetup(context: Context, setupMode: SetupMode) { if (context is VectorBaseActivity) { - BootstrapBottomSheet.show(context.supportFragmentManager, setupMode).also { - it.resultListener = listener - } + BootstrapBottomSheet.show(context.supportFragmentManager, setupMode) } } diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index 3f255f72ef..e92fea267f 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -21,7 +21,6 @@ import android.content.Context import android.view.View import androidx.core.util.Pair import androidx.fragment.app.Fragment -import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.home.room.detail.widget.WidgetRequestCodes import im.vector.app.features.media.AttachmentData @@ -73,7 +72,7 @@ interface Navigator { fun openKeysBackupSetup(context: Context, showManualExport: Boolean) - fun open4SSetup(context: Context, setupMode: SetupMode, listener: VectorBaseBottomSheetDialogFragment.ResultListener?) + fun open4SSetup(context: Context, setupMode: SetupMode) fun openKeysBackupManager(context: Context) From 0a0330a48c746f2e312f4ae48b3399bb159b6070 Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 29 Sep 2020 19:29:31 +0200 Subject: [PATCH 062/278] UTD : when reaching UTD and invite state event, stop back pagination --- .../timeline/TimelineEventController.kt | 47 +++++++++++++++++-- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index 56de0f7829..90074db773 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -50,6 +50,11 @@ import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData import im.vector.app.features.home.room.detail.timeline.item.TimelineReadMarkerItem_ import im.vector.app.features.media.ImageContentRenderer import im.vector.app.features.media.VideoContentRenderer +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.events.model.EventType +import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.model.RoomMemberContent import org.matrix.android.sdk.api.session.room.model.message.MessageImageInfoContent import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent import org.matrix.android.sdk.api.session.room.timeline.Timeline @@ -64,6 +69,7 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec private val timelineItemFactory: TimelineItemFactory, private val timelineMediaSizeProvider: TimelineMediaSizeProvider, private val mergedHeaderItemFactory: MergedHeaderItemFactory, + private val session: Session, @TimelineEventControllerHandler private val backgroundHandler: Handler ) : EpoxyController(backgroundHandler, backgroundHandler), Timeline.Listener, EpoxyController.Interceptor { @@ -115,6 +121,8 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec private val modelCache = arrayListOf() private var currentSnapshot: List = emptyList() private var inSubmitList: Boolean = false + private var hasReachedInvite: Boolean = false + private var hasUTD: Boolean = false private var unreadState: UnreadState = UnreadState.Unknown private var positionOfReadMarker: Int? = null private var eventIdToHighlight: String? = null @@ -267,7 +275,9 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec val timelineModels = getModels() add(timelineModels) - + if (hasReachedInvite && hasUTD) { + return + } // Avoid displaying two loaders if there is no elements between them val showBackwardsLoader = !showingForwardLoader || timelineModels.isNotEmpty() // We can hide the loader but still add the item to controller so it can trigger backwards pagination @@ -327,6 +337,9 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec } private fun buildCacheItemsIfNeeded() = synchronized(modelCache) { + hasUTD = false + hasReachedInvite = false + if (modelCache.isEmpty()) { return } @@ -342,13 +355,21 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec private fun buildCacheItem(currentPosition: Int, items: List): CacheItemData { val event = items[currentPosition] val nextEvent = items.nextOrNull(currentPosition) - val date = event.root.localDateTime() - val nextDate = nextEvent?.root?.localDateTime() - val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate() + if (hasReachedInvite && hasUTD) { + return CacheItemData(event.localId, event.root.eventId, null, null, null) + } + updateUTDStates(event, nextEvent) val eventModel = timelineItemFactory.create(event, nextEvent, eventIdToHighlight, callback).also { it.id(event.localId) it.setOnVisibilityStateChanged(TimelineEventVisibilityStateChangedListener(callback, event)) } + val addDaySeparator = if (hasReachedInvite && hasUTD) { + true + } else { + val date = event.root.localDateTime() + val nextDate = nextEvent?.root?.localDateTime() + date.toLocalDate() != nextDate?.toLocalDate() + } val mergedHeaderModel = mergedHeaderItemFactory.create(event, nextEvent = nextEvent, items = items, @@ -372,6 +393,24 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec } } + private fun updateUTDStates(event: TimelineEvent, nextEvent: TimelineEvent?) { + if (event.root.type == EventType.STATE_ROOM_MEMBER + && event.root.stateKey == session.myUserId) { + val content = event.root.content.toModel() + if (content?.membership == Membership.INVITE) { + hasReachedInvite = true + } else if (content?.membership == Membership.JOIN) { + val prevContent = event.root.resolvedPrevContent().toModel() + if (prevContent?.membership?.isActive() == false) { + hasReachedInvite = true + } + } + } + if (nextEvent?.root?.getClearType() == EventType.ENCRYPTED) { + hasUTD = true + } + } + /** * Return true if added */ From f0272fd2831bd9a411d1d83ce1dc2e0e5e4cc129 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 30 Sep 2020 15:23:46 +0200 Subject: [PATCH 063/278] UTD pagination: clean up and add developer settings to enable complete history --- .../timeline/TimelineEventController.kt | 5 + .../factory/MergedHeaderItemFactory.kt | 89 +----------- .../detail/timeline/item/MergedUTDItem.kt | 127 ------------------ .../features/settings/VectorPreferences.kt | 6 +- vector/src/main/res/values/strings.xml | 1 + .../xml/vector_settings_advanced_settings.xml | 6 + .../src/main/res/xml/vector_settings_labs.xml | 7 - 7 files changed, 17 insertions(+), 224 deletions(-) delete mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedUTDItem.kt diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index 90074db773..bddc7fa126 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -50,6 +50,7 @@ import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData import im.vector.app.features.home.room.detail.timeline.item.TimelineReadMarkerItem_ import im.vector.app.features.media.ImageContentRenderer import im.vector.app.features.media.VideoContentRenderer +import im.vector.app.features.settings.VectorPreferences import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel @@ -64,6 +65,7 @@ import javax.inject.Inject private const val DEFAULT_PREFETCH_THRESHOLD = 30 class TimelineEventController @Inject constructor(private val dateFormatter: VectorDateFormatter, + private val vectorPreferences: VectorPreferences, private val contentUploadStateTrackerBinder: ContentUploadStateTrackerBinder, private val contentDownloadStateTrackerBinder: ContentDownloadStateTrackerBinder, private val timelineItemFactory: TimelineItemFactory, @@ -394,6 +396,9 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec } private fun updateUTDStates(event: TimelineEvent, nextEvent: TimelineEvent?) { + if (vectorPreferences.labShowCompleteHistoryInEncryptedRoom()) { + return + } if (event.root.type == EventType.STATE_ROOM_MEMBER && event.root.stateKey == session.myUserId) { val content = event.root.content.toModel() 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 08f93b23cd..35db7fe469 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 @@ -31,9 +31,6 @@ import im.vector.app.features.home.room.detail.timeline.item.MergedMembershipEve import im.vector.app.features.home.room.detail.timeline.item.MergedMembershipEventsItem_ import im.vector.app.features.home.room.detail.timeline.item.MergedRoomCreationItem import im.vector.app.features.home.room.detail.timeline.item.MergedRoomCreationItem_ -import im.vector.app.features.home.room.detail.timeline.item.MergedUTDItem -import im.vector.app.features.home.room.detail.timeline.item.MergedUTDItem_ -import im.vector.app.features.settings.VectorPreferences import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.events.model.EventType import org.matrix.android.sdk.api.session.events.model.toModel @@ -41,14 +38,12 @@ import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent import org.matrix.android.sdk.api.session.room.timeline.TimelineEvent import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM import org.matrix.android.sdk.internal.crypto.model.event.EncryptionEventContent -import timber.log.Timber import javax.inject.Inject class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolder: ActiveSessionHolder, private val avatarRenderer: AvatarRenderer, private val avatarSizeProvider: AvatarSizeProvider, - private val roomSummaryHolder: RoomSummaryHolder, - private val vectorPreferences: VectorPreferences) { + private val roomSummaryHolder: RoomSummaryHolder) { private val collapsedEventIds = linkedSetOf() private val mergeItemCollapseStates = HashMap() @@ -66,10 +61,7 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde callback: TimelineEventController.Callback?, requestModelBuild: () -> Unit) : BasedMergedItem<*>? { - return if (shouldMergedAsCannotDecryptGroup(event, nextEvent)) { - Timber.v("## MERGE: Candidate for merge, top event ${event.eventId}") - buildUTDMergedSummary(currentPosition, items, event, eventIdToHighlight, /*requestModelBuild,*/ callback) - } else if (nextEvent?.root?.getClearType() == EventType.STATE_ROOM_CREATE + return if (nextEvent?.root?.getClearType() == EventType.STATE_ROOM_CREATE && event.isRoomConfiguration(nextEvent.root.getClearContent()?.toModel()?.creator)) { // It's the first item before room.create // Collapse all room configuration events @@ -144,83 +136,6 @@ class MergedHeaderItemFactory @Inject constructor(private val activeSessionHolde } } - // Event should be UTD - // Next event should not - private fun shouldMergedAsCannotDecryptGroup(event: TimelineEvent, nextEvent: TimelineEvent?): Boolean { - if (!vectorPreferences.mergeUTDinTimeline()) return false - // if event is not UTD return false - if (!isEventUTD(event)) return false - // At this point event cannot be decrypted - // Let's check if older event is not UTD - return nextEvent == null || !isEventUTD(event) - } - - private fun isEventUTD(event: TimelineEvent): Boolean { - return event.root.getClearType() == EventType.ENCRYPTED && !event.root.isRedacted() - } - - private fun buildUTDMergedSummary(currentPosition: Int, - items: List, - event: TimelineEvent, - eventIdToHighlight: String?, - // requestModelBuild: () -> Unit, - callback: TimelineEventController.Callback?): MergedUTDItem_? { - Timber.v("## MERGE: buildUTDMergedSummary from position $currentPosition") - var prevEvent = items.prevOrNull(currentPosition) - var tmpPos = currentPosition - 1 - val mergedEvents = ArrayList().also { it.add(event) } - - while (prevEvent != null && isEventUTD(prevEvent)) { - mergedEvents.add(prevEvent) - tmpPos-- - prevEvent = if (tmpPos >= 0) items[tmpPos] else null - } - - Timber.v("## MERGE: buildUTDMergedSummary merge group size ${mergedEvents.size}") - if (mergedEvents.size < 3) return null - - var highlighted = false - val mergedData = ArrayList(mergedEvents.size) - mergedEvents.reversed() - .forEach { mergedEvent -> - if (!highlighted && mergedEvent.root.eventId == eventIdToHighlight) { - highlighted = true - } - val senderAvatar = mergedEvent.senderInfo.avatarUrl - val senderName = mergedEvent.senderInfo.disambiguatedDisplayName - val data = BasedMergedItem.Data( - userId = mergedEvent.root.senderId ?: "", - avatarUrl = senderAvatar, - memberName = senderName, - localId = mergedEvent.localId, - eventId = mergedEvent.root.eventId ?: "", - isDirectRoom = isDirectRoom() - ) - mergedData.add(data) - } - val mergedEventIds = mergedEvents.map { it.localId } - - collapsedEventIds.addAll(mergedEventIds) - - val mergeId = mergedEventIds.joinToString(separator = "_") { it.toString() } - - val attributes = MergedUTDItem.Attributes( - isCollapsed = true, - mergeData = mergedData, - avatarRenderer = avatarRenderer, - onCollapsedStateChanged = {} - ) - return MergedUTDItem_() - .id(mergeId) - .big(mergedEventIds.size > 5) - .leftGuideline(avatarSizeProvider.leftGuideline) - .highlighted(highlighted) - .attributes(attributes) - .also { - it.setOnVisibilityStateChanged(MergedTimelineEventVisibilityStateChangedListener(callback, mergedEvents)) - } - } - private fun buildRoomCreationMergedSummary(currentPosition: Int, items: List, event: TimelineEvent, diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedUTDItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedUTDItem.kt deleted file mode 100644 index 9c72d53641..0000000000 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MergedUTDItem.kt +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Copyright (c) 2020 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.home.room.detail.timeline.item - -import android.util.TypedValue -import android.view.ViewGroup -import android.widget.LinearLayout -import android.widget.RelativeLayout -import androidx.core.view.isVisible -import androidx.core.view.updateLayoutParams -import com.airbnb.epoxy.EpoxyAttribute -import com.airbnb.epoxy.EpoxyModelClass -import im.vector.app.R -import im.vector.app.features.home.AvatarRenderer -import im.vector.app.features.home.room.detail.timeline.TimelineEventController - -@EpoxyModelClass(layout = R.layout.item_timeline_event_base_noinfo) -abstract class MergedUTDItem : BasedMergedItem() { - - @EpoxyAttribute - override lateinit var attributes: Attributes - - @EpoxyAttribute - var big: Boolean? = false - - override fun getViewType() = STUB_ID - - override fun bind(holder: Holder) { - super.bind(holder) - - holder.mergedTile.updateLayoutParams { - this.marginEnd = leftGuideline - if (big == true) { - this.height = TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, - 800f, - holder.view.context.resources.displayMetrics - ).toInt() - } else { - this.height = LinearLayout.LayoutParams.WRAP_CONTENT - } - } - -// if (attributes.isCollapsed) { -// // Take the oldest data -// val data = distinctMergeData.lastOrNull() -// -// val summary = holder.expandView.resources.getString(R.string.room_created_summary_item, -// data?.memberName ?: data?.userId ?: "") -// holder.summaryView.text = summary -// holder.summaryView.visibility = View.VISIBLE -// holder.avatarView.visibility = View.VISIBLE -// if (data != null) { -// holder.avatarView.visibility = View.VISIBLE -// attributes.avatarRenderer.render(data.toMatrixItem(), holder.avatarView) -// } else { -// holder.avatarView.visibility = View.GONE -// } -// -// if (attributes.hasEncryptionEvent) { -// holder.encryptionTile.isVisible = true -// holder.encryptionTile.updateLayoutParams { -// this.marginEnd = leftGuideline -// } -// if (attributes.isEncryptionAlgorithmSecure) { -// holder.e2eTitleTextView.text = holder.expandView.resources.getString(R.string.encryption_enabled) -// holder.e2eTitleDescriptionView.text = holder.expandView.resources.getString(R.string.encryption_enabled_tile_description) -// holder.e2eTitleDescriptionView.textAlignment = View.TEXT_ALIGNMENT_CENTER -// holder.e2eTitleTextView.setCompoundDrawablesWithIntrinsicBounds( -// ContextCompat.getDrawable(holder.view.context, R.drawable.ic_shield_black), -// null, null, null -// ) -// } else { -// holder.e2eTitleTextView.text = holder.expandView.resources.getString(R.string.encryption_not_enabled) -// holder.e2eTitleDescriptionView.text = holder.expandView.resources.getString(R.string.encryption_unknown_algorithm_tile_description) -// holder.e2eTitleTextView.setCompoundDrawablesWithIntrinsicBounds( -// ContextCompat.getDrawable(holder.view.context, R.drawable.ic_shield_warning), -// null, null, null -// ) -// } -// } else { -// holder.encryptionTile.isVisible = false -// } -// } else { -// holder.avatarView.visibility = View.INVISIBLE -// holder.summaryView.visibility = View.GONE -// holder.encryptionTile.isGone = true -// } - // No read receipt for this item - holder.readReceiptsView.isVisible = false - } - - class Holder : BasedMergedItem.Holder(STUB_ID) { - // val summaryView by bind(R.id.itemNoticeTextView) -// val avatarView by bind(R.id.itemNoticeAvatarView) - val mergedTile by bind(R.id.mergedUTDTile) -// -// val e2eTitleTextView by bind(R.id.itemVerificationDoneTitleTextView) -// val e2eTitleDescriptionView by bind(R.id.itemVerificationDoneDetailTextView) - } - - companion object { - private const val STUB_ID = R.id.messageContentMergedUTDStub - } - - data class Attributes( - override val isCollapsed: Boolean, - override val mergeData: List, - override val avatarRenderer: AvatarRenderer, - override val readReceiptsCallback: TimelineEventController.ReadReceiptsCallback? = null, - override val onCollapsedStateChanged: (Boolean) -> Unit - ) : BasedMergedItem.Attributes -} diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt index 9ccb8d7031..abe16e7e90 100755 --- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt @@ -153,7 +153,7 @@ class VectorPreferences @Inject constructor(private val context: Context) { private const val SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY = "SETTINGS_DEVELOPER_MODE_FAIL_FAST_PREFERENCE_KEY" // SETTINGS_LABS_HIDE_TECHNICAL_E2E_ERRORS - private const val SETTINGS_LABS_MERGE_E2E_ERRORS = "SETTINGS_LABS_MERGE_E2E_ERRORS" + private const val SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM = "SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM" const val SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB = "SETTINGS_LABS_UNREAD_NOTIFICATIONS_AS_TAB" // analytics @@ -285,8 +285,8 @@ class VectorPreferences @Inject constructor(private val context: Context) { return defaultPrefs.getBoolean(SETTINGS_LABS_ENABLE_SWIPE_TO_REPLY, true) } - fun mergeUTDinTimeline(): Boolean { - return defaultPrefs.getBoolean(SETTINGS_LABS_MERGE_E2E_ERRORS, false) + fun labShowCompleteHistoryInEncryptedRoom(): Boolean { + return defaultPrefs.getBoolean(SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM, false) } fun labAllowedExtendedLogging(): Boolean { diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 68d42e8356..a29959e90e 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1710,6 +1710,7 @@ The suggestion failed to be sent (%s) Show hidden events in timeline + "Show complete history in encrypted rooms" Direct Messages diff --git a/vector/src/main/res/xml/vector_settings_advanced_settings.xml b/vector/src/main/res/xml/vector_settings_advanced_settings.xml index 6d8de815d8..e136ed0f80 100644 --- a/vector/src/main/res/xml/vector_settings_advanced_settings.xml +++ b/vector/src/main/res/xml/vector_settings_advanced_settings.xml @@ -16,6 +16,12 @@ android:key="SETTINGS_LABS_SHOW_HIDDEN_EVENTS_PREFERENCE_KEY" android:title="@string/settings_labs_show_hidden_events_in_timeline" /> + + - - - - Date: Wed, 30 Sep 2020 18:11:30 +0200 Subject: [PATCH 064/278] Changelog and small improvement --- CHANGES.md | 2 +- .../java/im/vector/app/features/settings/VectorPreferences.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 9348717fb5..a5b9e43142 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,7 +2,7 @@ Changes in Element 1.0.9 (2020-XX-XX) =================================================== Features ✨: - - + - Hide encrypted history (before user is invited). Can be shown if wanted in developer settings Improvements 🙌: - Wording differentiation for direct rooms (#2176) diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt index abe16e7e90..5e9d8d1ac0 100755 --- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt @@ -286,7 +286,7 @@ class VectorPreferences @Inject constructor(private val context: Context) { } fun labShowCompleteHistoryInEncryptedRoom(): Boolean { - return defaultPrefs.getBoolean(SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM, false) + return developerMode() && defaultPrefs.getBoolean(SETTINGS_LABS_SHOW_COMPLETE_HISTORY_IN_ENCRYPTED_ROOM, false) } fun labAllowedExtendedLogging(): Boolean { From 37d6a9b722b366905ad8fb443e9f4a83b46049f8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 30 Sep 2020 18:20:42 +0200 Subject: [PATCH 065/278] ktlint --- .../java/im/vector/app/features/navigation/DefaultNavigator.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 8a60e4a176..3a8d302fc7 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -30,7 +30,6 @@ import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.error.fatalError import im.vector.app.core.platform.VectorBaseActivity -import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.core.utils.toast import im.vector.app.features.call.conference.JitsiCallViewModel import im.vector.app.features.call.conference.VectorJitsiActivity From 39532fc2aa65881fdf40521b0cd0a5f8fde2af1b Mon Sep 17 00:00:00 2001 From: gradle-update-robot Date: Thu, 1 Oct 2020 00:53:05 +0000 Subject: [PATCH 066/278] Update Gradle Wrapper from 5.6.4 to 6.6.1. Signed-off-by: gradle-update-robot --- gradle/wrapper/gradle-wrapper.jar | Bin 55190 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 53 ++++++++++++++--------- gradlew.bat | 43 ++++++++++-------- 4 files changed, 59 insertions(+), 41 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 87b738cbd051603d91cc39de6cb000dd98fe6b02..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 26193 zcmZ6yQ+S|Vu&o>0wrv|7+qP{xU&pp>+fK)}ZKK1EI!T}Z?6uCtKF>3+>b7Q$8a3;k z=?&n+bKs5iponRd%jI35ARxHlARx>siR4%*il7((1uK)8y@{J!oa(gW@(&EbVLvhOxk#E0z~5*_n$Tfk4BT1W zh~4H^yI$w!jrIW$@8~{|r_Pqh9?;*1{Rs-h$o?FVSot<3yKX_cH33Wqgy&Ugow#-- zd$AFKpvAm7vspRndDP5Y*{X$rg0EvCe9(Ow>lBeyGY!V@xQpXomHjCWwMA-rDRPSv zY@gq7;|J=t%N|R7799odG(V`K@OXpjH2q11r=-spt+w zmng+yzxXW&2lk&G)N z-h)16N@V9eFCNeZrbSiuE44@1#kS@h5wqX)wgpxfDiThLBx=5wyP_q&uT8OO)g!i} z`ony65!)LBh`yjIhNFW{%5vZka3CNsFd!fxA|N)P3^l}%ARrX~g&6-g&ji4>8oCzF zKSH<7MutdMx~SkLQ5g_)<~Gen%{ZC`NJdbH)-9$<(ppE)OUsf4+q=3xf!CmpZ`c>g z4Ys!B49{{P<@lMuM@Gi9cVK3-W&h8s0rx+luP@f0C2um4An0s{!;rApVwtHdlxBE$ zQ}-fiEaWDdk_Z{*`eS})9~03LOH#dsT^&c)G^Img%Th&3)4?O4Wq0Y&WfVC|VC zaAQwCL*mCoU593J>8NRWao@R|t#I*_etEAkj;Pnx3Px?Zvdq$zVwkChuPxdoUTJ_f z91pe6B-4rYiTj&D4-yF14*5BofspUDM3g|`#ZB$#P?p~-U9+h+Tp`mRxh*=&=&T*z2q>oXsGC%dWpshF`TNHT@_F>BTVa9G zFHYaGE;{c#SSHF=YdV#s&=@2HPVty?i1KRKnHMZOfiniPe%}^B8HFW z*bJMvi!j9I(^KSPI$-KTx8V>{A^SDH?XXHk2r zl3KMvKg}3t6q5GEn_a9c#&WLtG*Z+HlGMW<(x+DV$pO_9MbEmMd(|gjX$n1RcRRtv zDT~=Ns?nTUr{?a8bL%J`yhpBI_HJ=#J82CYL&{%*ODAh3aQ7C!&9@kuw2vTv^C5Jv zw{IBtth8_1lePLj%=eb2<|{r*Tr*eZc-3zAmND82-Y2(LCRJAYureb+>#gbkwS;}t z*dnlaO#wXPiqx378QPITyhU~VJF;i9bY&O>9`a<{Z=?tck-b5V=Ao(5iSinj^|JG0 z^Mei%8;vfT5yjl03`{X#`7o70WDu59Odv`qB&Kd4C_bQnCkPF-Z;JgZ^g{2~-?;k+ z9+d0E@fT(gQ5tY0OC?v8n)9lJ>xx!1rO|MACzpKq&HkF1K{ zFMRybn|7SN@1S0)$Tgnp%zhGmU0>jDj(qPx9cd6`;(p;9lq7up`hoX{FkphHyA0DN z5*0_8Cr`bKX4N+FM+NK)D;S+PQe|0pN`4GS%9VQJ!F@1AmvLj;s* z?5g2wVEo&)=YpSxQkAAjZU5QM2_ajp*;-oX5M*sllctPP$Cq)!W#4miWC{L-|8byZ z^iiy&Xyktx3$vQ_qG0ub{r0Drov-9Lg!p(omOcL5a7e1+=Q3+nuHS2}-`t&-(97AN zF!4V4J;ELv>Nxx#>p@srsIrMn3PoV;Fg0q~y9pFFHz~V?YR;q*bQp&>(1D%FPs zC*IM^c|*^YFd>8K!*CNjO?IyyVo0Oj58J=V+HZAg4EGQ_44PdzlAt7maXilOhlg5a01 zY;8K$cR z`?@05v}ykdXcpLFzwCu_^1Ix5oA^_#4P!q~iRGZaX}VfO>ocM-TIR_OVK|WIk=>*a zeNESLpfO2pCzrnXhvy4zVJJ|)bs@SBYiq&LgqV+kKtj0biu*n~3>Ls(AQ(f9*~_s) zl-KPHr3GJJdZbJ9z~4gno4QuCR6$+sXgnW-SR$UwdY>J(?y@VzOw-!z29BZMAa@*>cOMvu0j;NRm&a zA?dwChkQuKL|!${FHs;*>8zcvo{*&C&2uo)%+*>dx4mwK>fGN+2G`s+E+?FoDMB>o zeEk&R)YUb-)hB0btx0ZnL88NiU<4a4`*dXC&pJay_*!BvzV5L3egZfJ^3pQHC8zFj z6=tLQ9h+!XzlAle1MVUJR85LGy?b&&${lv)c!u?eR_HV5VGs~FMZC*XTEE>nWMNC4 zB-UE7S$o)*022^2SpSi8XR351W?e8S@6i^nRhZK21FxbQo=r|Xn3;a2gqkA9jC)ti z1U4zFR*N)5@{VZmvX8drmAd;H`V9VYPp)`CJ<24J3+oWFOOh|D+JrBTtRrT-UNiS+ z(J%rlp)E0cuK~b2h31^v%*?vFF%$`yaX*844h@8tiqzpL`V|45>?UdyCevybaaT+l zdZ{j2LANKlT=)%J%zpa;hj+KHasV#AP+j%_aV7mNFYy(I_e39m$ld%;hB{CR3NVHM zs?_7ryClg9%EdjJGu)cCVf%af}^xD1`=ey;xTSwvKswhL}f-h0rN zx$a-|8ICEr+~Tj|Q4jJ&D%Al!W{4)^8UYCecR(m4n1Xox7yTqZ!IweY}ynJI3 zMz}L%pqst|R9anw=H*@%l{5QYAlsH-?qK4IOT|U_%?X}+&3)yyoEsv22Yx~r!!S#D zFHjffGZQ^)k^dxFhZ09Hl^#$)1$%|>4LpawxEh+VJLRz_6n%#;LPdOiZ?-?QopPOR@$pf0U=M zotnQ+LX;pV(2mBcz5(Tq6mtI6^{nnb0ZCeqdc2jimiO)`7S5L5d*s~AL(wwRx^y_) zh#GRJ6CxyPN*6Zaw(!3)H6nkpJ5EKdx44c~YYcFRRlLrSK}q>QJLrKU+@6Erj&$a; zqseNY2DlS-f#nv2LUG7?M@oSa$z=|r!z!Vove26#Jt4%MY5?-5EAFbS6yguDs?gCE z(vc>HKlF#duyAd`Ef7JyP%dBGd}$B5LM>{YZJ8-rOT-4~#18)T(~5~bG7eBFL@D*sXp~E2b)#Kj-6#_;rKFTcZ5;~q>XBa%9qtn zh|*NK&npj)_X0e@`Q)Duq;*G(ix)9}{FJ(tBr%|Zl{%`3vm<3;ZTao!@JCy!w$Hd$ zeTsHc-QO?{AjJ$$xyVeeiaa(mIS{g>H~RWDd^7NrcuhG+n6;;IOM;Pnv9AXK%*F>l zh;aH=_~cR-sWJe&{k3#sLEJ9Q;xpFrzQ!1IA($)K6A(HHJ78{YNzs2fS9t(^@rq2; z%#zYDCmxz&BIxr`?~%}btlSLY*nUOqSIu}@IIZ6m+uae;rw{n@(ccR5i+I!DYr1e1 za(MOzHzGaa-+2Qi4lE{yhB?MQdUJSqM$cf$?F?6pb~QsYC}kb`SX9W4V`o%%*{zQJ z64`;gk{^o`6(Of^2y<*)?pbt(p*cCs&QLrs354H|(M+Bl84yFLM>{4$a^t<&uOd2( zDhK}WqM`tq3_L~#0nsJ_0U`b0qJjbbXWp&Th4scC_XtdYXp(dG5kaH82(=)@Kwe1p zNKUs;DyER`6;Dj1)k)SGNDhTGJscIq$m5B>ort=n@wBIQ$t`!x`S0)~<-(*&Y|AE0 z)a`OzqP|LRKT9XHDk!b@B{%*6j6c1Qx`5psOT1Mo>jGwg; zn#*@S7dQbm1brRiPk)Qw!Na~6#2i1!S>M_ZKFrd-N5lZxeU;03j1M7M?Pf4N8dDV?~ChR zl~dm^ZdlcjsW>`r+GpIb96^EutTZQ7HZJ;Ji9;!9fm+SDzseGRa8}V!>`vLfEA5< z^)ZQgMs(z0cl=&{{#-n$H4i7s&F>pR0-jaEn=80*K7h4_Idl}?F4O-j&+iq}!q|0u zW>KXn0n?zIbBoRPGAVPB&EzsF)TGUQQbxPlc&8)*U!LeW9DyE}^H`oU%IDjfiRxVP zcZm6`!=m@f-tdayub+@lecT1jHj$I7CX&YH9$FlZ&!uBZ_-j7{`7B}n<(LR^mFlUm zdPXw&F#ypd4Z0KNnbu6!n+YwuuibHJChS6JgbF%iJ2%OW%yroEX{36{1($2+bB-&K zC0J1^1xfhaH|c}lg(Z}>?KcTy2vs7B`wT%jT2_Co)Dt-(~ z$*7abZzyD0vyDjXlMsm7MuDfEld>A6c;^VEn_#?$SSettv}`*0^ICen24YL)KM7sp>Adr36Z)i zLZ)C~O4l-Gf7j-`wbz!yKgf7>5oT>A5&2stuDEVk(Mb*S$E|S5S*`6RXM&8_DcsVv zCK2jHYi|StkgaGR5AN&9NqFZaeIZ_hgv4iEeNG!)WAE2;tZty`kUh#rx0T{i<$L(pl}iOmk&Jn&`s#jtF66@s#y-I zrs`Ym7<%r)TW;h`wil?x%EZp6y^@4kv#)JSw#ajW_F1RVu}r@b$DP>2UqH&8hkfa) zgPn~tP`HoQzMD8L-$()v073u!X)Q$4`&f7(NRb`EPA>$p&-63+XPOTAUl+O`CVMBv zUrQ*z96r#y(>OjwsSPUDv!=|yZT$0zP51zJCqSw3{3pOd>*?-nTsY6nx@rVd9r#ph z^8SY>H;-e8C;6+TlQz|S9$*y4dPkmczn4KLYdPZkMB5YQKCyx1k zJU4XSsE4Vem=3%L+>&Z1KHvXd;|(^h;3Q!f2m$|_<7NAaA#5;^0T^^w!jQ4QL;le} z*zsm?=EF;Xc)4tMRH8y4kh-rGShhn)F}9Mo8($sHHs?z!aFY1UepV8{ZGt?)QusJ7 zzf~$ngGIL`3tXTAjsF%C+r97MR_g|>aA)^c*OI<*yVs|9XU79XL4qJI26Uk7Ijv3x zoINaggyd9a%t_q%0Ph8Ql54a^ty-n_TBVQcb?WVteFYzbIN`|xuv|=$?1TOt2d7n0 zl5X7BBE4qHiyuUa#im|F_P^ddNQq;Qd~V)7b~RAGgIK3?C-mhqFa+JRkpBJJtsb?Y z62_+%!ETHm0%1mb%*fmFd z-(YSD22!E5B|nk@2o@GOO91cOjR9JiitxXy-!;sEW|(do8;%0P&eP`;44pK7O*MhX zdlfBHfc!vIi~q{+{~Yhf~URiRcY@Pkc?o3SCkQQg}E+y{>J{{cN^5EY^KdbZj0eL(u#c~39>G3r3`=a|y(g9VG ze}!4C?0rHYoy*G-LX{VUGPp;XC>s6yOH$*fi2M)v$zDQ~Z-5?Et!K&4XKhzSA@f~# z2D4gmA=DNBUoxh8%ui`)gXJ{mzO;`Ka7Yro`3THr#>S{ih`Fm&Af_p<$IpA2`> zcde1;fXK1=Y%7#s1`@e0{)Ze>eOIs%ZAx25fAtKS2&3m==&$*)WJQuNTkc$bqb}pE z-|}i=Zhj)B^u#$9ue!%(%F|I3Z>Ea=V?a$?fMBd} ze1q9wcHuXQpXD!fBk-UaRsr3cun@5r2vH(J2asdupCZQXtO!W>%S8LAv!xe0kfu2n zjW5_uuq+)vtGwrR=+l{QqF2kBE78!W(J}GR<%hyOSa^#KW2A9#7?v-EpG}|G-ghyn z=?rspMd0U@OLxiB;Y?ZmX`qtu$BtOjBlV)!Sme@`-#+XmY|ZzS&1tu!IJe(QY_SR1 z0UV=l1SuTQ1Woeb)q8dM)^=&@D0MIY=odw=R}Ix1`s7uYSGi_ZR9?Ypz~{)8DQKuF z;;$|^>WXy8;kVBCj)zk}goNWAo+T`+Eu^`)Rq5;Orj}=OtP(k(_`S?Ia*=lu&i(!Y z6ky!UGfXJmharkF3Z=N zw|spi95hC)Z#|XXFr~?^gLGr^%K#mG*CRRdI!@8olzM+?;<` zmMBkcY<*15Y~<5?on)3RjW#`011xN|mi+U4bC%t&;oTcGP~j?Uw(l_ls= z>}ftPt(>WqU$ooRt&WD#h(kUpTahm$0)a5J z-Z=WZ(i=h)mcpDWFgE-@IdH`}B3S$|R`_jjI00_L3YJ|7a(6Hf0Ikg*&c>H}i8a<* z^1^4vKTOgld+Y*{4;&xunXo&fUk)n(nZ7>(A~0v{k}!HW8=|4a&j(!xARx)

$|c zhPVR@j{Nk&@@WnWOc#pdglpYbnqRa^G=aT%gEf}qea-{5y=4?s%BNYdE!7oVS$dS-jq9^$`zdUjKX!{5-+8{58s{P6Lviq5&f zzQ9h(E0*q;!DLs~tXi-I!aV7pA;bDB7h>Q7WQv&S-Bq<`n10M5tTIoGCSRX*XE}4X-yKG@ z*&4QX9KS>Qd^uW=HyX#d?b+Z|_#4p&jaPATz^QW2$6y|u52x5h~<_a*4PTBwZbROhRfpidY0V55XOH=QZt*L z?wXbvb}pSCneNmv;npvM38FTjLG&fWle~TLgc1+1AD2J@-r>rMbWHR(3+UZ0jQw8 z5ZgwgvjLFKKD^9oT<5j>3@y0WOxmAzkAX#?$$^3yw3s8prBpU|GV=W*PJEt$__E@r z`Stz2}qfA&J!S5F1Wi7fUqy*vAkIja!>mdAZeJkLWFEIi5V(C}TMXN&@V zj#{qpaJwA^>(sLa%xI%rHzgljPs6aV0K4sn;+ABIp zuQB63*`WGhyF+hsmojX3a<7Z|dh7vbcsGv!>0JUB#7*nn5*_9p6AkHI6Wmdy%>ep) z92}15`S_M@$U7q1>&W2ode_xEfne`?Ttb+ss&eG-$>$fH5bzVZdcs(H6oyFkfkhJ2 zUwY62^V&sX)S&ZfJmNGw;q5^Mk~pP+I3uP&`9a3N8m?f>3PXU5SD2nu=9@r>IfA+J zjjX@)X!vzOM-bidc2qIeh#Q>abJC@x<${icn`KprM)xE;qpkSS z|JucpB7kj2oOa8B-r7Ruh=d?*aqcTYdc@#rq>#Q8xE5LNkn$PR`-Y6+D$~(X5QkUK z3)eq)aPjpu>WI=wtB;d7loeZdCF`1Is64W#Ofa`qEBek>9wxW(>0(*7!kB?7Gwit4 z(Gg=8?0SZc;x|X>@MS+o^cebx=8&<8x2{&j1suO|vFF`5buf&7R|&Qg33jOwySf?< zazki_QODaxRqIi;T}qOw`^~gsa_&6m>$vu7N(aezO#KJ>Q~BF13Rr) z0$7K!w7&oXenjB`WX?|*Va$7e`O34 zLtF`Fb~J02*(;X*%5<(50Y(ZST0aGf0h!-(n8&AzL*F`sMjW4*!1BEp?hbH}9S$7f zO%LbIz}qGL&=^by4)9Dd=%7S6^z|#^5wHVEB6bNV8dB3(#{y+03YSOj$ z1(#|0&|-U;@#j?3YNOn0BbCI6-El=66+Lt{i8c(al1Q8EO3eS}T^m!rrCJVdp@Zzq zAiL(E_PK2Ojap$H%gcM8Dvq220xmznRkY$W41^Al2d-gwOQ{Sffi;Tw#nfQ z!8Ky6Fnp@zRJs|43%>a^AMi-vw|-SlWCSf+Wrc2Sko%DI7J60saN5_Sw>^miD=&7& zN~fxsIWvtH-=lfmgMF6IcJ9%DsG#x2`>pAVb`On1v26P|ynUXy#+;Z5sh_4inhVcjhBn8vLv@?^c7~MeNp3Oc8s!_1aYTuu4%I2R7#UhE zeC1~&Ugb+8uBy5n-UPduT4!hS-A&I-y_EFkn`P7d>6W-+E(UwpwHWW~5!9Fl%rhU8 z4rN-lV^xZE9tstUT+j$FGG_R`{nZSVEdIRh#XZ{{CF~w9=z~HC3Za?3cVIqLV7t-KNDDA(PuVk1EQP z<;!`;CMg(tjBc_oR_9o}$LsR%*(lK3;qJ$NpY> zz2Q%SK2J9HPdVIxM|@u?$Ai{=N3RQx8WS(WUmi`K5tJ9V6@4gz0rWS$C?Nt0Z0;Dp zN_9*dEh%Lz9X_yqMWoXnNtH!zgtATSXNv=2l;<=fNed&L!s?27>;+%8%xsZAJYAB> z6*7-ODl4v5g{=50{n>@`0v& zL!{*eD0MShOB38PGu}00NWP}zz23BV?b-8LU7Sutt0p2PG4|hMlDSr~Ovdo_g{v;R ziPuB~LwSn8jpVxkpS+hQSqS-OwkT{yq&tp9>Jy1O0r@%+1*(LwL13yrR6IKYRG!dJ z5t>vF=!WguGx>zusRaBza|PX_wgeTrm#&$9@d6;7K*6 z3e6;^pCyeEsw#~Bbf^@APG9i1S&_$v!%F-4drg!~g!lGP{ z?>(t@{R9);;EhaY*k_PBL`Z*fk|?BYWDC)YXsX7k=SOzbM2c@%WY{Tj&s*u?F0^dq z3*p4AojqtLL^ifH$GHBRj&%G|gRw}kkvKT^mqiZ^JjXwysjH#3$qGU*++|#Yukw`C z902-@ySHLM;e0%y&tyK0oqj2Qj>Fl+q~(%^o>dC+21Pf1y= z9SBh)|AdSSszzwvjk$C@;k}$FRI3&YX1W~XYVK8jRjUo+ooRFNVsds}z|@6ejWB&H zo{iQiz*G~Az7=mMsx-NwiJzMk=)7XcHKvoRulV<0mw!j(wZ}Np{EvkTM*{&N`#)LVofk!b)(#1unSe7mChznn;^*XGaL302Sf!K%NvK1Sp(SkQr9Q5)QXLWZWWSAO z=$Q}C%616O&ya9od*vm$4d-U_o}94_2TOV^deIt8leMP35r4xTw#k2VqZrON?~xqG zd80SRHXo|9Lp+81ZSG7&FRaS8pQn)X}sTvE9 z8-2y&E;K{W@gb+OsLCsHxpuL%Q*$;yjJFmUTh_VCGv#Nao;^Fzmo4P6+GfOj1srPR zsg<`)HXo#SG|j@XaGO@mRa?jd4EM7ECE3qIQ%*s#tLnCE-zC@}S*5I^><4LN)Jzvs z7(Ovy+fmt|)3Vmq99k((g!1juobDEhgZk`E82CJ8+jRbGN@Cmc)iyuK&pOT6-u^~0 z?zVb&Q{|S|$`FExDI}z6!__sPe1qpFTF6w-Wr~OJY*`zQKHKz^TI+JLzcOfmL{)Kl zJ5Oiy@1!;)n?)1Y0(T3g27L-^-p%(?3VBboNm_z;Qv__0l2J9;Z7)Y*yw&7QoN3rq zqBZ*j|NbhQCiNUnQ@nIM@-fgMU0K1>HcT@Gms;}(PjPmb1ot;MCB9qyB&1@>L5;9_ z{`8ryhVDpDwIcp@l)FzNsW>FSt6C;QVyJ>5H~Ah!hu^|icE~1Z+HKCAyxZ-*5zAut z$@jUliq9rz#UW27(F(*uio;<$`%+wYGOD&dRM0gct-U1syj0&lJ2Uo2%Wf>5W_007 z6|b14{7?m^KqM>Vwo6K|!bYtzJoo%?99+9;POxSx?M4v74^6m#O(70!z!t{^NnSa{CzL$VB8p^=*hcrsN=Y%vG=Y`xK z;HDHPKG5@4AM9YIJ>-Y$kGX?|$WE@lrFjzy{2_S?@}s*(=Mb6lQ+hBV>zewlDzt$1 zjW@99Kp?Q{K+9Wx@c0dA3*K-1-X~Mcv{^=&HSruG_StDpNGhbh=ZF2Jbr1ciGMMs~ z5-fboEUpih8Ct1H?=VuWFkPjX({Vj%D_dwgUaZIg8`{muX_3W9@u$K6;Md_DT>en$ zz>>|KM}>lvlC_%Xrj~nX-p$Er3nje`^H}UaT1&9x!H1muqW%KVQWi7iX~L(xm}O|~ z#X+Z^p7)e&r;?wMZm3UN#ARz&eSB6w5T2aYZXTDbQsB?2PjNoZX_YZm@$&ei*e4@< zA-cu+gUfi6DlKU&8_mLNOcm>F1jm)ZN#O zzmg?7)MT_mL2tU;A-l)smN&w_S2{1pQ=5j1v$uP~ENtMAB$VcrcK=oTxtT$B+CQ@1 z&$A^a(@Ka)^h5oyrh0OJ9#gzHDSSme!!y-3XWzXi7nHjZG|r9HxX}HbNrSM@H~AmY zl;6^9=(;b^Zt+UFk(}@*N9)52iLX64_U|w5ZFDiXM=}GaBCMv6LFw6*L_c{ieT5wU zA*K3qh9dlg5ClEl8!d$LFUsxZkcrz%g_DI7%&k#4`w>l747u8#01iJHoi4xrit81G*c; zYb5(ZWKaogi(If@57k)E;!!8`@909<{p z=s$mO)#Hn^uppRy@nfi*eXNEduoB3`4OXj`wMD-$aYLg5Z3?JcABCj9(eM9qE$;{i zSr|+MQmg_su+tUt)(;V1Ix41MT9z{O4P?P%2=!FO2-SVFcG~_M0Mz^g>CJ1Y!FEQA zHyFL{&h9x}E5uL`d#9o?MvjkrU*Wk$C8c(0X?SXAh`aoJc5Sh92J=H8jlQpnncsm)Idi-{nvpE5rUGUtD3?&^ zQA!Xp6!|>dyvmL-u7;{H{HUpYJ};Lq#^Xz%+mwJ?UNka*xdxQeq!<&L7B=xyjxRPN33hW zC1xWWsfp0wh{Q7n;w8D<(WFFbCqeLtz;~2_rAf<{}UZ{%l{`lUH=;0FogcB@M+7 zsxE?(;|m`8I}S!ggq%wlmQTGYZHei386lY?Ua%`q$e#*X%Z4LVb0rqa@Ga5|!*P=i z;_$=Yl*Yv=l4-5&pnFE#buT}@iT`i@WCJ0Y!XNCv9~b{YU7-Ji;v+M`05Xnl?k4v3 zV%8RBcK-vTq@@}tp^IRI@7r`3bnl8X29gx}%jwbS!DXY2;>g5ONief0+&gNAH#dGw zIM#fVJ9RFI7cY*;F@LIzvA4+S$s%$n%+GA*z4G2|X6*_Cz$cjU5IMNZiG{YJGR?&O zk8*mxXjgsC#2+%_ctD8CpSON`LoVB3lUDzceYa^FZDs;3fpU209hdF=4Xpn8npQIO zT4$d=+uK%w3d1rD-_Gbke~nkY9ghyAuz=d7?)!HA-+za!Hf9Xf&!-R@Y$2&?k%^qR z!mPql!wm6O7u)gvs+-r|tc+fJIw*NNz312HbK3vb>^z?k=mjd*=j5*gx7%q=HYW1# zoHMT;s1EH>@Hp-R^Ky`57IFot`W=QU^7t z;cG_8#7O-tI?W}7uzG$bL)asLUI^n^6>`FE5#YIhLr~6dsRnqkSuAbXvo%X4J)3@#~v?(nVQ@fLH9eXs5+tESnmjDP!C+z7& zgB%)&-kK9JNw*s^M)Svlxj2@T5hHGyzeuRqzmV-4y+LEZM;2?M?z}vE>A&MAERIsq zm_4|9w3ud?(4qh4YOqGMZUuapqlR)_{r~Rmi6@wI2?huV6C(%+$^RN?=>LzK(t-6? zUtJZZZs|4gW{3)9u}6|7p*N8NGfhFEzyYIVKwPSfqE*wyvyV)q1W1qPNW{5$W@nxyc7dHeeo_II!6b;oV~QTROH z?>ypP*BuTjgn=%_#dr<7zqu_bNG;nr@%(;=gz%uHG^@hJC9(Y8zsRW2Mdqhmh&y(MjXqK7r9NtDPnW7M)|6ga zFXNK8OX3g#+#{MHUMZg;Rl#(b4(aUFgL~{e(mh>VjfJ;IBCt1YSNfC-(vWuEB@zg| z4$-M8c_segA*xMWN@hrW@O088avV-lcM^wJKwPS!jg%L+WS?9v^Jbr3r3dz@c)3~a z(lWLU)+;!`UutHRX!~xk)CzIwvsd=u7`M;ZfDLi!AE=bb^%#a{gi$&>6hMv->X??m zWus}kLsWWe57_RYo+$oKra~*tTXJ(r^mL;c@H@dxv$RMwBS3a0o7nZAj8U+-Qk6^n2LK4ApdP$ z+_K!7X~{uVJ6EkZZJm&!7OzA28Ljb&yCQdq;A^e z?`VDC`}TBGQeq6cLnieythuwOI3Dd$M}#X+kSHK?}`= zO2TQqq_tFkr;cKIbix;x<@&AuHc*PNE{a)$vE)0$*F5HP0dP^Jdd`wdg%`T;q-y1O~&P9JR`&o<3>izFdsLFd_A^gxhlP9 zfMw(q%D9Geb&<4jX4_!;~84j7z`uPWvp#QwOuRSact(~ zHxk^QLiml7pvftjiW`h{jTnW4!0ll^@a$m~OeJ7@l$~VSU{Lok9>fEvUa%_X3ss?0O>_?HpgyOLDgdTWC@F|kX z{Nyh7W(%uos@?Fml*tO=AWr%{xSW)`x=b&iMd|WYw~(qw^b2c{9t`LMLS`L$`S&2d z@xJhw6h~hr3m>xTUDB^X3vfH?`fJfsgIL?(bZQMHDe4BnHwj1wlTDfd-U=hOlE!G5 z=4jW<)p0de_M9z2Sq7&b+P^XF+$nT1WA(p(BnuZkP=l_vi+dR6Vj?7}Mf#uZY~_Vb^qYp}i*VUR0DkWWVx+yKgMf`lZ*iUmj5*w1;n&;o_y=bEBfxf|UCQ zN`Q7nAl||yUOy6if#xb*O8xpJUAJxpy-mRw_r)jeUc*zxyJQ?7Oim2#-XG<(_TJ*p zZadNOQiBh9!HE&9U0oLrYu24nLj^@!Qc4k<1?(H)9-lx3CR!%dYhz>CCh{ zXX~&_^v-+UiSiPhf6amWLoY*8W03WEqRCMVHFZ!2%}Ko*#@#LZB>oz0eK^63xkix7 zwDdsknE^Zh`<|&-P_gY1_>*|$eVc{W>o&2Oda2yik7p4$s(_qHr$SSolZuwgWlAGg*CouZ_Z(2OY%Jrtj<9IV?M3OuQ{iIf|~x z+OCWNe~txonygr@9v+#y2&5>OFY2d4Je)llU2N>-U1%Y2eMnxIhQRK&)ncRb` zgHl%)N*40F(cQOsjH1!_2+(IRufIn`ayt8{pN|7Lhkrvs0;~Nj#xYzsd-GWHfDt9Q zl8Vyz2bi+vw1PRM7>Qm}rKsit^9e~!XTE>x6PCX`P%9qh-2=mc`lps;{+O||%vRW` zE3_)>o@j#9uE;_8JpA88Ozy*kur+)P@8{Tf!WBvd0`Z!Xf6%X)yzb2S%KAYzn z?rQ+Pf5|}DAyI|U%KQ2!ejYIWOHAfU7xnVl>bq|aK#}@R`j^^tpV_Q%zE1JyOJ_&G ztreXsq4K=^wES>~wCSJG2qCa~N&Kvo_ixMy3{ENcGYc!%lrXfJmz`lSHrZwJl6Z_= zNUMIzH^pX5kKm`9OR}Egne*0~1*LE9@jft;w2EN+%=*AOq{7?Aw2aZAs-6c@dc$O6 zomi1GxZ^0H4Ca;nB7IApks9BRmBkfJb6#vB8+E-Z`eyEF)qU??AGEiYCp$>fwCY1s zvv&_EhvL3@okqXsS;VzuTTz?q2YJc8MBR$F-jY59>8bS-6`H%J8fgf&Q&Rt#=M(_L zAV7vpgL>ey?%X*2D14?^=Qk{@HMnovL&kHwCQ-v>A(8p8F)8y%R0?MD1 zBo;$)ZMMs$Soe+8MqZh+jAPj|t_y5veA>_UYumoK>5uaLdCKF)-GsmPJ(y(0n*P{i zys<-v#V0j(cM>ICv&TEdeBw$~Ls1r0G?i3-TnPp`B$ zRxBck=XpH(i7~L^4z1umh!eEgtRz|5MoouBMTeJa>yFHNtlZxwu9=D3uMln^sN0{J zKNjaga6V#rWdA)4t@RqaSN=$s^94t1i@Tz;o3$bJnF-4*olwZy9?s21?8%lzKwpZY zc@lKhbN1Dm&eJGYR;}1jg9BD(H1sY)*D+lGBwrBd$h{P0$Ma@6$#ws<$_8ZR>gSwY zJ*_vjPnewj++L(AbAwjtayY4c6W0(YfhR?bW5EmauaUURIxO?jIbEa=xA)5 zrlxc7qeYUm^|nc4@6e1Ao$yykN@x*-8@_p}bUmn)(DCP?ZdBqM!9$!YS;}i#&RQRw z(jW5~!{0^E-Q9$IB+~P7snMnyzdv!?;G~ZzTHH=cwC`$t5MTFWEV&ukiLw=bpbLHs z;w~&?-o?0Q9A!c%smUpNDiYcO!w?lgLYc-F*c$* zp`>mI6a?gQ6@$1t3Vr=8xxF>Le$ve~0~R{P9M>zk>p6Fii_@6eL)P^|pLMZ*cq8ZT zRs@N6m7Nr?AjnqVjL8qbh)4=&>70@lIE_JpCQ5I-HSbWKD9&qFZB*W(g|vq}7n1SG zxt2G^ExxnzcFez|*w~eP;&!werZX52sJ{5wlS^m*<=#_lSk{d<3k7imnI;A!m#?eq}DTrH*>+KD?X?&h@m?QK9Bhz5`T4>^h1F zsFSSbI3%1+i}u`K76l5-HceoXiRtAR-ifN_vGYWZS~?vVHMfMj!f;OPBfh8x`-l6FcwFKm-v^o^~0!Hfa%+63{M_!aGh zVf9RWH;A5WgE-`#Z(^zBOfj9kH|dER6c@UO>GdG-%;`0~r0&heV$3h1hAh{9t7a2f zoOe&3L|XVmfI~H4+?6SmQ5wVhtT4nIHVipER(0W4w80uT9+kOMZG^lt_1(_2AFPiN zQuHmwW)(bUb?yS85C;Al>IeN`%vR0Aa_aG~72-XK3#%&2ycqhdc^?knE}sZ$gZwb_ z4Il6a-7R#8+Q`gI+hlj&D49gZC<-h6H15E%^oHW+v%IHB#+6>sc∨fd|u2@Kuk2 zqV*-j@Nbm2ZIgh~9-xQQZ~nA86An7{JNxsTptKPoK&blwV++LWv{gP zysYMJMFRZ`3aTs5<13*|ci-%Yt>~ZzWECwI8=Grr-Jqd#TI-Gm)l6@@5S*xx&Q+Tj z*llb&#HlwTK9VwRDT{mYIKFI}Q66VYJujH3eh9cv@QN`01Tekjg~Jz{b(MG4ew0e&Vovmhf&Maas#s zJ3xw(y}%24W~f+{tQT=7TGW@*JG4>$P`iGArS?GN>xyQblbe(8C@lC3Rj9oCSs5P& zqqIg!6b1E3ET99k#0SKRa^r&x8(QN)zGL>dV543>^OM+qK2G_7Z$c^uswYEU0y3_U_0z)1gLeFJ{8IW-_RpT`x>}pLXi24&E~Q zejvG+ObS{gx7NU|e9hyS_8ngTV)?}YTf8MGr1A_; zR}3^PWz11xIFL#Jm{eO$L~z{;`mrPzkfbAAQLsTT90tG{{^^)rGUMpIm|>hi*F{h$ zA6#71A~Aa%G!LQ~5bYQJF;Lfc5>HASm_iTZ!9i!ajZh+!SRNM(JAYj45ZpT#4FIr@|7_KAVJmk8q$GUYZ@m-4kAw9e2~+llyKYuVa=-*)bRDM{Npg_oSmJ zf27?tYA>Ct!dV|{1Kayddiaajlw^n=Nma?4{awL?4(=IAho0=3cPy+o0MOat?UBd^v5Sgw0rF zeV44FKMFnZbj%rG5W!w8ZH?ukP?Eo(m$r}M!P~qPjSzRl@Chhs5D$dLX*L2g#}He2 ze1epjf!-kS;CHm1<4)#qWECRfzyjsH9D3&oep@QTzTu%rY;Oi}~a&^-be)0)hO|ebt<`Ld> zitFSNYD~Vjo$|D0#vs>|cqu-r>SG-I5hHK!HsuUr+%?IiL)fg`vB^E=kY}z;N-}fA zK-F6GYwSm*5nHAR2qMMeet7qlh#1IXA?;z61vCzv%Yv$+)Kq^vGIdtr{;As}dc^z0 zIqgKaal}w$EKNU4N!w3j{L7RFc7kwu(#8z3@8d-W3fXz?+%C?hvkjMHfIBq{ys>4b zncycCgEw!A%S4jZpfWS-XrTlIEEN5N80YqNeFcqo_9g{yE!Mwg<%~Jg)%4|4_jO77qqKcaUwRz9$#*tI zLQRXc7-a|I)|28DZU~cIpA?_0pE7$G20=VM?5fG}e6}0v!TdW(ah!f{s(xH#GL<^B z9a3x64X|6<(&!eO7iJCfnO>mh%aoW7>#>NktbW&C2x{GKREG78c%2~zM<@8@Yw-gb zn%aBe&}lS318O6+z08?!54U>t^U~Fyu>$5=D$DXv9y@9D()THXBr#x|gbKD=wM{|v zk4CSMI2grVEd=eziL2wl3ltkUf3LRDE_|mjGo^dc2p{3g64s6;^-yPyfMlTjNzsq` z1vPo&pnKHO!&sQO%*q;FN480{;XNu_=CV!cP>LC;iOZbf-E{_z^N=<5 zvl7`7=^XXc9yaneb7Hs2RW^rWTCI`z1-Q)xW6jTsEM4mYT*-D61b3fr&px!Ce{)Uo z+<*FY`g#N4g#41=B)llVj;z?Lp%0c}yj0#3B`~?Tfd{c=W0}as)l3TD%X<)_Pc6}e zwe+lJ2-=0;wFC!wY4*}x$Rg#KhNuV<3>MP}#!kr$Z`Cue;a5>#_W8gNmzmmO^Y!Kt_f(45W zg^%5AHwmPwTW_Z}_NK}50I(ZXRlcV#Tg$wF?R3}Mdw(^4_4UX0Rqxk?$2GpUCNMJia5Tz5`CL}`S22h;+etQSB_`w}A7mS)esJ@#E%hsFvt|rQXtgWd zlgu9{eida|@M=bmQ8bvA+n|05$vQT=3K3C(2u>AroHpa;zR0kz?kYQyq~0{OtA(q! z)7V8+v&3U6#A%i~kZ8r|-lxvXtIow!y?nesQqF0UZhjzQS8da@sHT3}aj6~I*z5Bx zV`P;{cZLIRQApsSN;9^LY73axDXreG?y_r1ez!26mH*_1Hl^oEe3pYKGy=|48=tK_AuzjzJ?xZ44#tqgeNr0k8aZ-uevf1sWp^mM|_k z))_U;gyQh>0`yKN`X>?*j+e|JQ6}Cc6_L%O_8{0xZjf=$ zLNJ1P?R0IJ(=SlVd{^bO-uk%d?2H`TLgJ;`;ysa{lBn#+9b7f-g*;K0>7hnD<>ox- z7n{%EU1QkB@EwaE-S#c#9{W3jw;6uQ{bc5kSa?L$TkklZqn6;VzMPB(r=`zF5UpuO zDx9KerivulEWiToRG#AIM;hg%W%3FX0zN&Fk%R})%rIq9)oar0zj%O zE+LuWs(4a7Oh*SxZaeUor}lhYDQ#tYr$Ty>ex*5HvA3z{LsA(i*T!lvnQrf^*%s?I zGm=(7lv71+Wo5OuZck6DJC>Ft0&juuk0x0BHQU=HPRDl+*aXpU8w9)B<~G(qlyWu^ zE+fiet=0@$^A>72P6gK!juHy%9kkzG=DxI7B{+A*dFT1Myg;3K-*$`@`Jh!pYd){tTw87j%=(!!MJ_F>T_*Sz}@pEOstYU*deJ)TEK}x?s9F*M@+mAhG zifyCtE7cK96Tg>nDS>y&16y}#j@Gksr=1r%oz~6Uukp;JFFwRuut3ajL!&i=cUWXX zE+UR6#B-I6bawD+IiF-D|5$EhFn5|4y$T%`L5$~0<7gd~Qo;=NQTZ$vicBgnFRq_< zP=AWmC-XRatzcQ7JeL208T90tuI#f(F0Lw&#WL4?#4TwVaYdGo2#X{=h$>4lTX3FA zh7zd>o&K&r-1wLMm6mf!XkR^=k>G>bt0y@%>uGTbc_nY`o15-5mnl5b8}O$6x6X##WlWZIiI7rMzmxLNrh)n zFzL9(Z(y|19A{VR9fSI4meOU2Q!Zh3ew;od7+eYNAcQ&Idh?H@2H_UttWX#4t-JP_ z3+l+CBV<=mF4p*k3Br35Q43o@9zG$YcrH|WLGJKD+I@58RAGMf4jdzH9jWqdV}&ri zAS|qSGybdP%fogFc3_JeC3ZEXGs@Q8v2{5$rL5<|SThx;ha|}kPXS}5P*(*d*=HA* z_s6@FjePFK;deOZkTA(5ZlNvOP`KufU-5DOobquvCF|PL)eBy;Or+N|i`ql?Y_ty) z=?hH#vxXZM(!50^3K@h&kQDsEN($yX04k1{jRB%txtN&SS+IDzm^e9ExUe{xxR}^m zxIrWb$levQKGP9W?Pg=)3InmIU$Y9uLZimB{2&iuwCRH6)Cho`bEv@<)5PE^ZzK?d zPz{T+GUj<0UM@=m99E6LSW+Y|vZ(CEMw7v@*b2?6q%T}fuU5B2keumb@nu?+^Q1$7 zsa_Ky_Dkm2c&20L8v(8le$UT8@Vd!0sky0UWyICRP$;oY39n2MZ}~#soS{sVz{YUI zAOLr;+fx(CwaGbUO-n0}jwte(EVYrhl^iWNKAI-hSb>FEl?|qX;5qMv2Ab=rOd~Lw#z~}D z^XD-q=cB?>Las6ub}i3YNg4Q!_96x;N;U#yWSwX}7gY7$T)vJpvoT~XwO1e{ad1^- zdYws8lcL5FA2w>`%~uaeIdF~P747TYB^PS8_g{v~Y)W)l4OtIeEe%5zfk)<4bgWgV zv7MO?D>$VI)2fmyHXG|rSkMV6<9m7S_8*aBhEOy16W}Im2P+huJHjIhXvWlW&XzL!O12;Bme)#{qo2`Qb9hPrST z*+%r#6QF(Xbj8m~hi$_8o|ZX6A0lSVEvLh;E^czQV$o_=c8{o$R8j-N0Wj`onsQzx zdPJ%Fh>xUxvXYksj?FhK1>ZEOR=@e=!femqh<`4o__12Efo$^j110Dk3@dNTi#x|w z{pY+$zXO)5V=KQdYpsT|AbB^o>38uSt_{`sD+H(?gP91C&-2fOP7SP!YjqBmnU7Y0 z?RKw7sgKD?S9Y+gpcW%Q59lL=Rp8eo*Q6cf-?-nw3U^;4on2VXw_TuR7e1d`3qToR z#1~Nv-^{dlLfJe)tzRprHg!IWOU`9WYEE0@7~5f0+991Xhd}AomcZK6NvqR3p{z-W zRyfR!NL%?yq_BZmW`pGu^b1(gqt2kL?B3G6I^pw)^*7~`p{cryXNq|Xuv%oa z9$?d?aG^VE-smOlwn#4?vF8%1=a+Q}+RJc2@`MZS3Q+222V8bWP@rEfM_{>Maz>hb zJ?#Zd$TnXg)Ia({!=Ob)D&jms#+f?`6qMlaamF@70vgafc3D-&e2%HyZK<2(FOnr8 z--Iug^$mA@pRsHspI{hHLhubf(*=yTP*PhM!#vjsi0#%(Bud5QoPG}4BK5*0ypeG* zT~gX*&)S;$a$F&?{OMYH!|`AW6CEl1l)je0av)j6 z1oBXsGN_GKe9%3HgyP$73(XGi+XN1O_n7u5dR{(cpeNBomSdEUZ>R~g<4TgkfM#>K zk5oBv8c(^V+QezQ$&sf(3C~g#UsW&-MD~~W(^gvxE%kIU?^sntX>6;bRnwQFKJF386 z^Vo*Hw8U|3v;~w;#gwd=QDKsG+|*YY1U*p4cJG2sru9B_9!yi{>4ER1kD6_Z%F>e* zW@^#u6OI!V?#0h*6bS>%46x?im-8L1zC1`IG+&@w>shZ_`nb0{dewxKiOmhEtn3~l z_JR-_n_Q(op7`mQ!T&WFcI#N^oYr`)e`nkn-$#qb^OSkSh z`BsWZ>Uhl)vfhU__{oU$tziTkFya%u=s6$2#qGO%54Sx&^+y*-6?lGMEWMXgB~2Ss z++VY7vtP}^yh+8lx=8406nTbpv)F;&4h0Qd2TFG%To^| ziGY|48+d7mY3GcYv&HMtbv!sqLN8Pa*QTXJRZW%aqExD*7M@(l%0~vAnD;w;b>yOT z_p2|b;ik(U^yQ_iM4ohr(R5w_!mu_#iKWtRgC`*}@50`$*rwNjFt{7xL7STPkjz$zmbUq&l0t?gSa%-KVT3GY6? zk{9Ezm^Y2xR{BH0pR6BD8~stvmcAT(Z3(`$F_aAJG*0eCAy@j@LjADIoG_0*g{T&f zDUs6-KLcmwjF6WzxoyVa&u0CMsG9Hs_dCB;d4{;&Iye`A?0cd*ISpBeNQ(t_j;8~o z%>qFa+J~Mv5Ejc0-id-aX!&?XNoR?J1h;@d0nPW46%CS=_)M&*BXQ^jT<(^$fh1>b zVG%MaPU6l4f~pmpKHo52Lig`pd+{B0aDfZ#0XFx$DYxt2Ja4aQK#xDKo1t_sL!x}X z(d0vW%C|^MG4LkhNbFcpu{j%Jw;x2c%8G$F1EG;Zqa>G^^8tEyi4n#%09s}#;slk* z5BGD)o1-OzPOwy*rpt_GBxgGrzbw8*ArM~nAigpkzCr#L_{rN_qBr07iO@*cFo3Sc zpckz0kQfYcu&F+4i&vSXbyV4>$|6l+nV-TUe)LE$a_}tR9-1KyNM;>VYNEDhiJt}O zZ8PK-_7MZ;$0brsj$Yd|<*!E4%^ERa-q0X2^P`o%6JN%=1lB->(@}B+#L0{TwOrki zrf?do#n@nA(<6`hp>s4y7gcSV>gwLt^Hww#7*H+DTJW*1CEXIss=3bbau^DJ_bGhI znjJTnH})i{*Rx3tU8QyU>=$atbXE%5j!8?qMEeNHMQ0LS%o?BmjnfUe5V?Xj&+5 zp2fY!_j;UE$*@b7wXe#?Yj!aqmTf{0nknj7+PcDKY4zaN4?%mo%nX%|Eqz>|82V4D z{2xlk<=>3zkC9HFHj0+giyQKB<#->02~NqGsN2a+J_QrN`Tcs?*LOa#Ff>fIGZ-D? zG}QIhnH)o|>a%eo|8%QsBT!}J=ww{}(<%K8DXxBaQu_&RYDW2)$LeB}bNJ5%d1TfB z3*||=3{|)42Lshgz3ur@BzaHu zITsDB)x7fbQp<$qG+i}T?K`L+t2kJEh?{V8>c(B(oTM9~=+t7w`^?&>f0V$yC_Ou5& zEqaqVpVm%FsKEWYEDCPMZIAZEZI4_-M&A^IJ9nl2+B(Ou^qF|9&SM^HZLxUbk^HUl z1%=)V*4yk|_bz>0-(K_=+#K0EeGwK-L1gr;n(jiYWgIx&Vx0+a*dDGw&qN6eBKKrL z5u9!DQdtSwep$ubg8f9J9fT9X^pC5xrnw;q>SWFTr0YUOtf0YGE8#M=##f&Svwl}t5r2~SIi8VdlCf%It|-Z| zxckB8_MXe815a15N?>x^f+<-Q<1F=1f#G1JRO-70qEOSYO`71BHjw{LN*G&m`0^xyhZu75<@m61JWeI;?*Yp>oTvkmZfRGUxMAkX#oZ@xhP+ zQJGi&Old@MX7k+VpB|ue_jM&#O!aqetUY*$b8l4J@nL(K8ssIgL-`?4Yy=MF&=-au#{RX}R~UJjZ0^u{X^tG4Sg)ln%9;F&bX_eQa8XNKZ_-@pZD4_2;QmXG;ee2+^vWfe=*GC%a0Z2SH+p5TUi-BSBmWqsa*5KB;MeDTDd2|<+SGFH z{i&7cTNnAGDPvndVrTcut5NmIDVzX|)f$-h&T4URD3~!>yL3wvbSkV{$z3Y0*b$z5 zUD)c@&G1_$UnLY6R>-Bzq7{FNOH-h~Lt19a2H3yV(7w%%=J+a;hy~=9OYKiI^s_)8t z!aL~_9jT{ihQUC3S{Ba3gSfvqV3t9?|8<9%X#V34o7vg?pRO>tb^=%*G)VOSetV&G zh!4y@ObE33Z>D}oxBrxa04f-8JQW_~0}aIB(h*FsH#{cle;T6^e>Xxnslgn>1i(Mo zs{cVj_5}e>NdEx;o4oq39)W-G&HiD8jQ+O~1vq^e6Zi**<{!W?tiOSX;G$7{@cl3` zpp4?*s-J}TzYkq|gcy)c`MY|Rh#XSI2*_oCs3hQv5o+LnNH?IM82{+qf*As02J4S9 z0@Qhbn`e!Z0slzt`~&~?^=}XcD+c&+6chO0sTYt{?EjX6fO+A+frzO8ornS68o~$u zvGDz0o4-zFhS=X$2w;gZc7U(eZPh*(C zKVD+|0Y=gP8!Q9}HTx~HX_A7g#~A_1*1y$@aS1^D`@cm5u>p#f;R|w~yQV^iv{{IW;fQu%007>rPwFv=0zdIP+nhUHr$q0Do1rdqB`MuN- z6%#x-NeqDc2zK@cf}bZv0m*(~(J2kU4d{1`z6&b2dx{Yt7z$CTz!=j6z&|2F{~Qiv zUl2g|2?7!VgQgh)V-XOM9xU<^4ZJyx3H-ym{llg+`gg}{Gm-$@gx_M?3=i->Pq|P~ zLVw@~5`TlxW~BfZ8UKrqAptYYVuG#W|9f-8<0no+2tIE=_!Hn~afTz;GRa9`uJU`&10^Boi2oR|TQ!JA}d0jDW3ih)4||owwr$(IC$^nTY}=UFwr$(k&w1DRviDm38@j8ns_LHt zOQ`{?rTGD0zG}7t1`Yyp1`Ps2mzZaaktp{A4WKu+F?4p0R?}8TRY&`ZNjEXT12+~3 zj0j{$p$~6bQmbv0>iYGA?uU)YI>IPXl$_bz=z#P!ruQdg_fwI)ZiO#&WA)nN@>k?n zB%kGT`ltX(Kn3kmI`jL*`tzml)4{d*KYnlr7=FsIy?}rpGGiXnL!#hat%W;G)s$&{ zsz99#4HQv<0YrmQ+mipe(48CPk%@_E6y-@@XB0TNc^&2cklescOq33!9gMrQQ5#vx zI=+W`ueXPO$dP;?W&b!I`{osy<~#L z(A4=+{uS0<7k$!(YC&Jz#EKlFuFFHfC@}ww-=%XT_ZDE=fu5>o=F&gb-oEc-{+CDx zSv$lyyl4XdGdr8jwIXe*J;o4y*f-p;gaMnJ@cC{wi&%7JT`XPjR#>l2I%)jM%s52u z`=R_w;mLE|=@radcQk(aPy&0r+8NaE0xk(exSC5sF?yKZ}1h)9ZZRu!xv#fgQ4E z_)#~yCN`;+Cd{Maur-nTTQ8Ytc1-W`>h#t8bfU@Z6esXY6dEV?_u9QXrF&60o<=Q? zmb8v#*HCR1=7in}C}LY$$*>9B0AEWXn|*zS*0xTv+hRrp?mXK!wf)VefZOcfg0pAM;PanH;dE9DpG$QXMLg}e4N&ZKt{h<%SSkSY`TzlIO6#YZ;rk(H;MhujYyG!8qm(zNu zeEHGmh}8cu%OCBh(`QI4&~MwPm5UnxfzIFSb!WsLg^Y+aOsVvfROlb>TqA7!Ao$+_ zX|zL@s*)Qfe+)kPee^jl<&r*r@8l^x5=s6QXBhHvthiY^pkVnOar7kN^cnW|k?G`b zx%iVzW%Ez-F>0adQ;L&Gc=6{dLje9ZJ-!4rk69_!G8BlAv^V$5>=< zSD!%gqU89Sr#DZhk$=YuKXf_w^E6p)W?s4sI)Me0SE^Qi?hCFL!^NVoAP*Pyr-p^B zJreWfY%h-jY6r4cNLmy-7WWOq=`8CL*Zv2P7!7p`KYVyqh6@S;BJ&djgynzRvKtCI zk$M>mNLJRBM-@clZJ@K!ZPrk?6+I9Z*vNN_)Sq2Qi^D-lw31Lj>7SpGTVoxUW6sig zip+ z6g-HQGVzoWXu9DR_s8CNa0ox-*4z;9>=+Ij;Qu!mM?0Qj(5eA#eB0jDL9&3`jjA|M zF+v^N+zK< z)=ar{C-`C@{-CL-0hBDHtbGPoUX@_5lxy0B65E^$1tY9tTNSAnfy<`%$lL)`8PrrExV`G%B z847+ysh#*G$nZz*M->ZLR25#&n-nfA_FL?80HGta86PhQk4_P5IIWZK9Zf`r&J`re zb>{)mP^aTGpU4?5JzmeN6Y()J{0haYyvvsi$~)Lx8;K=oG2>#YpH#)-^I*t3`xwEG zx9*86u43;-T;313>IW(91uufs-JJ}7QzZaIK^p8Q3B?lu`us7yW>bKB#Ql%HFx z&^^4=UYC**mVz%L3o2lloGlbs7ogf{d>o5jBma3O;P0fIdq}A;rErB|q4mt)5b9P` zC2_9LVt(C+lwM*V6tn5OC6KUa``Vm$9sJe_s9y&-%`Z`VV`+ zezyhQhcE1xA4S;q;5GOyoS!}`kn8cKzzU!ZAbiyMGhn?W{z}=G4}{vC4)7q*SDDvW zn#{?3iTt${`%h(3AN!^L?aLKude=VSMcYS|6;Kzo1nl<+175^G68!jCC>U?k@2lO$*yuAV%1%i zVNaE1mm$>fCMr|*yJ!wcAL;#8Q~BdV>JP0^X|^Q0q$-jw3QG}Jn6**5lCeY;@nX7? z{TLINJQfPfn3JaAm{ij_wXhm){ZJB6OJxnOX+HM$E5sy_3RkvG^b$9ZynZxETefX7 zX|mXc@z71VIb$xDZN*HYfJhd!f+pT!W2!YvijzvPbXry~n=|f-JSzwjx2da;rWE&r zb8Fta{CHy~@5@5n9&xpOdL8q!xiu@zBGSu_ma$G=VLn}^kcWF0e)YD|SgHZYZLazE zEb*OZ@t||8Xh$4ZEp=!u=sLW!+aLNiE!rVRSpE}70%jl)6&2yI>RhfJ)fTmy7sGvx zzU}FualhI1Trz@@lo>WJX(lg5v!sIJ9hlFQe&tT+ebkUO|HEW?j&HVm6NB#t(1OE6QUs@ynOE z%b^7h@dwXD#y6l}iCTH^AR)t-{is`$c`240b-ymW@tjr${_<%IVo(M3@nRO1;^Oo# z>yd_BPW?Op3vZv9T0uu{0G;gUN)XXPpQjr)GPqMc$J) zUNF^|aj^H+IZ+*S+zQPtcQ|L~(_6i%qn0VhdF2mHky-}#A>rktV=6P4j&PPJA^*rN z^^CJ7XYaWwXVjNzLVM4-lrBR?WZ^+-3G-1nv-qA##ZfC%=Fio_;flIHTG*3D zE1f`;_;)>4MX#WTGiBydts`G_%z5N2ZC5$(v}4Ss?r~Q0v|#}GE|TLm2~pkIs|#1e zRXd*IRy7PqbQG%T){-#BT$1srvwUgJG~8aizJs=43^Wwd|P$dm^Mz^*70 zd9Y-QHxX8yZKv3amK*xc{yzDAbJ{lbD-waj^Fm?F zI%YK;S=xT13Ce7xcR~f(P_itinZD2)Ls$mG777HLp+erdJ+eswmPDiT`M7sST zjcmARJq|VHL86AtS8AQ&kklAO*6eCH>CKkV7j)k%9ZBkiN}+{e zg;L76$|s^06KM&YXCzs_(^>+vlNyNhRq79E0tLg`2-N8W=d^|c!NnD+Y2-y*)k!Se zt8P+2s*09IiOcBEA3&%ojNtCthhKjFf@PZa_|9J&Ad& zfS4&34w(Ual*BnGl32VEjKr8HY-2@2>$XwsZ4ZG_m`-|7Lowb((4a9{vvh!LbETg% zPOGaHf@`j>wR%QCjrTB15|%$URs%&@Ejtx9WdI0%Rj65NRcxi{S&2pc(As6hSnCw49Js8}S(k7OI`LY}uyKm#W|12}ci2 z9O2dWc&F0oN}7UY&1>P^%+7p?lyvIri$j-r1fi$agg}sa1&8e7*WgE>RYz4~G5vnu zRt$9NlK(CnDN18+6WK8?lOR47RXROAC3VG$jAIl22*bnW%DaC=iKo?Os%lG6Y#IbB zO*Z_o_sbBZ$iR!ucAs`4`UaNWF*k)FfpCo zB?I7O+DD~VrI*|HB4VdVdET8AOVv|&+okU9L)?X>D$J;mVlA`S3#MzyCYRLxJ-snH z@dK!axlf|jPdQKl-C0MCzLMusMI+nPfy(o<`_RpgV20nWhO|e;4^8(hu%pse0D#7E zeC;uggQ3sT4}WN{V^y7UL>>WF=hmA|hS`c#b>>bWb??S?U0P*&#d&zW(A3yS+FcPT zL)U#}dM%Pw)S|GqHK<)&QB(RA!i;aFp`U=#wr;(qx-}6i&48#`?$tb~q7pcxXD3R6`V6F{XQ$H2rVi83>+L>HjHe$Dp^tY1yH8xIR#->}1H5+ooEroLPLm zS0#LTM}f3WrNCU_6{O^(AdLVGN4%V5^>*uX1N8^=847uCz=(M9Rf= zN?FOc!k;1IxvEDf_DyKc6@Ux+P=+s0 z2c>%DRastkD7!iDEMC>#;uYL4w_2ts+UBy}r+wFLGnCpR=fS9b#U%S(E^*kre)mn8 zjG1ec06=Z1n@y&RT1U8RJ~V3FXC0jkYwQ`_feQa?i6Wd%ake^zq7AoMUvM*PhN|iqvZC^ANS_ z@Yb7bXgcUA-Y+xMft17-Fb_yklP;|?%q3QHg+#&2vZ3N5&4tPJw9RLPtB%M|?#J%< zi-Z7K*VX{Sh5EA_;k8KqiSF1W%J=Ir*ouvyKVPdgA&3QTz`W~%d2J={@6eeWyc9&` zn+VOy3us6tjm0Z#8<=;qx(s^#dAlIrJcpGL1KX9<-gdWdpdP|!%!Yl@qW{WZG5f5X zm(>thnK0PDxhju1W^~1GF+uW#q2Uja&C_OXwMEDb71lO$d>^l{Qd85ddtRt4U)nxX zU8JdXEkEO(&MUh`Erqik&%I3|=khL>gx(O4@Xb(zsHrS}CCvb}fX+;&sbI43+db-d z%t(RL>i@z8e)oUDt!dfi#wT4e>@+{M-`$5~ATD=(BdcTC8M1#3 z&vS$$<`WW<9S<}9QFn}}m*0ow2xQo$?T&)HLH}C-V3gdt&TaK*BJ=$6`% z(i5wcsnr?azAuiokmZ39%j^g*)!o-dkw%YLzXU`9s!4Bb9~|C-V?ICm{c}WET|1+m zYt@CV_4?&!)pDewe5C49rKz6ksZ@y;Jy5QNi%J`(s&690ODq!gDV{4z+ef3V;VRi{ z`+JxHh-}syKd@=eQ@WlCoft*wBjXma?O8Xu5DdJLIs{ zezP)PgxD(^g}kQEbkumtpRMr~bNdhZ)HSlsD~uayy>f=mkl${%*K%K%N88z&8?H?X zEkC+;gpd(z`ljcK?uq#%rVw}gIg$UR1ulOA(XtII>+^RwJ`5pinUpkvzViKZl0NK- zt(-2?cu$Dads{QU*mxGCXzn+ef)o|b1hMriX@vyyE{no0CNLG@&dB*&yaQdHf4B5| z;y=OhR%0=-47i}(caK@vx^<1+260QxqSVl$R%FP#uNxGo9AV%cjvU+f4Io10SV9p1 za|cqF#=H5Gu^kP0=aW_(_jeA0YPhVhgq166V z9#n&Q5ZJ6?0~MDJp@o@oqezXeu}wEjgX#^>;|It>O)^o6OIo|QhOf4!?^tuee~P0S z9BL$IF1`*cOx}83=;xnli}k*sx70^?qCRS`U|#;`)o6V~27xK{rUU)Kpl&f$1D$Vu zS=6&{Q90rl+lF$YQ5g6hBAZ?I{}3}VItU2$|G>%R3MP=H0jYzgj`JN$JHZt7C(<^W zn2{P5gJ-T{oM7v{O>s%k=N-E=TDVVQ4|H$N+bo1fNn^2(^ zRvk^oU@Q_b0$#nVm3+VbXjOt@2+>)v<>7b8oZpX6PGNM+fOkKuKeRmas@$>pPj%+q?uPrG-RU+aXN%V)6!HYkHI4a}f&QFH8d2{Vd zAXx2UMc;|M(imDAl+KuFx0}Tv)r^^H1^@|Se7Wf;WB4((v$gzqvu#>@W;i;HeO@{W zq$9*BqHoU^|4#JVh(N=Yah8IMcp#nujByK4JM*T4#@Lk7yDFnPp z$jRU{OkL4f^^9i0*!-CB&3|_*eNAejj(g`sV|<}$@GR5vV7c)t{ixRsMJ&xF2LLQ= z{Q-{XgT_1J{4g3*!i7S}_ zHAhlTDfQ#J<-<^CMXfv=>|}pXHv1q=DwlB+5t$a8H*c;sa>c1~JfrKjv?5uP3uM(L zYsh99|gQGYX)V2^A8TwMgio-|W; z#4 z@$iWOi+@=rG8*NrRtBu)GQ=9m2kwu8FqW;YmItlbj}Hu=!B}u~oNz?km@;MU6Aj+MZG4a4V0{_r!#cq z=0F&?P@feBd=KVGXfEQ?gs;*Z#L=_BSJ~mh<5R%Cou0UTb+4zmnBnh@Yn8}5(?qxD z${xE<$G12~-O1CCW)RJms@zjyJIj6QKFi)}Ydidf6z9lupowG~{E_g(z_yA!nTklC(Y%Xk(CK$o|M9=P0U^eOcM9IFE(7EU?Z^?9-K} zxY=!VZjPcAgrJo$d5tG8>nc9lGZ$+Gw_%5Qjo5bK7`cIx+T}*K8g3GeK>!PW8EbW~ zk;X@?^P}vNfc@=n6{~YtWey<)!?6m_rlqt7u<<3KOpV+6YOBm?39mMRc!515)GVPrq4M}*l`(63PL#!m)B1oW$VYkk{4Vv~SL6q?82B|uC4uK#;mb<3!4u3H=w}bp zQdsK-a}L$W7rutwfY>wa$lIkOEeu8}&YNNgfT|BLsj5)50#(Y)G*Uhyv{AmpuE@7Eu8YyR<{BtKujsq4ic#(P zCS$acWT}}(ZHpam7j+(R#U<;QHtP$7F=K}vv1~JG?~=0J+BeknwvdGn7uK>8R@1=R zX+p%<|6|!eZ;9rJ>C{VdmLGL{VioGvoM3uy)owox3*hU>!q(Li$aH4 zw*pN`Q6ZY6EIA9!lCv%-K^>Spf`C9H{inJ9r?&*w zAQS(tLIGLouK=DYzTegbVB#RU#&4!)F^y;4EE z9aS2dzB5RyVN8?ZRUuN*Jq9MoJB!xd*K@5gx_9p(XqRA)!US(^j)}IQ-FnQ^laW@Q zD)(`nZBpAS&%nX!5`{vuBR&*i9;IL*F34~7usAP#|JP@Y!%m|R>9!eSsm;DfYEv z|8Qe5F(C~$n5)>dJn>P=zD^`1A5+dc-ocCBhZ+iEA_I_rZ$Xh_ydks)HYymnJH%Lm9O zsQPl^`BJ{6DZF|=;w=fh{4PuX`lXDeht|~d&M=N&K#rA%7#n}0HUDq}05fIbfiMj# z(th85Zut_t!569NRrNDth`VqwA;1~u$U(0kwl#Mr6~`|aleIG_mGuMX-|P*HU&XHb zTwg_N=Eey#ZGYm~0d~!Tqx|g5^(`bguyBL(Rk-W=q1ms0qYlIV>sR{xIa-xX=%oj~ z=(`^Cw&0PA2LksjT`mGP;MH5_ZSe^2na_U94iBV$*(bU;dX>@UUB1P^R%$XGB}*jH z{HWLwieU;p#(d)qbnS7Zp}7BC_lefKx!moK7qM2 zu$@O*KrZ-R(08p=KKgZ!+IC&$wpt{Ry4j*^f|t5H8 z&p=^?{V{bo(B_`MqaixYQRF0{{l_(L`)}f zk-hFl@T3xeEzlhGHYT_f3vYJBqOrj3PPU{-y{~Z<#2S0FEc-pcU=`(V!x=R-CgzWy z71}8&wB`94_fEqOH189?vI7NH&0L+;S5lZEVtY!XdQ4Ao{qoUVMv`MH2KHauwdYBg z{IcbmvYSsLmwseLR0T3;!Gimw4a_$0y5K#NC<4oeAiv&RQ`5Eu#TL4oS?xb~zNs~u zC1~AsKvT3(bfo6g@NAM1+&;FqRlBJOEdDe<=*V{4bX-USNuu48JgZ9xcruXZ6l zlVQ!xV~`jI|Ef0b(;vON8~vt-m#$xN?imEb{_(CzUutvWh@+xCv6C-P3z6Dqh$`1x zW8|6e@I*Q=5u}TfV#iJqXYfECa!Rq~rP?OF^*}t-*&gH284&V;ypWuR*QEKBwTko0 z+LI7}hPBWG0=$2DB8yQ{bOkPMI9VW>tAbLRX;zYIKk)d=TXCoj2jP|~8S-o)E_INc z7*|@I5Y)4vS=I^sQTU=AEHICEIVn*hZg6fj# z2*XU`z^qgKfJ>v@A`L1%+ zC5awM=Fl@q_=5$`8r*Jg{0zx-;!>@711~d#z=n?cmIcfPx!itswnWw`sVoFk(QWf% zFN;d{R%4H0v{tH!Na&`jzeiyJ$-pG8=ed84hY12z#^!H~*uVZrT}Bd7H`kgg=AqH5 zUpdpjPtEo$TG_-*@sV*_PEJWRJ_$KK5w&bGWj!+WtzY6_f|Kqu6iWs<8lj)W;p-v{ zc9_B(6662_7anD!~FRp%I0)YkEY6olZ8@Nd(^p51Y%RSY3 z`i_6R>wW_h5)pY8?`uSM-LsX2q!62GlG0Ml94Hu#H;eL#aaATdrskOv`#3YUb8^m( zicTHcKZ52_%#gIpo>1O!0h3Q2s<@G~!x^79`5J|hcX#a0B-p`*nRc1~N$)UEK%bON zY#D)0?>MhAs88?NqU;?Jq2z^y5cTdRIr()o%M$V!P;eT47zk-P&1biptPo%%Osrb#*9sA7R)j zJI4kqbbV4>DjnyU?2^o?GWGUdVQSPp0z0!Wi?!^W=B4<=ccbmfG0$jTt?9Q&36G_i z#djy|tPbd4tnKW~a#;M>s}cz|Wo7@K1A7>r%~H(6leTycx1RJ{)HaX}oCAi)^m}`5 zp4kjMqUbSgWvXavV?)2+()Q7z>h}?gUFGHA)P&)`~_A_6+FS z&fP)HwZR#;h7NhVZ0d9uM7oz~ZTM ztwq4rDeRE3zwKLufI`i~>w`umpa*MBZhx3gxq#>TV}vvHXWtKFs`)l>ed6U*X(yXz z*k$I`3Sz%3OB3B+mFxq;lU^=WA%b-R10~?g*0X6a8uJXWa8c%~m%vkh(77zbUzugN%h1Ua*28eq z)H}QW$}lR|H(T8J_$$!iBb?e3zC}N71atjI^Y=+4WZo7_NC`Szp;FqYw~ehA1uEo? zI;?ba+ChVmL-^>@L)ulOH~=Q5?#WvV^-B#>>oJXpMtk6-t&G>I|I!i6#g#5dF$CxD zgSC5EHieib61EWM8GknHTY2Aq3aLj zANvq*Lh9aggq?v$^w_QIbAvGYA&2X(WZ@;@5bf2-?xA7do=~@N3?9ECaq$_R?e=TBJz*~#)lp`+Q?w|{s zgcKRKE6zi6VCNSvdI2nGVS_*W9P)b?e#xcuSo@T33k6^47g+nz;0(b5q;`eBEbO|7 zQQ$2@4CQJek-G#+y0GIpWKAmyki#p+_x*E4!`IV?;Ie*^ynzJONVRS5B_&UyHyPSs zN4E$!ohomrL1|z^`%gKX7f_?XSQ@^hMxe)A^i`mJAw1xQ*#b~O@kzg0t8#DfMzF$J zE$TVeYam^rvuEMP`b5Yu*b~7uhEm6uAy)IbcDT)q#cCi+(Y+!^krC|?1wP8Kb;&pJ z5O{4wI+QRNo1%*j!z5Xmhy`JeBnCllV@cyxEk99?gH!|(eD!eZG8}jcOF)|@O~$X5 z$+Rig6a5+NPk<}(P#FEZ8+Y_>6rwFm%WElEF&R^E>_8Q>C)yK1XEs!w=3I-}s`Rxi zKIbCh~3-*F;hlaVR=YN1@Y2`Glnn z<9RNzU#BIk@)pV2P*u)vnA53)=J>;VsPOrkSC~qlJnDgwaUU39Ur%v54xH$@C zRFT~!b1kP#$!;N52%?K;eL&E#Xo6Cn;7IAR!k+GJWD(dZ_mI@!p@1L_|&a1gMS=8Hu?iHPp z*NU%tUu7)MWu2Kds;}k`5Ke;MW30Ee$WW(cX_JkIF3Je@Uc5V5>4cf5kKzw$?0Afw zl>G2?NKaO~^fHmed19m)$)46ItBckmopewKdO#OyILFFiR#wKcYKT%k@U1#|oTq)5 zbN`uN0;#gq|NPsQiyAe&%Xo!&58js*L1k+kvD}4bv-nQ9Q~uD-B6xkmih73`td@Ol zZ*o955@P;Eehl$AG!tYp%2`M&wMBNl*gMme_ky)ip`*~&UcASGW*jjS+>_;ib&Ulq z8o0_zuiMBzwT%_4ojJJ^n%AvQ1+Sg^*)xW+kF-uBTEUJK=#)=P0=J(^rbh>}gdzwB z!q_5B``j!-LR53antz*iGESW^Ci2_fOYl^5Q)PED_AoSYc7{eZ2TpU7D*7GeQ9Ia@ zGVWF_Lv$tXN3!=o^ize;A4KYnio1TJ7eM?4sooW6tc((CqK8hW=9jWB{lMa{zC*ox zBDE2#flb()^mpjH{mCa!#7$T=feq4Oa(Q{v6iiGhY6E*bt^SI6gQVc8b!h&gnGF2L zfKuB&`WShI#hQjx{9*vIAOz|A50E^i!}KwRo2HTLd?Eku$WcqMaoS}41WV;^pmR>? z#WWe1tSS8{|Jl)*7f+NIkY6srbHbj5)kOK1L^H~3{k=lbUYb;EH@Wl{HyEh6v;F`< zxjoCR9{ee%$9WNP-rMX@DG&+Wgg|E#Hb2NHZjj;-<=S-PPKH7QTM(iA>gp%FyIuC- z{S`O{9Pk@f_EW#8_$6*Dy-t4sY%o(%WHD0L_uSO~XrNwTzgaCah+Nagt|bfKGk1*V z49=@?6mp~G5nE4%jar`vV*vHjoCk(v{+$YyuQ+@08y>Gp@$k$GPl&#l1imdq{j}l zN${qoyT6`)+0hJ;#n=7cuv8T|ULuS>awRQ8zv{rTV_&z7H3KZ~!*xb|ir%CD3fg3r zq$hcNia8qVos}C8tJD93u)1sw9@oL-Y8rSgXWEw>6@g7)-U&BORn!AN`UwR_uUlz@ z_#;$MKslfm5oK!1VT*wW7&?r^U%7|vW}|1Q1b4r6`)4L08H@nyBnR}dUw{WYeKL6& zz_Hf+3dN33{$yut18>5v+aEwKU9@0kr1K7+IsoCW%e6ZBSU8j&oh=$;*)$bN@S*hA zkS*Qp(VSm3I)c5&V+mRr%FCD>@v|crJBVS%SfP)B(T0oXHKi&6{P^~KY><)<+?<43 z5ROvz)!2rKdt37&Y2aj9bxWCcve*u)A8>;gcZ$Dtc*up>7iQ`81=}L#xWS4A>A?2K zqv}_kVo5Yu7?fZ_2U-pNHC*doz+f{7o4H?C)J;~5&`iqb`r?0&_2rT+vlJi{viyvUGgodjkfY#4RY1kiN_Q=ELd~M@?#&4l0>OynpDE~^CuYFVg zBAJD35J)1G%j=aErK2!zxpeJ9tIPW#!gZ=$8@0_#V$dGlUbpHHdomnyp55wQkr7v^ z{nE^$OiDMy!~7hSbgUepbkwpNU1BZv)0f26uz?6~mw?O%NY8S&o*-h3J4KmyC1mRG(XTxV{7+&n6UrDQcG_T5zMI#0T=Y{O}D-qaRSm&=uiy z5*qf7!CRgLC=k|;P)qE1h7GO`AMhL1cg~FzYWF$2N<-@-y+${am~B{i*M-mcaP(9< zW0Ud|d=F@;H^oVw(ztyvFMm4aXN4r|;Yd>ihMuwn-`%nWRu4$TizZg*Un8g6_n~Im z_o=45lKZUAy!*cW@CwTOJRk?3E*jiqsVA5$4apA$EPm>Vsju)p*^QMsj2O!Vqki`D zPU+#Ss~k9b;gJm%@g}Xy?h_PrLPFeXLSaV=wEgT%nG>M~J8qESQ`hP!deMDFV+VDVg;K&o2QH78?k3rKvAt&k~1vHUvnw> zvxKS?#Q(^Z+*`og4o3az7INVeErs>PR9sLog#DSc*di>s>H;xY!hJ$NCm@fq4^=tLWea z=w~SrT1OvKKKT*+R4e2iUhE@SaGO7)!Y9OxR{jwcf>=8m_@Dr4{122-&|DZ zk7IqvJ^EZ~4~u{HEQLw)21enNExrmy0ESw1q1~Ck(^G*uD>?-)T7Vxs_B-ae00M0d-AnYQ*+Ld;AfoQUm+JgrbaO1a9WVN!t3#0i~^t zlh*~YX0S2CB&x_%%XJC3w^A(?Q=Jbq+lFAj!9raaCBZ-v_RV&iM>goTCd9uoAS6e} z(kl_wmzo!}3{Rsj3}IKcutri+UpO{nR(fk7v3{auSSGe(JIemU9!Vzk-qDMg=(xfo z0!;mBPKaZK3WX8lvaroVg(ZnV%bX*G`wXt0A{QgDpAh#slEeGOE0_|FD z|Bq*nhQe(xWtjl(A3L~)U74jIfX-y!Q{;^wjzD&!!4I7ix%vA#U#X0-AUfSN28;N2O+{&MCUKN^qsayBNY*z}-iw@fkWrDxP_3xw_K*Z1wqx~Ph6^A$?g@oXe#b&N$YS2=2 zgW|aKI7Sk3Kv6obLIGkt4|-ZQ-g3Cu6tDHUQL+(P3iR|7+H@Ysn+u|jgC^Wj!}YFy z@~x1vhIh>jvm=<<4?~*|o`5mf+QCSN`qa44>=MqI>{<@Q^+V$&!c%!9qn~}{2iUkv z6S?fCbjp8%skmti`7_;+euN}mI^*Qctn<7wBaJ5Hu%W!ZngTZTcCNAvO;Tod4F>pe zl@8e^!616gOutYY@hBS;??hTrUZI3L?IL;@^iGT1I2K=J!G^pj*Mu39s0lh;unEi& z2M2qbFY|X(Ds1m5W3SFS#H20AD#W;U{+~sNamjolVsB6nd}6fUKNt8y z_V@%J?-7+(t#eaPUD!T@zhI(mg$!>9KH)J4gFB!2KJmGQ&8bZF!6MWkIv`xYAJq59 zGmb-){Y1XOEeFtWsB-2hgZb1-AEAlcrNHtbf4E~g9AtG6(Y2$iz_72r^ zAym4ylyh6D^R;d9jd=T|tm6GGHW+yzol_zJolhluV0^_}On!F?K*Stb)8`BSzm~L+@y)N)-;l;`MMh6b+faW<%OPWRfPE+xWIWz{^ z+jkHn+Haae5o-5<7v$e|oDQ7XOyfki9L$!B83yq~dkm!v{YJ-*bVELJwAB(nX-hQ! znCjVrlbTCWmyn^KnAFjs;=f;^78;w23r$w!so+CL(wAa~Lak>Cg&f3l2tf3 z3Qnu-?irO}pU$&P!E`WXFw@+#>Dx_Z&P_m9I7d^dQjcYwm!+hHR&{{R6o0813m;s=zprEvw(zNX9?Do)k*%ez*k^Z5oI z>qXy|l%OIMpqgj)gty5@<79N)`%Ma7YS7?>2;aco3Z$lGgc#MJeAAeZpR%qq`#;`3 z_bLAP+DsILVUl@hFmFj4>%DsH7YN;~Tg3tDzI{Rk6jP#=^)C`+cb|nWr7XSU9agok zDM0PkhzrG)#jKo(PoC&M2GKf7bayjROY6?n#ye0LcAaPoT_SR%l z^XoK{pY}@p>t>R!d|R_C;7)e6UzHIS2-K`9v>b3il}J3n(F;Jwg8nRpNE_AxA#~q1-s;WIGW0@|KVv*Y8<$Wxl3^J#3P-Fo=NRz{QC_Ue zo;B1^zcuN@xwmbPn1zQ?2P}Cq7u;Na+oeU3^Y|iNY(eVtfwrm7Wo(Q5 zzXdXUsg*s9|Lk4u|4L-!|AWXpI_Q9%Qd>dhH!|uO3 zy@;YSP;qeSYRum!nvK>?F4hCa7_{J8YxQv6#5Ji>Vv@b#kBH6GCT(%=R-PCxY`#S+Fn}`+?Fhps2yLi)$sa<7ohueI?G*f7FKk zr~U}TX)~2Iz`RqLX|l<$TkA}PNbNel6e-#-r@NH($mrE1D4QuDzW<&FUd3z9@xEV& zVsCQJXkXm2JfX9?BDwA#JSEWp!zGOdl&QeGgS6y6n{DlZRo;0%7beJRje1ym_1EB6>y4^?$Fh7MX zTcV@;WR0!n87mWTpZ*+*NgKK(u^6AI2VnO5ZKIAmC`JCCF0KMBsxD~bQo<5TFU!&) zEiEnGAt*`+(hbrLE7Bo#>5>-dloX@|q?BA(8U>LQ5vBf>-|zc={=Ivjotg8_oco-+ z=RSANnHl#jd4wFpigCmD#)8GEk^`n;nLc821zYcIRd=$F2%l$PshAkVK6m|+n==u# z1o}FwE0oql!*wJ}S9(ONS0i9-`*q<12chBd77yiNpW5gBc^pniOeSigg%=M)xci5# zr5$ErLEPeZyR@m3lfz#Q+LPa%*#{>EMLiiY%f{X5Bb2g`Fd|Og=b)a@Azy^ zLWliJJ%9Of@3cWF|0mAWob*SW%;u+K9%MvhdY8v&?z`R&w3r}c<^*Gl8VyCDC)obfKdpH-Emf~6k>&s_e2-_@8 zw?A3^+1YbC+;h+sg6;QBW{t+%p-OPEW}KKa=91<1y@wCG_9a@6gQ8T)-0|C_v!%xY z8mQsnE@VD^VB(1nydUPZeV)@v(!F>`W}XIyed`jT&2@-WKn5O8zu)+R+9&(#2BFRTTIWsHuK?I1vcE1+}ZKy`$Q-R*iO!DOMth%R#JszW+om=AF{j@ z7O|<08pK)HLa4uPZ=F|+ANcgbwfM`ao~fkq^!H-S`Hk=B=-t=XVU0lOa(Q{2jffLa>!$0vxIHp9fMoHEXa!BpXvOW1|pjM?%IU8^XY^g zW|sQ}TZ9UZM_}ysDYM(P1J?FccZ9$ zY)8?c81J%4D@+t^T*^Y z1;U>UYix7jY;sta zU24u8a+I7&H9U$(K?htLK7Ju$YkT<~@hXbvOj_nrezVUiAoip(b`1X6_gH8Ho4a)} zc5*h}bkOP&x&cYnOA*yPEIO^I{$7-9Vk6+!`aC$o?}-v$OOE4i!U1bd=t1h&Ypw?_HCu*UY$ZvyInOhpweM!?3>T`2* z*bZzxGd~P{GY)2Ah@?!8A;*_h-CwG!@XY^~w8PZ#d~5}5S|H2He<66F6M$op zU2l}9Zwh8S7!z~1{v6;wmofMK``FA=jF0JQW0i-xme@iEDEGsmF=kHZbO8z089AgGb`;ThWNn!d$(Y{}14p@P#hR)MVLTVJys zDfQeV8zO{_>y@Bv;;5<1shT-1D?fST7=jLd3q>ni^4PhNA68QVytk<$$wpz(kM)z$ z+nwqfFJ01B%s;0TXRc)$G*F79sV5M0aTq@useS&KyR2wx@2kZ+J3Lx24{l4Bh{zmL zfqo?n>`Kz)YBIA6ALZ{KUmuU-K*wVKs1t1C>`WxXHW<4_$$kIRclnfTUhgrknnB!Z z$IptZoco)@)NiE4^e7FhdL_2zCB&Iz>Iy1G-qRevTK4I#@#586rgIpoA|IPC($_Ut z6;vo|8DQXnW|b7gITQpKa(ehFR3V<A+9-cG@0IL@6$_>*NeZ7f{9|2D9kdJ*9XtvC*(qQcOWQsfQ@&A>uF1 z`CisHt|QIwHe6n2zJubias4o{AWn{KE3_UFYq0n={`!sYtMW|$se*Iyo@KF?Zf)J$ zFWz0Iw4T`An^5XJQ}Tn?+*2VCDrn!2{Dt$|>7!lJs0lJ;V)m9#LG1}qJN@Q2S;0y| zxqh~LJ!~YV_iY(Xz=JCEX)f64^z=-PUW;a}Y53&N{T^k1w%;VVWBYxbdHo@Kr8zqn z!TY=?y0I)5?DMjyW8Nax{HB<9y4+e7rayCQg66&Sn@K63IpSzKQjTy(+{|i1MTv(W zqXw5Lk%NS?D7GPa*;^!CwB1__RrKHPFu@xcgXav~M3r@edv*wFLI@_+@!3U8tfTj` zRyUbktncec;69ILbpFyj-@n;qg;XAN#FXkcjB*b-&XUIS##VT*eMfgQ!Y8blPvH<_ zhnR8kDM##Y$@CJbZQue_KOB7nldx!DVEG2Rf<_h?149z14Wb21S8##z7jy{Sc_s3T zY03)bnBL~}&^JXy!Z!lC7LrV}Sg zx)lG^w7JwFFCoPxW@;Xy!6tZKh>|+p%6@t`M@k%Vak>r0aQ9)bxEXV6Gcl2*i%D54 zJd~B%;4#rEewAAQ3*|7J3v`UAC7_-Wt-^H)Su2S(I#KAym=--0=+^(j?y_LE+0-cr ztECRF4M3F@aizBEO?@()QmLMH5T05XqA3YdZiKa_FdrqE!Hy}yX@JH38Im~Pa>BGM zq-ny#Z6om>4m16y(?hMEk9Zypl8(*@H@4;*hU+)QCglx73?}F&dCn27X2Rdh>lY3O z^A-d&QHGUeFT%BI6t$CTtKv3`WS!`dirJ&}d<2st1(k+gD~V2%nsH-L98?QUjEK`= zqgV!_G^o0yyv#tA%4wL7t3_)#`OXibrQWV;LkdRYh`YbNJaM&|TFAUZQo}HZJ*tC$ z!inFg>e=>*a%Me_g~THC9p;;+lt%|P*aaLrQ`!%uyDI?yj$4AO{9JVI1hpoM76~yw zN{V$xBSYc4?=-+W6xm&o&&{$wHxDO>rg}CnDNf~p~cikVp4HO zi`|o^9Nr9cIDUpGZ=_k}tLVw?;v_xIPc$!PR|$-(e$nlIPo^oiqnQ$-z|?^fK}*Z@ zJhD~-BsA~bH+egca7NlBkP!6yo7D`;`r#0lp32|RTa??fyFL5X9_E*Wm*TEAlBrf_ z*}C73Xwda9miV|~OtQCkhrNgH5^s;b`;yi9P}GE^c$ZU7lNubR;QK0rURr0TYoE8$ z`6E)hkW~8&^h7doA^7r^;psk|lyE`lsIHQ?!>0mcX1N&dp#fGIAwNl{#P2{a|xs z`g1H1um}`(&{ZShj3XlGYAu4-F>mO!eX3)R5loqEZ-?zbs+*@5-&h%eDExACq`kRP zy0rJYtTZ2wL9cwDoTp70)p*AN)r&^$k0gq(iZtq>p1P)bSK zZb6?^?Od?gouHx6yWrI?vA!K};$^D#c7_#2=?hl+%QARp|94Uo^XW9!cBU1*8*^}1 zk58N4+$a?lpBz338#CK^2Ph(Q3V7gTRF92hE=jS~*0+~@-8his=N~U7SphqUbhd4K zFg#t+I(Oy`PWFRgIkym%56Dk$)N%_D$CNWk$0X{jIVyV!;XQ>k*~r~x#zNxHi^t?@ z(&_;m9af6#&&12#yn;*3(M>o-j1K+&5t=W~5rZ`|BC+^w2PjLl{fXE^^{r+zqN=u= zFGi%m>3;Rjn_6k_(q4oOQc;I>=idId*(X+SC&Msq(LZQ3oX(O7TdX!{n>ttRexURr zJrjP9C+DZMz`I4#(nYg$i*TE%Y+GkeN1339hfeQ>S}PUo^#$R<{xt4AQw_5Z@XDxt zQ(9KBQXyvFOkawxE;%DO2ILyEOGS1QI6$;7Vy0V!^2O#KNcaP*{Ux}lVUjN@x)!%n znmII5OvU9h8$aEa^6e$G@yh~C#U_sH<+`&-7nAniyu0imHZVx{dz;mwxJKJv@ue6@ zBW!nE-w@%w#E#5wKFZ?YDsh?;yO^DKXx+!8&T=J|?<7I!C+={gQj6(UkGqv4 ztQMj)1u`di3o*B?V3IVJj=i)3zabR19d9(ZLgxhNKAjQFF4H%$Z9P5^Z}@oc=^b|0 z`}Gt(9^}eWr5t7XMPzSZAk9T4ym#;B^}VlKTBQ|vD%Vc}rgf+HPcObYF@ivWX+Pz_~_B?k%*RRQn~Vj6Up5MSSC%1kX9?8>dq~wV|%97`ZjF) zXRF-?>b~h7C>xO|5l8j)otrS_C&xDD^M0bQ{ZioR6zVNsNwG^^F={z<7O0`PHr?Rb zN%ws&o0=yM?H>yVreB)okVoIR+%cG&O+NiyG1AM4dTiatU25aj>__A--lY0Ws0ev> z%#ad(`UjFl`R&L@^7LJT>P}#425hd-J(K4p^V=sD;RsfDNUynF&u80`k6){)-ZXUL zG-F8Mv%UdkCj1 zdE+W{IvU}vb33lkAp6~0g?bWJZhEO%P%~uScwNrXw-#KxbA!r!Tm5}&W%F3m0gIj4 zZ(ASy4dt5OOzT}ktii+j;`;ClEZs|N?kuIgrL0#ql7Wvi{54$cz7sqoHzUR~^o?Vo zY-=jDB96SD&}&zB5m-THGtMe4Q++c2R<`k#lzRw*{Y`$FBrk z>h(l1BNX={9$B7Xyj+6Mwzw8CTu`F|PjGQpchJl$v4pLjwI{sY$gCMD9A?RheR=N} zJ{9Z;tkNISVIXk)8=GZ~vFRDq4;tURaZy@sMvr`)maLojqL6}dL1}3o^9*-LG)RG* z6tkj~DN?Ti0Xm}}5j6pac3{`&0SZPq{pH_wlF#wrJ2w*k~1JyF1MKnPAEDQWvmiaZSp3GwRK1%+P=+`a}37XAyo1Nx?VMaCiF@c%Ym zFfc@~;nOv)K$4FMflVYk{MusvHDHm}UmzI(U4a0W^Dxkb-j%4yg7!*OWD6nqN2Ms3 z$mpt3YXKJ+wIu@x7dSz9CVxe&@axMS|7iUgb4wfaB8V(-3q=I#u>tO&BtVBYz_OqcF1K&_uAl|3IN-`YKUz7#)x?GW?LBvReI)odx_Qu>s;3LO^^OLUYYgyr#DY94!9hHqrod zOAw%883s}dy)yBASr~rpZSk7wX*e2m7tmgZ0Kf_iWEgj)b32;`*jeEO86;k@GOus| zp_i0bDBD#S$Rzn+apkHw$T{s_R<)Sq3MIG(136^;6_Z~5)4*l__vYAS|7|1yme#~U z4_{uf((4kSvivI&QBC*9($&-j#@8u9>qTfe6M(k|AcLE6; z`k<%X0OPpi)!=`b_`iM0_X0mAB>ptOug~%SMxrQ~vL8L;naQzn{s{Te2Q~W5+NS>x F_djzcFxCJ7 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4da2435f42..0e42234001 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Jul 02 12:33:07 CEST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionSha256Sum=11657af6356b7587bfb37287b5992e94a9686d5c8a0a1b60b87b9928a2decde5 +distributionUrl=https\://services.gradle.org/distributions/gradle-6.6.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip diff --git a/gradlew b/gradlew index af6708ff22..4f906e0c81 100755 --- a/gradlew +++ b/gradlew @@ -1,5 +1,21 @@ #!/usr/bin/env sh +# +# Copyright 2015 the original author or authors. +# +# 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 +# +# https://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. +# + ############################################################################## ## ## Gradle start up script for UN*X @@ -28,7 +44,7 @@ APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" @@ -66,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -109,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -138,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -159,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index 0f8d5937c4..ac1b06f938 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell From 28b039fde3a526afa89bb3979a2cdd57f645681c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 14:47:35 +0200 Subject: [PATCH 067/278] Update CHANGES.md with: Updates Gradle Wrapper from 5.6.4 to 6.6.1. (#2193) --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 92cef39707..026d7af6cd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -22,6 +22,7 @@ SDK API changes ⚠ī¸: Build 🧱: - Use Update Gradle Wrapper Action + - Updates Gradle Wrapper from 5.6.4 to 6.6.1. (#2193) Other changes: - Added registration/verification automated UI tests From 5fcabca87c003089fa6b1d44a8283902d6ccdb25 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 16 Sep 2020 14:08:35 +0300 Subject: [PATCH 068/278] Data classes for request body created. --- .../session/room/search/EventContext.kt | 34 ++++++++++++++++++ .../internal/session/room/search/Filter.kt | 31 ++++++++++++++++ .../sdk/internal/session/room/search/Order.kt | 29 +++++++++++++++ .../session/room/search/RoomEvents.kt | 36 +++++++++++++++++++ .../session/room/search/SearchBody.kt | 27 ++++++++++++++ .../session/room/search/SearchCategories.kt | 28 +++++++++++++++ 6 files changed, 185 insertions(+) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/EventContext.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Filter.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Order.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/RoomEvents.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchBody.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchCategories.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/EventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/EventContext.kt new file mode 100644 index 0000000000..36de3e30a8 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/EventContext.kt @@ -0,0 +1,34 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class EventContext( + // How many events before the result are returned. + @Json(name = "before_limit") + val beforeLimit: Int? = null, + // How many events after the result are returned. + @Json(name = "after_limit") + val afterLimit: Int? = null, + // Requests that the server returns the historic profile information + @Json(name = "include_profile") + val includeProfile: Boolean? = null +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Filter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Filter.kt new file mode 100644 index 0000000000..717957fa00 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Filter.kt @@ -0,0 +1,31 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class Filter( + // The maximum number of events to return. + @Json(name = "limit") + val limit: Int? = null, + // A list of room IDs to include. If this list is absent then all rooms are included. + @Json(name = "rooms") + val rooms: List? = null +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Order.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Order.kt new file mode 100644 index 0000000000..05a8fe6d3b --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Order.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import com.squareup.moshi.JsonClass + +/** + * Represents the order in which to search for results. + */ +@JsonClass(generateAdapter = false) +enum class Order(val value: String) { + RANK("rank"), + RECENT("recent") +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/RoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/RoomEvents.kt new file mode 100644 index 0000000000..83cc91e098 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/RoomEvents.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class RoomEvents( + // Required. The string to search events for. + @Json(name = "search_term") + val searchTerm: String, + @Json(name = "filter") + val filter: Filter? = null, + // By default, this is "rank". One of: ["recent", "rank"] + @Json(name = "order_by") + val orderBy: Order? = null, + // Configures whether any context for the events returned are included in the response. + @Json(name = "event_context") + val eventContext: EventContext? = null +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchBody.kt new file mode 100644 index 0000000000..08d4c0bec8 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchBody.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class SearchBody( + @Json(name = "search_categories") + val searchCategories: SearchCategories +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchCategories.kt new file mode 100644 index 0000000000..cfc887ca40 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchCategories.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class SearchCategories( + // Mapping of category name to search criteria. + @Json(name = "room_events") + val roomEvents: RoomEvents? = null +) From 04b41fce3020196cfe9f2ddecb265f6e7639cb04 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 16 Sep 2020 16:04:12 +0300 Subject: [PATCH 069/278] Data classes for the search response created. --- .../sdk/internal/session/room/RoomAPI.kt | 3 ++ .../SearchRequestBody.kt} | 6 +-- .../SearchRequestCategories.kt} | 6 +-- .../SearchRequestEventContext.kt} | 4 +- .../SearchRequestFilter.kt} | 4 +- .../SearchRequestOrder.kt} | 4 +- .../SearchRequestRoomEvents.kt} | 10 ++--- .../room/search/response/SearchResponse.kt | 28 +++++++++++++ .../response/SearchResponseCategories.kt | 27 ++++++++++++ .../response/SearchResponseEventContext.kt | 42 +++++++++++++++++++ .../search/response/SearchResponseItem.kt | 32 ++++++++++++++ .../response/SearchResponseRoomEvents.kt | 33 +++++++++++++++ 12 files changed, 182 insertions(+), 17 deletions(-) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/{SearchBody.kt => request/SearchRequestBody.kt} (84%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/{SearchCategories.kt => request/SearchRequestCategories.kt} (84%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/{EventContext.kt => request/SearchRequestEventContext.kt} (91%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/{Filter.kt => request/SearchRequestFilter.kt} (91%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/{Order.kt => request/SearchRequestOrder.kt} (87%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/{RoomEvents.kt => request/SearchRequestRoomEvents.kt} (81%) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponse.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseCategories.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseEventContext.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseItem.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt index 35c20cf5cb..ab33249e30 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt @@ -365,4 +365,7 @@ internal interface RoomAPI { fun deleteTag(@Path("userId") userId: String, @Path("roomId") roomId: String, @Path("tag") tag: String): Call + + @POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "search") + fun search() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestBody.kt similarity index 84% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchBody.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestBody.kt index 08d4c0bec8..c174761b08 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestBody.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.room.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchBody( +data class SearchRequestBody( @Json(name = "search_categories") - val searchCategories: SearchCategories + val searchCategories: SearchRequestCategories ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestCategories.kt similarity index 84% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchCategories.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestCategories.kt index cfc887ca40..25e078b608 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchCategories.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestCategories.kt @@ -15,14 +15,14 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.room.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchCategories( +data class SearchRequestCategories( // Mapping of category name to search criteria. @Json(name = "room_events") - val roomEvents: RoomEvents? = null + val roomEvents: SearchRequestRoomEvents? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/EventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestEventContext.kt similarity index 91% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/EventContext.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestEventContext.kt index 36de3e30a8..e74faf85b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/EventContext.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestEventContext.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.room.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class EventContext( +data class SearchRequestEventContext( // How many events before the result are returned. @Json(name = "before_limit") val beforeLimit: Int? = null, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Filter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestFilter.kt similarity index 91% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Filter.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestFilter.kt index 717957fa00..25b361a2b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Filter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestFilter.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.room.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class Filter( +data class SearchRequestFilter( // The maximum number of events to return. @Json(name = "limit") val limit: Int? = null, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Order.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestOrder.kt similarity index 87% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Order.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestOrder.kt index 05a8fe6d3b..3fe17c69ae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/Order.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestOrder.kt @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.room.search.request import com.squareup.moshi.JsonClass @@ -23,7 +23,7 @@ import com.squareup.moshi.JsonClass * Represents the order in which to search for results. */ @JsonClass(generateAdapter = false) -enum class Order(val value: String) { +enum class SearchRequestOrder(val value: String) { RANK("rank"), RECENT("recent") } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/RoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestRoomEvents.kt similarity index 81% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/RoomEvents.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestRoomEvents.kt index 83cc91e098..ca2bfdc10e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/RoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestRoomEvents.kt @@ -15,22 +15,22 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.room.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class RoomEvents( +data class SearchRequestRoomEvents( // Required. The string to search events for. @Json(name = "search_term") val searchTerm: String, @Json(name = "filter") - val filter: Filter? = null, + val filter: SearchRequestFilter? = null, // By default, this is "rank". One of: ["recent", "rank"] @Json(name = "order_by") - val orderBy: Order? = null, + val orderBy: SearchRequestOrder? = null, // Configures whether any context for the events returned are included in the response. @Json(name = "event_context") - val eventContext: EventContext? = null + val eventContext: SearchRequestEventContext? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponse.kt new file mode 100644 index 0000000000..78294268bf --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponse.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search.response + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class SearchResponse( + // Required. Describes which categories to search in and their criteria. + @Json(name = "search_categories") + val searchCategories: SearchResponseCategories +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseCategories.kt new file mode 100644 index 0000000000..757c6c5ea8 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseCategories.kt @@ -0,0 +1,27 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search.response + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class SearchResponseCategories( + @Json(name = "room_events") + val roomEvents: SearchResponseRoomEvents? = null +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseEventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseEventContext.kt new file mode 100644 index 0000000000..3950fc7bbb --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseEventContext.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search.response + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.util.JsonDict + +@JsonClass(generateAdapter = true) +data class SearchResponseEventContext( + // Events just before the result. + @Json(name = "events_before") + val eventsBefore: List, + // Events just after the result. + @Json(name = "events_after") + val eventsAfter: List, + // Pagination token for the start of the chunk + @Json(name = "start") + val start: String? = null, + // Pagination token for the end of the chunk + @Json(name = "end") + val end: String? = null, + // The historic profile information of the users that sent the events returned. The string key is the user ID for which the profile belongs to. + @Json(name = "profile_info") + val profileInfo: JsonDict? = null +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseItem.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseItem.kt new file mode 100644 index 0000000000..248589cf6e --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseItem.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search.response + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +import org.matrix.android.sdk.api.session.events.model.Event + +@JsonClass(generateAdapter = true) +data class SearchResponseItem( + // A number that describes how closely this result matches the search. Higher is closer. + @Json(name = "rank") + val rank: Int? = null, + // The event that matched. + @Json(name = "result") + val event: Event +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt new file mode 100644 index 0000000000..236a93e2c6 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search.response + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +class SearchResponseRoomEvents( + // List of results in the requested order. + @Json(name = "results") + val results: List? = null, + @Json(name = "count") + val count: Int? = null, + // List of words which should be highlighted, useful for stemming which may change the query terms. + @Json(name = "highlights") + val highlights: List? = null +) From 051b431f1dd4647f25a101f3471547c8c18ee0f3 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 16 Sep 2020 16:20:57 +0300 Subject: [PATCH 070/278] Search api added to RoomAPI. --- .../matrix/android/sdk/internal/session/room/RoomAPI.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt index ab33249e30..c1a06ace1d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt @@ -35,6 +35,8 @@ import org.matrix.android.sdk.internal.session.room.membership.joining.InviteBod import org.matrix.android.sdk.internal.session.room.membership.threepid.ThreePidInviteBody import org.matrix.android.sdk.internal.session.room.relation.RelationsResponse import org.matrix.android.sdk.internal.session.room.reporting.ReportContentBody +import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestBody +import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse import org.matrix.android.sdk.internal.session.room.send.SendResponse import org.matrix.android.sdk.internal.session.room.tags.TagBody import org.matrix.android.sdk.internal.session.room.timeline.EventContextResponse @@ -366,6 +368,11 @@ internal interface RoomAPI { @Path("roomId") roomId: String, @Path("tag") tag: String): Call + /** + * Performs a full text search across different categories. + */ @POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "search") - fun search() + fun search( + @Query("next_batch") nextBatch: String?, + @Body body: SearchRequestBody): Call } From b521f3656929096d678818a2c44a67dc07f36a1c Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 16 Sep 2020 17:18:47 +0300 Subject: [PATCH 071/278] SearchTask implementation. --- .../sdk/internal/session/room/RoomModule.kt | 5 ++ .../session/room/search/SearchTask.kt | 74 +++++++++++++++++++ .../response/SearchResponseRoomEvents.kt | 5 +- 3 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchTask.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt index 700507735b..d3a7cf7df0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt @@ -61,6 +61,8 @@ import org.matrix.android.sdk.internal.session.room.relation.FindReactionEventFo import org.matrix.android.sdk.internal.session.room.relation.UpdateQuickReactionTask import org.matrix.android.sdk.internal.session.room.reporting.DefaultReportContentTask import org.matrix.android.sdk.internal.session.room.reporting.ReportContentTask +import org.matrix.android.sdk.internal.session.room.search.DefaultSearchTask +import org.matrix.android.sdk.internal.session.room.search.SearchTask import org.matrix.android.sdk.internal.session.room.state.DefaultSendStateTask import org.matrix.android.sdk.internal.session.room.state.SendStateTask import org.matrix.android.sdk.internal.session.room.tags.AddTagToRoomTask @@ -195,4 +197,7 @@ internal abstract class RoomModule { @Binds abstract fun bindDeleteTagFromRoomTask(task: DefaultDeleteTagFromRoomTask): DeleteTagFromRoomTask + + @Binds + abstract fun bindSearchTask(task: DefaultSearchTask): SearchTask } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchTask.kt new file mode 100644 index 0000000000..db9e1fc604 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchTask.kt @@ -0,0 +1,74 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import org.greenrobot.eventbus.EventBus +import org.matrix.android.sdk.internal.network.executeRequest +import org.matrix.android.sdk.internal.session.room.RoomAPI +import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestBody +import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestCategories +import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestEventContext +import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestFilter +import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestOrder +import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestRoomEvents +import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse +import org.matrix.android.sdk.internal.task.Task +import javax.inject.Inject + +internal interface SearchTask : Task { + + data class Params( + val searchTerm: String, + val rooms: List, + val nextBatch: String? = null, + val orderByRecent: Boolean, + val limit: Int, + val beforeLimit: Int, + val afterLimit: Int, + val includeProfile: Boolean + ) +} + +internal class DefaultSearchTask @Inject constructor( + private val roomAPI: RoomAPI, + private val eventBus: EventBus +) : SearchTask { + + override suspend fun execute(params: SearchTask.Params): SearchResponse { + return executeRequest(eventBus) { + val searchRequestBody = SearchRequestBody( + searchCategories = SearchRequestCategories( + roomEvents = SearchRequestRoomEvents( + searchTerm = params.searchTerm, + orderBy = if (params.orderByRecent) SearchRequestOrder.RECENT else SearchRequestOrder.RANK, + filter = SearchRequestFilter( + limit = params.limit, + rooms = params.rooms + ), + eventContext = SearchRequestEventContext( + beforeLimit = params.beforeLimit, + afterLimit = params.afterLimit, + includeProfile = params.includeProfile + ) + ) + ) + ) + apiCall = roomAPI.search(params.nextBatch, searchRequestBody) + } + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt index 236a93e2c6..a14f78ee00 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt @@ -29,5 +29,8 @@ class SearchResponseRoomEvents( val count: Int? = null, // List of words which should be highlighted, useful for stemming which may change the query terms. @Json(name = "highlights") - val highlights: List? = null + val highlights: List? = null, + // Token that can be used to get the next batch of results, by passing as the next_batch parameter to the next call. If this field is absent, there are no more results. + @Json(name = "next_batch") + val nextBatch: String? = null ) From d599cab017d00270a91d128c26c27b5f9f213c14 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 16 Sep 2020 18:38:04 +0300 Subject: [PATCH 072/278] SearchService implementation. --- .../api/session/room/search/SearchService.kt | 49 ++++++++++++++++ .../sdk/internal/session/room/RoomModule.kt | 5 ++ .../room/search/DefaultSearchService.kt | 56 +++++++++++++++++++ 3 files changed, 110 insertions(+) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt new file mode 100644 index 0000000000..0976ceba18 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt @@ -0,0 +1,49 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.api.session.room.search + +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.util.Cancelable +import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse + +/** + * This interface defines methods to search messages in rooms. + */ +interface SearchService { + + /** + * Generic function to search a term in multiple rooms. + * Ref: https://matrix.org/docs/spec/client_server/latest#module-search + * @param searchTerm the term to search + * @param rooms roomIds to search term inside + * @param nextBatch the token that retrieved from the previous response. Should be provided to get the next batch of results + * @param limit the maximum number of events to return. + * @param beforeLimit how many events before the result are returned. + * @param afterLimit how many events after the result are returned. + * @param includeProfile requests that the server returns the historic profile information for the users that sent the events that were returned. + */ + fun search(searchTerm: String, + rooms: List, + nextBatch: String?, + orderByRecent: Boolean, + limit: Int, + beforeLimit: Int, + afterLimit: Int, + includeProfile: Boolean, + callback: MatrixCallback): Cancelable +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt index d3a7cf7df0..af0abc526a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt @@ -25,6 +25,7 @@ import org.commonmark.renderer.html.HtmlRenderer import org.matrix.android.sdk.api.session.file.FileService import org.matrix.android.sdk.api.session.room.RoomDirectoryService import org.matrix.android.sdk.api.session.room.RoomService +import org.matrix.android.sdk.api.session.room.search.SearchService import org.matrix.android.sdk.internal.session.DefaultFileService import org.matrix.android.sdk.internal.session.SessionScope import org.matrix.android.sdk.internal.session.room.alias.AddRoomAliasTask @@ -61,6 +62,7 @@ import org.matrix.android.sdk.internal.session.room.relation.FindReactionEventFo import org.matrix.android.sdk.internal.session.room.relation.UpdateQuickReactionTask import org.matrix.android.sdk.internal.session.room.reporting.DefaultReportContentTask import org.matrix.android.sdk.internal.session.room.reporting.ReportContentTask +import org.matrix.android.sdk.internal.session.room.search.DefaultSearchService import org.matrix.android.sdk.internal.session.room.search.DefaultSearchTask import org.matrix.android.sdk.internal.session.room.search.SearchTask import org.matrix.android.sdk.internal.session.room.state.DefaultSendStateTask @@ -123,6 +125,9 @@ internal abstract class RoomModule { @Binds abstract fun bindFileService(service: DefaultFileService): FileService + @Binds + abstract fun bindSearchService(service: DefaultSearchService): SearchService + @Binds abstract fun bindCreateRoomTask(task: DefaultCreateRoomTask): CreateRoomTask diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt new file mode 100644 index 0000000000..cf57e2a491 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.room.search + +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.session.room.search.SearchService +import org.matrix.android.sdk.api.util.Cancelable +import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse +import javax.inject.Inject +import org.matrix.android.sdk.internal.task.TaskExecutor +import org.matrix.android.sdk.internal.task.configureWith + +internal class DefaultSearchService @Inject constructor( + private val taskExecutor: TaskExecutor, + private val searchTask: SearchTask +) : SearchService { + + override fun search(searchTerm: String, + rooms: List, + nextBatch: String?, + orderByRecent: Boolean, + limit: Int, + beforeLimit: Int, + afterLimit: Int, + includeProfile: Boolean, + callback: MatrixCallback): Cancelable { + return searchTask + .configureWith(SearchTask.Params( + searchTerm = searchTerm, + rooms = rooms, + nextBatch = nextBatch, + orderByRecent = orderByRecent, + limit = limit, + beforeLimit = beforeLimit, + afterLimit = afterLimit, + includeProfile = includeProfile + )) { + this.callback = callback + }.executeBy(taskExecutor) + } +} From 05f48255a341274898b3da363146c784665e8695 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 17 Sep 2020 12:02:32 +0300 Subject: [PATCH 073/278] Move search service into session module. --- .../session/{room => }/search/SearchService.kt | 4 ++-- .../sdk/internal/session/SessionModule.kt | 5 +++++ .../android/sdk/internal/session/room/RoomAPI.kt | 4 ++-- .../sdk/internal/session/room/RoomModule.kt | 9 ++------- .../{room => }/search/DefaultSearchService.kt | 6 +++--- .../session/{room => }/search/SearchTask.kt | 16 ++++++++-------- .../search/request/SearchRequestBody.kt | 4 ++-- .../search/request/SearchRequestCategories.kt | 4 ++-- .../search/request/SearchRequestEventContext.kt | 4 ++-- .../search/request/SearchRequestFilter.kt | 4 ++-- .../search/request/SearchRequestOrder.kt | 4 ++-- .../search/request/SearchRequestRoomEvents.kt | 4 ++-- .../{room => }/search/response/SearchResponse.kt | 2 +- .../search/response/SearchResponseCategories.kt | 2 +- .../response/SearchResponseEventContext.kt | 4 ++-- .../search/response/SearchResponseItem.kt | 2 +- .../search/response/SearchResponseRoomEvents.kt | 2 +- 17 files changed, 40 insertions(+), 40 deletions(-) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/{room => }/search/SearchService.kt (93%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/DefaultSearchService.kt (90%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/SearchTask.kt (79%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/request/SearchRequestBody.kt (89%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/request/SearchRequestCategories.kt (89%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/request/SearchRequestEventContext.kt (91%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/request/SearchRequestFilter.kt (90%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/request/SearchRequestOrder.kt (87%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/request/SearchRequestRoomEvents.kt (92%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/response/SearchResponse.kt (93%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/response/SearchResponseCategories.kt (92%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/response/SearchResponseEventContext.kt (93%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/response/SearchResponseItem.kt (94%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/{room => }/search/response/SearchResponseRoomEvents.kt (95%) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt similarity index 93% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt index 0976ceba18..9a8b2e49e2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/search/SearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt @@ -15,11 +15,11 @@ * limitations under the License. */ -package org.matrix.android.sdk.api.session.room.search +package org.matrix.android.sdk.api.session.search import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.util.Cancelable -import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse +import org.matrix.android.sdk.internal.session.search.response.SearchResponse /** * This interface defines methods to search messages in rooms. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt index 5397b8d9bd..d615d9e35b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt @@ -39,6 +39,7 @@ import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.accountdata.AccountDataService import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilitiesService import org.matrix.android.sdk.api.session.permalinks.PermalinkService +import org.matrix.android.sdk.api.session.search.SearchService import org.matrix.android.sdk.api.session.securestorage.SecureStorageService import org.matrix.android.sdk.api.session.securestorage.SharedSecretStorageService import org.matrix.android.sdk.api.session.typing.TypingUsersTracker @@ -81,6 +82,7 @@ import org.matrix.android.sdk.internal.session.permalinks.DefaultPermalinkServic import org.matrix.android.sdk.internal.session.room.EventRelationsAggregationProcessor import org.matrix.android.sdk.internal.session.room.create.RoomCreateEventProcessor import org.matrix.android.sdk.internal.session.room.prune.RedactionEventProcessor +import org.matrix.android.sdk.internal.session.search.DefaultSearchService import org.matrix.android.sdk.internal.session.room.tombstone.RoomTombstoneEventProcessor import org.matrix.android.sdk.internal.session.securestorage.DefaultSecureStorageService import org.matrix.android.sdk.internal.session.typing.DefaultTypingUsersTracker @@ -368,4 +370,7 @@ internal abstract class SessionModule { @Binds abstract fun bindTypingUsersTracker(tracker: DefaultTypingUsersTracker): TypingUsersTracker + + @Binds + abstract fun bindSearchService(service: DefaultSearchService): SearchService } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt index c1a06ace1d..1a23f3a2f5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt @@ -35,8 +35,8 @@ import org.matrix.android.sdk.internal.session.room.membership.joining.InviteBod import org.matrix.android.sdk.internal.session.room.membership.threepid.ThreePidInviteBody import org.matrix.android.sdk.internal.session.room.relation.RelationsResponse import org.matrix.android.sdk.internal.session.room.reporting.ReportContentBody -import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestBody -import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse +import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody +import org.matrix.android.sdk.internal.session.search.response.SearchResponse import org.matrix.android.sdk.internal.session.room.send.SendResponse import org.matrix.android.sdk.internal.session.room.tags.TagBody import org.matrix.android.sdk.internal.session.room.timeline.EventContextResponse diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt index af0abc526a..77f8f38410 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt @@ -25,7 +25,6 @@ import org.commonmark.renderer.html.HtmlRenderer import org.matrix.android.sdk.api.session.file.FileService import org.matrix.android.sdk.api.session.room.RoomDirectoryService import org.matrix.android.sdk.api.session.room.RoomService -import org.matrix.android.sdk.api.session.room.search.SearchService import org.matrix.android.sdk.internal.session.DefaultFileService import org.matrix.android.sdk.internal.session.SessionScope import org.matrix.android.sdk.internal.session.room.alias.AddRoomAliasTask @@ -62,9 +61,8 @@ import org.matrix.android.sdk.internal.session.room.relation.FindReactionEventFo import org.matrix.android.sdk.internal.session.room.relation.UpdateQuickReactionTask import org.matrix.android.sdk.internal.session.room.reporting.DefaultReportContentTask import org.matrix.android.sdk.internal.session.room.reporting.ReportContentTask -import org.matrix.android.sdk.internal.session.room.search.DefaultSearchService -import org.matrix.android.sdk.internal.session.room.search.DefaultSearchTask -import org.matrix.android.sdk.internal.session.room.search.SearchTask +import org.matrix.android.sdk.internal.session.search.DefaultSearchTask +import org.matrix.android.sdk.internal.session.search.SearchTask import org.matrix.android.sdk.internal.session.room.state.DefaultSendStateTask import org.matrix.android.sdk.internal.session.room.state.SendStateTask import org.matrix.android.sdk.internal.session.room.tags.AddTagToRoomTask @@ -125,9 +123,6 @@ internal abstract class RoomModule { @Binds abstract fun bindFileService(service: DefaultFileService): FileService - @Binds - abstract fun bindSearchService(service: DefaultSearchService): SearchService - @Binds abstract fun bindCreateRoomTask(task: DefaultCreateRoomTask): CreateRoomTask diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt similarity index 90% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt index cf57e2a491..1937735191 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/DefaultSearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt @@ -15,12 +15,12 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.search import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.session.room.search.SearchService +import org.matrix.android.sdk.api.session.search.SearchService import org.matrix.android.sdk.api.util.Cancelable -import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse +import org.matrix.android.sdk.internal.session.search.response.SearchResponse import javax.inject.Inject import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt similarity index 79% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchTask.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index db9e1fc604..38e87a1251 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -15,18 +15,18 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search +package org.matrix.android.sdk.internal.session.search import org.greenrobot.eventbus.EventBus import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.session.room.RoomAPI -import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestBody -import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestCategories -import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestEventContext -import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestFilter -import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestOrder -import org.matrix.android.sdk.internal.session.room.search.request.SearchRequestRoomEvents -import org.matrix.android.sdk.internal.session.room.search.response.SearchResponse +import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody +import org.matrix.android.sdk.internal.session.search.request.SearchRequestCategories +import org.matrix.android.sdk.internal.session.search.request.SearchRequestEventContext +import org.matrix.android.sdk.internal.session.search.request.SearchRequestFilter +import org.matrix.android.sdk.internal.session.search.request.SearchRequestOrder +import org.matrix.android.sdk.internal.session.search.request.SearchRequestRoomEvents +import org.matrix.android.sdk.internal.session.search.response.SearchResponse import org.matrix.android.sdk.internal.task.Task import javax.inject.Inject diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt similarity index 89% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestBody.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt index c174761b08..000f89e751 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.request +package org.matrix.android.sdk.internal.session.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchRequestBody( +internal data class SearchRequestBody( @Json(name = "search_categories") val searchCategories: SearchRequestCategories ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt similarity index 89% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestCategories.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt index 25e078b608..606b7320e5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestCategories.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.request +package org.matrix.android.sdk.internal.session.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchRequestCategories( +internal data class SearchRequestCategories( // Mapping of category name to search criteria. @Json(name = "room_events") val roomEvents: SearchRequestRoomEvents? = null diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestEventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestEventContext.kt similarity index 91% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestEventContext.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestEventContext.kt index e74faf85b2..9db97295dc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestEventContext.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestEventContext.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.request +package org.matrix.android.sdk.internal.session.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchRequestEventContext( +internal data class SearchRequestEventContext( // How many events before the result are returned. @Json(name = "before_limit") val beforeLimit: Int? = null, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestFilter.kt similarity index 90% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestFilter.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestFilter.kt index 25b361a2b2..196d49346c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestFilter.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.request +package org.matrix.android.sdk.internal.session.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchRequestFilter( +internal data class SearchRequestFilter( // The maximum number of events to return. @Json(name = "limit") val limit: Int? = null, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestOrder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt similarity index 87% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestOrder.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt index 3fe17c69ae..eac51ad2df 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestOrder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.request +package org.matrix.android.sdk.internal.session.search.request import com.squareup.moshi.JsonClass @@ -23,7 +23,7 @@ import com.squareup.moshi.JsonClass * Represents the order in which to search for results. */ @JsonClass(generateAdapter = false) -enum class SearchRequestOrder(val value: String) { +internal enum class SearchRequestOrder(val value: String) { RANK("rank"), RECENT("recent") } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt similarity index 92% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestRoomEvents.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt index ca2bfdc10e..fef1baa990 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/request/SearchRequestRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt @@ -15,13 +15,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.request +package org.matrix.android.sdk.internal.session.search.request import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchRequestRoomEvents( +internal data class SearchRequestRoomEvents( // Required. The string to search events for. @Json(name = "search_term") val searchTerm: String, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt similarity index 93% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponse.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt index 78294268bf..b7debb6b1e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.response +package org.matrix.android.sdk.internal.session.search.response import com.squareup.moshi.Json import com.squareup.moshi.JsonClass diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt similarity index 92% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseCategories.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt index 757c6c5ea8..c931b23826 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseCategories.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.response +package org.matrix.android.sdk.internal.session.search.response import com.squareup.moshi.Json import com.squareup.moshi.JsonClass diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseEventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt similarity index 93% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseEventContext.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt index 3950fc7bbb..596645c355 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseEventContext.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.response +package org.matrix.android.sdk.internal.session.search.response import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @@ -23,7 +23,7 @@ import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.util.JsonDict @JsonClass(generateAdapter = true) -data class SearchResponseEventContext( +internal data class SearchResponseEventContext( // Events just before the result. @Json(name = "events_before") val eventsBefore: List, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseItem.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt similarity index 94% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseItem.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt index 248589cf6e..6c284b61c7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseItem.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.response +package org.matrix.android.sdk.internal.session.search.response import com.squareup.moshi.Json import com.squareup.moshi.JsonClass diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt similarity index 95% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt index a14f78ee00..61ed2bf3cf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/search/response/SearchResponseRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt @@ -15,7 +15,7 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.room.search.response +package org.matrix.android.sdk.internal.session.search.response import com.squareup.moshi.Json import com.squareup.moshi.JsonClass From 2eb60213b461ac4b256b78bf8e8d4d05862efb22 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 17 Sep 2020 12:25:07 +0300 Subject: [PATCH 074/278] Do not support searching in multiple rooms for now. --- .../matrix/android/sdk/api/session/search/SearchService.kt | 4 ++-- .../sdk/internal/session/search/DefaultSearchService.kt | 4 ++-- .../matrix/android/sdk/internal/session/search/SearchTask.kt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt index 9a8b2e49e2..68fc4e5d6f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt @@ -30,7 +30,7 @@ interface SearchService { * Generic function to search a term in multiple rooms. * Ref: https://matrix.org/docs/spec/client_server/latest#module-search * @param searchTerm the term to search - * @param rooms roomIds to search term inside + * @param roomId the roomId to search term inside * @param nextBatch the token that retrieved from the previous response. Should be provided to get the next batch of results * @param limit the maximum number of events to return. * @param beforeLimit how many events before the result are returned. @@ -38,7 +38,7 @@ interface SearchService { * @param includeProfile requests that the server returns the historic profile information for the users that sent the events that were returned. */ fun search(searchTerm: String, - rooms: List, + roomId: String, nextBatch: String?, orderByRecent: Boolean, limit: Int, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt index 1937735191..1f158ec41b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt @@ -31,7 +31,7 @@ internal class DefaultSearchService @Inject constructor( ) : SearchService { override fun search(searchTerm: String, - rooms: List, + roomId: String, nextBatch: String?, orderByRecent: Boolean, limit: Int, @@ -42,7 +42,7 @@ internal class DefaultSearchService @Inject constructor( return searchTask .configureWith(SearchTask.Params( searchTerm = searchTerm, - rooms = rooms, + roomId = roomId, nextBatch = nextBatch, orderByRecent = orderByRecent, limit = limit, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index 38e87a1251..52b4805e02 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -34,7 +34,7 @@ internal interface SearchTask : Task { data class Params( val searchTerm: String, - val rooms: List, + val roomId: String, val nextBatch: String? = null, val orderByRecent: Boolean, val limit: Int, @@ -58,7 +58,7 @@ internal class DefaultSearchTask @Inject constructor( orderBy = if (params.orderByRecent) SearchRequestOrder.RECENT else SearchRequestOrder.RANK, filter = SearchRequestFilter( limit = params.limit, - rooms = params.rooms + rooms = listOf(params.roomId) ), eventContext = SearchRequestEventContext( beforeLimit = params.beforeLimit, From c46f0a7430bd1391e08df762613ad84de635b856 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 17 Sep 2020 16:08:46 +0300 Subject: [PATCH 075/278] Simple integration test implementation for searching messages in a room. --- .../sdk/session/search/SearchMessagesTest.kt | 114 ++++++++++++++++++ .../src/main/AndroidManifest.xml | 10 ++ 2 files changed, 124 insertions(+) create mode 100644 matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt new file mode 100644 index 0000000000..3e2960af43 --- /dev/null +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt @@ -0,0 +1,114 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.session.search + +import org.junit.Assert.assertTrue +import org.junit.Assert.fail +import org.junit.FixMethodOrder +import org.junit.Test +import org.junit.runner.RunWith +import org.junit.runners.JUnit4 +import org.junit.runners.MethodSorters +import org.matrix.android.sdk.InstrumentedTest +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.api.session.room.model.message.MessageContent +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.common.TestConstants +import org.matrix.android.sdk.internal.session.search.response.SearchResponse +import java.util.concurrent.CountDownLatch +import java.util.concurrent.TimeUnit + +@RunWith(JUnit4::class) +@FixMethodOrder(MethodSorters.JVM) +class SearchMessagesTest : InstrumentedTest { + + private val MESSAGE = "Lorem ipsum dolor sit amet" + + private val commonTestHelper = CommonTestHelper(context()) + private val cryptoTestHelper = CryptoTestHelper(commonTestHelper) + + @Test + fun sendTextMessageAndSearchPartOfIt() { + val cryptoTestData = cryptoTestHelper.doE2ETestWithAliceAndBobInARoom(false) + val aliceSession = cryptoTestData.firstSession + val aliceRoomId = cryptoTestData.roomId + aliceSession.cryptoService().setWarnOnUnknownDevices(false) + val roomFromAlicePOV = aliceSession.getRoom(aliceRoomId)!! + val aliceTimeline = roomFromAlicePOV.createTimeline(null, TimelineSettings(10)) + aliceTimeline.start() + + commonTestHelper.sendTextMessage( + roomFromAlicePOV, + MESSAGE, + 2) + + run { + var lock = CountDownLatch(1) + + val eventListener = commonTestHelper.createEventListener(lock) { snapshot -> + snapshot.count { it.root.content.toModel()?.body?.startsWith(MESSAGE).orFalse() } == 2 + } + + aliceTimeline.addListener(eventListener) + commonTestHelper.await(lock) + + lock = CountDownLatch(1) + aliceSession + .searchService() + .search( + searchTerm = "lore", + limit = 10, + includeProfile = true, + afterLimit = 0, + beforeLimit = 10, + orderByRecent = true, + nextBatch = null, + roomId = aliceRoomId, + callback = object : MatrixCallback { + override fun onSuccess(data: SearchResponse) { + super.onSuccess(data) + assertTrue(data.searchCategories.roomEvents?.results?.size == 2) + assertTrue( + data.searchCategories.roomEvents?.results + ?.all { + (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() + }.orFalse() + ) + lock.countDown() + } + + override fun onFailure(failure: Throwable) { + super.onFailure(failure) + fail(failure.localizedMessage) + lock.countDown() + } + } + ) + lock.await(TestConstants.timeOutMillis, TimeUnit.MILLISECONDS) + + aliceTimeline.removeAllListeners() + cryptoTestData.cleanUp(commonTestHelper) + } + + aliceSession.startSync(true) +} +} diff --git a/matrix-sdk-android/src/main/AndroidManifest.xml b/matrix-sdk-android/src/main/AndroidManifest.xml index 52238f824c..eeb944d955 100644 --- a/matrix-sdk-android/src/main/AndroidManifest.xml +++ b/matrix-sdk-android/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ @@ -7,6 +8,15 @@ + + + diff --git a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt index 86d59b630b..014a244bf8 100644 --- a/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt +++ b/vector/src/main/java/im/vector/app/core/di/FragmentModule.kt @@ -52,6 +52,7 @@ import im.vector.app.features.home.HomeDrawerFragment import im.vector.app.features.home.LoadingFragment import im.vector.app.features.home.room.breadcrumbs.BreadcrumbsFragment import im.vector.app.features.home.room.detail.RoomDetailFragment +import im.vector.app.features.home.room.detail.search.SearchFragment import im.vector.app.features.home.room.list.RoomListFragment import im.vector.app.features.login.LoginCaptchaFragment import im.vector.app.features.login.LoginFragment @@ -570,4 +571,9 @@ interface FragmentModule { @IntoMap @FragmentKey(RoomBannedMemberListFragment::class) fun bindRoomBannedMemberListFragment(fragment: RoomBannedMemberListFragment): Fragment + + @Binds + @IntoMap + @FragmentKey(SearchFragment::class) + fun bindSearchFragment(fragment: SearchFragment): Fragment } 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 d337ec7977..17ec00952b 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 @@ -38,6 +38,7 @@ import im.vector.app.features.home.HomeActivity import im.vector.app.features.home.HomeModule import im.vector.app.features.home.room.detail.RoomDetailActivity import im.vector.app.features.home.room.detail.readreceipts.DisplayReadReceiptsBottomSheet +import im.vector.app.features.home.room.detail.search.SearchActivity import im.vector.app.features.home.room.detail.timeline.action.MessageActionsBottomSheet import im.vector.app.features.home.room.detail.timeline.edithistory.ViewEditHistoryBottomSheet import im.vector.app.features.home.room.detail.timeline.reactions.ViewReactionsBottomSheet @@ -142,6 +143,7 @@ interface ScreenComponent { fun inject(activity: VectorCallActivity) fun inject(activity: VectorAttachmentViewerActivity) fun inject(activity: VectorJitsiActivity) + fun inject(activity: SearchActivity) /* ========================================================================================== * BottomSheets diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 3b4795b965..34aa6a0831 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -673,6 +673,10 @@ class RoomDetailFragment @Inject constructor( roomDetailViewModel.handle(RoomDetailAction.EndCall) true } + R.id.search -> { + navigator.openSearch(requireContext(), roomDetailArgs.roomId) + true + } else -> super.onOptionsItemSelected(item) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt new file mode 100644 index 0000000000..2774ef4d8e --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import im.vector.app.core.platform.VectorViewModelAction + +sealed class SearchAction : VectorViewModelAction diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt new file mode 100644 index 0000000000..bedc4cb881 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import android.content.Context +import android.content.Intent +import com.airbnb.mvrx.MvRx +import im.vector.app.R +import im.vector.app.core.di.ScreenComponent +import im.vector.app.core.extensions.addFragment +import im.vector.app.core.platform.VectorBaseActivity + +class SearchActivity : VectorBaseActivity() { + + override fun getLayoutRes() = R.layout.activity_simple + + override fun injectWith(injector: ScreenComponent) { + super.injectWith(injector) + injector.inject(this) + } + + override fun initUiAndData() { + if (isFirstCreation()) { + val fragmentArgs: SearchArgs = intent?.extras?.getParcelable(MvRx.KEY_ARG) ?: return + addFragment(R.id.simpleFragmentContainer, SearchFragment::class.java, fragmentArgs) + } + } + + companion object { + fun newIntent(context: Context, args: SearchArgs): Intent { + return Intent(context, SearchActivity::class.java).apply { + putExtra(MvRx.KEY_ARG, args) + } + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt new file mode 100644 index 0000000000..f5b8440b58 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import android.os.Bundle +import android.os.Parcelable +import android.view.View +import com.airbnb.mvrx.args +import com.airbnb.mvrx.fragmentViewModel +import im.vector.app.R +import im.vector.app.core.platform.VectorBaseFragment +import kotlinx.android.parcel.Parcelize +import javax.inject.Inject + +@Parcelize +data class SearchArgs( + val roomId: String +) : Parcelable + +class SearchFragment @Inject constructor( + val viewModelFactory: SearchViewModel.Factory +) : VectorBaseFragment() { + + private val fragmentArgs: SearchArgs by args() + private val searchViewModel: SearchViewModel by fragmentViewModel() + + override fun getLayoutResId() = R.layout.fragment_search + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + } +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt new file mode 100644 index 0000000000..a5489e9240 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import im.vector.app.core.platform.VectorViewEvents + +sealed class SearchViewEvents : VectorViewEvents diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt new file mode 100644 index 0000000000..de75c0dd20 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import com.airbnb.mvrx.FragmentViewModelContext +import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.ViewModelContext +import com.squareup.inject.assisted.Assisted +import com.squareup.inject.assisted.AssistedInject +import im.vector.app.core.platform.VectorViewModel + +class SearchViewModel @AssistedInject constructor( + @Assisted private val initialState: SearchViewState +) : VectorViewModel(initialState) { + + @AssistedInject.Factory + interface Factory { + fun create(initialState: SearchViewState): SearchViewModel + } + + companion object : MvRxViewModelFactory { + + @JvmStatic + override fun create(viewModelContext: ViewModelContext, state: SearchViewState): SearchViewModel? { + val fragment: SearchFragment = (viewModelContext as FragmentViewModelContext).fragment() + return fragment.viewModelFactory.create(state) + } + } + + override fun handle(action: SearchAction) { + } +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt new file mode 100644 index 0000000000..785d61dc00 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt @@ -0,0 +1,23 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import com.airbnb.mvrx.MvRxState + +data class SearchViewState( + val searchTerm: String = "" +) : MvRxState diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 3a8d302fc7..5ad600dfff 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -43,6 +43,8 @@ import im.vector.app.features.crypto.verification.VerificationBottomSheet import im.vector.app.features.debug.DebugMenuActivity import im.vector.app.features.home.room.detail.RoomDetailActivity import im.vector.app.features.home.room.detail.RoomDetailArgs +import im.vector.app.features.home.room.detail.search.SearchActivity +import im.vector.app.features.home.room.detail.search.SearchArgs import im.vector.app.features.home.room.detail.widget.WidgetRequestCodes import im.vector.app.features.home.room.filtered.FilteredRoomsActivity import im.vector.app.features.invite.InviteUsersToRoomActivity @@ -329,6 +331,11 @@ class DefaultNavigator @Inject constructor( } } + override fun openSearch(context: Context, roomId: String) { + val intent = SearchActivity.newIntent(context, SearchArgs(roomId)) + context.startActivity(intent) + } + private fun startActivity(context: Context, intent: Intent, buildTask: Boolean) { if (buildTask) { val stackBuilder = TaskStackBuilder.create(context) diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index e92fea267f..b2efb1e931 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -109,4 +109,6 @@ interface Navigator { view: View, inMemory: List = emptyList(), options: ((MutableList>) -> Unit)?) + + fun openSearch(context: Context, roomId: String) } diff --git a/vector/src/main/res/layout/fragment_search.xml b/vector/src/main/res/layout/fragment_search.xml new file mode 100644 index 0000000000..77d9ef65f8 --- /dev/null +++ b/vector/src/main/res/layout/fragment_search.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file From 86b46d14426ec806dad0a29b4ae0388af558cc31 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 21 Sep 2020 17:01:27 +0300 Subject: [PATCH 081/278] Configure SearchView as activity toolbar. --- .../home/room/detail/search/SearchActivity.kt | 31 ++++++++++++- .../home/room/detail/search/SearchFragment.kt | 5 +++ .../src/main/res/layout/activity_search.xml | 43 +++++++++++++++++++ .../src/main/res/layout/fragment_search.xml | 3 ++ 4 files changed, 80 insertions(+), 2 deletions(-) create mode 100644 vector/src/main/res/layout/activity_search.xml diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt index bedc4cb881..70205eed62 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt @@ -18,29 +18,56 @@ package im.vector.app.features.home.room.detail.search import android.content.Context import android.content.Intent +import android.os.Bundle +import androidx.appcompat.widget.SearchView import com.airbnb.mvrx.MvRx import im.vector.app.R import im.vector.app.core.di.ScreenComponent import im.vector.app.core.extensions.addFragment import im.vector.app.core.platform.VectorBaseActivity +import kotlinx.android.synthetic.main.activity_search.* class SearchActivity : VectorBaseActivity() { - override fun getLayoutRes() = R.layout.activity_simple + private val searchFragment: SearchFragment? + get() { + return supportFragmentManager.findFragmentByTag(FRAGMENT_TAG) as? SearchFragment + } + + override fun getLayoutRes() = R.layout.activity_search override fun injectWith(injector: ScreenComponent) { super.injectWith(injector) injector.inject(this) } + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + configureToolbar(searchToolbar) + } + override fun initUiAndData() { if (isFirstCreation()) { val fragmentArgs: SearchArgs = intent?.extras?.getParcelable(MvRx.KEY_ARG) ?: return - addFragment(R.id.simpleFragmentContainer, SearchFragment::class.java, fragmentArgs) + addFragment(R.id.searchFragmentContainer, SearchFragment::class.java, fragmentArgs, FRAGMENT_TAG) } + searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String): Boolean { + searchFragment?.search(query) + return true + } + + override fun onQueryTextChange(newText: String): Boolean { + return true + } + }) + // Open the keyboard immediately + searchView.requestFocus() } companion object { + private const val FRAGMENT_TAG = "SearchFragment" + fun newIntent(context: Context, args: SearchArgs): Intent { return Intent(context, SearchActivity::class.java).apply { putExtra(MvRx.KEY_ARG, args) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index f5b8440b58..0a0604eb38 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -24,6 +24,7 @@ import com.airbnb.mvrx.fragmentViewModel import im.vector.app.R import im.vector.app.core.platform.VectorBaseFragment import kotlinx.android.parcel.Parcelize +import timber.log.Timber import javax.inject.Inject @Parcelize @@ -43,4 +44,8 @@ class SearchFragment @Inject constructor( override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) } + + fun search(query: String) { + Timber.d(query) + } } diff --git a/vector/src/main/res/layout/activity_search.xml b/vector/src/main/res/layout/activity_search.xml new file mode 100644 index 0000000000..a3aa21eecc --- /dev/null +++ b/vector/src/main/res/layout/activity_search.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/vector/src/main/res/layout/fragment_search.xml b/vector/src/main/res/layout/fragment_search.xml index 77d9ef65f8..2916089675 100644 --- a/vector/src/main/res/layout/fragment_search.xml +++ b/vector/src/main/res/layout/fragment_search.xml @@ -1,6 +1,9 @@ + + \ No newline at end of file From 8759bcca84c69e8aab5e7aa365ba37922ae05f32 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 24 Sep 2020 10:14:36 +0300 Subject: [PATCH 082/278] Map api response to a domain object. --- .../sdk/session/search/SearchMessagesTest.kt | 22 ++++++------- .../android/sdk/api/session/room/Room.kt | 4 +-- .../sdk/api/session/search/SearchResult.kt | 32 +++++++++++++++++++ .../sdk/api/session/search/SearchService.kt | 3 +- .../sdk/internal/session/room/DefaultRoom.kt | 4 +-- .../sdk/internal/session/room/RoomAPI.kt | 2 +- .../session/search/DefaultSearchService.kt | 4 +-- .../sdk/internal/session/search/SearchTask.kt | 17 +++++++--- 8 files changed, 64 insertions(+), 24 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt index b7d253ca00..1d4eb758ed 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt @@ -30,10 +30,10 @@ import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.model.message.MessageContent import org.matrix.android.sdk.api.session.room.timeline.TimelineSettings +import org.matrix.android.sdk.api.session.search.SearchResult import org.matrix.android.sdk.common.CommonTestHelper import org.matrix.android.sdk.common.CryptoTestHelper import org.matrix.android.sdk.common.TestConstants -import org.matrix.android.sdk.internal.session.search.response.SearchResponse import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit @@ -83,14 +83,14 @@ class SearchMessagesTest : InstrumentedTest { orderByRecent = true, nextBatch = null, roomId = aliceRoomId, - callback = object : MatrixCallback { - override fun onSuccess(data: SearchResponse) { + callback = object : MatrixCallback { + override fun onSuccess(data: SearchResult) { super.onSuccess(data) - assertTrue(data.searchCategories.roomEvents?.results?.size == 2) + assertTrue(data.results?.size == 2) assertTrue( - data.searchCategories.roomEvents?.results + data.results ?.all { - (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() + (it.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() }.orFalse() ) lock.countDown() @@ -147,14 +147,14 @@ class SearchMessagesTest : InstrumentedTest { beforeLimit = 10, orderByRecent = true, nextBatch = null, - callback = object : MatrixCallback { - override fun onSuccess(data: SearchResponse) { + callback = object : MatrixCallback { + override fun onSuccess(data: SearchResult) { super.onSuccess(data) - assertTrue(data.searchCategories.roomEvents?.results?.size == 2) + assertTrue(data.results?.size == 2) assertTrue( - data.searchCategories.roomEvents?.results + data.results ?.all { - (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() + (it.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() }.orFalse() ) lock.countDown() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt index d09a42753b..a27cdad551 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt @@ -34,9 +34,9 @@ import org.matrix.android.sdk.api.session.room.tags.TagsService import org.matrix.android.sdk.api.session.room.timeline.TimelineService import org.matrix.android.sdk.api.session.room.typing.TypingService import org.matrix.android.sdk.api.session.room.uploads.UploadsService +import org.matrix.android.sdk.api.session.search.SearchResult import org.matrix.android.sdk.api.util.Cancelable import org.matrix.android.sdk.api.util.Optional -import org.matrix.android.sdk.internal.session.search.response.SearchResponse /** * This interface defines methods to interact within a room. @@ -90,5 +90,5 @@ interface Room : beforeLimit: Int, afterLimit: Int, includeProfile: Boolean, - callback: MatrixCallback): Cancelable + callback: MatrixCallback): Cancelable } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt new file mode 100644 index 0000000000..4529bf6d13 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2020 New Vector Ltd + * 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.api.session.search + +import org.matrix.android.sdk.api.session.events.model.Event + +/** + * Domain class to represent the response of a search request in a room. + */ +data class SearchResult( + // Token that can be used to get the next batch of results, by passing as the next_batch parameter to the next call. If this field is absent, there are no more results. + val nextBatch: String? = null, + // List of words which should be highlighted, useful for stemming which may change the query terms. + var highlights: List? = null, + // List of results in the requested order. + var results: List? = null +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt index 2087af6a81..b089a597e3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt @@ -19,7 +19,6 @@ package org.matrix.android.sdk.api.session.search import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.util.Cancelable -import org.matrix.android.sdk.internal.session.search.response.SearchResponse /** * This interface defines methods to search messages in rooms. @@ -45,5 +44,5 @@ interface SearchService { beforeLimit: Int, afterLimit: Int, includeProfile: Boolean, - callback: MatrixCallback): Cancelable + callback: MatrixCallback): Cancelable } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt index 33fa98f8ce..0eb64af8a0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt @@ -36,13 +36,13 @@ import org.matrix.android.sdk.api.session.room.tags.TagsService import org.matrix.android.sdk.api.session.room.timeline.TimelineService import org.matrix.android.sdk.api.session.room.typing.TypingService import org.matrix.android.sdk.api.session.room.uploads.UploadsService +import org.matrix.android.sdk.api.session.search.SearchResult import org.matrix.android.sdk.api.util.Cancelable import org.matrix.android.sdk.api.util.Optional import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM import org.matrix.android.sdk.internal.session.room.state.SendStateTask import org.matrix.android.sdk.internal.session.room.summary.RoomSummaryDataSource import org.matrix.android.sdk.internal.session.search.SearchTask -import org.matrix.android.sdk.internal.session.search.response.SearchResponse import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import java.security.InvalidParameterException @@ -135,7 +135,7 @@ internal class DefaultRoom @Inject constructor(override val roomId: String, beforeLimit: Int, afterLimit: Int, includeProfile: Boolean, - callback: MatrixCallback): Cancelable { + callback: MatrixCallback): Cancelable { return searchTask .configureWith(SearchTask.Params( searchTerm = searchTerm, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt index 1a23f3a2f5..db99adbafb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt @@ -36,12 +36,12 @@ import org.matrix.android.sdk.internal.session.room.membership.threepid.ThreePid import org.matrix.android.sdk.internal.session.room.relation.RelationsResponse import org.matrix.android.sdk.internal.session.room.reporting.ReportContentBody import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody -import org.matrix.android.sdk.internal.session.search.response.SearchResponse import org.matrix.android.sdk.internal.session.room.send.SendResponse import org.matrix.android.sdk.internal.session.room.tags.TagBody import org.matrix.android.sdk.internal.session.room.timeline.EventContextResponse import org.matrix.android.sdk.internal.session.room.timeline.PaginationResponse import org.matrix.android.sdk.internal.session.room.typing.TypingBody +import org.matrix.android.sdk.internal.session.search.response.SearchResponse import retrofit2.Call import retrofit2.http.Body import retrofit2.http.DELETE diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt index 1f158ec41b..0b380f4d35 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt @@ -18,9 +18,9 @@ package org.matrix.android.sdk.internal.session.search import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.session.search.SearchResult import org.matrix.android.sdk.api.session.search.SearchService import org.matrix.android.sdk.api.util.Cancelable -import org.matrix.android.sdk.internal.session.search.response.SearchResponse import javax.inject.Inject import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith @@ -38,7 +38,7 @@ internal class DefaultSearchService @Inject constructor( beforeLimit: Int, afterLimit: Int, includeProfile: Boolean, - callback: MatrixCallback): Cancelable { + callback: MatrixCallback): Cancelable { return searchTask .configureWith(SearchTask.Params( searchTerm = searchTerm, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index 17f980bb77..4502d2a60a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.session.search import org.greenrobot.eventbus.EventBus +import org.matrix.android.sdk.api.session.search.SearchResult import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.session.room.RoomAPI import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody @@ -30,7 +31,7 @@ import org.matrix.android.sdk.internal.session.search.response.SearchResponse import org.matrix.android.sdk.internal.task.Task import javax.inject.Inject -internal interface SearchTask : Task { +internal interface SearchTask : Task { data class Params( val searchTerm: String, @@ -49,8 +50,8 @@ internal class DefaultSearchTask @Inject constructor( private val eventBus: EventBus ) : SearchTask { - override suspend fun execute(params: SearchTask.Params): SearchResponse { - return executeRequest(eventBus) { + override suspend fun execute(params: SearchTask.Params): SearchResult { + return executeRequest(eventBus) { val searchRequestBody = SearchRequestBody( searchCategories = SearchRequestCategories( roomEvents = SearchRequestRoomEvents( @@ -69,6 +70,14 @@ internal class DefaultSearchTask @Inject constructor( ) ) apiCall = roomAPI.search(params.nextBatch, searchRequestBody) - } + }.toDomain().apply { results = results?.reversed() } + } + + private fun SearchResponse.toDomain(): SearchResult { + return SearchResult( + nextBatch = searchCategories.roomEvents?.nextBatch, + highlights = searchCategories.roomEvents?.highlights, + results = searchCategories.roomEvents?.results?.map { it.event } + ) } } From d6fcf63230e291f7e0b68a86266d4afd87d54205 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 24 Sep 2020 10:19:26 +0300 Subject: [PATCH 083/278] Implement search result controller and item. --- .../detail/search/SearchResultController.kt | 80 +++++++++++++++++++ .../room/detail/search/SearchResultItem.kt | 63 +++++++++++++++ .../src/main/res/layout/fragment_search.xml | 15 ++-- .../main/res/layout/item_search_result.xml | 60 ++++++++++++++ vector/src/main/res/values/strings.xml | 1 + 5 files changed, 214 insertions(+), 5 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt create mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt create mode 100644 vector/src/main/res/layout/item_search_result.xml diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt new file mode 100644 index 0000000000..82d3120311 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt @@ -0,0 +1,80 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import com.airbnb.epoxy.TypedEpoxyController +import im.vector.app.core.date.DateFormatKind +import im.vector.app.core.date.VectorDateFormatter +import im.vector.app.core.ui.list.genericItemHeader +import im.vector.app.features.home.AvatarRenderer +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.events.model.Event +import java.util.Calendar +import javax.inject.Inject + +class SearchResultController @Inject constructor( + private val session: Session, + private val avatarRenderer: AvatarRenderer, + private val dateFormatter: VectorDateFormatter +) : TypedEpoxyController() { + + var listener: Listener? = null + + interface Listener { + fun onItemClicked(event: Event) + } + + init { + setData(null) + } + + override fun buildModels(data: SearchViewState?) { + data?.searchResult?.results ?: return + + buildSearchResultItems(data.searchResult.results!!) + } + + private fun buildSearchResultItems(events: List) { + var lastDate: Calendar? = null + + events.forEach { event -> + val eventDate = Calendar.getInstance().apply { + timeInMillis = event.originServerTs ?: System.currentTimeMillis() + } + if (lastDate?.get(Calendar.DAY_OF_YEAR) != eventDate.get(Calendar.DAY_OF_YEAR)) { + genericItemHeader { + id(eventDate.hashCode()) + text(dateFormatter.format(eventDate.timeInMillis, DateFormatKind.EDIT_HISTORY_HEADER)) + } + } + lastDate = eventDate + + searchResultItem { + id(event.eventId) + avatarRenderer(avatarRenderer) + dateFormatter(dateFormatter) + event(event) + sender(event.senderId?.let { session.getUser(it) }) + listener(object : SearchResultItem.Listener { + override fun onItemClicked() { + listener?.onItemClicked(event) + } + }) + } + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt new file mode 100644 index 0000000000..fb0121cbcf --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2020 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.home.room.detail.search + +import android.widget.ImageView +import android.widget.TextView +import com.airbnb.epoxy.EpoxyAttribute +import com.airbnb.epoxy.EpoxyModelClass +import im.vector.app.R +import im.vector.app.core.date.DateFormatKind +import im.vector.app.core.date.VectorDateFormatter +import im.vector.app.core.epoxy.VectorEpoxyHolder +import im.vector.app.core.epoxy.VectorEpoxyModel +import im.vector.app.features.home.AvatarRenderer +import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.session.user.model.User +import org.matrix.android.sdk.api.util.toMatrixItem + +@EpoxyModelClass(layout = R.layout.item_search_result) +abstract class SearchResultItem : VectorEpoxyModel() { + + @EpoxyAttribute var avatarRenderer: AvatarRenderer? = null + @EpoxyAttribute var dateFormatter: VectorDateFormatter? = null + @EpoxyAttribute var event: Event? = null + @EpoxyAttribute var sender: User? = null + @EpoxyAttribute var listener: Listener? = null + + override fun bind(holder: Holder) { + super.bind(holder) + event ?: return + + holder.view.setOnClickListener { listener?.onItemClicked() } + sender?.toMatrixItem()?.let { avatarRenderer?.render(it, holder.avatarImageView) } + holder.memberNameView.text = sender?.displayName + holder.timeView.text = dateFormatter?.format(event!!.originServerTs, DateFormatKind.MESSAGE_SIMPLE) + holder.contentView.text = event?.content?.get("body") as? String + } + + class Holder : VectorEpoxyHolder() { + val avatarImageView by bind(R.id.messageAvatarImageView) + val memberNameView by bind(R.id.messageMemberNameView) + val timeView by bind(R.id.messageTimeView) + val contentView by bind(R.id.messageContentView) + } + + interface Listener { + fun onItemClicked() + } +} diff --git a/vector/src/main/res/layout/fragment_search.xml b/vector/src/main/res/layout/fragment_search.xml index 2916089675..5478e1f68c 100644 --- a/vector/src/main/res/layout/fragment_search.xml +++ b/vector/src/main/res/layout/fragment_search.xml @@ -1,9 +1,14 @@ - + android:layout_height="match_parent" + android:background="?riotx_header_panel_background"> + - - \ No newline at end of file + \ No newline at end of file diff --git a/vector/src/main/res/layout/item_search_result.xml b/vector/src/main/res/layout/item_search_result.xml new file mode 100644 index 0000000000..9946a2fb50 --- /dev/null +++ b/vector/src/main/res/layout/item_search_result.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 0edd930498..ee5b8fecb1 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -628,6 +628,7 @@ MESSAGES PEOPLE FILES + Searching in encrypted rooms is not supported yet. JOIN From 6c6d0dbc3d9f907faf4dc85f3054fc17c4bd7d51 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 24 Sep 2020 10:20:36 +0300 Subject: [PATCH 084/278] Show not supported warning for e2e rooms. --- .../features/home/room/detail/RoomDetailFragment.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 34aa6a0831..51aeda2aab 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -674,13 +674,21 @@ class RoomDetailFragment @Inject constructor( true } R.id.search -> { - navigator.openSearch(requireContext(), roomDetailArgs.roomId) + handleSearchAction() true } else -> super.onOptionsItemSelected(item) } } + private fun handleSearchAction() { + if (session.getRoom(roomDetailArgs.roomId)?.isEncrypted() == false) { + navigator.openSearch(requireContext(), roomDetailArgs.roomId) + } else { + showDialogWithMessage(getString(R.string.search_is_not_supported_in_e2e_room)) + } + } + private fun handleCallRequest(item: MenuItem) = withState(roomDetailViewModel) { state -> val roomSummary = state.asyncRoomSummary.invoke() ?: return@withState val isVideoCall = item.itemId == R.id.video_call From 5e56e7cf829464d429ed06cc2ffe8013bfe10ef8 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 24 Sep 2020 10:21:26 +0300 Subject: [PATCH 085/278] Implement search state, action and view events. --- .../app/features/home/room/detail/search/SearchAction.kt | 6 +++++- .../features/home/room/detail/search/SearchViewEvents.kt | 5 ++++- .../features/home/room/detail/search/SearchViewState.kt | 9 ++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt index 2774ef4d8e..d295784a8c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt @@ -18,4 +18,8 @@ package im.vector.app.features.home.room.detail.search import im.vector.app.core.platform.VectorViewModelAction -sealed class SearchAction : VectorViewModelAction +sealed class SearchAction : VectorViewModelAction { + data class SearchWith(val roomId: String, val searchTerm: String) : SearchAction() + object ScrolledToTop : SearchAction() + object Retry : SearchAction() +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt index a5489e9240..41dabd8686 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt @@ -18,4 +18,7 @@ package im.vector.app.features.home.room.detail.search import im.vector.app.core.platform.VectorViewEvents -sealed class SearchViewEvents : VectorViewEvents +sealed class SearchViewEvents : VectorViewEvents { + data class Failure(val throwable: Throwable) : SearchViewEvents() + data class Loading(val message: CharSequence? = null) : SearchViewEvents() +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt index 785d61dc00..02db098e68 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt @@ -17,7 +17,14 @@ package im.vector.app.features.home.room.detail.search import com.airbnb.mvrx.MvRxState +import org.matrix.android.sdk.api.session.search.SearchResult data class SearchViewState( - val searchTerm: String = "" + // Accumulated search result + val searchResult: SearchResult? = null, + // Last batch result will help RecyclerView to position itself + val lastBatch: SearchResult? = null, + val searchTerm: String? = null, + val roomId: String? = null, + val isNextBatch: Boolean = false ) : MvRxState From 62449ee543bec0593b060f8cb7181385cb67f846 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 24 Sep 2020 10:22:26 +0300 Subject: [PATCH 086/278] Support searching and pagination. --- .../home/room/detail/search/SearchFragment.kt | 95 ++++++++++++++++++- .../room/detail/search/SearchViewModel.kt | 92 +++++++++++++++++- 2 files changed, 182 insertions(+), 5 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index 0a0604eb38..1f8f7fa422 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -19,12 +19,24 @@ package im.vector.app.features.home.room.detail.search import android.os.Bundle import android.os.Parcelable import android.view.View +import androidx.core.content.ContextCompat +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel +import com.airbnb.mvrx.withState import im.vector.app.R +import im.vector.app.core.extensions.cleanup +import im.vector.app.core.extensions.configureWith +import im.vector.app.core.extensions.exhaustive +import im.vector.app.core.extensions.hideKeyboard +import im.vector.app.core.extensions.trackItemsVisibilityChange +import im.vector.app.core.platform.StateView import im.vector.app.core.platform.VectorBaseFragment +import im.vector.app.core.resources.StringProvider import kotlinx.android.parcel.Parcelize -import timber.log.Timber +import kotlinx.android.synthetic.main.fragment_search.* +import org.matrix.android.sdk.api.session.events.model.Event import javax.inject.Inject @Parcelize @@ -33,19 +45,94 @@ data class SearchArgs( ) : Parcelable class SearchFragment @Inject constructor( - val viewModelFactory: SearchViewModel.Factory -) : VectorBaseFragment() { + val viewModelFactory: SearchViewModel.Factory, + val controller: SearchResultController, + val stringProvider: StringProvider +) : VectorBaseFragment(), StateView.EventCallback, SearchResultController.Listener { private val fragmentArgs: SearchArgs by args() private val searchViewModel: SearchViewModel by fragmentViewModel() + private var pendingScrollToPosition: Int? = null + override fun getLayoutResId() = R.layout.fragment_search override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + + stateView.contentView = searchResultRecycler + stateView.eventCallback = this + + configureRecyclerView() + + searchViewModel.observeViewEvents { + when (it) { + is SearchViewEvents.Failure -> { + stateView.state = StateView.State.Error(errorFormatter.toHumanReadable(it.throwable)) + } + is SearchViewEvents.Loading -> { + stateView.state = StateView.State.Loading + } + }.exhaustive + } + } + + private fun configureRecyclerView() { + searchResultRecycler.trackItemsVisibilityChange() + searchResultRecycler.configureWith(controller, showDivider = false) + controller.listener = this + + controller.addModelBuildListener { + pendingScrollToPosition?.let { + searchResultRecycler.scrollToPosition(it) + } + } + + searchResultRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + // Load next batch when scrolled to the top + if (newState == RecyclerView.SCROLL_STATE_IDLE + && (searchResultRecycler.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition() == 0) { + searchViewModel.handle(SearchAction.ScrolledToTop) + } + } + }) + } + + override fun onDestroy() { + super.onDestroy() + searchResultRecycler?.cleanup() + controller.listener = null + } + + override fun invalidate() = withState(searchViewModel) { state -> + if (state.searchResult?.results?.isNotEmpty() == true) { + stateView.state = StateView.State.Content + controller.setData(state) + + val lastBatchSize = state.lastBatch?.results?.size ?: 0 + val scrollPosition = if (lastBatchSize > 0) lastBatchSize - 1 else 0 + pendingScrollToPosition = scrollPosition + } else { + stateView.state = StateView.State.Empty( + title = stringProvider.getString(R.string.search_no_results), + image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_search) + ) + } } fun search(query: String) { - Timber.d(query) + view?.hideKeyboard() + searchViewModel.handle(SearchAction.SearchWith(fragmentArgs.roomId, query)) + } + + override fun onRetryClicked() { + searchViewModel.handle(SearchAction.Retry) + } + + override fun onItemClicked(event: Event) { + event.roomId ?: return + + navigator.openRoom(requireContext(), event.roomId!!, event.eventId) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt index de75c0dd20..67befc80be 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -21,10 +21,15 @@ import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.ViewModelContext import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject +import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.search.SearchResult class SearchViewModel @AssistedInject constructor( - @Assisted private val initialState: SearchViewState + @Assisted private val initialState: SearchViewState, + private val session: Session ) : VectorViewModel(initialState) { @AssistedInject.Factory @@ -42,5 +47,90 @@ class SearchViewModel @AssistedInject constructor( } override fun handle(action: SearchAction) { + when (action) { + is SearchAction.SearchWith -> handleSearchWith(action) + is SearchAction.ScrolledToTop -> handleScrolledToTop() + is SearchAction.Retry -> handleRetry() + }.exhaustive + } + + private fun handleSearchWith(action: SearchAction.SearchWith) { + if (action.searchTerm.length > 1) { + setState { + copy(searchTerm = action.searchTerm, roomId = action.roomId, isNextBatch = false) + } + + startSearching() + } + } + + private fun handleScrolledToTop() { + setState { + copy(isNextBatch = true) + } + startSearching(true) + } + + private fun handleRetry() { + startSearching() + } + + private fun startSearching(scrolledToTop: Boolean = false) = withState { state -> + if (state.roomId == null || state.searchTerm == null) return@withState + + // There is no batch to retrieve + if (scrolledToTop && state.searchResult?.nextBatch == null) return@withState + + _viewEvents.post(SearchViewEvents.Loading()) + + session + .getRoom(state.roomId) + ?.search( + searchTerm = state.searchTerm, + nextBatch = state.searchResult?.nextBatch, + orderByRecent = true, + beforeLimit = 0, + afterLimit = 0, + includeProfile = true, + limit = 20, + callback = object : MatrixCallback { + override fun onFailure(failure: Throwable) { + onSearchFailure(failure) + } + + override fun onSuccess(data: SearchResult) { + onSearchResultSuccess(data) + } + } + ) + } + + private fun onSearchFailure(failure: Throwable) { + setState { + copy(searchResult = null) + } + _viewEvents.post(SearchViewEvents.Failure(failure)) + } + + private fun onSearchResultSuccess(searchResult: SearchResult) = withState { state -> + val accumulatedResult = SearchResult( + nextBatch = searchResult.nextBatch, + results = searchResult.results, + highlights = searchResult.highlights + ) + + // Accumulate results if it is the next batch + if (state.isNextBatch) { + if (state.searchResult != null) { + accumulatedResult.results = accumulatedResult.results?.plus(state.searchResult.results!!) + } + if (state.searchResult?.highlights != null) { + accumulatedResult.highlights = accumulatedResult.highlights?.plus(state.searchResult.highlights!!) + } + } + + setState { + copy(searchResult = accumulatedResult, lastBatch = searchResult) + } } } From 0df3a8ad986b6c712105d8ae8002017178987e98 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 24 Sep 2020 11:44:17 +0300 Subject: [PATCH 087/278] Changelog added. --- CHANGES.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 026d7af6cd..c357515efa 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,7 @@ Changes in Element 1.0.9 (2020-XX-XX) =================================================== Features ✨: + - Search messages in a room - phase 1 (#2110) - Hide encrypted history (before user is invited). Can be shown if wanted in developer settings Improvements 🙌: @@ -18,7 +19,7 @@ Translations đŸ—Ŗ: - SDK API changes ⚠ī¸: - - + - Search messages in a room by using Session.searchService() or Room.search() Build 🧱: - Use Update Gradle Wrapper Action From 70be853acdbda871fee8f05de2303b151c3e1f9e Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Thu, 24 Sep 2020 12:21:31 +0300 Subject: [PATCH 088/278] Update no results found icon. --- .../home/room/detail/search/SearchFragment.kt | 2 +- .../res/drawable/ic_search_no_results.xml | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 vector/src/main/res/drawable/ic_search_no_results.xml diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index 1f8f7fa422..fa60d33e64 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -116,7 +116,7 @@ class SearchFragment @Inject constructor( } else { stateView.state = StateView.State.Empty( title = stringProvider.getString(R.string.search_no_results), - image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_search) + image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_search_no_results) ) } } diff --git a/vector/src/main/res/drawable/ic_search_no_results.xml b/vector/src/main/res/drawable/ic_search_no_results.xml new file mode 100644 index 0000000000..24c0f00131 --- /dev/null +++ b/vector/src/main/res/drawable/ic_search_no_results.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file From 430a0d249221f2830135c5b60de26699554ae5cc Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 18:51:30 +0300 Subject: [PATCH 089/278] Create separate search module. --- .../sdk/internal/session/SessionComponent.kt | 4 +- .../sdk/internal/session/SessionModule.kt | 10 ----- .../sdk/internal/session/room/RoomAPI.kt | 10 ----- .../sdk/internal/session/search/SearchAPI.kt | 36 +++++++++++++++ .../internal/session/search/SearchModule.kt | 44 +++++++++++++++++++ .../sdk/internal/session/search/SearchTask.kt | 5 +-- 6 files changed, 85 insertions(+), 24 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt index 475450837e..123b87748f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt @@ -50,6 +50,7 @@ import org.matrix.android.sdk.internal.session.room.send.EncryptEventWorker import org.matrix.android.sdk.internal.session.room.send.MultipleEventSendingDispatcherWorker import org.matrix.android.sdk.internal.session.room.send.RedactEventWorker import org.matrix.android.sdk.internal.session.room.send.SendEventWorker +import org.matrix.android.sdk.internal.session.search.SearchModule import org.matrix.android.sdk.internal.session.signout.SignOutModule import org.matrix.android.sdk.internal.session.sync.SyncModule import org.matrix.android.sdk.internal.session.sync.SyncTask @@ -86,7 +87,8 @@ import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers ProfileModule::class, SessionAssistedInjectModule::class, AccountModule::class, - CallModule::class + CallModule::class, + SearchModule::class ] ) @SessionScope diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt index 54478cdc02..5397b8d9bd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt @@ -39,7 +39,6 @@ import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.accountdata.AccountDataService import org.matrix.android.sdk.api.session.homeserver.HomeServerCapabilitiesService import org.matrix.android.sdk.api.session.permalinks.PermalinkService -import org.matrix.android.sdk.api.session.search.SearchService import org.matrix.android.sdk.api.session.securestorage.SecureStorageService import org.matrix.android.sdk.api.session.securestorage.SharedSecretStorageService import org.matrix.android.sdk.api.session.typing.TypingUsersTracker @@ -82,10 +81,7 @@ import org.matrix.android.sdk.internal.session.permalinks.DefaultPermalinkServic import org.matrix.android.sdk.internal.session.room.EventRelationsAggregationProcessor import org.matrix.android.sdk.internal.session.room.create.RoomCreateEventProcessor import org.matrix.android.sdk.internal.session.room.prune.RedactionEventProcessor -import org.matrix.android.sdk.internal.session.search.DefaultSearchService import org.matrix.android.sdk.internal.session.room.tombstone.RoomTombstoneEventProcessor -import org.matrix.android.sdk.internal.session.search.DefaultSearchTask -import org.matrix.android.sdk.internal.session.search.SearchTask import org.matrix.android.sdk.internal.session.securestorage.DefaultSecureStorageService import org.matrix.android.sdk.internal.session.typing.DefaultTypingUsersTracker import org.matrix.android.sdk.internal.session.user.accountdata.DefaultAccountDataService @@ -372,10 +368,4 @@ internal abstract class SessionModule { @Binds abstract fun bindTypingUsersTracker(tracker: DefaultTypingUsersTracker): TypingUsersTracker - - @Binds - abstract fun bindSearchService(service: DefaultSearchService): SearchService - - @Binds - abstract fun bindSearchTask(task: DefaultSearchTask): SearchTask } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt index db99adbafb..35c20cf5cb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt @@ -35,13 +35,11 @@ import org.matrix.android.sdk.internal.session.room.membership.joining.InviteBod import org.matrix.android.sdk.internal.session.room.membership.threepid.ThreePidInviteBody import org.matrix.android.sdk.internal.session.room.relation.RelationsResponse import org.matrix.android.sdk.internal.session.room.reporting.ReportContentBody -import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody import org.matrix.android.sdk.internal.session.room.send.SendResponse import org.matrix.android.sdk.internal.session.room.tags.TagBody import org.matrix.android.sdk.internal.session.room.timeline.EventContextResponse import org.matrix.android.sdk.internal.session.room.timeline.PaginationResponse import org.matrix.android.sdk.internal.session.room.typing.TypingBody -import org.matrix.android.sdk.internal.session.search.response.SearchResponse import retrofit2.Call import retrofit2.http.Body import retrofit2.http.DELETE @@ -367,12 +365,4 @@ internal interface RoomAPI { fun deleteTag(@Path("userId") userId: String, @Path("roomId") roomId: String, @Path("tag") tag: String): Call - - /** - * Performs a full text search across different categories. - */ - @POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "search") - fun search( - @Query("next_batch") nextBatch: String?, - @Body body: SearchRequestBody): Call } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt new file mode 100644 index 0000000000..3d5dbc306f --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.search + +import org.matrix.android.sdk.internal.network.NetworkConstants +import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody +import org.matrix.android.sdk.internal.session.search.response.SearchResponse +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.POST +import retrofit2.http.Query + +internal interface SearchAPI { + + /** + * Performs a full text search across different categories. + */ + @POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "search") + fun search( + @Query("next_batch") nextBatch: String?, + @Body body: SearchRequestBody): Call +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt new file mode 100644 index 0000000000..50cf8b8d84 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.search + +import dagger.Binds +import dagger.Module +import dagger.Provides +import org.matrix.android.sdk.api.session.search.SearchService +import org.matrix.android.sdk.internal.session.SessionScope +import retrofit2.Retrofit + +@Module +internal abstract class SearchModule { + + @Module + companion object { + @Provides + @JvmStatic + @SessionScope + fun providesSearchAPI(retrofit: Retrofit): SearchAPI { + return retrofit.create(SearchAPI::class.java) + } + } + + @Binds + abstract fun bindSearchService(service: DefaultSearchService): SearchService + + @Binds + abstract fun bindSearchTask(task: DefaultSearchTask): SearchTask +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index 4502d2a60a..d36fc80d5c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -20,7 +20,6 @@ package org.matrix.android.sdk.internal.session.search import org.greenrobot.eventbus.EventBus import org.matrix.android.sdk.api.session.search.SearchResult import org.matrix.android.sdk.internal.network.executeRequest -import org.matrix.android.sdk.internal.session.room.RoomAPI import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody import org.matrix.android.sdk.internal.session.search.request.SearchRequestCategories import org.matrix.android.sdk.internal.session.search.request.SearchRequestEventContext @@ -46,7 +45,7 @@ internal interface SearchTask : Task { } internal class DefaultSearchTask @Inject constructor( - private val roomAPI: RoomAPI, + private val searchAPI: SearchAPI, private val eventBus: EventBus ) : SearchTask { @@ -69,7 +68,7 @@ internal class DefaultSearchTask @Inject constructor( ) ) ) - apiCall = roomAPI.search(params.nextBatch, searchRequestBody) + apiCall = searchAPI.search(params.nextBatch, searchRequestBody) }.toDomain().apply { results = results?.reversed() } } From e21f306635c9cbc110b0992a41bafce0f1220c21 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 19:05:33 +0300 Subject: [PATCH 090/278] Use enum directly instead of its value. --- .../android/sdk/internal/session/search/SearchTask.kt | 2 +- .../internal/session/search/request/SearchRequestOrder.kt | 7 ++++--- .../session/search/request/SearchRequestRoomEvents.kt | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index d36fc80d5c..a2cad6bb2f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -55,7 +55,7 @@ internal class DefaultSearchTask @Inject constructor( searchCategories = SearchRequestCategories( roomEvents = SearchRequestRoomEvents( searchTerm = params.searchTerm, - orderBy = if (params.orderByRecent) SearchRequestOrder.RECENT.value else SearchRequestOrder.RANK.value, + orderBy = if (params.orderByRecent) SearchRequestOrder.RECENT else SearchRequestOrder.RANK, filter = SearchRequestFilter( limit = params.limit, rooms = listOf(params.roomId) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt index eac51ad2df..f0b6f7bc31 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt @@ -17,13 +17,14 @@ package org.matrix.android.sdk.internal.session.search.request +import com.squareup.moshi.Json import com.squareup.moshi.JsonClass /** * Represents the order in which to search for results. */ @JsonClass(generateAdapter = false) -internal enum class SearchRequestOrder(val value: String) { - RANK("rank"), - RECENT("recent") +internal enum class SearchRequestOrder { + @Json(name = "rank") RANK, + @Json(name = "recent") RECENT } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt index 26b11e93bd..fef1baa990 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt @@ -29,7 +29,7 @@ internal data class SearchRequestRoomEvents( val filter: SearchRequestFilter? = null, // By default, this is "rank". One of: ["recent", "rank"] @Json(name = "order_by") - val orderBy: String? = null, + val orderBy: SearchRequestOrder? = null, // Configures whether any context for the events returned are included in the response. @Json(name = "event_context") val eventContext: SearchRequestEventContext? = null From 4683dc3f21bc0048f2a8d8f94d7adf9a078f1efc Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 19:55:56 +0300 Subject: [PATCH 091/278] Documentation added to orderByRecent parameter of the search request. --- .../main/java/org/matrix/android/sdk/api/session/room/Room.kt | 1 + .../org/matrix/android/sdk/api/session/search/SearchService.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt index a27cdad551..86029e5419 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt @@ -78,6 +78,7 @@ interface Room : * Ref: https://matrix.org/docs/spec/client_server/latest#module-search * @param searchTerm the term to search * @param nextBatch the token that retrieved from the previous response. Should be provided to get the next batch of results + * @param orderByRecent if true, the most recent message events will return in the first places of the list * @param limit the maximum number of events to return. * @param beforeLimit how many events before the result are returned. * @param afterLimit how many events after the result are returned. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt index b089a597e3..0abbdfd958 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt @@ -31,6 +31,7 @@ interface SearchService { * @param searchTerm the term to search * @param roomId the roomId to search term inside * @param nextBatch the token that retrieved from the previous response. Should be provided to get the next batch of results + * @param orderByRecent if true, the most recent message events will return in the first places of the list * @param limit the maximum number of events to return. * @param beforeLimit how many events before the result are returned. * @param afterLimit how many events after the result are returned. From da344fae5190fac24fad4d2ff66a7d92fbe2eb43 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 28 Sep 2020 20:06:39 +0300 Subject: [PATCH 092/278] One case per line. --- .../home/room/detail/RoomDetailViewModel.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index f8229731d8..1b5e928843 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -529,16 +529,17 @@ class RoomDetailViewModel @AssistedInject constructor( return@withState false } when (itemId) { - R.id.clear_message_queue -> + R.id.clear_message_queue -> // For now always disable when not in developer mode, worker cancellation is not working properly timeline.pendingEventCount() > 0 && vectorPreferences.developerMode() - R.id.resend_all -> state.asyncRoomSummary()?.hasFailedSending == true - R.id.clear_all -> state.asyncRoomSummary()?.hasFailedSending == true - R.id.open_matrix_apps, R.id.search -> true + R.id.resend_all -> state.asyncRoomSummary()?.hasFailedSending == true + R.id.clear_all -> state.asyncRoomSummary()?.hasFailedSending == true + R.id.open_matrix_apps -> true R.id.voice_call, - R.id.video_call -> true // always show for discoverability - R.id.hangup_call -> webRtcPeerConnectionManager.currentCall != null - else -> false + R.id.video_call -> true // always show for discoverability + R.id.hangup_call -> webRtcPeerConnectionManager.currentCall != null + R.id.search -> true + else -> false } } From 88ca909689e018bb2ad3098378912afa8c6a9109 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Tue, 29 Sep 2020 12:37:44 +0300 Subject: [PATCH 093/278] Remove roomId from SearchAction. --- .../app/features/home/room/detail/search/SearchAction.kt | 2 +- .../app/features/home/room/detail/search/SearchFragment.kt | 2 +- .../app/features/home/room/detail/search/SearchViewModel.kt | 2 +- .../app/features/home/room/detail/search/SearchViewState.kt | 5 ++++- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt index d295784a8c..4a2c84e258 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt @@ -19,7 +19,7 @@ package im.vector.app.features.home.room.detail.search import im.vector.app.core.platform.VectorViewModelAction sealed class SearchAction : VectorViewModelAction { - data class SearchWith(val roomId: String, val searchTerm: String) : SearchAction() + data class SearchWith(val searchTerm: String) : SearchAction() object ScrolledToTop : SearchAction() object Retry : SearchAction() } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index fa60d33e64..360a6b6fcc 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -123,7 +123,7 @@ class SearchFragment @Inject constructor( fun search(query: String) { view?.hideKeyboard() - searchViewModel.handle(SearchAction.SearchWith(fragmentArgs.roomId, query)) + searchViewModel.handle(SearchAction.SearchWith(query)) } override fun onRetryClicked() { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt index 67befc80be..5747e83cad 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -57,7 +57,7 @@ class SearchViewModel @AssistedInject constructor( private fun handleSearchWith(action: SearchAction.SearchWith) { if (action.searchTerm.length > 1) { setState { - copy(searchTerm = action.searchTerm, roomId = action.roomId, isNextBatch = false) + copy(searchTerm = action.searchTerm, isNextBatch = false) } startSearching() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt index 02db098e68..8c2eb82ad1 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt @@ -27,4 +27,7 @@ data class SearchViewState( val searchTerm: String? = null, val roomId: String? = null, val isNextBatch: Boolean = false -) : MvRxState +) : MvRxState { + + constructor(args: SearchArgs) : this(roomId = args.roomId) +} From 0d16fe019efd8c1997951ea3a9d6a05f8bf02c68 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Tue, 29 Sep 2020 13:00:02 +0300 Subject: [PATCH 094/278] Do not use string provider in fragment. --- .../app/features/home/room/detail/search/SearchFragment.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index 360a6b6fcc..1c355bfbfe 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -33,7 +33,6 @@ import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.trackItemsVisibilityChange import im.vector.app.core.platform.StateView import im.vector.app.core.platform.VectorBaseFragment -import im.vector.app.core.resources.StringProvider import kotlinx.android.parcel.Parcelize import kotlinx.android.synthetic.main.fragment_search.* import org.matrix.android.sdk.api.session.events.model.Event @@ -46,8 +45,7 @@ data class SearchArgs( class SearchFragment @Inject constructor( val viewModelFactory: SearchViewModel.Factory, - val controller: SearchResultController, - val stringProvider: StringProvider + val controller: SearchResultController ) : VectorBaseFragment(), StateView.EventCallback, SearchResultController.Listener { private val fragmentArgs: SearchArgs by args() @@ -115,7 +113,7 @@ class SearchFragment @Inject constructor( pendingScrollToPosition = scrollPosition } else { stateView.state = StateView.State.Empty( - title = stringProvider.getString(R.string.search_no_results), + title = getString(R.string.search_no_results), image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_search_no_results) ) } From 5d190a81379f7631de18b328c18448fe7f114be0 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Tue, 29 Sep 2020 20:38:58 +0300 Subject: [PATCH 095/278] Use loading item instead of full screen loading. --- .../home/room/detail/search/SearchAction.kt | 2 +- .../home/room/detail/search/SearchFragment.kt | 61 ++++++------ .../detail/search/SearchResultController.kt | 17 ++++ .../room/detail/search/SearchViewEvents.kt | 1 - .../room/detail/search/SearchViewModel.kt | 96 +++++++++++-------- .../room/detail/search/SearchViewState.kt | 5 +- .../src/main/res/layout/fragment_search.xml | 3 +- 7 files changed, 104 insertions(+), 81 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt index 4a2c84e258..36d22f1914 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchAction.kt @@ -20,6 +20,6 @@ import im.vector.app.core.platform.VectorViewModelAction sealed class SearchAction : VectorViewModelAction { data class SearchWith(val searchTerm: String) : SearchAction() - object ScrolledToTop : SearchAction() + object LoadMore : SearchAction() object Retry : SearchAction() } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index 1c355bfbfe..5f943c6031 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -21,14 +21,15 @@ import android.os.Parcelable import android.view.View import androidx.core.content.ContextCompat import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.RecyclerView +import com.airbnb.mvrx.Fail +import com.airbnb.mvrx.Loading +import com.airbnb.mvrx.Success import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState import im.vector.app.R import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.configureWith -import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.extensions.trackItemsVisibilityChange import im.vector.app.core.platform.StateView @@ -62,39 +63,19 @@ class SearchFragment @Inject constructor( stateView.eventCallback = this configureRecyclerView() - - searchViewModel.observeViewEvents { - when (it) { - is SearchViewEvents.Failure -> { - stateView.state = StateView.State.Error(errorFormatter.toHumanReadable(it.throwable)) - } - is SearchViewEvents.Loading -> { - stateView.state = StateView.State.Loading - } - }.exhaustive - } } private fun configureRecyclerView() { searchResultRecycler.trackItemsVisibilityChange() searchResultRecycler.configureWith(controller, showDivider = false) + (searchResultRecycler.layoutManager as? LinearLayoutManager)?.stackFromEnd = true controller.listener = this controller.addModelBuildListener { pendingScrollToPosition?.let { - searchResultRecycler.scrollToPosition(it) + searchResultRecycler.smoothScrollToPosition(it) } } - - searchResultRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { - // Load next batch when scrolled to the top - if (newState == RecyclerView.SCROLL_STATE_IDLE - && (searchResultRecycler.layoutManager as LinearLayoutManager).findFirstVisibleItemPosition() == 0) { - searchViewModel.handle(SearchAction.ScrolledToTop) - } - } - }) } override fun onDestroy() { @@ -104,18 +85,26 @@ class SearchFragment @Inject constructor( } override fun invalidate() = withState(searchViewModel) { state -> - if (state.searchResult?.results?.isNotEmpty() == true) { + if (state.searchResult?.results.isNullOrEmpty()) { + when (state.asyncEventsRequest) { + is Loading -> { + stateView.state = StateView.State.Loading + } + is Fail -> { + stateView.state = StateView.State.Error(errorFormatter.toHumanReadable(state.asyncEventsRequest.error)) + } + is Success -> { + stateView.state = StateView.State.Empty( + title = getString(R.string.search_no_results), + image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_search_no_results)) + } + } + } else { + val lastBatchSize = state.lastBatch?.results?.size ?: 0 + pendingScrollToPosition = if (lastBatchSize > 0) lastBatchSize - 1 else 0 + stateView.state = StateView.State.Content controller.setData(state) - - val lastBatchSize = state.lastBatch?.results?.size ?: 0 - val scrollPosition = if (lastBatchSize > 0) lastBatchSize - 1 else 0 - pendingScrollToPosition = scrollPosition - } else { - stateView.state = StateView.State.Empty( - title = getString(R.string.search_no_results), - image = ContextCompat.getDrawable(requireContext(), R.drawable.ic_search_no_results) - ) } } @@ -133,4 +122,8 @@ class SearchFragment @Inject constructor( navigator.openRoom(requireContext(), event.roomId!!, event.eventId) } + + override fun loadMore() { + searchViewModel.handle(SearchAction.LoadMore) + } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt index 82d3120311..39e197e54f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt @@ -17,8 +17,10 @@ package im.vector.app.features.home.room.detail.search import com.airbnb.epoxy.TypedEpoxyController +import com.airbnb.epoxy.VisibilityState import im.vector.app.core.date.DateFormatKind import im.vector.app.core.date.VectorDateFormatter +import im.vector.app.core.epoxy.loadingItem import im.vector.app.core.ui.list.genericItemHeader import im.vector.app.features.home.AvatarRenderer import org.matrix.android.sdk.api.session.Session @@ -34,8 +36,11 @@ class SearchResultController @Inject constructor( var listener: Listener? = null + private var idx = 0 + interface Listener { fun onItemClicked(event: Event) + fun loadMore() } init { @@ -45,6 +50,18 @@ class SearchResultController @Inject constructor( override fun buildModels(data: SearchViewState?) { data?.searchResult?.results ?: return + if (!data.searchResult.nextBatch.isNullOrEmpty()) { + loadingItem { + // Always use a different id, because we can be notified several times of visibility state changed + id("loadMore${idx++}") + onVisibilityStateChanged { _, _, visibilityState -> + if (visibilityState == VisibilityState.VISIBLE) { + listener?.loadMore() + } + } + } + } + buildSearchResultItems(data.searchResult.results!!) } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt index 41dabd8686..6f07cb765c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewEvents.kt @@ -20,5 +20,4 @@ import im.vector.app.core.platform.VectorViewEvents sealed class SearchViewEvents : VectorViewEvents { data class Failure(val throwable: Throwable) : SearchViewEvents() - data class Loading(val message: CharSequence? = null) : SearchViewEvents() } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt index 5747e83cad..9786560d19 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -16,16 +16,21 @@ package im.vector.app.features.home.room.detail.search +import androidx.lifecycle.viewModelScope +import com.airbnb.mvrx.Fail import com.airbnb.mvrx.FragmentViewModelContext +import com.airbnb.mvrx.Loading import com.airbnb.mvrx.MvRxViewModelFactory +import com.airbnb.mvrx.Success import com.airbnb.mvrx.ViewModelContext import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel -import org.matrix.android.sdk.api.MatrixCallback +import kotlinx.coroutines.launch import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.search.SearchResult +import org.matrix.android.sdk.internal.util.awaitCallback class SearchViewModel @AssistedInject constructor( @Assisted private val initialState: SearchViewState, @@ -48,26 +53,22 @@ class SearchViewModel @AssistedInject constructor( override fun handle(action: SearchAction) { when (action) { - is SearchAction.SearchWith -> handleSearchWith(action) - is SearchAction.ScrolledToTop -> handleScrolledToTop() - is SearchAction.Retry -> handleRetry() + is SearchAction.SearchWith -> handleSearchWith(action) + is SearchAction.LoadMore -> handleLoadMore() + is SearchAction.Retry -> handleRetry() }.exhaustive } private fun handleSearchWith(action: SearchAction.SearchWith) { if (action.searchTerm.length > 1) { setState { - copy(searchTerm = action.searchTerm, isNextBatch = false) + copy(searchTerm = action.searchTerm) } - startSearching() } } - private fun handleScrolledToTop() { - setState { - copy(isNextBatch = true) - } + private fun handleLoadMore() { startSearching(true) } @@ -75,44 +76,51 @@ class SearchViewModel @AssistedInject constructor( startSearching() } - private fun startSearching(scrolledToTop: Boolean = false) = withState { state -> + private fun startSearching(isNextBatch: Boolean = false) = withState { state -> if (state.roomId == null || state.searchTerm == null) return@withState // There is no batch to retrieve - if (scrolledToTop && state.searchResult?.nextBatch == null) return@withState + if (isNextBatch && state.searchResult?.nextBatch == null) return@withState - _viewEvents.post(SearchViewEvents.Loading()) - - session - .getRoom(state.roomId) - ?.search( - searchTerm = state.searchTerm, - nextBatch = state.searchResult?.nextBatch, - orderByRecent = true, - beforeLimit = 0, - afterLimit = 0, - includeProfile = true, - limit = 20, - callback = object : MatrixCallback { - override fun onFailure(failure: Throwable) { - onSearchFailure(failure) - } - - override fun onSuccess(data: SearchResult) { - onSearchResultSuccess(data) - } - } + // Show full screen loading just for the clean search + if (!isNextBatch) { + setState { + copy( + asyncEventsRequest = Loading() ) - } - - private fun onSearchFailure(failure: Throwable) { - setState { - copy(searchResult = null) + } + } + + viewModelScope.launch { + try { + val result = awaitCallback { + session + .getRoom(state.roomId) + ?.search( + searchTerm = state.searchTerm, + nextBatch = state.searchResult?.nextBatch, + orderByRecent = true, + beforeLimit = 0, + afterLimit = 0, + includeProfile = true, + limit = 20, + callback = it + ) + } + onSearchResultSuccess(result, isNextBatch) + } catch (failure: Throwable) { + _viewEvents.post(SearchViewEvents.Failure(failure)) + setState { + copy( + asyncEventsRequest = Fail(failure), + searchResult = null + ) + } + } } - _viewEvents.post(SearchViewEvents.Failure(failure)) } - private fun onSearchResultSuccess(searchResult: SearchResult) = withState { state -> + private fun onSearchResultSuccess(searchResult: SearchResult, isNextBatch: Boolean) = withState { state -> val accumulatedResult = SearchResult( nextBatch = searchResult.nextBatch, results = searchResult.results, @@ -120,7 +128,7 @@ class SearchViewModel @AssistedInject constructor( ) // Accumulate results if it is the next batch - if (state.isNextBatch) { + if (isNextBatch) { if (state.searchResult != null) { accumulatedResult.results = accumulatedResult.results?.plus(state.searchResult.results!!) } @@ -130,7 +138,11 @@ class SearchViewModel @AssistedInject constructor( } setState { - copy(searchResult = accumulatedResult, lastBatch = searchResult) + copy( + searchResult = accumulatedResult, + lastBatch = searchResult, + asyncEventsRequest = Success(Unit) + ) } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt index 8c2eb82ad1..3873769c44 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt @@ -16,7 +16,9 @@ package im.vector.app.features.home.room.detail.search +import com.airbnb.mvrx.Async import com.airbnb.mvrx.MvRxState +import com.airbnb.mvrx.Uninitialized import org.matrix.android.sdk.api.session.search.SearchResult data class SearchViewState( @@ -26,7 +28,8 @@ data class SearchViewState( val lastBatch: SearchResult? = null, val searchTerm: String? = null, val roomId: String? = null, - val isNextBatch: Boolean = false + // Current pagination request + val asyncEventsRequest: Async = Uninitialized ) : MvRxState { constructor(args: SearchArgs) : this(roomId = args.roomId) diff --git a/vector/src/main/res/layout/fragment_search.xml b/vector/src/main/res/layout/fragment_search.xml index 5478e1f68c..757168850b 100644 --- a/vector/src/main/res/layout/fragment_search.xml +++ b/vector/src/main/res/layout/fragment_search.xml @@ -2,8 +2,7 @@ + android:layout_height="match_parent"> Date: Tue, 29 Sep 2020 20:46:47 +0300 Subject: [PATCH 096/278] Do not use hard wrapping. --- .../app/features/home/room/detail/search/SearchFragment.kt | 6 +++--- .../home/room/detail/search/SearchResultController.kt | 6 ++---- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index 5f943c6031..9f024f50f3 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -118,9 +118,9 @@ class SearchFragment @Inject constructor( } override fun onItemClicked(event: Event) { - event.roomId ?: return - - navigator.openRoom(requireContext(), event.roomId!!, event.eventId) + event.roomId?.let { + navigator.openRoom(requireContext(), it, event.eventId) + } } override fun loadMore() { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt index 39e197e54f..cf79ed0ea6 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt @@ -48,9 +48,7 @@ class SearchResultController @Inject constructor( } override fun buildModels(data: SearchViewState?) { - data?.searchResult?.results ?: return - - if (!data.searchResult.nextBatch.isNullOrEmpty()) { + if (!data?.searchResult?.nextBatch.isNullOrEmpty()) { loadingItem { // Always use a different id, because we can be notified several times of visibility state changed id("loadMore${idx++}") @@ -62,7 +60,7 @@ class SearchResultController @Inject constructor( } } - buildSearchResultItems(data.searchResult.results!!) + buildSearchResultItems(data?.searchResult?.results.orEmpty()) } private fun buildSearchResultItems(events: List) { From d4a0659483e8ee12ada1616639be5d52df0e69e5 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 30 Sep 2020 10:58:32 +0300 Subject: [PATCH 097/278] Init room in constructor. --- .../room/detail/search/SearchViewModel.kt | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt index 9786560d19..62fb9c8ae9 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -29,6 +29,7 @@ import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import kotlinx.coroutines.launch import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.room.Room import org.matrix.android.sdk.api.session.search.SearchResult import org.matrix.android.sdk.internal.util.awaitCallback @@ -37,6 +38,12 @@ class SearchViewModel @AssistedInject constructor( private val session: Session ) : VectorViewModel(initialState) { + private var room: Room? = null + + init { + room = initialState.roomId?.let { session.getRoom(it) } + } + @AssistedInject.Factory interface Factory { fun create(initialState: SearchViewState): SearchViewModel @@ -94,18 +101,16 @@ class SearchViewModel @AssistedInject constructor( viewModelScope.launch { try { val result = awaitCallback { - session - .getRoom(state.roomId) - ?.search( - searchTerm = state.searchTerm, - nextBatch = state.searchResult?.nextBatch, - orderByRecent = true, - beforeLimit = 0, - afterLimit = 0, - includeProfile = true, - limit = 20, - callback = it - ) + room?.search( + searchTerm = state.searchTerm, + nextBatch = state.searchResult?.nextBatch, + orderByRecent = true, + beforeLimit = 0, + afterLimit = 0, + includeProfile = true, + limit = 20, + callback = it + ) } onSearchResultSuccess(result, isNextBatch) } catch (failure: Throwable) { From 0838cbaf03d9e075261e449601a7940f608d62a4 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 30 Sep 2020 11:07:09 +0300 Subject: [PATCH 098/278] UI fixes. --- vector/src/main/res/layout/item_search_result.xml | 4 +++- vector/src/main/res/menu/menu_timeline.xml | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/vector/src/main/res/layout/item_search_result.xml b/vector/src/main/res/layout/item_search_result.xml index 9946a2fb50..73f949f777 100644 --- a/vector/src/main/res/layout/item_search_result.xml +++ b/vector/src/main/res/layout/item_search_result.xml @@ -49,9 +49,11 @@ + app:showAsAction="never" /> Date: Wed, 30 Sep 2020 11:45:46 +0300 Subject: [PATCH 099/278] Cancel previous search task before starting new one. --- .../home/room/detail/search/SearchViewModel.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt index 62fb9c8ae9..e9cca86e30 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -28,9 +28,11 @@ import com.squareup.inject.assisted.AssistedInject import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import kotlinx.coroutines.launch +import org.matrix.android.sdk.api.failure.Failure import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.room.Room import org.matrix.android.sdk.api.session.search.SearchResult +import org.matrix.android.sdk.api.util.Cancelable import org.matrix.android.sdk.internal.util.awaitCallback class SearchViewModel @AssistedInject constructor( @@ -39,6 +41,7 @@ class SearchViewModel @AssistedInject constructor( ) : VectorViewModel(initialState) { private var room: Room? = null + private var currentTask: Cancelable? = null init { room = initialState.roomId?.let { session.getRoom(it) } @@ -98,10 +101,14 @@ class SearchViewModel @AssistedInject constructor( } } + if (state.asyncEventsRequest is Loading) { + currentTask?.cancel() + } + viewModelScope.launch { try { val result = awaitCallback { - room?.search( + currentTask = room?.search( searchTerm = state.searchTerm, nextBatch = state.searchResult?.nextBatch, orderByRecent = true, @@ -114,6 +121,8 @@ class SearchViewModel @AssistedInject constructor( } onSearchResultSuccess(result, isNextBatch) } catch (failure: Throwable) { + if (failure is Failure.Cancelled) return@launch + _viewEvents.post(SearchViewEvents.Failure(failure)) setState { copy( From 6e814678081afc535c8eb32fbf4f0bd31ba24ad0 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Wed, 30 Sep 2020 12:39:42 +0300 Subject: [PATCH 100/278] If SearchActivity is in the stack, use it. --- .../app/features/home/room/detail/search/SearchActivity.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt index 70205eed62..24069a37c3 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt @@ -70,6 +70,7 @@ class SearchActivity : VectorBaseActivity() { fun newIntent(context: Context, args: SearchArgs): Intent { return Intent(context, SearchActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT putExtra(MvRx.KEY_ARG, args) } } From ae346646e4f0fda00eb0810d8f30bd6c0437cc2c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 15:05:42 +0200 Subject: [PATCH 101/278] Cleanup --- .../roomprofile/uploads/RoomUploadsFragment.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt index b3f5047df4..876b585a59 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/uploads/RoomUploadsFragment.kt @@ -23,23 +23,21 @@ import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState import com.google.android.material.tabs.TabLayoutMediator -import org.matrix.android.sdk.api.util.toMatrixItem import im.vector.app.R import im.vector.app.core.extensions.exhaustive import im.vector.app.core.intent.getMimeTypeFromUri import im.vector.app.core.platform.VectorBaseFragment -import im.vector.app.core.resources.StringProvider import im.vector.app.core.utils.saveMedia import im.vector.app.core.utils.shareMedia import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.notifications.NotificationUtils import im.vector.app.features.roomprofile.RoomProfileArgs import kotlinx.android.synthetic.main.fragment_room_uploads.* +import org.matrix.android.sdk.api.util.toMatrixItem import javax.inject.Inject class RoomUploadsFragment @Inject constructor( private val viewModelFactory: RoomUploadsViewModel.Factory, - private val stringProvider: StringProvider, private val avatarRenderer: AvatarRenderer, private val notificationUtils: NotificationUtils ) : VectorBaseFragment(), RoomUploadsViewModel.Factory by viewModelFactory { @@ -58,8 +56,8 @@ class RoomUploadsFragment @Inject constructor( TabLayoutMediator(roomUploadsTabs, roomUploadsViewPager) { tab, position -> when (position) { - 0 -> tab.text = stringProvider.getString(R.string.uploads_media_title) - 1 -> tab.text = stringProvider.getString(R.string.uploads_files_title) + 0 -> tab.text = getString(R.string.uploads_media_title) + 1 -> tab.text = getString(R.string.uploads_files_title) } }.attach() @@ -70,7 +68,7 @@ class RoomUploadsFragment @Inject constructor( is RoomUploadsViewEvents.FileReadyForSharing -> { shareMedia(requireContext(), it.file, getMimeTypeFromUri(requireContext(), it.file.toUri())) } - is RoomUploadsViewEvents.FileReadyForSaving -> { + is RoomUploadsViewEvents.FileReadyForSaving -> { saveMedia( context = requireContext(), file = it.file, @@ -79,7 +77,7 @@ class RoomUploadsFragment @Inject constructor( notificationUtils = notificationUtils ) } - is RoomUploadsViewEvents.Failure -> showFailure(it.throwable) + is RoomUploadsViewEvents.Failure -> showFailure(it.throwable) }.exhaustive } } From 4649b2ac1daad64e04c2c1a290f7c3e521653297 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 16:09:06 +0200 Subject: [PATCH 102/278] Code review --- .../sdk/api/session/search/SearchResult.kt | 17 ++++-- .../sdk/internal/session/DefaultSession.kt | 4 +- .../sdk/internal/session/search/SearchAPI.kt | 6 +- .../sdk/internal/session/search/SearchTask.kt | 4 +- .../search/request/SearchRequestBody.kt | 3 + .../search/request/SearchRequestCategories.kt | 4 +- .../search/request/SearchRequestRoomEvents.kt | 37 +++++++++++-- .../session/search/response/SearchResponse.kt | 6 +- .../response/SearchResponseCategories.kt | 5 +- .../search/response/SearchResponseItem.kt | 19 +++++-- .../response/SearchResponseRoomEvents.kt | 2 +- .../home/room/detail/search/SearchFragment.kt | 10 ++-- .../detail/search/SearchResultController.kt | 13 ++--- .../room/detail/search/SearchResultItem.kt | 24 ++++---- .../room/detail/search/SearchViewModel.kt | 55 ++++++++----------- .../room/detail/search/SearchViewState.kt | 11 ++-- .../src/main/res/layout/activity_search.xml | 4 +- .../src/main/res/layout/fragment_search.xml | 4 +- 18 files changed, 138 insertions(+), 90 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt index 4529bf6d13..59d1c4d46d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt @@ -23,10 +23,17 @@ import org.matrix.android.sdk.api.session.events.model.Event * Domain class to represent the response of a search request in a room. */ data class SearchResult( - // Token that can be used to get the next batch of results, by passing as the next_batch parameter to the next call. If this field is absent, there are no more results. + /** + * Token that can be used to get the next batch of results, by passing as the next_batch parameter to the next call. + * If this field is null, there are no more results. + */ val nextBatch: String? = null, - // List of words which should be highlighted, useful for stemming which may change the query terms. - var highlights: List? = null, - // List of results in the requested order. - var results: List? = null + /** + * List of words which should be highlighted, useful for stemming which may change the query terms. + */ + val highlights: List? = null, + /** + * List of results in the requested order. + */ + val results: List? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt index 34b6be225b..d1c0844caa 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt @@ -96,6 +96,7 @@ internal class DefaultSession @Inject constructor( private val pushRuleService: Lazy, private val pushersService: Lazy, private val termsService: Lazy, + private val searchService: Lazy, private val cryptoService: Lazy, private val defaultFileService: Lazy, private val permalinkService: Lazy, @@ -121,8 +122,7 @@ internal class DefaultSession @Inject constructor( private val taskExecutor: TaskExecutor, private val callSignalingService: Lazy, @UnauthenticatedWithCertificate - private val unauthenticatedWithCertificateOkHttpClient: Lazy, - private val searchService: Lazy + private val unauthenticatedWithCertificateOkHttpClient: Lazy ) : Session, RoomService by roomService.get(), RoomDirectoryService by roomDirectoryService.get(), diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt index 3d5dbc306f..a903cd8cc8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt @@ -28,9 +28,9 @@ internal interface SearchAPI { /** * Performs a full text search across different categories. + * Ref: https://matrix.org/docs/spec/client_server/r0.6.1#post-matrix-client-r0-search */ @POST(NetworkConstants.URI_API_PREFIX_PATH_R0 + "search") - fun search( - @Query("next_batch") nextBatch: String?, - @Body body: SearchRequestBody): Call + fun search(@Query("next_batch") nextBatch: String?, + @Body body: SearchRequestBody): Call } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index a2cad6bb2f..3bb65fb8da 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -69,14 +69,14 @@ internal class DefaultSearchTask @Inject constructor( ) ) apiCall = searchAPI.search(params.nextBatch, searchRequestBody) - }.toDomain().apply { results = results?.reversed() } + }.toDomain() } private fun SearchResponse.toDomain(): SearchResult { return SearchResult( nextBatch = searchCategories.roomEvents?.nextBatch, highlights = searchCategories.roomEvents?.highlights, - results = searchCategories.roomEvents?.results?.map { it.event } + results = searchCategories.roomEvents?.results?.map { it.event }?.reversed() ) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt index 000f89e751..7cf86457d6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt @@ -22,6 +22,9 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) internal data class SearchRequestBody( + /** + * Required. Describes which categories to search in and their criteria. + */ @Json(name = "search_categories") val searchCategories: SearchRequestCategories ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt index 606b7320e5..9d87114237 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt @@ -22,7 +22,9 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) internal data class SearchRequestCategories( - // Mapping of category name to search criteria. + /** + * Mapping of category name to search criteria. + */ @Json(name = "room_events") val roomEvents: SearchRequestRoomEvents? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt index fef1baa990..c5234b1052 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt @@ -22,15 +22,44 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) internal data class SearchRequestRoomEvents( - // Required. The string to search events for. + /** + * Required. The string to search events for. + */ @Json(name = "search_term") val searchTerm: String, + + /** + * The keys to search. Defaults to all. One of: ["content.body", "content.name", "content.topic"] + */ + @Json(name = "keys") + val keys: Any? = null, + + /** + * This takes a filter. + */ @Json(name = "filter") val filter: SearchRequestFilter? = null, - // By default, this is "rank". One of: ["recent", "rank"] + + /** + * The order in which to search for results. By default, this is "rank". One of: ["recent", "rank"] + */ @Json(name = "order_by") val orderBy: SearchRequestOrder? = null, - // Configures whether any context for the events returned are included in the response. + + /** + * Configures whether any context for the events returned are included in the response. + */ @Json(name = "event_context") - val eventContext: SearchRequestEventContext? = null + val eventContext: SearchRequestEventContext? = null, + + /** + * Requests the server return the current state for each room returned. + */ + @Json(name = "include_state") + val include_state: Boolean? = null + + /** + * Requests that the server partitions the result set based on the provided list of keys. + */ + // val groupings: SearchRequestGroupings? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt index b7debb6b1e..8e11ba1468 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt @@ -21,8 +21,10 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchResponse( - // Required. Describes which categories to search in and their criteria. +internal data class SearchResponse( + /** + * Required. Describes which categories to search in and their criteria. + */ @Json(name = "search_categories") val searchCategories: SearchResponseCategories ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt index c931b23826..8e46502e27 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt @@ -21,7 +21,10 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -data class SearchResponseCategories( +internal data class SearchResponseCategories( + /** + * Mapping of category name to search criteria. + */ @Json(name = "room_events") val roomEvents: SearchResponseRoomEvents? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt index 7c675f0593..5b0806ce85 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt @@ -22,11 +22,22 @@ import com.squareup.moshi.JsonClass import org.matrix.android.sdk.api.session.events.model.Event @JsonClass(generateAdapter = true) -data class SearchResponseItem( - // A number that describes how closely this result matches the search. Higher is closer. +internal data class SearchResponseItem( + /** + * A number that describes how closely this result matches the search. Higher is closer. + */ @Json(name = "rank") val rank: Double? = null, - // The event that matched. + + /** + * The event that matched. + */ @Json(name = "result") - val event: Event + val event: Event, + + /** + * Context for result, if requested. + */ + @Json(name = "context") + val context: SearchResponseEventContext? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt index 61ed2bf3cf..1078b9a9f9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt @@ -21,7 +21,7 @@ import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -class SearchResponseRoomEvents( +internal data class SearchResponseRoomEvents( // List of results in the requested order. @Json(name = "results") val results: List? = null, diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index 9f024f50f3..ea7ba8f464 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -46,7 +46,7 @@ data class SearchArgs( class SearchFragment @Inject constructor( val viewModelFactory: SearchViewModel.Factory, - val controller: SearchResultController + private val controller: SearchResultController ) : VectorBaseFragment(), StateView.EventCallback, SearchResultController.Listener { private val fragmentArgs: SearchArgs by args() @@ -85,13 +85,13 @@ class SearchFragment @Inject constructor( } override fun invalidate() = withState(searchViewModel) { state -> - if (state.searchResult?.results.isNullOrEmpty()) { - when (state.asyncEventsRequest) { + if (state.searchResult.isNullOrEmpty()) { + when (state.asyncSearchRequest) { is Loading -> { stateView.state = StateView.State.Loading } is Fail -> { - stateView.state = StateView.State.Error(errorFormatter.toHumanReadable(state.asyncEventsRequest.error)) + stateView.state = StateView.State.Error(errorFormatter.toHumanReadable(state.asyncSearchRequest.error)) } is Success -> { stateView.state = StateView.State.Empty( @@ -100,7 +100,7 @@ class SearchFragment @Inject constructor( } } } else { - val lastBatchSize = state.lastBatch?.results?.size ?: 0 + val lastBatchSize = state.lastBatch?.size ?: 0 pendingScrollToPosition = if (lastBatchSize > 0) lastBatchSize - 1 else 0 stateView.state = StateView.State.Content diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt index cf79ed0ea6..8daa4f60e4 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt @@ -48,7 +48,9 @@ class SearchResultController @Inject constructor( } override fun buildModels(data: SearchViewState?) { - if (!data?.searchResult?.nextBatch.isNullOrEmpty()) { + data ?: return + + if (data.hasMoreResult) { loadingItem { // Always use a different id, because we can be notified several times of visibility state changed id("loadMore${idx++}") @@ -60,7 +62,7 @@ class SearchResultController @Inject constructor( } } - buildSearchResultItems(data?.searchResult?.results.orEmpty()) + buildSearchResultItems(data.searchResult.orEmpty()) } private fun buildSearchResultItems(events: List) { @@ -83,12 +85,9 @@ class SearchResultController @Inject constructor( avatarRenderer(avatarRenderer) dateFormatter(dateFormatter) event(event) + // I think we should use the data returned by the server? sender(event.senderId?.let { session.getUser(it) }) - listener(object : SearchResultItem.Listener { - override fun onItemClicked() { - listener?.onItemClicked(event) - } - }) + listener { listener?.onItemClicked(event) } } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt index fb0121cbcf..2d569c1c6a 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt @@ -23,8 +23,10 @@ import com.airbnb.epoxy.EpoxyModelClass import im.vector.app.R import im.vector.app.core.date.DateFormatKind import im.vector.app.core.date.VectorDateFormatter +import im.vector.app.core.epoxy.ClickListener import im.vector.app.core.epoxy.VectorEpoxyHolder import im.vector.app.core.epoxy.VectorEpoxyModel +import im.vector.app.core.epoxy.onClick import im.vector.app.features.home.AvatarRenderer import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.user.model.User @@ -33,21 +35,21 @@ import org.matrix.android.sdk.api.util.toMatrixItem @EpoxyModelClass(layout = R.layout.item_search_result) abstract class SearchResultItem : VectorEpoxyModel() { - @EpoxyAttribute var avatarRenderer: AvatarRenderer? = null + @EpoxyAttribute lateinit var avatarRenderer: AvatarRenderer @EpoxyAttribute var dateFormatter: VectorDateFormatter? = null - @EpoxyAttribute var event: Event? = null + @EpoxyAttribute lateinit var event: Event @EpoxyAttribute var sender: User? = null - @EpoxyAttribute var listener: Listener? = null + @EpoxyAttribute var listener: ClickListener? = null override fun bind(holder: Holder) { super.bind(holder) - event ?: return - holder.view.setOnClickListener { listener?.onItemClicked() } - sender?.toMatrixItem()?.let { avatarRenderer?.render(it, holder.avatarImageView) } - holder.memberNameView.text = sender?.displayName - holder.timeView.text = dateFormatter?.format(event!!.originServerTs, DateFormatKind.MESSAGE_SIMPLE) - holder.contentView.text = event?.content?.get("body") as? String + holder.view.onClick(listener) + sender?.toMatrixItem()?.let { avatarRenderer.render(it, holder.avatarImageView) } + holder.memberNameView.text = sender?.getBestName() + holder.timeView.text = dateFormatter?.format(event.originServerTs, DateFormatKind.MESSAGE_SIMPLE) + // TODO Improve that (use formattedBody, etc.) + holder.contentView.text = event.content?.get("body") as? String } class Holder : VectorEpoxyHolder() { @@ -56,8 +58,4 @@ abstract class SearchResultItem : VectorEpoxyModel() { val timeView by bind(R.id.messageTimeView) val contentView by bind(R.id.messageContentView) } - - interface Listener { - fun onItemClicked() - } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt index e9cca86e30..6703815f57 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -37,15 +37,14 @@ import org.matrix.android.sdk.internal.util.awaitCallback class SearchViewModel @AssistedInject constructor( @Assisted private val initialState: SearchViewState, - private val session: Session + session: Session ) : VectorViewModel(initialState) { - private var room: Room? = null + private var room: Room? = session.getRoom(initialState.roomId) + private var currentTask: Cancelable? = null - init { - room = initialState.roomId?.let { session.getRoom(it) } - } + private var nextBatch: String? = null @AssistedInject.Factory interface Factory { @@ -64,8 +63,8 @@ class SearchViewModel @AssistedInject constructor( override fun handle(action: SearchAction) { when (action) { is SearchAction.SearchWith -> handleSearchWith(action) - is SearchAction.LoadMore -> handleLoadMore() - is SearchAction.Retry -> handleRetry() + is SearchAction.LoadMore -> handleLoadMore() + is SearchAction.Retry -> handleRetry() }.exhaustive } @@ -74,7 +73,7 @@ class SearchViewModel @AssistedInject constructor( setState { copy(searchTerm = action.searchTerm) } - startSearching() + startSearching(false) } } @@ -83,25 +82,25 @@ class SearchViewModel @AssistedInject constructor( } private fun handleRetry() { - startSearching() + startSearching(false) } - private fun startSearching(isNextBatch: Boolean = false) = withState { state -> - if (state.roomId == null || state.searchTerm == null) return@withState + private fun startSearching(isNextBatch: Boolean) = withState { state -> + if (state.searchTerm == null) return@withState // There is no batch to retrieve - if (isNextBatch && state.searchResult?.nextBatch == null) return@withState + if (isNextBatch && nextBatch == null) return@withState // Show full screen loading just for the clean search if (!isNextBatch) { setState { copy( - asyncEventsRequest = Loading() + asyncSearchRequest = Loading() ) } } - if (state.asyncEventsRequest is Loading) { + if (state.asyncSearchRequest is Loading) { currentTask?.cancel() } @@ -110,7 +109,7 @@ class SearchViewModel @AssistedInject constructor( val result = awaitCallback { currentTask = room?.search( searchTerm = state.searchTerm, - nextBatch = state.searchResult?.nextBatch, + nextBatch = nextBatch, orderByRecent = true, beforeLimit = 0, afterLimit = 0, @@ -126,7 +125,7 @@ class SearchViewModel @AssistedInject constructor( _viewEvents.post(SearchViewEvents.Failure(failure)) setState { copy( - asyncEventsRequest = Fail(failure), + asyncSearchRequest = Fail(failure), searchResult = null ) } @@ -135,27 +134,19 @@ class SearchViewModel @AssistedInject constructor( } private fun onSearchResultSuccess(searchResult: SearchResult, isNextBatch: Boolean) = withState { state -> - val accumulatedResult = SearchResult( - nextBatch = searchResult.nextBatch, - results = searchResult.results, - highlights = searchResult.highlights - ) - // Accumulate results if it is the next batch - if (isNextBatch) { - if (state.searchResult != null) { - accumulatedResult.results = accumulatedResult.results?.plus(state.searchResult.results!!) - } - if (state.searchResult?.highlights != null) { - accumulatedResult.highlights = accumulatedResult.highlights?.plus(state.searchResult.highlights!!) - } - } + val accumulatedResult = searchResult.results.orEmpty().plus(state.searchResult?.takeIf { isNextBatch }.orEmpty()) + + // Note: We do not care about the highlights for the moment, but it will be the same algorithm + + nextBatch = searchResult.nextBatch setState { copy( searchResult = accumulatedResult, - lastBatch = searchResult, - asyncEventsRequest = Success(Unit) + hasMoreResult = !nextBatch.isNullOrEmpty(), + lastBatch = searchResult.results, + asyncSearchRequest = Success(Unit) ) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt index 3873769c44..72da1ca940 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt @@ -19,17 +19,18 @@ package im.vector.app.features.home.room.detail.search import com.airbnb.mvrx.Async import com.airbnb.mvrx.MvRxState import com.airbnb.mvrx.Uninitialized -import org.matrix.android.sdk.api.session.search.SearchResult +import org.matrix.android.sdk.api.session.events.model.Event data class SearchViewState( // Accumulated search result - val searchResult: SearchResult? = null, + val searchResult: List? = null, + val hasMoreResult: Boolean = false, // Last batch result will help RecyclerView to position itself - val lastBatch: SearchResult? = null, + val lastBatch: List? = null, val searchTerm: String? = null, - val roomId: String? = null, + val roomId: String = "", // Current pagination request - val asyncEventsRequest: Async = Uninitialized + val asyncSearchRequest: Async = Uninitialized ) : MvRxState { constructor(args: SearchArgs) : this(roomId = args.roomId) diff --git a/vector/src/main/res/layout/activity_search.xml b/vector/src/main/res/layout/activity_search.xml index a3aa21eecc..2268bf932c 100644 --- a/vector/src/main/res/layout/activity_search.xml +++ b/vector/src/main/res/layout/activity_search.xml @@ -24,8 +24,8 @@ style="@style/VectorSearchView" android:layout_width="match_parent" android:layout_height="wrap_content" - app:queryHint="@string/search_hint" - android:backgroundTint="@color/base_color" /> + android:backgroundTint="@color/base_color" + app:queryHint="@string/search_hint" /> diff --git a/vector/src/main/res/layout/fragment_search.xml b/vector/src/main/res/layout/fragment_search.xml index 757168850b..330e70d86b 100644 --- a/vector/src/main/res/layout/fragment_search.xml +++ b/vector/src/main/res/layout/fragment_search.xml @@ -1,5 +1,6 @@ @@ -8,6 +9,7 @@ android:id="@+id/searchResultRecycler" android:layout_width="match_parent" android:layout_height="match_parent" - android:overScrollMode="always" /> + android:overScrollMode="always" + tools:listitem="@layout/item_search_result" /> \ No newline at end of file From 3705fa14bd863108e48b9e820f23ff00ad71cba8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 17:03:53 +0200 Subject: [PATCH 103/278] Use sender data return from search result --- .../android/sdk/api/session/room/Room.kt | 1 + .../sdk/api/session/search/SearchResult.kt | 8 ++++- .../sdk/api/session/search/SearchService.kt | 1 + .../sdk/internal/session/search/SearchTask.kt | 18 ++++++++++- .../response/SearchResponseEventContext.kt | 2 +- .../home/room/detail/search/SearchActivity.kt | 3 +- .../home/room/detail/search/SearchFragment.kt | 5 ++-- .../detail/search/SearchResultController.kt | 20 +++++++------ .../room/detail/search/SearchResultItem.kt | 10 +++---- .../room/detail/search/SearchViewModel.kt | 30 +++++++++++-------- .../room/detail/search/SearchViewState.kt | 8 ++--- 11 files changed, 69 insertions(+), 37 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt index 86029e5419..9afff5f59c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt @@ -83,6 +83,7 @@ interface Room : * @param beforeLimit how many events before the result are returned. * @param afterLimit how many events after the result are returned. * @param includeProfile requests that the server returns the historic profile information for the users that sent the events that were returned. + * @param callback Callback to get the search result */ fun search(searchTerm: String, nextBatch: String?, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt index 59d1c4d46d..e95d7fab19 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt @@ -18,6 +18,7 @@ package org.matrix.android.sdk.api.session.search import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.util.MatrixItem /** * Domain class to represent the response of a search request in a room. @@ -35,5 +36,10 @@ data class SearchResult( /** * List of results in the requested order. */ - val results: List? = null + val results: List? = null +) + +data class EventAndSender( + val event: Event, + val sender: MatrixItem.UserItem? ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt index 0abbdfd958..a8c9e79ba9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt @@ -36,6 +36,7 @@ interface SearchService { * @param beforeLimit how many events before the result are returned. * @param afterLimit how many events after the result are returned. * @param includeProfile requests that the server returns the historic profile information for the users that sent the events that were returned. + * @param callback Callback to get the search result */ fun search(searchTerm: String, roomId: String, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index 3bb65fb8da..c90068e507 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -18,7 +18,9 @@ package org.matrix.android.sdk.internal.session.search import org.greenrobot.eventbus.EventBus +import org.matrix.android.sdk.api.session.search.EventAndSender import org.matrix.android.sdk.api.session.search.SearchResult +import org.matrix.android.sdk.api.util.MatrixItem import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.session.search.request.SearchRequestBody import org.matrix.android.sdk.internal.session.search.request.SearchRequestCategories @@ -76,7 +78,21 @@ internal class DefaultSearchTask @Inject constructor( return SearchResult( nextBatch = searchCategories.roomEvents?.nextBatch, highlights = searchCategories.roomEvents?.highlights, - results = searchCategories.roomEvents?.results?.map { it.event }?.reversed() + results = searchCategories.roomEvents?.results?.map { searchResponseItem -> + EventAndSender( + searchResponseItem.event, + searchResponseItem.event.senderId?.let { senderId -> + searchResponseItem.context?.profileInfo?.get(senderId) + ?.let { + MatrixItem.UserItem( + senderId, + it["displayname"] as? String, + it["avatar_url"] as? String + ) + } + } + ) + }?.reversed() ) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt index 596645c355..f4d8699b2d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt @@ -38,5 +38,5 @@ internal data class SearchResponseEventContext( val end: String? = null, // The historic profile information of the users that sent the events returned. The string key is the user ID for which the profile belongs to. @Json(name = "profile_info") - val profileInfo: JsonDict? = null + val profileInfo: Map? = null ) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt index 24069a37c3..f85dccbb27 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchActivity.kt @@ -70,7 +70,8 @@ class SearchActivity : VectorBaseActivity() { fun newIntent(context: Context, args: SearchArgs): Intent { return Intent(context, SearchActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT + // If we do that we will have the same room two times on the stack. Let's allow infinite stack for the moment. + // flags = Intent.FLAG_ACTIVITY_REORDER_TO_FRONT putExtra(MvRx.KEY_ARG, args) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt index ea7ba8f464..666f5b3d38 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchFragment.kt @@ -90,7 +90,7 @@ class SearchFragment @Inject constructor( is Loading -> { stateView.state = StateView.State.Loading } - is Fail -> { + is Fail -> { stateView.state = StateView.State.Error(errorFormatter.toHumanReadable(state.asyncSearchRequest.error)) } is Success -> { @@ -100,8 +100,7 @@ class SearchFragment @Inject constructor( } } } else { - val lastBatchSize = state.lastBatch?.size ?: 0 - pendingScrollToPosition = if (lastBatchSize > 0) lastBatchSize - 1 else 0 + pendingScrollToPosition = (state.lastBatchSize - 1).coerceAtLeast(0) stateView.state = StateView.State.Content controller.setData(state) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt index 8daa4f60e4..c917c4557d 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultController.kt @@ -25,6 +25,8 @@ import im.vector.app.core.ui.list.genericItemHeader import im.vector.app.features.home.AvatarRenderer import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.session.search.EventAndSender +import org.matrix.android.sdk.api.util.toMatrixItem import java.util.Calendar import javax.inject.Inject @@ -62,15 +64,15 @@ class SearchResultController @Inject constructor( } } - buildSearchResultItems(data.searchResult.orEmpty()) + buildSearchResultItems(data.searchResult) } - private fun buildSearchResultItems(events: List) { + private fun buildSearchResultItems(events: List) { var lastDate: Calendar? = null - events.forEach { event -> + events.forEach { eventAndSender -> val eventDate = Calendar.getInstance().apply { - timeInMillis = event.originServerTs ?: System.currentTimeMillis() + timeInMillis = eventAndSender.event.originServerTs ?: System.currentTimeMillis() } if (lastDate?.get(Calendar.DAY_OF_YEAR) != eventDate.get(Calendar.DAY_OF_YEAR)) { genericItemHeader { @@ -81,13 +83,13 @@ class SearchResultController @Inject constructor( lastDate = eventDate searchResultItem { - id(event.eventId) + id(eventAndSender.event.eventId) avatarRenderer(avatarRenderer) dateFormatter(dateFormatter) - event(event) - // I think we should use the data returned by the server? - sender(event.senderId?.let { session.getUser(it) }) - listener { listener?.onItemClicked(event) } + event(eventAndSender.event) + sender(eventAndSender.sender + ?: eventAndSender.event.senderId?.let { session.getUser(it) }?.toMatrixItem()) + listener { listener?.onItemClicked(eventAndSender.event) } } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt index 2d569c1c6a..10407c64e0 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchResultItem.kt @@ -27,10 +27,10 @@ import im.vector.app.core.epoxy.ClickListener import im.vector.app.core.epoxy.VectorEpoxyHolder import im.vector.app.core.epoxy.VectorEpoxyModel import im.vector.app.core.epoxy.onClick +import im.vector.app.core.extensions.setTextOrHide import im.vector.app.features.home.AvatarRenderer import org.matrix.android.sdk.api.session.events.model.Event -import org.matrix.android.sdk.api.session.user.model.User -import org.matrix.android.sdk.api.util.toMatrixItem +import org.matrix.android.sdk.api.util.MatrixItem @EpoxyModelClass(layout = R.layout.item_search_result) abstract class SearchResultItem : VectorEpoxyModel() { @@ -38,15 +38,15 @@ abstract class SearchResultItem : VectorEpoxyModel() { @EpoxyAttribute lateinit var avatarRenderer: AvatarRenderer @EpoxyAttribute var dateFormatter: VectorDateFormatter? = null @EpoxyAttribute lateinit var event: Event - @EpoxyAttribute var sender: User? = null + @EpoxyAttribute var sender: MatrixItem? = null @EpoxyAttribute var listener: ClickListener? = null override fun bind(holder: Holder) { super.bind(holder) holder.view.onClick(listener) - sender?.toMatrixItem()?.let { avatarRenderer.render(it, holder.avatarImageView) } - holder.memberNameView.text = sender?.getBestName() + sender?.let { avatarRenderer.render(it, holder.avatarImageView) } + holder.memberNameView.setTextOrHide(sender?.getBestName()) holder.timeView.text = dateFormatter?.format(event.originServerTs, DateFormatKind.MESSAGE_SIMPLE) // TODO Improve that (use formattedBody, etc.) holder.contentView.text = event.content?.get("body") as? String diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt index 6703815f57..21a2d18e71 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewModel.kt @@ -69,9 +69,14 @@ class SearchViewModel @AssistedInject constructor( } private fun handleSearchWith(action: SearchAction.SearchWith) { - if (action.searchTerm.length > 1) { + if (action.searchTerm.isNotEmpty()) { setState { - copy(searchTerm = action.searchTerm) + copy( + searchResult = emptyList(), + hasMoreResult = false, + lastBatchSize = 0, + searchTerm = action.searchTerm + ) } startSearching(false) } @@ -100,9 +105,7 @@ class SearchViewModel @AssistedInject constructor( } } - if (state.asyncSearchRequest is Loading) { - currentTask?.cancel() - } + currentTask?.cancel() viewModelScope.launch { try { @@ -118,24 +121,22 @@ class SearchViewModel @AssistedInject constructor( callback = it ) } - onSearchResultSuccess(result, isNextBatch) + onSearchResultSuccess(result) } catch (failure: Throwable) { if (failure is Failure.Cancelled) return@launch _viewEvents.post(SearchViewEvents.Failure(failure)) setState { copy( - asyncSearchRequest = Fail(failure), - searchResult = null + asyncSearchRequest = Fail(failure) ) } } } } - private fun onSearchResultSuccess(searchResult: SearchResult, isNextBatch: Boolean) = withState { state -> - // Accumulate results if it is the next batch - val accumulatedResult = searchResult.results.orEmpty().plus(state.searchResult?.takeIf { isNextBatch }.orEmpty()) + private fun onSearchResultSuccess(searchResult: SearchResult) = withState { state -> + val accumulatedResult = searchResult.results.orEmpty().plus(state.searchResult) // Note: We do not care about the highlights for the moment, but it will be the same algorithm @@ -145,9 +146,14 @@ class SearchViewModel @AssistedInject constructor( copy( searchResult = accumulatedResult, hasMoreResult = !nextBatch.isNullOrEmpty(), - lastBatch = searchResult.results, + lastBatchSize = searchResult.results.orEmpty().size, asyncSearchRequest = Success(Unit) ) } } + + override fun onCleared() { + currentTask?.cancel() + super.onCleared() + } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt index 72da1ca940..9f700b6e31 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/search/SearchViewState.kt @@ -19,14 +19,14 @@ package im.vector.app.features.home.room.detail.search import com.airbnb.mvrx.Async import com.airbnb.mvrx.MvRxState import com.airbnb.mvrx.Uninitialized -import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.session.search.EventAndSender data class SearchViewState( // Accumulated search result - val searchResult: List? = null, + val searchResult: List = emptyList(), val hasMoreResult: Boolean = false, - // Last batch result will help RecyclerView to position itself - val lastBatch: List? = null, + // Last batch size, will help RecyclerView to position itself + val lastBatchSize: Int = 0, val searchTerm: String? = null, val roomId: String = "", // Current pagination request From 92e021a3d7837be6ef1e0432c29110367b95ddc9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 18:33:33 +0200 Subject: [PATCH 104/278] Create home shortcut for any room (#1525) --- CHANGES.md | 1 + .../app/features/home/ShortcutCreator.kt | 78 +++++++++++++++++++ .../app/features/home/ShortcutsHandler.kt | 47 +---------- .../features/roomprofile/RoomProfileAction.kt | 1 + .../roomprofile/RoomProfileController.kt | 13 ++++ .../roomprofile/RoomProfileFragment.kt | 12 +++ .../roomprofile/RoomProfileViewEvents.kt | 2 + .../roomprofile/RoomProfileViewModel.kt | 38 ++++++--- .../drawable/ic_add_to_home_screen_24dp.xml | 12 +++ vector/src/main/res/values/strings.xml | 2 +- 10 files changed, 151 insertions(+), 55 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt create mode 100644 vector/src/main/res/drawable/ic_add_to_home_screen_24dp.xml diff --git a/CHANGES.md b/CHANGES.md index 026d7af6cd..754fb35612 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,7 @@ Improvements 🙌: - PIN code: request PIN code if phone has been locked - Small optimisation of scrolling experience in timeline (#2114) - Allow user to reset cross signing if he has no way to recover (#2052) + - Create home shortcut for any room (#1525) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt new file mode 100644 index 0000000000..171cc7b3d9 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2020 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.home + +import android.content.Context +import android.graphics.Bitmap +import android.os.Build +import androidx.annotation.WorkerThread +import androidx.core.content.pm.ShortcutInfoCompat +import androidx.core.content.pm.ShortcutManagerCompat +import androidx.core.graphics.drawable.IconCompat +import im.vector.app.core.glide.GlideApp +import im.vector.app.core.utils.DimensionConverter +import im.vector.app.features.home.room.detail.RoomDetailActivity +import org.matrix.android.sdk.api.session.room.model.RoomSummary +import org.matrix.android.sdk.api.util.toMatrixItem +import javax.inject.Inject + +private val useAdaptiveIcon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O +private const val adaptiveIconSizeDp = 108 +private const val adaptiveIconOuterSidesDp = 18 + +class ShortcutCreator @Inject constructor( + private val context: Context, + private val avatarRenderer: AvatarRenderer, + private val dimensionConverter: DimensionConverter +) { + private val adaptiveIconSize = dimensionConverter.dpToPx(adaptiveIconSizeDp) + private val adaptiveIconOuterSides = dimensionConverter.dpToPx(adaptiveIconOuterSidesDp) + private val iconSize by lazy { + if (useAdaptiveIcon) { + adaptiveIconSize - adaptiveIconOuterSides + } else { + dimensionConverter.dpToPx(72) + } + } + + fun canCreateShortcut(): Boolean { + return ShortcutManagerCompat.isRequestPinShortcutSupported(context) + } + + @WorkerThread + fun create(roomSummary: RoomSummary): ShortcutInfoCompat { + val intent = RoomDetailActivity.shortcutIntent(context, roomSummary.roomId) + val bitmap = try { + avatarRenderer.shortcutDrawable(GlideApp.with(context), roomSummary.toMatrixItem(), iconSize) + } catch (failure: Throwable) { + null + } + return ShortcutInfoCompat.Builder(context, roomSummary.roomId) + .setShortLabel(roomSummary.displayName) + .setIcon(bitmap?.toProfileImageIcon()) + .setIntent(intent) + .build() + } + + private fun Bitmap.toProfileImageIcon(): IconCompat { + return if (useAdaptiveIcon) { + IconCompat.createWithAdaptiveBitmap(this) + } else { + IconCompat.createWithBitmap(this) + } + } +} diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt index 1a476913f3..3684a8b3f8 100644 --- a/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutsHandler.kt @@ -18,40 +18,19 @@ package im.vector.app.features.home import android.content.Context import android.content.pm.ShortcutManager -import android.graphics.Bitmap import android.os.Build import androidx.core.content.getSystemService -import androidx.core.content.pm.ShortcutInfoCompat import androidx.core.content.pm.ShortcutManagerCompat -import androidx.core.graphics.drawable.IconCompat -import im.vector.app.core.glide.GlideApp -import im.vector.app.core.utils.DimensionConverter -import im.vector.app.features.home.room.detail.RoomDetailActivity -import org.matrix.android.sdk.api.util.toMatrixItem import io.reactivex.Observable import io.reactivex.disposables.Disposable import io.reactivex.schedulers.Schedulers import javax.inject.Inject -private val useAdaptiveIcon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O -private const val adaptiveIconSizeDp = 108 -private const val adaptiveIconOuterSidesDp = 18 - class ShortcutsHandler @Inject constructor( private val context: Context, private val homeRoomListStore: HomeRoomListDataSource, - private val avatarRenderer: AvatarRenderer, - private val dimensionConverter: DimensionConverter + private val shortcutCreator: ShortcutCreator ) { - private val adaptiveIconSize = dimensionConverter.dpToPx(adaptiveIconSizeDp) - private val adaptiveIconOuterSides = dimensionConverter.dpToPx(adaptiveIconOuterSidesDp) - private val iconSize by lazy { - if (useAdaptiveIcon) { - adaptiveIconSize - adaptiveIconOuterSides - } else { - dimensionConverter.dpToPx(72) - } - } fun observeRoomsAndBuildShortcuts(): Disposable { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N_MR1) { @@ -67,19 +46,7 @@ class ShortcutsHandler @Inject constructor( val shortcuts = rooms .filter { room -> room.isFavorite } .take(n = 4) // Android only allows us to create 4 shortcuts - .map { room -> - val intent = RoomDetailActivity.shortcutIntent(context, room.roomId) - val bitmap = try { - avatarRenderer.shortcutDrawable(GlideApp.with(context), room.toMatrixItem(), iconSize) - } catch (failure: Throwable) { - null - } - ShortcutInfoCompat.Builder(context, room.roomId) - .setShortLabel(room.displayName) - .setIcon(bitmap?.toProfileImageIcon()) - .setIntent(intent) - .build() - } + .map { shortcutCreator.create(it) } ShortcutManagerCompat.removeAllDynamicShortcuts(context) ShortcutManagerCompat.addDynamicShortcuts(context, shortcuts) @@ -104,14 +71,4 @@ class ShortcutsHandler @Inject constructor( } } } - - // PRIVATE API ********************************************************************************* - - private fun Bitmap.toProfileImageIcon(): IconCompat { - return if (useAdaptiveIcon) { - IconCompat.createWithAdaptiveBitmap(this) - } else { - IconCompat.createWithBitmap(this) - } - } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt index 8061ad6bfc..1f89380449 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileAction.kt @@ -26,4 +26,5 @@ sealed class RoomProfileAction: VectorViewModelAction { data class ChangeRoomNotificationState(val notificationState: RoomNotificationState) : RoomProfileAction() data class ChangeRoomAvatar(val uri: Uri, val fileName: String?) : RoomProfileAction() object ShareRoomProfile : RoomProfileAction() + object CreateShortcut : RoomProfileAction() } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index ccfbf6d4fa..af05f2f7ab 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -24,6 +24,7 @@ import im.vector.app.core.epoxy.profiles.buildProfileSection import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.StringProvider import im.vector.app.core.ui.list.genericFooterItem +import im.vector.app.features.home.ShortcutCreator import im.vector.app.features.settings.VectorPreferences import org.matrix.android.sdk.api.crypto.RoomEncryptionTrustLevel import javax.inject.Inject @@ -31,6 +32,7 @@ import javax.inject.Inject class RoomProfileController @Inject constructor( private val stringProvider: StringProvider, private val vectorPreferences: VectorPreferences, + private val shortcutCreator: ShortcutCreator, colorProvider: ColorProvider ) : TypedEpoxyController() { @@ -44,6 +46,7 @@ class RoomProfileController @Inject constructor( fun onBannedMemberListClicked() fun onNotificationsClicked() fun onUploadsClicked() + fun createShortcut() fun onSettingsClicked() fun onLeaveRoomClicked() fun onRoomIdClicked() @@ -114,6 +117,16 @@ class RoomProfileController @Inject constructor( icon = R.drawable.ic_room_profile_uploads, action = { callback?.onUploadsClicked() } ) + if (shortcutCreator.canCreateShortcut()) { + buildProfileAction( + id = "shortcut", + title = stringProvider.getString(R.string.room_settings_add_homescreen_shortcut), + dividerColor = dividerColor, + editable = false, + icon = R.drawable.ic_add_to_home_screen_24dp, + action = { callback?.createShortcut() } + ) + } buildProfileAction( id = "leave", title = stringProvider.getString(if (roomSummary.isDirect) { diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index d94a326ba9..477d557bea 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -27,6 +27,7 @@ import android.view.View import android.widget.Toast import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityOptionsCompat +import androidx.core.content.pm.ShortcutManagerCompat import androidx.core.net.toUri import androidx.core.view.ViewCompat import androidx.core.view.isVisible @@ -115,6 +116,7 @@ class RoomProfileFragment @Inject constructor( is RoomProfileViewEvents.Failure -> showFailure(it.throwable) is RoomProfileViewEvents.ShareRoomProfile -> onShareRoomProfile(it.permalink) RoomProfileViewEvents.OnChangeAvatarSuccess -> dismissLoadingDialog() + is RoomProfileViewEvents.OnShortcutReady -> addShortcut(it) }.exhaustive } roomListQuickActionsSharedActionViewModel @@ -232,6 +234,16 @@ class RoomProfileFragment @Inject constructor( roomProfileSharedActionViewModel.post(RoomProfileSharedAction.OpenRoomUploads) } + override fun createShortcut() { + // Ask the view model to prepare it... + roomProfileViewModel.handle(RoomProfileAction.CreateShortcut) + } + + private fun addShortcut(onShortcutReady: RoomProfileViewEvents.OnShortcutReady) { + // ... and propose the user to add it + ShortcutManagerCompat.requestPinShortcut(requireContext(), onShortcutReady.shortcutInfo, null) + } + override fun onLeaveRoomClicked() { AlertDialog.Builder(requireContext()) .setTitle(R.string.room_participants_leave_prompt_title) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt index 1245016ada..380efd6fcd 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewEvents.kt @@ -16,6 +16,7 @@ package im.vector.app.features.roomprofile +import androidx.core.content.pm.ShortcutInfoCompat import im.vector.app.core.platform.VectorViewEvents /** @@ -27,4 +28,5 @@ sealed class RoomProfileViewEvents : VectorViewEvents { object OnChangeAvatarSuccess : RoomProfileViewEvents() data class ShareRoomProfile(val permalink: String) : RoomProfileViewEvents() + data class OnShortcutReady(val shortcutInfo: ShortcutInfoCompat) : RoomProfileViewEvents() } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt index 2d409888e9..12e88c2dec 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileViewModel.kt @@ -17,15 +17,20 @@ package im.vector.app.features.roomprofile +import androidx.lifecycle.viewModelScope import com.airbnb.mvrx.FragmentViewModelContext import com.airbnb.mvrx.MvRxViewModelFactory import com.airbnb.mvrx.ViewModelContext import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject import im.vector.app.R +import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.resources.StringProvider +import im.vector.app.features.home.ShortcutCreator import im.vector.app.features.powerlevel.PowerLevelsObservableFactory +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.session.events.model.EventType @@ -36,10 +41,12 @@ import org.matrix.android.sdk.rx.rx import org.matrix.android.sdk.rx.unwrap import java.util.UUID -class RoomProfileViewModel @AssistedInject constructor(@Assisted private val initialState: RoomProfileViewState, - private val stringProvider: StringProvider, - private val session: Session) - : VectorViewModel(initialState) { +class RoomProfileViewModel @AssistedInject constructor( + @Assisted private val initialState: RoomProfileViewState, + private val stringProvider: StringProvider, + private val shortcutCreator: ShortcutCreator, + private val session: Session +) : VectorViewModel(initialState) { @AssistedInject.Factory interface Factory { @@ -88,11 +95,24 @@ class RoomProfileViewModel @AssistedInject constructor(@Assisted private val ini } } - override fun handle(action: RoomProfileAction) = when (action) { - RoomProfileAction.LeaveRoom -> handleLeaveRoom() - is RoomProfileAction.ChangeRoomNotificationState -> handleChangeNotificationMode(action) - is RoomProfileAction.ShareRoomProfile -> handleShareRoomProfile() - is RoomProfileAction.ChangeRoomAvatar -> handleChangeAvatar(action) + override fun handle(action: RoomProfileAction) { + when (action) { + RoomProfileAction.LeaveRoom -> handleLeaveRoom() + is RoomProfileAction.ChangeRoomNotificationState -> handleChangeNotificationMode(action) + is RoomProfileAction.ShareRoomProfile -> handleShareRoomProfile() + is RoomProfileAction.ChangeRoomAvatar -> handleChangeAvatar(action) + RoomProfileAction.CreateShortcut -> handleCreateShortcut() + }.exhaustive + } + + private fun handleCreateShortcut() { + viewModelScope.launch(Dispatchers.IO) { + withState { state -> + state.roomSummary() + ?.let { shortcutCreator.create(it) } + ?.let { _viewEvents.post(RoomProfileViewEvents.OnShortcutReady(it)) } + } + } } private fun handleChangeNotificationMode(action: RoomProfileAction.ChangeRoomNotificationState) { diff --git a/vector/src/main/res/drawable/ic_add_to_home_screen_24dp.xml b/vector/src/main/res/drawable/ic_add_to_home_screen_24dp.xml new file mode 100644 index 0000000000..4a0a809578 --- /dev/null +++ b/vector/src/main/res/drawable/ic_add_to_home_screen_24dp.xml @@ -0,0 +1,12 @@ + + + + diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 0edd930498..623e5e205f 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -664,7 +664,7 @@ Direct Chat Leave Conversation Forget - Add Homescreen Shortcut + Add to Home screen Messages From a2334c3fb045181c5212eeed9e3eb30e4aea0dfa Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 18:38:27 +0200 Subject: [PATCH 105/278] Add missing leave icon in room profile --- .../im/vector/app/features/roomprofile/RoomProfileController.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index af05f2f7ab..160ebd56be 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -137,6 +137,7 @@ class RoomProfileController @Inject constructor( dividerColor = dividerColor, divider = false, destructive = true, + icon = R.drawable.ic_room_actions_leave, editable = false, action = { callback?.onLeaveRoomClicked() } ) From f030e098a8a8438413f564c50703609c18e71ac1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 17:18:39 +0200 Subject: [PATCH 106/278] Fix code quality and compilation test --- .../sdk/session/search/SearchMessagesTest.kt | 4 ++-- .../search/response/SearchResponseRoomEvents.kt | 13 ++++++++++--- tools/check/forbidden_strings_in_code.txt | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt index 1d4eb758ed..8ae8ef1b44 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt @@ -90,7 +90,7 @@ class SearchMessagesTest : InstrumentedTest { assertTrue( data.results ?.all { - (it.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() + (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() }.orFalse() ) lock.countDown() @@ -154,7 +154,7 @@ class SearchMessagesTest : InstrumentedTest { assertTrue( data.results ?.all { - (it.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() + (it.event.content?.get("body") as? String)?.startsWith(MESSAGE).orFalse() }.orFalse() ) lock.countDown() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt index 1078b9a9f9..2aac427232 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt @@ -22,15 +22,22 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) internal data class SearchResponseRoomEvents( - // List of results in the requested order. + /** + * List of results in the requested order. + */ @Json(name = "results") val results: List? = null, @Json(name = "count") val count: Int? = null, - // List of words which should be highlighted, useful for stemming which may change the query terms. + /** + * List of words which should be highlighted, useful for stemming which may change the query terms. + */ @Json(name = "highlights") val highlights: List? = null, - // Token that can be used to get the next batch of results, by passing as the next_batch parameter to the next call. If this field is absent, there are no more results. + /** + * Token that can be used to get the next batch of results, by passing as the next_batch parameter to the next call. + * If this field is absent, there are no more results. + */ @Json(name = "next_batch") val nextBatch: String? = null ) diff --git a/tools/check/forbidden_strings_in_code.txt b/tools/check/forbidden_strings_in_code.txt index 1d3aaa9f69..9c00dca278 100644 --- a/tools/check/forbidden_strings_in_code.txt +++ b/tools/check/forbidden_strings_in_code.txt @@ -164,7 +164,7 @@ Formatter\.formatShortFileSize===1 # android\.text\.TextUtils ### This is not a rule, but a warning: the number of "enum class" has changed. For Json classes, it is mandatory that they have `@JsonClass(generateAdapter = false)`. If it is ok, change the value in file forbidden_strings_in_code.txt -enum class===80 +enum class===81 ### Do not import temporary legacy classes import org.matrix.android.sdk.internal.legacy.riot===3 From 85417eb24c2dff8039ac3fb5c9a8227ebb7b29b3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 21:12:19 +0200 Subject: [PATCH 107/278] Add SearchView to filter members. Author: Onuray (I squashed 2 commits) --- CHANGES.md | 1 + .../members/RoomMemberListAction.kt | 1 + .../members/RoomMemberListController.kt | 4 ++- .../members/RoomMemberListFragment.kt | 17 +++++++++++++ .../members/RoomMemberListViewModel.kt | 25 +++++++++++++++++++ .../members/RoomMemberListViewState.kt | 1 + .../layout/fragment_room_setting_generic.xml | 14 ++++++++++- 7 files changed, 61 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4a158086a2..f5d6fca073 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ Improvements 🙌: - Small optimisation of scrolling experience in timeline (#2114) - Allow user to reset cross signing if he has no way to recover (#2052) - Create home shortcut for any room (#1525) + - Filter room member by name (#2184) 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/RoomMemberListAction.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListAction.kt index c61dcb98f5..342a2e8585 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListAction.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListAction.kt @@ -20,4 +20,5 @@ import im.vector.app.core.platform.VectorViewModelAction sealed class RoomMemberListAction : VectorViewModelAction { data class RevokeThreePidInvite(val stateKey: String) : RoomMemberListAction() + data class FilterMemberList(val searchTerm: String) : RoomMemberListAction() } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt index 59b1bca26f..f0c7e146c6 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt @@ -53,7 +53,9 @@ class RoomMemberListController @Inject constructor( } override fun buildModels(data: RoomMemberListViewState?) { - val roomMembersByPowerLevel = data?.roomMemberSummaries?.invoke() ?: return + data ?: return + + val roomMembersByPowerLevel = data.filteredRoomMemberSummaries ?: data.roomMemberSummaries.invoke() ?: return val threePidInvites = data.threePidInvites().orEmpty() var threePidInvitesDone = threePidInvites.isEmpty() 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 46d0f35b95..e12cce9484 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 @@ -21,6 +21,8 @@ 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 com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState @@ -72,12 +74,27 @@ class RoomMemberListFragment @Inject constructor( super.onViewCreated(view, savedInstanceState) roomMemberListController.callback = this setupToolbar(roomSettingsToolbar) + setupSearchView() recyclerView.configureWith(roomMemberListController, hasFixedSize = true) viewModel.selectSubscribe(this, RoomMemberListViewState::actionsPermissions) { invalidateOptionsMenu() } } + private fun setupSearchView() { + searchView.isVisible = true + searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String): Boolean { + return true + } + + override fun onQueryTextChange(newText: String): Boolean { + viewModel.handle(RoomMemberListAction.FilterMemberList(newText)) + return true + } + }) + } + override fun onDestroyView() { recyclerView.cleanup() super.onDestroyView() diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt index fedf1729ad..c45dbb1093 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt @@ -188,6 +188,7 @@ class RoomMemberListViewModel @AssistedInject constructor(@Assisted initialState override fun handle(action: RoomMemberListAction) { when (action) { is RoomMemberListAction.RevokeThreePidInvite -> handleRevokeThreePidInvite(action) + is RoomMemberListAction.FilterMemberList -> handleFilterMemberList(action) }.exhaustive } @@ -201,4 +202,28 @@ class RoomMemberListViewModel @AssistedInject constructor(@Assisted initialState ) } } + + private fun handleFilterMemberList(action: RoomMemberListAction.FilterMemberList) = withState { state -> + if (action.searchTerm.isBlank()) { + setState { copy(filteredRoomMemberSummaries = null) } + return@withState + } + val roomMemberSummaries = state.roomMemberSummaries.invoke() + roomMemberSummaries + ?.mapNotNull { (powerLevelCategory, roomMemberList) -> + roomMemberList + .filter { it.displayName?.contains(action.searchTerm).orFalse() || it.userId.contains(action.searchTerm) } + .takeIf { it.isNotEmpty() } + ?.let { filteredMemberList -> + Pair(powerLevelCategory, filteredMemberList) + } + } + ?.also { filteredRoomMemberSummaries -> + setState { + copy( + filteredRoomMemberSummaries = filteredRoomMemberSummaries + ) + } + } + } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt index 4d21aa103f..01fd290e78 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt @@ -31,6 +31,7 @@ data class RoomMemberListViewState( val roomId: String, val roomSummary: Async = Uninitialized, val roomMemberSummaries: Async = Uninitialized, + val filteredRoomMemberSummaries: RoomMemberSummaries? = null, val threePidInvites: Async> = Uninitialized, val trustLevelMap: Async> = Uninitialized, val actionsPermissions: ActionPermissions = ActionPermissions() diff --git a/vector/src/main/res/layout/fragment_room_setting_generic.xml b/vector/src/main/res/layout/fragment_room_setting_generic.xml index aa86ee342b..cdbf678b2b 100644 --- a/vector/src/main/res/layout/fragment_room_setting_generic.xml +++ b/vector/src/main/res/layout/fragment_room_setting_generic.xml @@ -53,6 +53,18 @@ + + From 78ed184f60381c529b287bea20f3a33975ccb661 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 21:40:10 +0200 Subject: [PATCH 108/278] Filter in the controller, to keep a live members list --- .../members/RoomMemberListController.kt | 24 +++++++----- .../members/RoomMemberListViewModel.kt | 26 +++---------- .../members/RoomMemberListViewState.kt | 2 +- .../members/RoomMemberSummaryFilter.kt | 37 +++++++++++++++++++ 4 files changed, 57 insertions(+), 32 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt index f0c7e146c6..0d4b732da9 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt @@ -17,12 +17,6 @@ package im.vector.app.features.roomprofile.members import com.airbnb.epoxy.TypedEpoxyController -import org.matrix.android.sdk.api.session.events.model.Event -import org.matrix.android.sdk.api.session.events.model.toModel -import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary -import org.matrix.android.sdk.api.session.room.model.RoomThirdPartyInviteContent -import org.matrix.android.sdk.api.util.MatrixItem -import org.matrix.android.sdk.api.util.toMatrixItem import im.vector.app.R import im.vector.app.core.epoxy.dividerItem import im.vector.app.core.epoxy.profiles.buildProfileSection @@ -31,11 +25,18 @@ import im.vector.app.core.extensions.join import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.StringProvider import im.vector.app.features.home.AvatarRenderer +import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.session.events.model.toModel +import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary +import org.matrix.android.sdk.api.session.room.model.RoomThirdPartyInviteContent +import org.matrix.android.sdk.api.util.MatrixItem +import org.matrix.android.sdk.api.util.toMatrixItem import javax.inject.Inject class RoomMemberListController @Inject constructor( private val avatarRenderer: AvatarRenderer, private val stringProvider: StringProvider, + private val roomMemberSummaryFilter: RoomMemberSummaryFilter, colorProvider: ColorProvider ) : TypedEpoxyController() { @@ -55,17 +56,20 @@ class RoomMemberListController @Inject constructor( override fun buildModels(data: RoomMemberListViewState?) { data ?: return - val roomMembersByPowerLevel = data.filteredRoomMemberSummaries ?: data.roomMemberSummaries.invoke() ?: return + roomMemberSummaryFilter.filter = data.filter + + val roomMembersByPowerLevel = data.roomMemberSummaries.invoke() ?: return val threePidInvites = data.threePidInvites().orEmpty() var threePidInvitesDone = threePidInvites.isEmpty() for ((powerLevelCategory, roomMemberList) in roomMembersByPowerLevel) { - if (roomMemberList.isEmpty()) { + val filteredRoomMemberList = roomMemberList.filter { roomMemberSummaryFilter.test(it) } + if (filteredRoomMemberList.isEmpty()) { continue } if (powerLevelCategory == RoomMemberListCategories.USER && !threePidInvitesDone) { - // If there is not regular invite, display threepid invite before the regular user + // If there is no regular invite, display threepid invite before the regular user buildProfileSection( stringProvider.getString(RoomMemberListCategories.INVITE.titleRes) ) @@ -77,7 +81,7 @@ class RoomMemberListController @Inject constructor( buildProfileSection( stringProvider.getString(powerLevelCategory.titleRes) ) - roomMemberList.join( + filteredRoomMemberList.join( each = { _, roomMember -> profileMatrixItem { id(roomMember.userId) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt index c45dbb1093..60cb5867a7 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt @@ -203,27 +203,11 @@ class RoomMemberListViewModel @AssistedInject constructor(@Assisted initialState } } - private fun handleFilterMemberList(action: RoomMemberListAction.FilterMemberList) = withState { state -> - if (action.searchTerm.isBlank()) { - setState { copy(filteredRoomMemberSummaries = null) } - return@withState + private fun handleFilterMemberList(action: RoomMemberListAction.FilterMemberList) = withState { + setState { + copy( + filter = action.searchTerm + ) } - val roomMemberSummaries = state.roomMemberSummaries.invoke() - roomMemberSummaries - ?.mapNotNull { (powerLevelCategory, roomMemberList) -> - roomMemberList - .filter { it.displayName?.contains(action.searchTerm).orFalse() || it.userId.contains(action.searchTerm) } - .takeIf { it.isNotEmpty() } - ?.let { filteredMemberList -> - Pair(powerLevelCategory, filteredMemberList) - } - } - ?.also { filteredRoomMemberSummaries -> - setState { - copy( - filteredRoomMemberSummaries = filteredRoomMemberSummaries - ) - } - } } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt index 01fd290e78..787ae920e1 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewState.kt @@ -31,7 +31,7 @@ data class RoomMemberListViewState( val roomId: String, val roomSummary: Async = Uninitialized, val roomMemberSummaries: Async = Uninitialized, - val filteredRoomMemberSummaries: RoomMemberSummaries? = null, + val filter: String = "", val threePidInvites: Async> = Uninitialized, val trustLevelMap: Async> = Uninitialized, val actionsPermissions: ActionPermissions = ActionPermissions() diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt new file mode 100644 index 0000000000..813679fef3 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 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.roomprofile.members + +import io.reactivex.functions.Predicate +import org.matrix.android.sdk.api.extensions.orFalse +import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary +import javax.inject.Inject + +class RoomMemberSummaryFilter @Inject constructor() : Predicate { + var filter: String = "" + + override fun test(roomMemberSummary: RoomMemberSummary): Boolean { + if (filter.isBlank()) { + // No filter + return true + } + + return roomMemberSummary.displayName?.contains(filter, ignoreCase = true).orFalse() + // We should maybe exclude the domain from the userId + || roomMemberSummary.userId.contains(filter, ignoreCase = true) + } +} From 9df3de2afb33fcf3e8adcd75157e24d3faa98e6c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 21:50:01 +0200 Subject: [PATCH 109/278] Rename method --- .../features/roomprofile/members/RoomMemberListController.kt | 4 ++-- .../features/roomprofile/members/RoomMemberListFragment.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt index 0d4b732da9..ee6b9a71bf 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt @@ -42,7 +42,7 @@ class RoomMemberListController @Inject constructor( interface Callback { fun onRoomMemberClicked(roomMember: RoomMemberSummary) - fun onThreePidInvites(event: Event) + fun onThreePidInviteClicked(event: Event) } private val dividerColor = colorProvider.getColorFromAttribute(R.attr.vctr_list_divider_color) @@ -134,7 +134,7 @@ class RoomMemberListController @Inject constructor( avatarRenderer(avatarRenderer) editable(data.actionsPermissions.canRevokeThreePidInvite) clickListener { _ -> - callback?.onThreePidInvites(event) + callback?.onThreePidInviteClicked(event) } } } 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 e12cce9484..5367788466 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 @@ -109,7 +109,7 @@ class RoomMemberListFragment @Inject constructor( navigator.openRoomMemberProfile(roomMember.userId, roomId = roomProfileArgs.roomId, context = requireActivity()) } - override fun onThreePidInvites(event: Event) { + override fun onThreePidInviteClicked(event: Event) { // Display a dialog to revoke invite if power level is high enough val content = event.content.toModel() ?: return val stateKey = event.stateKey ?: return From f5580212ea51e1d961ab023aa3253ca8439211c2 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 22:16:13 +0200 Subject: [PATCH 110/278] Also filter threePids --- .../roomprofile/members/RoomMemberListController.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt index ee6b9a71bf..71ac7fcec4 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListController.kt @@ -59,7 +59,14 @@ class RoomMemberListController @Inject constructor( roomMemberSummaryFilter.filter = data.filter val roomMembersByPowerLevel = data.roomMemberSummaries.invoke() ?: return - val threePidInvites = data.threePidInvites().orEmpty() + val threePidInvites = data.threePidInvites() + ?.filter { event -> + event.content.toModel() + ?.takeIf { + data.filter.isEmpty() || it.displayName.contains(data.filter, ignoreCase = true) + } != null + } + .orEmpty() var threePidInvitesDone = threePidInvites.isEmpty() for ((powerLevelCategory, roomMemberList) in roomMembersByPowerLevel) { @@ -100,12 +107,13 @@ class RoomMemberListController @Inject constructor( } } ) - if (powerLevelCategory == RoomMemberListCategories.INVITE) { + if (powerLevelCategory == RoomMemberListCategories.INVITE && !threePidInvitesDone) { // Display the threepid invite after the regular invite dividerItem { id("divider_threepidinvites") color(dividerColor) } + buildThreePidInvites(data) threePidInvitesDone = true } From 50f6a4732c40b89622e3ba28a194ef71f242124b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 22:21:13 +0200 Subject: [PATCH 111/278] Change hint --- .../features/roomprofile/members/RoomMemberListFragment.kt | 1 + .../src/main/res/layout/fragment_room_setting_generic.xml | 6 +++--- 2 files changed, 4 insertions(+), 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 5367788466..e4d17b4da6 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 @@ -83,6 +83,7 @@ class RoomMemberListFragment @Inject constructor( private fun setupSearchView() { searchView.isVisible = true + searchView.queryHint = getString(R.string.search_members_hint) searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { return true diff --git a/vector/src/main/res/layout/fragment_room_setting_generic.xml b/vector/src/main/res/layout/fragment_room_setting_generic.xml index cdbf678b2b..03e211a806 100644 --- a/vector/src/main/res/layout/fragment_room_setting_generic.xml +++ b/vector/src/main/res/layout/fragment_room_setting_generic.xml @@ -59,11 +59,11 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" + android:background="@null" android:visibility="gone" - tools:visibility="visible" - app:queryHint="@string/search_hint" app:layout_constraintTop_toBottomOf="@id/roomSettingsToolbar" - android:background="@null" /> + tools:queryHint="@string/search_hint" + tools:visibility="visible" /> Date: Fri, 2 Oct 2020 23:06:59 +0200 Subject: [PATCH 112/278] Hide the SearchView when scrolling down --- .../members/RoomMemberListFragment.kt | 2 +- .../layout/fragment_room_setting_generic.xml | 52 +++++++++++++------ 2 files changed, 36 insertions(+), 18 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 e4d17b4da6..67577e866e 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 @@ -82,7 +82,7 @@ class RoomMemberListFragment @Inject constructor( } private fun setupSearchView() { - searchView.isVisible = true + searchViewAppBarLayout.isVisible = true searchView.queryHint = getString(R.string.search_members_hint) searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { diff --git a/vector/src/main/res/layout/fragment_room_setting_generic.xml b/vector/src/main/res/layout/fragment_room_setting_generic.xml index 03e211a806..4ab6d2c7df 100644 --- a/vector/src/main/res/layout/fragment_room_setting_generic.xml +++ b/vector/src/main/res/layout/fragment_room_setting_generic.xml @@ -53,28 +53,46 @@ - - - + app:layout_constraintTop_toBottomOf="@+id/roomSettingsToolbar"> + + + + + + + + + + From c0842d4da70e56eeb1fa20ec6d6661a09e0c6497 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 23:20:28 +0200 Subject: [PATCH 113/278] Also apply the filter to banned user screen --- CHANGES.md | 2 +- .../banned/RoomBannedListMemberAction.kt | 1 + .../banned/RoomBannedListMemberViewModel.kt | 10 ++++ .../banned/RoomBannedMemberListController.kt | 59 ++++++++++--------- .../banned/RoomBannedMemberListFragment.kt | 18 ++++++ .../banned/RoomBannedMemberListViewState.kt | 1 + vector/src/main/res/values/strings.xml | 1 + 7 files changed, 64 insertions(+), 28 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f5d6fca073..9103acaa60 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,7 +11,7 @@ Improvements 🙌: - Small optimisation of scrolling experience in timeline (#2114) - Allow user to reset cross signing if he has no way to recover (#2052) - Create home shortcut for any room (#1525) - - Filter room member by name (#2184) + - Filter room member (and banned users) by name (#2184) 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/banned/RoomBannedListMemberAction.kt b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedListMemberAction.kt index 9af554e883..67cacf4541 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedListMemberAction.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedListMemberAction.kt @@ -22,4 +22,5 @@ import im.vector.app.core.platform.VectorViewModelAction sealed class RoomBannedListMemberAction : VectorViewModelAction { data class QueryInfo(val roomMemberSummary: RoomMemberSummary) : RoomBannedListMemberAction() data class UnBanUser(val roomMemberSummary: RoomMemberSummary) : RoomBannedListMemberAction() + data class Filter(val filter: String) : RoomBannedListMemberAction() } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedListMemberViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedListMemberViewModel.kt index b65b3de807..d1acd80c25 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedListMemberViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedListMemberViewModel.kt @@ -35,6 +35,7 @@ import org.matrix.android.sdk.internal.util.awaitCallback import org.matrix.android.sdk.rx.rx import org.matrix.android.sdk.rx.unwrap import im.vector.app.R +import im.vector.app.core.extensions.exhaustive import im.vector.app.core.platform.VectorViewModel import im.vector.app.core.resources.StringProvider import im.vector.app.features.powerlevel.PowerLevelsObservableFactory @@ -90,6 +91,15 @@ class RoomBannedListMemberViewModel @AssistedInject constructor(@Assisted initia when (action) { is RoomBannedListMemberAction.QueryInfo -> onQueryBanInfo(action.roomMemberSummary) is RoomBannedListMemberAction.UnBanUser -> unBanUser(action.roomMemberSummary) + is RoomBannedListMemberAction.Filter -> handleFilter(action) + }.exhaustive + } + + private fun handleFilter(action: RoomBannedListMemberAction.Filter) { + setState { + copy( + filter = action.filter + ) } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListController.kt index a65a30441d..2a0c787a7a 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListController.kt @@ -17,8 +17,6 @@ package im.vector.app.features.roomprofile.banned import com.airbnb.epoxy.TypedEpoxyController -import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary -import org.matrix.android.sdk.api.util.toMatrixItem import im.vector.app.R import im.vector.app.core.epoxy.dividerItem import im.vector.app.core.epoxy.profiles.buildProfileSection @@ -28,11 +26,15 @@ import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.StringProvider import im.vector.app.core.ui.list.genericFooterItem import im.vector.app.features.home.AvatarRenderer +import im.vector.app.features.roomprofile.members.RoomMemberSummaryFilter +import org.matrix.android.sdk.api.session.room.model.RoomMemberSummary +import org.matrix.android.sdk.api.util.toMatrixItem import javax.inject.Inject class RoomBannedMemberListController @Inject constructor( private val avatarRenderer: AvatarRenderer, private val stringProvider: StringProvider, + private val roomMemberSummaryFilter: RoomMemberSummaryFilter, colorProvider: ColorProvider ) : TypedEpoxyController() { @@ -63,34 +65,37 @@ class RoomBannedMemberListController @Inject constructor( } else { buildProfileSection(quantityString) - bannedList.join( - each = { _, roomMember -> - val actionInProgress = data.onGoingModerationAction.contains(roomMember.userId) - profileMatrixItemWithProgress { - id(roomMember.userId) - matrixItem(roomMember.toMatrixItem()) - avatarRenderer(avatarRenderer) - apply { - if (actionInProgress) { - inProgress(true) - editable(false) - } else { - inProgress(false) - editable(true) - clickListener { _ -> - callback?.onUnbanClicked(roomMember) + roomMemberSummaryFilter.filter = data.filter + bannedList + .filter { roomMemberSummaryFilter.test(it) } + .join( + each = { _, roomMember -> + val actionInProgress = data.onGoingModerationAction.contains(roomMember.userId) + profileMatrixItemWithProgress { + id(roomMember.userId) + matrixItem(roomMember.toMatrixItem()) + avatarRenderer(avatarRenderer) + apply { + if (actionInProgress) { + inProgress(true) + editable(false) + } else { + inProgress(false) + editable(true) + clickListener { _ -> + callback?.onUnbanClicked(roomMember) + } + } } } + }, + between = { _, roomMemberBefore -> + dividerItem { + id("divider_${roomMemberBefore.userId}") + color(dividerColor) + } } - } - }, - between = { _, roomMemberBefore -> - dividerItem { - id("divider_${roomMemberBefore.userId}") - color(dividerColor) - } - } - ) + ) } } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt index 480deea6af..84eccccfae 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListFragment.kt @@ -19,6 +19,8 @@ package im.vector.app.features.roomprofile.banned import android.os.Bundle import android.view.View import androidx.appcompat.app.AlertDialog +import androidx.appcompat.widget.SearchView +import androidx.core.view.isVisible import com.airbnb.mvrx.args import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState @@ -53,6 +55,7 @@ class RoomBannedMemberListFragment @Inject constructor( super.onViewCreated(view, savedInstanceState) roomMemberListController.callback = this setupToolbar(roomSettingsToolbar) + setupSearchView() recyclerView.configureWith(roomMemberListController, hasFixedSize = true) viewModel.observeViewEvents { @@ -84,6 +87,21 @@ class RoomBannedMemberListFragment @Inject constructor( super.onDestroyView() } + private fun setupSearchView() { + searchViewAppBarLayout.isVisible = true + searchView.queryHint = getString(R.string.search_banned_user_hint) + searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { + override fun onQueryTextSubmit(query: String): Boolean { + return true + } + + override fun onQueryTextChange(newText: String): Boolean { + viewModel.handle(RoomBannedListMemberAction.Filter(newText)) + return true + } + }) + } + override fun invalidate() = withState(viewModel) { viewState -> roomMemberListController.setData(viewState) renderRoomSummary(viewState) diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListViewState.kt b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListViewState.kt index ee8e534b1f..6d8bb2f42a 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListViewState.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/banned/RoomBannedMemberListViewState.kt @@ -27,6 +27,7 @@ data class RoomBannedMemberListViewState( val roomId: String, val roomSummary: Async = Uninitialized, val bannedMemberSummaries: Async> = Uninitialized, + val filter: String = "", val onGoingModerationAction: List = emptyList(), val canUserBan: Boolean = false ) : MvRxState { diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 9310af7577..9099c276e8 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -623,6 +623,7 @@ Search Filter room members + Filter banned users No results ROOMS MESSAGES From 8170f523e091ef4ca366e4e787a79fb9fa467a12 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 23:29:48 +0200 Subject: [PATCH 114/278] Small improvement --- .../im/vector/app/features/home/room/list/RoomListNameFilter.kt | 2 +- .../app/features/roomprofile/members/RoomMemberListViewModel.kt | 2 +- .../app/features/roomprofile/members/RoomMemberSummaryFilter.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListNameFilter.kt b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListNameFilter.kt index 4c4a9755d2..6e787b8b95 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/RoomListNameFilter.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/RoomListNameFilter.kt @@ -25,7 +25,7 @@ class RoomListNameFilter @Inject constructor() : Predicate { var filter: String = "" override fun test(roomSummary: RoomSummary): Boolean { - if (filter.isBlank()) { + if (filter.isEmpty()) { // No filter return true } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt index 60cb5867a7..9e402c675b 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberListViewModel.kt @@ -203,7 +203,7 @@ class RoomMemberListViewModel @AssistedInject constructor(@Assisted initialState } } - private fun handleFilterMemberList(action: RoomMemberListAction.FilterMemberList) = withState { + private fun handleFilterMemberList(action: RoomMemberListAction.FilterMemberList) { setState { copy( filter = action.searchTerm diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt index 813679fef3..e2cc3f7b99 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/members/RoomMemberSummaryFilter.kt @@ -25,7 +25,7 @@ class RoomMemberSummaryFilter @Inject constructor() : Predicate Date: Fri, 2 Oct 2020 10:05:47 +0000 Subject: [PATCH 115/278] 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 1b3a5097c10cd431840b2c7a40970ae32b399fef Mon Sep 17 00:00:00 2001 From: Cadence Ember Date: Sun, 4 Oct 2020 12:43:26 +1300 Subject: [PATCH 116/278] Replace "him" with "them" in report interface All genders can spam a chatroom :) --- vector/src/main/res/values/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 9310af7577..c025054f98 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -1851,11 +1851,11 @@ "IGNORE USER" "Content reported" - "This content was reported.\n\nIf you don't want to see any more content from this user, you can block him to hide his messages" + "This content was reported.\n\nIf you don't want to see any more content from this user, you can ignore them to hide their messages." "Reported as spam" - "This content was reported as spam.\n\nIf you don't want to see any more content from this user, you can block him to hide his messages" + "This content was reported as spam.\n\nIf you don't want to see any more content from this user, you can ignore them to hide their messages." "Reported as inappropriate" - "This content was reported as inappropriate.\n\nIf you don't want to see any more content from this user, you can block him to hide his messages" + "This content was reported as inappropriate.\n\nIf you don't want to see any more content from this user, you can ignore them to hide their messages." Element needs permission to save your E2E keys on disk.\n\nPlease allow access on the next pop-up to be able to export your keys manually. From b2030930739b839b8d5dc483d05e95537b7f2ba0 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Sun, 4 Oct 2020 11:17:57 +0200 Subject: [PATCH 117/278] Use an extra container for the margin to be taken into account by the layout_scrollFlags --- .../layout/fragment_room_setting_generic.xml | 25 ++++++++++++------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/vector/src/main/res/layout/fragment_room_setting_generic.xml b/vector/src/main/res/layout/fragment_room_setting_generic.xml index 4ab6d2c7df..07744436ea 100644 --- a/vector/src/main/res/layout/fragment_room_setting_generic.xml +++ b/vector/src/main/res/layout/fragment_room_setting_generic.xml @@ -78,17 +78,24 @@ android:visibility="gone" tools:visibility="visible"> - + + app:layout_scrollFlags="scroll|enterAlways|snap"> + + + + From 6f2736566ea68cca395a9b084970c08c4997bf8c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 17:43:43 +0200 Subject: [PATCH 118/278] Add a menu item to open the setting in room list and in room (#2171) --- CHANGES.md | 1 + .../main/java/im/vector/app/features/home/HomeActivity.kt | 4 ++++ .../app/features/home/room/detail/RoomDetailFragment.kt | 4 ++++ .../app/features/home/room/detail/RoomDetailViewModel.kt | 1 + vector/src/main/res/menu/home.xml | 8 +++++++- vector/src/main/res/menu/menu_timeline.xml | 6 ++++++ 6 files changed, 23 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 4a158086a2..90a5b7afc2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,7 @@ Improvements 🙌: - Small optimisation of scrolling experience in timeline (#2114) - Allow user to reset cross signing if he has no way to recover (#2052) - Create home shortcut for any room (#1525) + - Add a menu item to open the setting in room list and in room (#2171) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) 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 eb024c4db1..233bceaf7f 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 @@ -305,6 +305,10 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet navigator.openRoomsFiltering(this) return true } + R.id.menu_home_setting ->{ + navigator.openSettings(this) + return true + } } return super.onOptionsItemSelected(item) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 51aeda2aab..74a689977f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -656,6 +656,10 @@ class RoomDetailFragment @Inject constructor( roomDetailViewModel.handle(RoomDetailAction.ClearSendQueue) true } + R.id.timeline_setting -> { + navigator.openRoomProfile(requireActivity(), roomDetailArgs.roomId) + true + } R.id.resend_all -> { roomDetailViewModel.handle(RoomDetailAction.ResendAll) true diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 1b5e928843..c6896a8b87 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -533,6 +533,7 @@ class RoomDetailViewModel @AssistedInject constructor( // For now always disable when not in developer mode, worker cancellation is not working properly timeline.pendingEventCount() > 0 && vectorPreferences.developerMode() R.id.resend_all -> state.asyncRoomSummary()?.hasFailedSending == true + R.id.timeline_setting -> true R.id.clear_all -> state.asyncRoomSummary()?.hasFailedSending == true R.id.open_matrix_apps -> true R.id.voice_call, diff --git a/vector/src/main/res/menu/home.xml b/vector/src/main/res/menu/home.xml index db84db6622..7a77c45240 100644 --- a/vector/src/main/res/menu/home.xml +++ b/vector/src/main/res/menu/home.xml @@ -2,6 +2,12 @@

+ + \ No newline at end of file diff --git a/vector/src/main/res/menu/menu_timeline.xml b/vector/src/main/res/menu/menu_timeline.xml index e0566ccf6d..eb2227ad21 100644 --- a/vector/src/main/res/menu/menu_timeline.xml +++ b/vector/src/main/res/menu/menu_timeline.xml @@ -3,6 +3,12 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> + + Date: Mon, 5 Oct 2020 10:10:55 +0200 Subject: [PATCH 119/278] Add a menu item in the timeline as a shortcut to invite user (#2171) --- CHANGES.md | 1 + .../app/features/home/room/detail/RoomDetailFragment.kt | 4 ++++ .../app/features/home/room/detail/RoomDetailViewModel.kt | 3 +++ .../app/features/home/room/detail/RoomDetailViewState.kt | 1 + vector/src/main/res/menu/menu_timeline.xml | 5 +++++ 5 files changed, 14 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 90a5b7afc2..1b973dd521 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -12,6 +12,7 @@ Improvements 🙌: - Allow user to reset cross signing if he has no way to recover (#2052) - Create home shortcut for any room (#1525) - Add a menu item to open the setting in room list and in room (#2171) + - Add a menu item in the timeline as a shortcut to invite user (#2171) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 74a689977f..137b430522 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -656,6 +656,10 @@ class RoomDetailFragment @Inject constructor( roomDetailViewModel.handle(RoomDetailAction.ClearSendQueue) true } + R.id.invite -> { + navigator.openInviteUsersToRoom(requireActivity(), roomDetailArgs.roomId) + true + } R.id.timeline_setting -> { navigator.openRoomProfile(requireActivity(), roomDetailArgs.roomId) true diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index c6896a8b87..b00b326800 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -180,11 +180,13 @@ class RoomDetailViewModel @AssistedInject constructor( PowerLevelsObservableFactory(room).createObservable() .subscribe { val canSendMessage = PowerLevelsHelper(it).isUserAllowedToSend(session.myUserId, false, EventType.MESSAGE) + val canInvite = PowerLevelsHelper(it).isUserAbleToInvite(session.myUserId) val isAllowedToManageWidgets = session.widgetService().hasPermissionsToHandleWidgets(room.roomId) val isAllowedToStartWebRTCCall = PowerLevelsHelper(it).isUserAllowedToSend(session.myUserId, false, EventType.CALL_INVITE) setState { copy( canSendMessage = canSendMessage, + canInvite = canInvite, isAllowedToManageWidgets = isAllowedToManageWidgets, isAllowedToStartWebRTCCall = isAllowedToStartWebRTCCall ) @@ -534,6 +536,7 @@ class RoomDetailViewModel @AssistedInject constructor( timeline.pendingEventCount() > 0 && vectorPreferences.developerMode() R.id.resend_all -> state.asyncRoomSummary()?.hasFailedSending == true R.id.timeline_setting -> true + R.id.invite -> state.canInvite R.id.clear_all -> state.asyncRoomSummary()?.hasFailedSending == true R.id.open_matrix_apps -> true R.id.voice_call, diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt index 36acc35148..b36f62fe15 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt @@ -67,6 +67,7 @@ data class RoomDetailViewState( val canShowJumpToReadMarker: Boolean = true, val changeMembershipState: ChangeMembershipState = ChangeMembershipState.Unknown, val canSendMessage: Boolean = true, + val canInvite: Boolean = true, val isAllowedToManageWidgets: Boolean = false, val isAllowedToStartWebRTCCall: Boolean = true ) : MvRxState { diff --git a/vector/src/main/res/menu/menu_timeline.xml b/vector/src/main/res/menu/menu_timeline.xml index eb2227ad21..86ffe1f724 100644 --- a/vector/src/main/res/menu/menu_timeline.xml +++ b/vector/src/main/res/menu/menu_timeline.xml @@ -14,6 +14,11 @@ android:title="@string/search" app:showAsAction="never" /> + + Date: Mon, 5 Oct 2020 14:51:21 +0200 Subject: [PATCH 120/278] Drawer: move settings access and add sign out action (#2171) --- CHANGES.md | 1 + .../app/features/home/HomeDrawerFragment.kt | 7 ++ .../settings/VectorSettingsGeneralFragment.kt | 3 +- .../workers/signout/SignOutUiWorker.kt | 9 +-- .../main/res/drawable/ic_settings_18dp.xml | 10 +++ .../src/main/res/drawable/ic_signout_18dp.xml | 18 ++++++ .../main/res/layout/fragment_home_drawer.xml | 64 ++++++++++++++----- 7 files changed, 88 insertions(+), 24 deletions(-) create mode 100644 vector/src/main/res/drawable/ic_settings_18dp.xml create mode 100644 vector/src/main/res/drawable/ic_signout_18dp.xml diff --git a/CHANGES.md b/CHANGES.md index 1b973dd521..de611dfffd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -13,6 +13,7 @@ Improvements 🙌: - Create home shortcut for any room (#1525) - Add a menu item to open the setting in room list and in room (#2171) - Add a menu item in the timeline as a shortcut to invite user (#2171) + - Drawer: move settings access and add sign out action (#2171) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt index 3344989b0a..3b2ae74789 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt @@ -23,6 +23,7 @@ import im.vector.app.core.extensions.observeK import im.vector.app.core.extensions.replaceChildFragment import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.features.grouplist.GroupListFragment +import im.vector.app.features.workers.signout.SignOutUiWorker import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.util.toMatrixItem import kotlinx.android.synthetic.main.fragment_home_drawer.* @@ -53,10 +54,16 @@ class HomeDrawerFragment @Inject constructor( homeDrawerUserIdView.text = user.userId } } + // Settings homeDrawerHeaderSettingsView.debouncedClicks { sharedActionViewModel.post(HomeActivitySharedAction.CloseDrawer) navigator.openSettings(requireActivity()) } + // Sign out + homeDrawerHeaderSignoutView.debouncedClicks { + sharedActionViewModel.post(HomeActivitySharedAction.CloseDrawer) + SignOutUiWorker(requireActivity()).perform() + } // Debug menu homeDrawerHeaderDebugView.debouncedClicks { diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt index f538c4993b..6c0aefe9da 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt @@ -259,8 +259,7 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { findPreference("SETTINGS_SIGN_OUT_KEY")!! .onPreferenceClickListener = Preference.OnPreferenceClickListener { activity?.let { - SignOutUiWorker(requireActivity()) - .perform(requireContext()) + SignOutUiWorker(requireActivity()).perform() } false diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutUiWorker.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutUiWorker.kt index d78b652113..53ea5c7887 100644 --- a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutUiWorker.kt +++ b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutUiWorker.kt @@ -16,11 +16,9 @@ package im.vector.app.features.workers.signout -import android.content.Context import androidx.appcompat.app.AlertDialog import androidx.fragment.app.FragmentActivity import im.vector.app.R -import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.extensions.cannotLogoutSafely import im.vector.app.core.extensions.vectorComponent import im.vector.app.features.MainActivity @@ -28,11 +26,8 @@ import im.vector.app.features.MainActivityArgs class SignOutUiWorker(private val activity: FragmentActivity) { - lateinit var activeSessionHolder: ActiveSessionHolder - - fun perform(context: Context) { - activeSessionHolder = context.vectorComponent().activeSessionHolder() - val session = activeSessionHolder.getActiveSession() + fun perform() { + val session = activity.vectorComponent().activeSessionHolder().getSafeActiveSession() ?: return if (session.cannotLogoutSafely()) { // The backup check on logout flow has to be displayed if there are keys in the store, and the keys backup state is not Ready val signOutDialog = SignOutBottomSheetDialogFragment.newInstance() diff --git a/vector/src/main/res/drawable/ic_settings_18dp.xml b/vector/src/main/res/drawable/ic_settings_18dp.xml new file mode 100644 index 0000000000..4ca1725703 --- /dev/null +++ b/vector/src/main/res/drawable/ic_settings_18dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/vector/src/main/res/drawable/ic_signout_18dp.xml b/vector/src/main/res/drawable/ic_signout_18dp.xml new file mode 100644 index 0000000000..80f2995bc0 --- /dev/null +++ b/vector/src/main/res/drawable/ic_signout_18dp.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/vector/src/main/res/layout/fragment_home_drawer.xml b/vector/src/main/res/layout/fragment_home_drawer.xml index e09e26c575..12562bc98a 100644 --- a/vector/src/main/res/layout/fragment_home_drawer.xml +++ b/vector/src/main/res/layout/fragment_home_drawer.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" + android:background="?riotx_background" android:clickable="true" android:focusable="true"> @@ -42,11 +43,12 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="24dp" + android:layout_marginEnd="@dimen/layout_horizontal_margin" android:maxLines="1" android:singleLine="true" android:textColor="?riotx_text_primary" android:textSize="15sp" - app:layout_constraintEnd_toStartOf="@id/homeDrawerHeaderSettingsView" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/homeDrawerHeaderAvatarView" app:layout_constraintTop_toBottomOf="@+id/homeDrawerHeaderAvatarView" tools:text="@sample/matrix.json/data/displayName" /> @@ -55,39 +57,71 @@ android:id="@+id/homeDrawerUserIdView" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/layout_horizontal_margin" android:layout_marginBottom="17dp" android:maxLines="1" android:singleLine="true" android:textColor="?riotx_text_secondary" android:textSize="15sp" app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toStartOf="@id/homeDrawerHeaderSettingsView" + app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@+id/homeDrawerHeaderAvatarView" app:layout_constraintTop_toBottomOf="@+id/homeDrawerUsernameView" tools:text="@sample/matrix.json/data/mxid" /> - - + + + + + + \ No newline at end of file From 85c8092e65157a42201191e9ed6fe817b1a14d21 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 5 Oct 2020 14:58:07 +0200 Subject: [PATCH 121/278] Add missing code to sign out when user click on the action --- .../workers/signout/SignOutBottomSheetDialogFragment.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt index ac4d495a8c..df7c5c023e 100644 --- a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt @@ -138,6 +138,10 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), } } + signOutButton.action = { + onSignOut?.run() + } + exportManuallyButton.action = { withState(viewModel) { state -> queryExportKeys(state.userId, QUERY_EXPORT_KEYS) From 015678ca207a00726c8c74dc0220b675c99bc081 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 5 Oct 2020 15:15:40 +0200 Subject: [PATCH 122/278] Fix issue on SignOutBottomSheet (Sign out action displayed by mistake) Also improve code clarity by reordering lines and removing private method, which lead to bug (ex: duplicate action on `setupMegolmBackupButton` in `hideViews(setupMegolmBackupButton, setupMegolmBackupButton, signOutButton, exportManuallyButton)`) --- .../SignOutBottomSheetDialogFragment.kt | 66 ++++++++----------- 1 file changed, 27 insertions(+), 39 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt index df7c5c023e..30f7ed93a3 100644 --- a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt @@ -35,8 +35,6 @@ import com.airbnb.mvrx.fragmentViewModel import com.airbnb.mvrx.withState import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog -import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState import im.vector.app.R import im.vector.app.core.di.ScreenComponent import im.vector.app.core.dialogs.ExportKeysDialog @@ -45,6 +43,9 @@ import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.features.crypto.keysbackup.setup.KeysBackupSetupActivity import im.vector.app.features.crypto.recover.BootstrapBottomSheet import im.vector.app.features.crypto.recover.SetupMode +import kotlinx.android.synthetic.main.bottom_sheet_logout_and_backup.* +import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState import timber.log.Timber import javax.inject.Inject @@ -57,21 +58,6 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), @BindView(R.id.bottom_sheet_signout_backingup_status_group) lateinit var backingUpStatusGroup: ViewGroup - @BindView(R.id.setupRecoveryButton) - lateinit var setupRecoveryButton: SignoutBottomSheetActionButton - - @BindView(R.id.setupMegolmBackupButton) - lateinit var setupMegolmBackupButton: SignoutBottomSheetActionButton - - @BindView(R.id.exportManuallyButton) - lateinit var exportManuallyButton: SignoutBottomSheetActionButton - - @BindView(R.id.exitAnywayButton) - lateinit var exitAnywayButton: SignoutBottomSheetActionButton - - @BindView(R.id.signOutButton) - lateinit var signOutButton: SignoutBottomSheetActionButton - @BindView(R.id.bottom_sheet_signout_icon_progress_bar) lateinit var backupProgress: ProgressBar @@ -186,10 +172,10 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), // we should show option to setup 4S setupRecoveryButton.isVisible = true setupMegolmBackupButton.isVisible = false - signOutButton.isVisible = false // We let the option to ignore and quit exportManuallyButton.isVisible = true exitAnywayButton.isVisible = true + signOutButton.isVisible = false } else if (state.keysBackupState == KeysBackupState.Unknown || state.keysBackupState == KeysBackupState.Disabled) { sheetTitle.text = getString(R.string.sign_out_bottom_sheet_warning_no_backup) backingUpStatusGroup.isVisible = false @@ -198,10 +184,10 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), // we should show option to setup 4S setupRecoveryButton.isVisible = false setupMegolmBackupButton.isVisible = true - signOutButton.isVisible = false // We let the option to ignore and quit exportManuallyButton.isVisible = true exitAnywayButton.isVisible = true + signOutButton.isVisible = false } else { // so keybackup is setup // You should wait until all are uploaded @@ -217,13 +203,14 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), backupCompleteImage.isVisible = true backupStatusTex.text = getString(R.string.keys_backup_info_keys_all_backup_up) - hideViews(setupMegolmBackupButton, exportManuallyButton, exitAnywayButton) + setupMegolmBackupButton.isVisible = false + exportManuallyButton.isVisible = false + exitAnywayButton.isVisible = false // You can signout signOutButton.isVisible = true } - KeysBackupState.WillBackUp, - KeysBackupState.BackingUp -> { + KeysBackupState.BackingUp -> { sheetTitle.text = getString(R.string.sign_out_bottom_sheet_warning_backing_up) // save in progress @@ -232,18 +219,21 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), backupCompleteImage.isVisible = false backupStatusTex.text = getString(R.string.sign_out_bottom_sheet_backing_up_keys) - hideViews(setupMegolmBackupButton, setupMegolmBackupButton, signOutButton, exportManuallyButton) + setupMegolmBackupButton.isVisible = false + exportManuallyButton.isVisible = false exitAnywayButton.isVisible = true + signOutButton.isVisible = false } - KeysBackupState.NotTrusted -> { + KeysBackupState.NotTrusted -> { sheetTitle.text = getString(R.string.sign_out_bottom_sheet_warning_backup_not_active) // It's not trusted and we know there are unsaved keys.. backingUpStatusGroup.isVisible = false - exportManuallyButton.isVisible = true // option to enter pass/key setupMegolmBackupButton.isVisible = true + exportManuallyButton.isVisible = true exitAnywayButton.isVisible = true + signOutButton.isVisible = false } else -> { // mmm.. strange state @@ -257,21 +247,23 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), when (state.hasBeenExportedToFile) { is Loading -> { signoutExportingLoading.isVisible = true - hideViews(setupRecoveryButton, - setupMegolmBackupButton, - exportManuallyButton, - backingUpStatusGroup, - signOutButton) + backingUpStatusGroup.isVisible = false + + setupRecoveryButton.isVisible = false + setupMegolmBackupButton.isVisible = false + exportManuallyButton.isVisible = false exitAnywayButton.isVisible = true + signOutButton.isVisible = false } is Success -> { if (state.hasBeenExportedToFile.invoke()) { sheetTitle.text = getString(R.string.action_sign_out_confirmation_simple) - hideViews(setupRecoveryButton, - setupMegolmBackupButton, - exportManuallyButton, - backingUpStatusGroup, - exitAnywayButton) + backingUpStatusGroup.isVisible = false + + setupRecoveryButton.isVisible = false + setupMegolmBackupButton.isVisible = false + exportManuallyButton.isVisible = false + exitAnywayButton.isVisible = false signOutButton.isVisible = true } } @@ -319,8 +311,4 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), } } } - - private fun hideViews(vararg views: View) { - views.forEach { it.isVisible = false } - } } From cae7510a77864fe7c4dfd6f2c290694a5f2d6e0a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 5 Oct 2020 15:25:14 +0200 Subject: [PATCH 123/278] Show debug access only in developer mode --- .../java/im/vector/app/features/home/HomeDrawerFragment.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt b/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt index 3b2ae74789..b8eb054076 100644 --- a/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/HomeDrawerFragment.kt @@ -18,19 +18,22 @@ package im.vector.app.features.home import android.os.Bundle import android.view.View +import androidx.core.view.isVisible import im.vector.app.R import im.vector.app.core.extensions.observeK import im.vector.app.core.extensions.replaceChildFragment import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.features.grouplist.GroupListFragment +import im.vector.app.features.settings.VectorPreferences import im.vector.app.features.workers.signout.SignOutUiWorker +import kotlinx.android.synthetic.main.fragment_home_drawer.* import org.matrix.android.sdk.api.session.Session import org.matrix.android.sdk.api.util.toMatrixItem -import kotlinx.android.synthetic.main.fragment_home_drawer.* import javax.inject.Inject class HomeDrawerFragment @Inject constructor( private val session: Session, + private val vectorPreferences: VectorPreferences, private val avatarRenderer: AvatarRenderer ) : VectorBaseFragment() { @@ -66,6 +69,7 @@ class HomeDrawerFragment @Inject constructor( } // Debug menu + homeDrawerHeaderDebugView.isVisible = vectorPreferences.developerMode() homeDrawerHeaderDebugView.debouncedClicks { sharedActionViewModel.post(HomeActivitySharedAction.CloseDrawer) navigator.openDebug(requireActivity()) From 88dd6ae5dac184a2376f00370f84cef5b8a8d915 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 5 Oct 2020 15:25:46 +0200 Subject: [PATCH 124/278] Rename some classes --- .../signout/SignoutBottomSheetActionButton.kt | 12 ++++++------ .../res/layout/bottom_sheet_logout_and_backup.xml | 10 +++++----- vector/src/main/res/values/attrs.xml | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignoutBottomSheetActionButton.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignoutBottomSheetActionButton.kt index 02ea2569e8..3b73455923 100644 --- a/vector/src/main/java/im/vector/app/features/workers/signout/SignoutBottomSheetActionButton.kt +++ b/vector/src/main/java/im/vector/app/features/workers/signout/SignoutBottomSheetActionButton.kt @@ -31,7 +31,7 @@ import im.vector.app.R import im.vector.app.core.extensions.setTextOrHide import im.vector.app.features.themes.ThemeUtils -class SignoutBottomSheetActionButton @JvmOverloads constructor( +class SignOutBottomSheetActionButton @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : LinearLayout(context, attrs, defStyleAttr) { @@ -80,11 +80,11 @@ class SignoutBottomSheetActionButton @JvmOverloads constructor( inflate(context, R.layout.item_signout_action, this) ButterKnife.bind(this) - val typedArray = context.obtainStyledAttributes(attrs, R.styleable.SignoutBottomSheetActionButton, 0, 0) - title = typedArray.getString(R.styleable.SignoutBottomSheetActionButton_actionTitle) ?: "" - leftIcon = typedArray.getDrawable(R.styleable.SignoutBottomSheetActionButton_leftIcon) - tint = typedArray.getColor(R.styleable.SignoutBottomSheetActionButton_iconTint, ThemeUtils.getColor(context, android.R.attr.textColor)) - textColor = typedArray.getColor(R.styleable.SignoutBottomSheetActionButton_textColor, ThemeUtils.getColor(context, android.R.attr.textColor)) + val typedArray = context.obtainStyledAttributes(attrs, R.styleable.SignOutBottomSheetActionButton, 0, 0) + title = typedArray.getString(R.styleable.SignOutBottomSheetActionButton_actionTitle) ?: "" + leftIcon = typedArray.getDrawable(R.styleable.SignOutBottomSheetActionButton_leftIcon) + tint = typedArray.getColor(R.styleable.SignOutBottomSheetActionButton_iconTint, ThemeUtils.getColor(context, android.R.attr.textColor)) + textColor = typedArray.getColor(R.styleable.SignOutBottomSheetActionButton_textColor, ThemeUtils.getColor(context, android.R.attr.textColor)) typedArray.recycle() diff --git a/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml b/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml index c109e821cb..63a250e219 100644 --- a/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml +++ b/vector/src/main/res/layout/bottom_sheet_logout_and_backup.xml @@ -81,7 +81,7 @@ android:layout_height="wrap_content" /> - - - - - - + From 19def67a9aba5077ac15e0434e99062defa5fd93 Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Sun, 4 Oct 2020 13:43:47 +0000 Subject: [PATCH 125/278] 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 0a31cf2c4477fc44e2fdac5a3575d405e196ae7c Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 5 Oct 2020 16:21:25 +0200 Subject: [PATCH 126/278] ktlint --- .../src/main/java/im/vector/app/features/home/HomeActivity.kt | 2 +- ...omSheetActionButton.kt => SignOutBottomSheetActionButton.kt} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename vector/src/main/java/im/vector/app/features/workers/signout/{SignoutBottomSheetActionButton.kt => SignOutBottomSheetActionButton.kt} (100%) 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 233bceaf7f..829ab1624b 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 @@ -305,7 +305,7 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable, UnknownDeviceDet navigator.openRoomsFiltering(this) return true } - R.id.menu_home_setting ->{ + R.id.menu_home_setting -> { navigator.openSettings(this) return true } diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignoutBottomSheetActionButton.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetActionButton.kt similarity index 100% rename from vector/src/main/java/im/vector/app/features/workers/signout/SignoutBottomSheetActionButton.kt rename to vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetActionButton.kt From 26b8ef8af93cfe7a962d48f5c9e7a7bffdfa2937 Mon Sep 17 00:00:00 2001 From: Constantin Wartenburger Date: Mon, 5 Oct 2020 17:28:05 +0200 Subject: [PATCH 127/278] Changed rainbow algorithm --- CHANGES.md | 1 + .../composer/rainbow/RainbowGenerator.kt | 83 ++++++++++--------- .../composer/rainbow/RainbowGeneratorTest.kt | 78 ++++++++--------- 3 files changed, 83 insertions(+), 79 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 4a158086a2..f0bae1aa32 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -4,6 +4,7 @@ Changes in Element 1.0.9 (2020-XX-XX) Features ✨: - Search messages in a room - phase 1 (#2110) - Hide encrypted history (before user is invited). Can be shown if wanted in developer settings + - Changed rainbow algorithm Improvements 🙌: - Wording differentiation for direct rooms (#2176) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt index 7bed9f8e64..7a64d437c5 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt @@ -18,8 +18,10 @@ package im.vector.app.features.home.room.detail.composer.rainbow import im.vector.app.core.utils.splitEmoji import javax.inject.Inject -import kotlin.math.abs +import kotlin.math.cos +import kotlin.math.pow import kotlin.math.roundToInt +import kotlin.math.sin /** * Inspired from React-Sdk @@ -29,7 +31,7 @@ class RainbowGenerator @Inject constructor() { fun generate(text: String): String { val split = text.splitEmoji() - val frequency = 360f / split.size + val frequency = 360.0 / split.size return split .mapIndexed { idx, letter -> @@ -37,53 +39,54 @@ class RainbowGenerator @Inject constructor() { if (letter == " ") { "$letter" } else { - val dashColor = hueToRGB(idx * frequency, 1.0f, 0.5f).toDashColor() + val (a, b) = generateAB(idx * frequency, 1f) + val dashColor = labToRGB(75, a, b).toDashColor() "$letter" } } .joinToString(separator = "") } - private fun hueToRGB(h: Float, s: Float, l: Float): RgbColor { - val c = s * (1 - abs(2 * l - 1)) - val x = c * (1 - abs((h / 60) % 2 - 1)) - val m = l - c / 2 + private fun generateAB(hue: Double, chroma: Float): Pair { + val radians = Math.toRadians(hue) - var r = 0f - var g = 0f - var b = 0f + val a = chroma * 127 * cos(radians) + val b = chroma * 127 * sin(radians) - when { - h < 60f -> { - r = c - g = x - } - h < 120f -> { - r = x - g = c - } - h < 180f -> { - g = c - b = x - } - h < 240f -> { - g = x - b = c - } - h < 300f -> { - r = x - b = c - } - else -> { - r = c - b = x - } + return Pair(a, b) + } + + private fun labToRGB(l: Int, a: Double, b: Double): RgbColor { + var y = (l + 16) / 116.0 + val x = adjustXYZ(y + a / 500) * 0.9505 + val z = adjustXYZ(y - b / 200) * 1.0890 + + y = adjustXYZ(y) + + val red = 3.24096994 * x - 1.53738318 * y - 0.49861076 * z + val green = -0.96924364 * x + 1.8759675 * y + 0.04155506 * z + val blue = 0.05563008 * x - 0.20397696 * y + 1.05697151 * z + + return RgbColor(adjustRGB(red), adjustRGB(green), adjustRGB(blue)) + } + + private fun adjustXYZ(value: Double): Double { + if (value > 0.2069) { + return value.pow(3) } + return 0.1284 * value - 0.01771 + } - return RgbColor( - ((r + m) * 255).roundToInt(), - ((g + m) * 255).roundToInt(), - ((b + m) * 255).roundToInt() - ) + private fun gammaCorrection(value: Double): Double { + if (value <= 0.0031308) { + return 12.92 * value + } + return 1.055 * value.pow(1 / 2.4) - 0.055 + } + + private fun adjustRGB(value: Double): Int { + return (gammaCorrection(value) + .coerceIn(0.0, 1.0) * 255) + .roundToInt() } } diff --git a/vector/src/test/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGeneratorTest.kt b/vector/src/test/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGeneratorTest.kt index 0e46d67860..20b041fd1e 100644 --- a/vector/src/test/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGeneratorTest.kt +++ b/vector/src/test/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGeneratorTest.kt @@ -32,14 +32,14 @@ class RainbowGeneratorTest { @Test fun testAscii1() { - assertEquals("""a""", rainbowGenerator.generate("a")) + assertEquals("""a""", rainbowGenerator.generate("a")) } @Test fun testAscii2() { val expected = """ - a - b + a + b """.trimIndentOneLine() assertEquals(expected, rainbowGenerator.generate("ab")) @@ -48,24 +48,24 @@ class RainbowGeneratorTest { @Test fun testAscii3() { val expected = """ - T - h - i - s + T + h + i + s - i - s + i + s - a + a - r - a - i - n - b - o - w - ! + r + a + i + n + b + o + w + ! """.trimIndentOneLine() assertEquals(expected, rainbowGenerator.generate("This is a rainbow!")) @@ -73,19 +73,19 @@ class RainbowGeneratorTest { @Test fun testEmoji1() { - assertEquals("""🤞""", rainbowGenerator.generate("\uD83E\uDD1E")) // 🤞 + assertEquals("""🤞""", rainbowGenerator.generate("\uD83E\uDD1E")) // 🤞 } @Test fun testEmoji2() { - assertEquals("""🤞""", rainbowGenerator.generate("🤞")) + assertEquals("""🤞""", rainbowGenerator.generate("🤞")) } @Test fun testEmoji3() { val expected = """ - 🤞 - 🙂 + 🤞 + 🙂 """.trimIndentOneLine() assertEquals(expected, rainbowGenerator.generate("🤞🙂")) @@ -94,20 +94,20 @@ class RainbowGeneratorTest { @Test fun testEmojiMix1() { val expected = """ - H - e - l - l - o + H + e + l + l + o - 🤞 + 🤞 - w - o - r - l - d - ! + w + o + r + l + d + ! """.trimIndentOneLine() assertEquals(expected, rainbowGenerator.generate("Hello 🤞 world!")) @@ -116,8 +116,8 @@ class RainbowGeneratorTest { @Test fun testEmojiMix2() { val expected = """ - a - 🤞 + a + 🤞 """.trimIndentOneLine() assertEquals(expected, rainbowGenerator.generate("a🤞")) @@ -126,8 +126,8 @@ class RainbowGeneratorTest { @Test fun testEmojiMix3() { val expected = """ - 🤞 - a + 🤞 + a """.trimIndentOneLine() assertEquals(expected, rainbowGenerator.generate("🤞a")) @@ -135,6 +135,6 @@ class RainbowGeneratorTest { @Test fun testError1() { - assertEquals("\uD83E", rainbowGenerator.generate("\uD83E")) + assertEquals("\uD83E", rainbowGenerator.generate("\uD83E")) } } From aa0520d47dba1c2b0d50b946aef4784a6317d75f Mon Sep 17 00:00:00 2001 From: ganfra Date: Tue, 22 Sep 2020 18:56:05 +0200 Subject: [PATCH 128/278] Start reworking draft (simplify) --- .../java/org/matrix/android/sdk/rx/RxRoom.kt | 7 +- .../sdk/api/session/room/send/DraftService.kt | 11 +- .../session/room/draft/DefaultDraftService.kt | 7 +- .../session/room/draft/DraftRepository.kt | 111 ++++++------------ .../home/room/detail/RoomDetailViewModel.kt | 61 ++-------- 5 files changed, 65 insertions(+), 132 deletions(-) diff --git a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt index 0717a10d03..2bb6c0ff69 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt @@ -101,8 +101,11 @@ class RxRoom(private val room: Room) { return room.getEventReadReceiptsLive(eventId).asObservable() } - fun liveDrafts(): Observable> { - return room.getDraftsLive().asObservable() + fun liveDraft(): Observable> { + return room.getDraftLive().asObservable() + .startWithCallable { + room.getDraft().toOptional() + } } fun liveNotificationState(): Observable { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt index dc91d5177f..6ef73d6486 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt @@ -20,6 +20,7 @@ package org.matrix.android.sdk.api.session.room.send import androidx.lifecycle.LiveData import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.util.Cancelable +import org.matrix.android.sdk.api.util.Optional interface DraftService { @@ -34,8 +35,12 @@ interface DraftService { fun deleteDraft(callback: MatrixCallback): Cancelable /** - * Return the current drafts if any, as a live data - * The draft list can contain one draft for {regular, reply, quote} and an arbitrary number of {edit} drafts + * Return the current draft or null */ - fun getDraftsLive(): LiveData> + fun getDraft(): UserDraft? + + /** + * Return the current draft if any, as a live data + */ + fun getDraftLive(): LiveData> } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt index dafa7df0eb..0426ee13e1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt @@ -24,6 +24,7 @@ import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.session.room.send.DraftService import org.matrix.android.sdk.api.session.room.send.UserDraft import org.matrix.android.sdk.api.util.Cancelable +import org.matrix.android.sdk.api.util.Optional import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.launchToCallback import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers @@ -55,7 +56,11 @@ internal class DefaultDraftService @AssistedInject constructor(@Assisted private } } - override fun getDraftsLive(): LiveData> { + override fun getDraft(): UserDraft? { + return draftRepository.getDraft(roomId) + } + + override fun getDraftLive(): LiveData> { return draftRepository.getDraftsLive(roomId) } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt index bc50b2d990..9262eb2f49 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt @@ -20,35 +20,61 @@ package org.matrix.android.sdk.internal.session.room.draft import androidx.lifecycle.LiveData import androidx.lifecycle.Transformations import com.zhuinden.monarchy.Monarchy +import io.realm.Realm +import io.realm.kotlin.createObject import org.matrix.android.sdk.BuildConfig import org.matrix.android.sdk.api.session.room.send.UserDraft +import org.matrix.android.sdk.api.util.Optional +import org.matrix.android.sdk.api.util.toOptional import org.matrix.android.sdk.internal.database.mapper.DraftMapper -import org.matrix.android.sdk.internal.database.model.DraftEntity import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity import org.matrix.android.sdk.internal.database.model.UserDraftsEntity import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.util.awaitTransaction -import io.realm.Realm -import io.realm.kotlin.createObject import timber.log.Timber import javax.inject.Inject -class DraftRepository @Inject constructor(@SessionDatabase private val monarchy: Monarchy) { +internal class DraftRepository @Inject constructor(@SessionDatabase private val monarchy: Monarchy) { suspend fun saveDraft(roomId: String, userDraft: UserDraft) { monarchy.awaitTransaction { - saveDraft(it, userDraft, roomId) + saveDraftInDb(it, userDraft, roomId) } } suspend fun deleteDraft(roomId: String) { monarchy.awaitTransaction { - deleteDraft(it, roomId) + deleteDraftFromDb(it, roomId) } } - private fun deleteDraft(realm: Realm, roomId: String) { + fun getDraft(roomId: String): UserDraft? { + return Realm.getInstance(monarchy.realmConfiguration).use { realm -> + UserDraftsEntity.where(realm, roomId).findFirst() + ?.userDrafts + ?.firstOrNull() + ?.let { + DraftMapper.map(it) + } + } + } + + fun getDraftsLive(roomId: String): LiveData> { + val liveData = monarchy.findAllMappedWithChanges( + { UserDraftsEntity.where(it, roomId) }, + { + it.userDrafts.map { draft -> + DraftMapper.map(draft) + } + } + ) + return Transformations.map(liveData) { + it.firstOrNull()?.firstOrNull().toOptional() + } + } + + private fun deleteDraftFromDb(realm: Realm, roomId: String) { UserDraftsEntity.where(realm, roomId).findFirst()?.let { userDraftsEntity -> if (userDraftsEntity.userDrafts.isNotEmpty()) { userDraftsEntity.userDrafts.removeAt(userDraftsEntity.userDrafts.size - 1) @@ -56,7 +82,7 @@ class DraftRepository @Inject constructor(@SessionDatabase private val monarchy: } } - private fun saveDraft(realm: Realm, draft: UserDraft, roomId: String) { + private fun saveDraftInDb(realm: Realm, draft: UserDraft, roomId: String) { val roomSummaryEntity = RoomSummaryEntity.where(realm, roomId).findFirst() ?: realm.createObject(roomId) @@ -68,62 +94,15 @@ class DraftRepository @Inject constructor(@SessionDatabase private val monarchy: userDraftsEntity.let { userDraftEntity -> // Save only valid draft if (draft.isValid()) { - // Add a new draft or update the current one? + // Replace the current draft val newDraft = DraftMapper.map(draft) - - // Is it an update of the top draft? - val topDraft = userDraftEntity.userDrafts.lastOrNull() - - if (topDraft == null) { - Timber.d("Draft: create a new draft ${privacySafe(draft)}") - userDraftEntity.userDrafts.add(newDraft) - } else if (topDraft.draftMode == DraftEntity.MODE_EDIT) { - // top draft is an edit - if (newDraft.draftMode == DraftEntity.MODE_EDIT) { - if (topDraft.linkedEventId == newDraft.linkedEventId) { - // Update the top draft - Timber.d("Draft: update the top edit draft ${privacySafe(draft)}") - topDraft.content = newDraft.content - } else { - // Check a previously EDIT draft with the same id - val existingEditDraftOfSameEvent = userDraftEntity.userDrafts.find { - it.draftMode == DraftEntity.MODE_EDIT && it.linkedEventId == newDraft.linkedEventId - } - - if (existingEditDraftOfSameEvent != null) { - // Ignore the new text, restore what was typed before, by putting the draft to the top - Timber.d("Draft: restore a previously edit draft ${privacySafe(draft)}") - userDraftEntity.userDrafts.remove(existingEditDraftOfSameEvent) - userDraftEntity.userDrafts.add(existingEditDraftOfSameEvent) - } else { - Timber.d("Draft: add a new edit draft ${privacySafe(draft)}") - userDraftEntity.userDrafts.add(newDraft) - } - } - } else { - // Add a new regular draft to the top - Timber.d("Draft: add a new draft ${privacySafe(draft)}") - userDraftEntity.userDrafts.add(newDraft) - } - } else { - // Top draft is not an edit - if (newDraft.draftMode == DraftEntity.MODE_EDIT) { - Timber.d("Draft: create a new edit draft ${privacySafe(draft)}") - userDraftEntity.userDrafts.add(newDraft) - } else { - // Update the top draft - Timber.d("Draft: update the top draft ${privacySafe(draft)}") - topDraft.draftMode = newDraft.draftMode - topDraft.content = newDraft.content - topDraft.linkedEventId = newDraft.linkedEventId - } - } + Timber.d("Draft: create a new draft ${privacySafe(draft)}") + userDraftEntity.userDrafts.clear() + userDraftEntity.userDrafts.add(newDraft) } else { // There is no draft to save, so the composer was clear Timber.d("Draft: delete a draft") - val topDraft = userDraftEntity.userDrafts.lastOrNull() - if (topDraft == null) { Timber.d("Draft: nothing to do") } else { @@ -135,20 +114,6 @@ class DraftRepository @Inject constructor(@SessionDatabase private val monarchy: } } - fun getDraftsLive(roomId: String): LiveData> { - val liveData = monarchy.findAllMappedWithChanges( - { UserDraftsEntity.where(it, roomId) }, - { - it.userDrafts.map { draft -> - DraftMapper.map(draft) - } - } - ) - return Transformations.map(liveData) { - it.firstOrNull().orEmpty() - } - } - private fun privacySafe(o: Any): Any { if (BuildConfig.LOG_PRIVATE_DATA) { return o diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 1b5e928843..42ce8567cd 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -680,7 +680,7 @@ class RoomDetailViewModel @AssistedInject constructor( } }.exhaustive } - is SendMode.EDIT -> { + is SendMode.EDIT -> { // is original event a reply? val inReplyTo = state.sendMode.timelineEvent.root.getClearContent().toModel()?.relatesTo?.inReplyTo?.eventId ?: state.sendMode.timelineEvent.root.content.toModel()?.relatesTo?.inReplyTo?.eventId @@ -706,7 +706,7 @@ class RoomDetailViewModel @AssistedInject constructor( _viewEvents.post(RoomDetailViewEvents.MessageSent) popDraft() } - is SendMode.QUOTE -> { + is SendMode.QUOTE -> { val messageContent: MessageContent? = state.sendMode.timelineEvent.annotations?.editSummary?.aggregatedContent.toModel() ?: state.sendMode.timelineEvent.root.getClearContent().toModel() @@ -729,7 +729,7 @@ class RoomDetailViewModel @AssistedInject constructor( _viewEvents.post(RoomDetailViewEvents.MessageSent) popDraft() } - is SendMode.REPLY -> { + is SendMode.REPLY -> { state.sendMode.timelineEvent.let { room.replyToMessage(it, action.text.toString(), action.autoMarkdown) _viewEvents.post(RoomDetailViewEvents.MessageSent) @@ -741,6 +741,9 @@ class RoomDetailViewModel @AssistedInject constructor( } private fun popDraft() { + setState { + copy(sendMode = SendMode.REGULAR("")) + } room.deleteDraft(NoOpMatrixCallback()) } @@ -915,73 +918,25 @@ class RoomDetailViewModel @AssistedInject constructor( } private fun handleEditAction(action: RoomDetailAction.EnterEditMode) { - saveCurrentDraft(action.text) - room.getTimeLineEvent(action.eventId)?.let { timelineEvent -> - setState { copy(sendMode = SendMode.EDIT(timelineEvent, action.text)) } - timelineEvent.root.eventId?.let { - room.saveDraft(UserDraft.EDIT(it, timelineEvent.getTextEditableContent() ?: ""), NoOpMatrixCallback()) - } + setState { copy(sendMode = SendMode.EDIT(timelineEvent, timelineEvent.getTextEditableContent() ?: "")) } } } private fun handleQuoteAction(action: RoomDetailAction.EnterQuoteMode) { - saveCurrentDraft(action.text) - room.getTimeLineEvent(action.eventId)?.let { timelineEvent -> setState { copy(sendMode = SendMode.QUOTE(timelineEvent, action.text)) } - withState { state -> - // Save a new draft and keep the previously entered text, if it was not an edit - timelineEvent.root.eventId?.let { - if (state.sendMode is SendMode.EDIT) { - room.saveDraft(UserDraft.QUOTE(it, ""), NoOpMatrixCallback()) - } else { - room.saveDraft(UserDraft.QUOTE(it, action.text), NoOpMatrixCallback()) - } - } - } } } private fun handleReplyAction(action: RoomDetailAction.EnterReplyMode) { - saveCurrentDraft(action.text) - room.getTimeLineEvent(action.eventId)?.let { timelineEvent -> setState { copy(sendMode = SendMode.REPLY(timelineEvent, action.text)) } - withState { state -> - // Save a new draft and keep the previously entered text, if it was not an edit - timelineEvent.root.eventId?.let { - if (state.sendMode is SendMode.EDIT) { - room.saveDraft(UserDraft.REPLY(it, ""), NoOpMatrixCallback()) - } else { - room.saveDraft(UserDraft.REPLY(it, action.text), NoOpMatrixCallback()) - } - } - } - } - } - - private fun saveCurrentDraft(draft: String) { - // Save the draft with the current text if any - withState { - if (draft.isNotBlank()) { - when (it.sendMode) { - is SendMode.REGULAR -> room.saveDraft(UserDraft.REGULAR(draft), NoOpMatrixCallback()) - is SendMode.REPLY -> room.saveDraft(UserDraft.REPLY(it.sendMode.timelineEvent.root.eventId!!, draft), NoOpMatrixCallback()) - is SendMode.QUOTE -> room.saveDraft(UserDraft.QUOTE(it.sendMode.timelineEvent.root.eventId!!, draft), NoOpMatrixCallback()) - is SendMode.EDIT -> room.saveDraft(UserDraft.EDIT(it.sendMode.timelineEvent.root.eventId!!, draft), NoOpMatrixCallback()) - } - } } } private fun handleExitSpecialMode(action: RoomDetailAction.ExitSpecialMode) = withState { - if (it.sendMode is SendMode.EDIT) { - room.deleteDraft(NoOpMatrixCallback()) - } else { - // Save a new draft and keep the previously entered text - room.saveDraft(UserDraft.REGULAR(action.text), NoOpMatrixCallback()) - } + room.deleteDraft(NoOpMatrixCallback()) setState { copy(sendMode = SendMode.REGULAR(action.text)) } } From f9c35e6bcba071b544cc46d06cd0be002a46904a Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Tue, 6 Oct 2020 11:15:00 +0300 Subject: [PATCH 129/278] If there is a pending email validation continue on this step --- CHANGES.md | 1 + .../im/vector/app/features/login/LoginAction.kt | 2 +- .../im/vector/app/features/login/LoginActivity.kt | 14 +++++++------- .../im/vector/app/features/login/LoginViewModel.kt | 7 +++++++ 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 754fb35612..697aa17b35 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -10,6 +10,7 @@ Improvements 🙌: - Small optimisation of scrolling experience in timeline (#2114) - Allow user to reset cross signing if he has no way to recover (#2052) - Create home shortcut for any room (#1525) + - Can't confirm email due to killing by Android (#2021) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/vector/src/main/java/im/vector/app/features/login/LoginAction.kt b/vector/src/main/java/im/vector/app/features/login/LoginAction.kt index 9067984852..9788060ad3 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginAction.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginAction.kt @@ -27,7 +27,7 @@ sealed class LoginAction : VectorViewModelAction { data class UpdateSignMode(val signMode: SignMode) : LoginAction() data class LoginWithToken(val loginToken: String) : LoginAction() data class WebLoginSuccess(val credentials: Credentials) : LoginAction() - data class InitWith(val loginConfig: LoginConfig) : LoginAction() + data class InitWith(val loginConfig: LoginConfig?) : LoginAction() data class ResetPassword(val email: String, val newPassword: String) : LoginAction() object ResetPasswordMailConfirmed : LoginAction() diff --git a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt index 0eb4ef3e32..01e835b4e3 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginActivity.kt @@ -91,19 +91,19 @@ open class LoginActivity : VectorBaseActivity(), ToolbarConfigurable, UnlockedAc addFirstFragment() } - // Get config extra - val loginConfig = intent.getParcelableExtra(EXTRA_CONFIG) - if (loginConfig != null && isFirstCreation()) { - // TODO Check this - loginViewModel.handle(LoginAction.InitWith(loginConfig)) - } - loginViewModel .subscribe(this) { updateWithState(it) } loginViewModel.observeViewEvents { handleLoginViewEvents(it) } + + // Get config extra + val loginConfig = intent.getParcelableExtra(EXTRA_CONFIG) + if (isFirstCreation()) { + // TODO Check this + loginViewModel.handle(LoginAction.InitWith(loginConfig)) + } } protected open fun addFirstFragment() { diff --git a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt index f986227961..dc513d1666 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt @@ -417,6 +417,13 @@ class LoginViewModel @AssistedInject constructor( private fun handleInitWith(action: LoginAction.InitWith) { loginConfig = action.loginConfig + + // If there is a pending email validation continue on this step + currentThreePid?.let { + if (isRegistrationStarted) { + handle(LoginAction.PostViewEvent(LoginViewEvents.OnSendEmailSuccess(it))) + } + } } private fun handleResetPassword(action: LoginAction.ResetPassword) { From 91b81af5a8d74a3b114eb99c6cc12d1be5908cb7 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 23 Sep 2020 13:32:07 +0200 Subject: [PATCH 130/278] Draft: handle sharing so it doesn't destroy the previous draft --- .../session/room/draft/DraftRepository.kt | 6 +- .../home/room/detail/RoomDetailAction.kt | 2 +- .../home/room/detail/RoomDetailFragment.kt | 9 +- .../home/room/detail/RoomDetailViewModel.kt | 184 +++++++++--------- .../home/room/detail/RoomDetailViewState.kt | 9 +- 5 files changed, 106 insertions(+), 104 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt index 9262eb2f49..7ca5e3c3ce 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt @@ -75,11 +75,7 @@ internal class DraftRepository @Inject constructor(@SessionDatabase private val } private fun deleteDraftFromDb(realm: Realm, roomId: String) { - UserDraftsEntity.where(realm, roomId).findFirst()?.let { userDraftsEntity -> - if (userDraftsEntity.userDrafts.isNotEmpty()) { - userDraftsEntity.userDrafts.removeAt(userDraftsEntity.userDrafts.size - 1) - } - } + UserDraftsEntity.where(realm, roomId).findFirst()?.userDrafts?.clear() } private fun saveDraftInDb(realm: Realm, draft: UserDraft, roomId: String) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt index 4bdf2e7e57..5f851b8da7 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt @@ -51,7 +51,7 @@ sealed class RoomDetailAction : VectorViewModelAction { data class EnterEditMode(val eventId: String, val text: String) : RoomDetailAction() data class EnterQuoteMode(val eventId: String, val text: String) : RoomDetailAction() data class EnterReplyMode(val eventId: String, val text: String) : RoomDetailAction() - data class ExitSpecialMode(val text: String) : RoomDetailAction() + data class EnterRegularMode(val text: String, val fromSharing: Boolean) : RoomDetailAction() data class ResendMessage(val eventId: String) : RoomDetailAction() data class RemoveFailedEcho(val eventId: String) : RoomDetailAction() diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 51aeda2aab..2fc2fe94a5 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -485,8 +485,7 @@ class RoomDetailFragment @Inject constructor( if (savedInstanceState == null) { when (val sharedData = roomDetailArgs.sharedData) { is SharedData.Text -> { - // Save a draft to set the shared text to the composer - roomDetailViewModel.handle(RoomDetailAction.SaveDraft(sharedData.text)) + roomDetailViewModel.handle(RoomDetailAction.EnterRegularMode(sharedData.text, fromSharing = true)) } is SharedData.Attachments -> { // open share edition @@ -1014,7 +1013,7 @@ class RoomDetailFragment @Inject constructor( } override fun onCloseRelatedMessage() { - roomDetailViewModel.handle(RoomDetailAction.ExitSpecialMode(composerLayout.text.toString())) + roomDetailViewModel.handle(RoomDetailAction.EnterRegularMode(composerLayout.text.toString(), false)) } override fun onRichContentSelected(contentUri: Uri): Boolean { @@ -1147,12 +1146,8 @@ class RoomDetailFragment @Inject constructor( private fun renderSendMessageResult(sendMessageResult: RoomDetailViewEvents.SendMessageResult) { when (sendMessageResult) { - is RoomDetailViewEvents.MessageSent -> { - updateComposerText("") - } is RoomDetailViewEvents.SlashCommandHandled -> { sendMessageResult.messageRes?.let { showSnackWithMessage(getString(it)) } - updateComposerText("") } is RoomDetailViewEvents.SlashCommandError -> { displayCommandError(getString(R.string.command_problem_with_parameters, sendMessageResult.command.command)) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 42ce8567cd..985604a49c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -164,7 +164,7 @@ class RoomDetailViewModel @AssistedInject constructor( getUnreadState() observeSyncState() observeEventDisplayedActions() - observeDrafts() + getDraftIfAny() observeUnreadState() observeMyRoomMember() observeActiveRoomWidgets() @@ -226,52 +226,52 @@ class RoomDetailViewModel @AssistedInject constructor( override fun handle(action: RoomDetailAction) { when (action) { - is RoomDetailAction.UserIsTyping -> handleUserIsTyping(action) - is RoomDetailAction.SaveDraft -> handleSaveDraft(action) - is RoomDetailAction.SendMessage -> handleSendMessage(action) - is RoomDetailAction.SendMedia -> handleSendMedia(action) - is RoomDetailAction.SendSticker -> handleSendSticker(action) - is RoomDetailAction.TimelineEventTurnsVisible -> handleEventVisible(action) - is RoomDetailAction.TimelineEventTurnsInvisible -> handleEventInvisible(action) - is RoomDetailAction.LoadMoreTimelineEvents -> handleLoadMore(action) - is RoomDetailAction.SendReaction -> handleSendReaction(action) - is RoomDetailAction.AcceptInvite -> handleAcceptInvite() - is RoomDetailAction.RejectInvite -> handleRejectInvite() - is RoomDetailAction.RedactAction -> handleRedactEvent(action) - is RoomDetailAction.UndoReaction -> handleUndoReact(action) - is RoomDetailAction.UpdateQuickReactAction -> handleUpdateQuickReaction(action) - is RoomDetailAction.ExitSpecialMode -> handleExitSpecialMode(action) - is RoomDetailAction.EnterEditMode -> handleEditAction(action) - is RoomDetailAction.EnterQuoteMode -> handleQuoteAction(action) - is RoomDetailAction.EnterReplyMode -> handleReplyAction(action) - is RoomDetailAction.DownloadOrOpen -> handleOpenOrDownloadFile(action) - is RoomDetailAction.NavigateToEvent -> handleNavigateToEvent(action) - is RoomDetailAction.HandleTombstoneEvent -> handleTombstoneEvent(action) - is RoomDetailAction.ResendMessage -> handleResendEvent(action) - is RoomDetailAction.RemoveFailedEcho -> handleRemove(action) - is RoomDetailAction.ClearSendQueue -> handleClearSendQueue() - is RoomDetailAction.ResendAll -> handleResendAll() - is RoomDetailAction.MarkAllAsRead -> handleMarkAllAsRead() - is RoomDetailAction.ReportContent -> handleReportContent(action) - is RoomDetailAction.IgnoreUser -> handleIgnoreUser(action) + is RoomDetailAction.UserIsTyping -> handleUserIsTyping(action) + is RoomDetailAction.SaveDraft -> handleSaveDraft(action) + is RoomDetailAction.SendMessage -> handleSendMessage(action) + is RoomDetailAction.SendMedia -> handleSendMedia(action) + is RoomDetailAction.SendSticker -> handleSendSticker(action) + is RoomDetailAction.TimelineEventTurnsVisible -> handleEventVisible(action) + is RoomDetailAction.TimelineEventTurnsInvisible -> handleEventInvisible(action) + is RoomDetailAction.LoadMoreTimelineEvents -> handleLoadMore(action) + is RoomDetailAction.SendReaction -> handleSendReaction(action) + is RoomDetailAction.AcceptInvite -> handleAcceptInvite() + is RoomDetailAction.RejectInvite -> handleRejectInvite() + is RoomDetailAction.RedactAction -> handleRedactEvent(action) + is RoomDetailAction.UndoReaction -> handleUndoReact(action) + is RoomDetailAction.UpdateQuickReactAction -> handleUpdateQuickReaction(action) + is RoomDetailAction.EnterRegularMode -> handleEnterRegularMode(action) + is RoomDetailAction.EnterEditMode -> handleEditAction(action) + is RoomDetailAction.EnterQuoteMode -> handleQuoteAction(action) + is RoomDetailAction.EnterReplyMode -> handleReplyAction(action) + is RoomDetailAction.DownloadOrOpen -> handleOpenOrDownloadFile(action) + is RoomDetailAction.NavigateToEvent -> handleNavigateToEvent(action) + is RoomDetailAction.HandleTombstoneEvent -> handleTombstoneEvent(action) + is RoomDetailAction.ResendMessage -> handleResendEvent(action) + is RoomDetailAction.RemoveFailedEcho -> handleRemove(action) + is RoomDetailAction.ClearSendQueue -> handleClearSendQueue() + is RoomDetailAction.ResendAll -> handleResendAll() + is RoomDetailAction.MarkAllAsRead -> handleMarkAllAsRead() + is RoomDetailAction.ReportContent -> handleReportContent(action) + is RoomDetailAction.IgnoreUser -> handleIgnoreUser(action) is RoomDetailAction.EnterTrackingUnreadMessagesState -> startTrackingUnreadMessages() - is RoomDetailAction.ExitTrackingUnreadMessagesState -> stopTrackingUnreadMessages() - is RoomDetailAction.ReplyToOptions -> handleReplyToOptions(action) - is RoomDetailAction.AcceptVerificationRequest -> handleAcceptVerification(action) - is RoomDetailAction.DeclineVerificationRequest -> handleDeclineVerification(action) - is RoomDetailAction.RequestVerification -> handleRequestVerification(action) - is RoomDetailAction.ResumeVerification -> handleResumeRequestVerification(action) - is RoomDetailAction.ReRequestKeys -> handleReRequestKeys(action) - is RoomDetailAction.TapOnFailedToDecrypt -> handleTapOnFailedToDecrypt(action) - is RoomDetailAction.SelectStickerAttachment -> handleSelectStickerAttachment() - is RoomDetailAction.OpenIntegrationManager -> handleOpenIntegrationManager() - is RoomDetailAction.StartCall -> handleStartCall(action) - is RoomDetailAction.EndCall -> handleEndCall() - is RoomDetailAction.ManageIntegrations -> handleManageIntegrations() - is RoomDetailAction.AddJitsiWidget -> handleAddJitsiConference(action) - is RoomDetailAction.RemoveWidget -> handleDeleteWidget(action.widgetId) - is RoomDetailAction.EnsureNativeWidgetAllowed -> handleCheckWidgetAllowed(action) - is RoomDetailAction.CancelSend -> handleCancel(action) + is RoomDetailAction.ExitTrackingUnreadMessagesState -> stopTrackingUnreadMessages() + is RoomDetailAction.ReplyToOptions -> handleReplyToOptions(action) + is RoomDetailAction.AcceptVerificationRequest -> handleAcceptVerification(action) + is RoomDetailAction.DeclineVerificationRequest -> handleDeclineVerification(action) + is RoomDetailAction.RequestVerification -> handleRequestVerification(action) + is RoomDetailAction.ResumeVerification -> handleResumeRequestVerification(action) + is RoomDetailAction.ReRequestKeys -> handleReRequestKeys(action) + is RoomDetailAction.TapOnFailedToDecrypt -> handleTapOnFailedToDecrypt(action) + is RoomDetailAction.SelectStickerAttachment -> handleSelectStickerAttachment() + is RoomDetailAction.OpenIntegrationManager -> handleOpenIntegrationManager() + is RoomDetailAction.StartCall -> handleStartCall(action) + is RoomDetailAction.EndCall -> handleEndCall() + is RoomDetailAction.ManageIntegrations -> handleManageIntegrations() + is RoomDetailAction.AddJitsiWidget -> handleAddJitsiConference(action) + is RoomDetailAction.RemoveWidget -> handleDeleteWidget(action.widgetId) + is RoomDetailAction.EnsureNativeWidgetAllowed -> handleCheckWidgetAllowed(action) + is RoomDetailAction.CancelSend -> handleCancel(action) }.exhaustive } @@ -451,45 +451,48 @@ class RoomDetailViewModel @AssistedInject constructor( */ private fun handleSaveDraft(action: RoomDetailAction.SaveDraft) { withState { - when (it.sendMode) { - is SendMode.REGULAR -> room.saveDraft(UserDraft.REGULAR(action.draft), NoOpMatrixCallback()) - is SendMode.REPLY -> room.saveDraft(UserDraft.REPLY(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) - is SendMode.QUOTE -> room.saveDraft(UserDraft.QUOTE(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) - is SendMode.EDIT -> room.saveDraft(UserDraft.EDIT(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) - }.exhaustive + when { + it.sendMode is SendMode.REGULAR && !it.sendMode.fromSharing -> { + room.saveDraft(UserDraft.REGULAR(action.draft), NoOpMatrixCallback()) + } + it.sendMode is SendMode.REPLY -> { + room.saveDraft(UserDraft.REPLY(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) + } + it.sendMode is SendMode.QUOTE -> { + room.saveDraft(UserDraft.QUOTE(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) + } + it.sendMode is SendMode.EDIT -> { + room.saveDraft(UserDraft.EDIT(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) + } + } } } - private fun observeDrafts() { - room.rx().liveDrafts() - .subscribe { - Timber.d("Draft update --> SetState") - setState { - val draft = it.lastOrNull() ?: UserDraft.REGULAR("") - copy( - // Create a sendMode from a draft and retrieve the TimelineEvent - sendMode = when (draft) { - is UserDraft.REGULAR -> SendMode.REGULAR(draft.text) - is UserDraft.QUOTE -> { - room.getTimeLineEvent(draft.linkedEventId)?.let { timelineEvent -> - SendMode.QUOTE(timelineEvent, draft.text) - } - } - is UserDraft.REPLY -> { - room.getTimeLineEvent(draft.linkedEventId)?.let { timelineEvent -> - SendMode.REPLY(timelineEvent, draft.text) - } - } - is UserDraft.EDIT -> { - room.getTimeLineEvent(draft.linkedEventId)?.let { timelineEvent -> - SendMode.EDIT(timelineEvent, draft.text) - } - } - } ?: SendMode.REGULAR("") - ) - } - } - .disposeOnClear() + private fun getDraftIfAny() { + val currentDraft = room.getDraft() ?: return + setState { + copy( + // Create a sendMode from a draft and retrieve the TimelineEvent + sendMode = when (currentDraft) { + is UserDraft.REGULAR -> SendMode.REGULAR(currentDraft.text, false) + is UserDraft.QUOTE -> { + room.getTimeLineEvent(currentDraft.linkedEventId)?.let { timelineEvent -> + SendMode.QUOTE(timelineEvent, currentDraft.text) + } + } + is UserDraft.REPLY -> { + room.getTimeLineEvent(currentDraft.linkedEventId)?.let { timelineEvent -> + SendMode.REPLY(timelineEvent, currentDraft.text) + } + } + is UserDraft.EDIT -> { + room.getTimeLineEvent(currentDraft.linkedEventId)?.let { timelineEvent -> + SendMode.EDIT(timelineEvent, currentDraft.text) + } + } + } ?: SendMode.REGULAR("", fromSharing = false) + ) + } } private fun handleUserIsTyping(action: RoomDetailAction.UserIsTyping) { @@ -740,11 +743,15 @@ class RoomDetailViewModel @AssistedInject constructor( } } - private fun popDraft() { - setState { - copy(sendMode = SendMode.REGULAR("")) + private fun popDraft() = withState { + if (it.sendMode is SendMode.REGULAR && it.sendMode.fromSharing) { + // If we were sharing, we want to get back our last value from draft + getDraftIfAny() + } else { + // Otherwise we clear the composer and remove the draft from db + setState { copy(sendMode = SendMode.REGULAR("", false)) } + room.deleteDraft(NoOpMatrixCallback()) } - room.deleteDraft(NoOpMatrixCallback()) } private fun handleJoinToAnotherRoomSlashCommand(command: ParsedCommand.JoinRoom) { @@ -935,9 +942,8 @@ class RoomDetailViewModel @AssistedInject constructor( } } - private fun handleExitSpecialMode(action: RoomDetailAction.ExitSpecialMode) = withState { - room.deleteDraft(NoOpMatrixCallback()) - setState { copy(sendMode = SendMode.REGULAR(action.text)) } + private fun handleEnterRegularMode(action: RoomDetailAction.EnterRegularMode) = setState { + copy(sendMode = SendMode.REGULAR(action.text, action.fromSharing)) } private fun handleOpenOrDownloadFile(action: RoomDetailAction.DownloadOrOpen) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt index 36acc35148..c443d61252 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewState.kt @@ -37,7 +37,12 @@ import org.matrix.android.sdk.api.session.widgets.model.Widget * Depending on the state the bottom toolbar will change (icons/preview/actions...) */ sealed class SendMode(open val text: String) { - data class REGULAR(override val text: String) : SendMode(text) + data class REGULAR( + override val text: String, + val fromSharing: Boolean, + // This is necessary for forcing refresh on selectSubscribe + private val ts: Long = System.currentTimeMillis() + ) : SendMode(text) data class QUOTE(val timelineEvent: TimelineEvent, override val text: String) : SendMode(text) data class EDIT(val timelineEvent: TimelineEvent, override val text: String) : SendMode(text) data class REPLY(val timelineEvent: TimelineEvent, override val text: String) : SendMode(text) @@ -58,7 +63,7 @@ data class RoomDetailViewState( val asyncRoomSummary: Async = Uninitialized, val activeRoomWidgets: Async> = Uninitialized, val typingMessage: String? = null, - val sendMode: SendMode = SendMode.REGULAR(""), + val sendMode: SendMode = SendMode.REGULAR("", false), val tombstoneEvent: Event? = null, val tombstoneEventHandling: Async = Uninitialized, val syncState: SyncState = SyncState.Idle, From dfbe1188f016eea2b041e004fad24beef7c127fe Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 23 Sep 2020 13:43:34 +0200 Subject: [PATCH 131/278] Draft: use session realm provider when possible --- .../sdk/internal/session/room/draft/DraftRepository.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt index 7ca5e3c3ce..5cc6c990d9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt @@ -26,6 +26,7 @@ import org.matrix.android.sdk.BuildConfig import org.matrix.android.sdk.api.session.room.send.UserDraft import org.matrix.android.sdk.api.util.Optional import org.matrix.android.sdk.api.util.toOptional +import org.matrix.android.sdk.internal.database.RealmSessionProvider import org.matrix.android.sdk.internal.database.mapper.DraftMapper import org.matrix.android.sdk.internal.database.model.RoomSummaryEntity import org.matrix.android.sdk.internal.database.model.UserDraftsEntity @@ -35,7 +36,8 @@ import org.matrix.android.sdk.internal.util.awaitTransaction import timber.log.Timber import javax.inject.Inject -internal class DraftRepository @Inject constructor(@SessionDatabase private val monarchy: Monarchy) { +internal class DraftRepository @Inject constructor(@SessionDatabase private val monarchy: Monarchy, + private val realmSessionProvider: RealmSessionProvider) { suspend fun saveDraft(roomId: String, userDraft: UserDraft) { monarchy.awaitTransaction { @@ -50,7 +52,7 @@ internal class DraftRepository @Inject constructor(@SessionDatabase private val } fun getDraft(roomId: String): UserDraft? { - return Realm.getInstance(monarchy.realmConfiguration).use { realm -> + return realmSessionProvider.withRealm { realm -> UserDraftsEntity.where(realm, roomId).findFirst() ?.userDrafts ?.firstOrNull() From 211a8dc27277878649efdee539e3faf0954126fe Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 23 Sep 2020 13:43:42 +0200 Subject: [PATCH 132/278] Draft: fix icon tint --- vector/src/main/res/layout/item_room.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/res/layout/item_room.xml b/vector/src/main/res/layout/item_room.xml index c844f10ed2..814ef645d7 100644 --- a/vector/src/main/res/layout/item_room.xml +++ b/vector/src/main/res/layout/item_room.xml @@ -105,6 +105,7 @@ android:layout_marginEnd="4dp" android:src="@drawable/ic_edit" android:visibility="gone" + android:tint="?riotx_text_primary" app:layout_constraintBottom_toBottomOf="@+id/roomNameView" app:layout_constraintEnd_toStartOf="@+id/roomUnreadCounterBadgeView" app:layout_constraintStart_toEndOf="@+id/roomNameView" From 3b8a0f8671048a20cab6d8b27195c001269ce2a7 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 23 Sep 2020 14:03:08 +0200 Subject: [PATCH 133/278] Tint swip reply icon --- .../room/detail/RoomMessageTouchHelperCallback.kt | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomMessageTouchHelperCallback.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomMessageTouchHelperCallback.kt index ef13865374..41f386c606 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomMessageTouchHelperCallback.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomMessageTouchHelperCallback.kt @@ -25,12 +25,15 @@ import android.view.MotionEvent import android.view.View import androidx.annotation.DrawableRes import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.ItemTouchHelper.ACTION_STATE_SWIPE import androidx.recyclerview.widget.RecyclerView import com.airbnb.epoxy.EpoxyModel import com.airbnb.epoxy.EpoxyTouchHelperCallback import com.airbnb.epoxy.EpoxyViewHolder +import im.vector.app.R +import im.vector.app.features.themes.ThemeUtils import timber.log.Timber import kotlin.math.abs import kotlin.math.min @@ -52,7 +55,16 @@ class RoomMessageTouchHelperCallback(private val context: Context, private var replyButtonProgress: Float = 0F private var lastReplyButtonAnimationTime: Long = 0 - private var imageDrawable: Drawable = ContextCompat.getDrawable(context, actionIcon)!! + private val imageDrawable: Drawable = DrawableCompat.wrap( + ContextCompat.getDrawable(context, actionIcon)!! + ) + + init { + DrawableCompat.setTint( + imageDrawable, + ThemeUtils.getColor(context, R.attr.riotx_text_primary) + ) + } private val triggerDistance = convertToPx(100) private val minShowDistance = convertToPx(20) From bcc64fb276195ae03b7e452446e9211cc387baa0 Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 23 Sep 2020 14:03:39 +0200 Subject: [PATCH 134/278] Update CHANGES --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 4a158086a2..a3bf5d4f9c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,7 @@ Improvements 🙌: Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) - Fix Splash layout on small screens + - Simplifies draft management and should fix bunch of draft issues (#952, #683) Translations đŸ—Ŗ: - From 038e6613c08f73ce60c3c35df286aa565484c9d5 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 28 Sep 2020 14:05:24 +0200 Subject: [PATCH 135/278] Draft: update state when saving draft to avoid loosing current text --- .../home/room/detail/RoomDetailViewModel.kt | 32 ++++++++++--------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 985604a49c..ce48d8ff89 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -449,21 +449,23 @@ class RoomDetailViewModel @AssistedInject constructor( /** * Convert a send mode to a draft and save the draft */ - private fun handleSaveDraft(action: RoomDetailAction.SaveDraft) { - withState { - when { - it.sendMode is SendMode.REGULAR && !it.sendMode.fromSharing -> { - room.saveDraft(UserDraft.REGULAR(action.draft), NoOpMatrixCallback()) - } - it.sendMode is SendMode.REPLY -> { - room.saveDraft(UserDraft.REPLY(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) - } - it.sendMode is SendMode.QUOTE -> { - room.saveDraft(UserDraft.QUOTE(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) - } - it.sendMode is SendMode.EDIT -> { - room.saveDraft(UserDraft.EDIT(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) - } + private fun handleSaveDraft(action: RoomDetailAction.SaveDraft) = withState { + when { + it.sendMode is SendMode.REGULAR && !it.sendMode.fromSharing -> { + setState { copy(sendMode = it.sendMode.copy(action.draft)) } + room.saveDraft(UserDraft.REGULAR(action.draft), NoOpMatrixCallback()) + } + it.sendMode is SendMode.REPLY -> { + setState { copy(sendMode = it.sendMode.copy(text = action.draft)) } + room.saveDraft(UserDraft.REPLY(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) + } + it.sendMode is SendMode.QUOTE -> { + setState { copy(sendMode = it.sendMode.copy(text = action.draft)) } + room.saveDraft(UserDraft.QUOTE(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) + } + it.sendMode is SendMode.EDIT -> { + setState { copy(sendMode = it.sendMode.copy(text = action.draft)) } + room.saveDraft(UserDraft.EDIT(it.sendMode.timelineEvent.root.eventId!!, action.draft), NoOpMatrixCallback()) } } } From 72a412904d549d13de8f3ac83f88693096cf77d8 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 12:26:18 +0200 Subject: [PATCH 136/278] small cleanup --- .../crypto/secrets/DefaultSharedSecretStorageService.kt | 4 ++-- .../app/features/crypto/keysrequest/KeyRequestHandler.kt | 2 +- .../app/features/crypto/recover/BootstrapCrossSigningTask.kt | 2 +- .../app/features/crypto/recover/BootstrapSharedViewModel.kt | 2 +- .../verification/epoxy/BottomSheetVerificationEmojisItem.kt | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt index 7186bc3cd0..1cae1a4e2b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt @@ -371,7 +371,7 @@ internal class DefaultSharedSecretStorageService @Inject constructor( callback.onFailure(SharedSecretStorageError.BadKeyFormat) } cryptoCoroutineScope.launch(coroutineDispatchers.main) { - kotlin.runCatching { + runCatching { // decrypt from recovery key withOlmDecryption { olmPkDecryption -> olmPkDecryption.setPrivateKey(keySpec.privateKey) @@ -390,7 +390,7 @@ internal class DefaultSharedSecretStorageService @Inject constructor( callback.onFailure(SharedSecretStorageError.BadKeyFormat) } cryptoCoroutineScope.launch(coroutineDispatchers.main) { - kotlin.runCatching { + runCatching { decryptAesHmacSha2(keySpec, name, secretContent) }.foldToCallback(callback) } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt index 4ed0e037d4..4268317700 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt @@ -126,7 +126,7 @@ class KeyRequestHandler @Inject constructor( // can we get more info on this device? session?.cryptoService()?.getMyDevicesInfo()?.firstOrNull { it.deviceId == deviceId }?.let { postAlert(context, userId, deviceId, true, deviceInfo, it) - } ?: kotlin.run { + } ?: run { postAlert(context, userId, deviceId, true, deviceInfo) } } else { diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt index 4dc2b92751..b7c689f41f 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapCrossSigningTask.kt @@ -139,7 +139,7 @@ class BootstrapCrossSigningTask @Inject constructor( null, it ) - } ?: kotlin.run { + } ?: run { ssssService.generateKey( UUID.randomUUID().toString(), params.keySpec, diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt index a3955d561e..6d711ec0e9 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSharedViewModel.kt @@ -301,7 +301,7 @@ class BootstrapSharedViewModel @AssistedInject constructor( // ======================================= private fun saveRecoveryKeyToUri(os: OutputStream) = withState { state -> viewModelScope.launch(Dispatchers.IO) { - kotlin.runCatching { + runCatching { os.use { os.write((state.recoveryKeyCreationInfo?.recoveryKey?.formatRecoveryKey() ?: "").toByteArray()) } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationEmojisItem.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationEmojisItem.kt index 77fa9cb775..daa9a913c9 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationEmojisItem.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/epoxy/BottomSheetVerificationEmojisItem.kt @@ -72,7 +72,7 @@ abstract class BottomSheetVerificationEmojisItem : VectorEpoxyModel(R.id.item_emoji_tv).isVisible = false view.findViewById(R.id.item_emoji_image).isVisible = true view.findViewById(R.id.item_emoji_image).setImageDrawable(ContextCompat.getDrawable(view.context, it)) - } ?: kotlin.run { + } ?: run { view.findViewById(R.id.item_emoji_tv).isVisible = true view.findViewById(R.id.item_emoji_image).isVisible = false view.findViewById(R.id.item_emoji_tv).text = rep.emoji From 5056615eb0b863bba70d6de3297486a4608e781f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 12:33:40 +0200 Subject: [PATCH 137/278] Upgrade kotlin version from `1.3.72` to `1.4.10` and kotlin coroutines version from `1.3.8` to `1.3.9` --- CHANGES.md | 1 + build.gradle | 4 +++- matrix-sdk-android/build.gradle | 9 ++++----- vector/build.gradle | 5 ++--- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 5b3c34d9a0..b02e5b82ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -30,6 +30,7 @@ SDK API changes ⚠ī¸: Build 🧱: - Use Update Gradle Wrapper Action - Updates Gradle Wrapper from 5.6.4 to 6.6.1. (#2193) + - Upgrade kotlin version from `1.3.72` to `1.4.10` and kotlin coroutines version from `1.3.8` to `1.3.9` Other changes: - Added registration/verification automated UI tests diff --git a/build.gradle b/build.gradle index f06d1859b5..fdb42f8f43 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,9 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.72' + // Ref: https://kotlinlang.org/releases.html + ext.kotlin_version = '1.4.10' + ext.kotlin_coroutines_version = "1.3.9" repositories { google() jcenter() diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 2c20137647..a8aea28754 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -112,15 +112,14 @@ dependencies { def moshi_version = '1.8.0' def lifecycle_version = '2.2.0' def arch_version = '2.1.0' - def coroutines_version = "1.3.8" def markwon_version = '3.1.0' def daggerVersion = '2.25.4' def work_version = '2.4.0' def retrofit_version = '2.6.2' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" implementation "androidx.appcompat:appcompat:1.2.0" implementation "androidx.core:core-ktx:1.3.1" @@ -191,7 +190,7 @@ dependencies { // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 testImplementation 'io.mockk:mockk:1.9.2.kotlin12' testImplementation 'org.amshove.kluent:kluent-android:1.44' - testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" + testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" // Plant Timber tree for test testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' @@ -205,7 +204,7 @@ dependencies { // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 androidTestImplementation 'io.mockk:mockk-android:1.9.2.kotlin12' androidTestImplementation "androidx.arch.core:core-testing:$arch_version" - androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" + androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" // Plant Timber tree for test androidTestImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' diff --git a/vector/build.gradle b/vector/build.gradle index 87c8696b02..3acfd99f87 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -283,7 +283,6 @@ dependencies { def epoxy_version = '3.11.0' def fragment_version = '1.2.5' def arrow_version = "0.8.2" - def coroutines_version = "1.3.8" def markwon_version = '4.1.2' def big_image_viewer_version = '1.6.2' def glide_version = '4.11.0' @@ -307,8 +306,8 @@ dependencies { implementation 'com.android.support:multidex:1.0.3' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" implementation "androidx.recyclerview:recyclerview:1.2.0-alpha05" implementation 'androidx.appcompat:appcompat:1.2.0' From 7a146327ca73453c91d232a0748cd3270fb60d54 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 13:05:39 +0200 Subject: [PATCH 138/278] Upgrade build tools from `3.5.3` to `4.0.1` --- CHANGES.md | 1 + build.gradle | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index b02e5b82ff..8fdda34058 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -31,6 +31,7 @@ Build 🧱: - Use Update Gradle Wrapper Action - Updates Gradle Wrapper from 5.6.4 to 6.6.1. (#2193) - Upgrade kotlin version from `1.3.72` to `1.4.10` and kotlin coroutines version from `1.3.8` to `1.3.9` + - Upgrade build tools from `3.5.3` to `4.0.1` Other changes: - Added registration/verification automated UI tests diff --git a/build.gradle b/build.gradle index fdb42f8f43..59305598e5 100644 --- a/build.gradle +++ b/build.gradle @@ -12,8 +12,7 @@ buildscript { } } dependencies { - // Warning: 3.6.3 leads to infinite gradle builds. Stick to 3.5.3 for the moment - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.0.1' classpath 'com.google.gms:google-services:4.3.2' classpath "com.airbnb.okreplay:gradle-plugin:1.5.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" From ebfee5868e6f8ade9e1520a68d550ab0898d96b1 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 13:06:24 +0200 Subject: [PATCH 139/278] Remove OkReplay, not compatible to build tools `4.0.1` (and not used) --- build.gradle | 1 - matrix-sdk-android/build.gradle | 5 --- .../sdk/OkReplayRuleChainNoActivity.kt | 32 ------------------- .../android/sdk/internal/di/NetworkModule.kt | 11 +------ 4 files changed, 1 insertion(+), 48 deletions(-) delete mode 100644 matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/OkReplayRuleChainNoActivity.kt diff --git a/build.gradle b/build.gradle index 59305598e5..ca502e4e7f 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,6 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:4.0.1' classpath 'com.google.gms:google-services:4.3.2' - classpath "com.airbnb.okreplay:gradle-plugin:1.5.0" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1' classpath 'com.google.android.gms:oss-licenses-plugin:0.10.2' diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index a8aea28754..495c204bfa 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -3,7 +3,6 @@ apply plugin: 'kotlin-android' apply plugin: 'kotlin-kapt' apply plugin: 'kotlin-android-extensions' apply plugin: 'realm-android' -apply plugin: 'okreplay' buildscript { repositories { @@ -180,10 +179,6 @@ dependencies { // Use the same WebRTC library than the one used by Jitsi library implementation('com.facebook.react:react-native-webrtc:1.84.0-jitsi-5112273@aar') - debugImplementation 'com.airbnb.okreplay:okreplay:1.5.0' - releaseImplementation 'com.airbnb.okreplay:noop:1.5.0' - androidTestImplementation 'com.airbnb.okreplay:espresso:1.5.0' - testImplementation 'junit:junit:4.12' testImplementation 'org.robolectric:robolectric:4.3' //testImplementation 'org.robolectric:shadows-support-v4:3.0' diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/OkReplayRuleChainNoActivity.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/OkReplayRuleChainNoActivity.kt deleted file mode 100644 index 372ef95be8..0000000000 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/OkReplayRuleChainNoActivity.kt +++ /dev/null @@ -1,32 +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 org.matrix.android.sdk - -import okreplay.OkReplayConfig -import okreplay.PermissionRule -import okreplay.RecorderRule -import org.junit.rules.RuleChain -import org.junit.rules.TestRule - -class OkReplayRuleChainNoActivity( - private val configuration: OkReplayConfig) { - - fun get(): TestRule { - return RuleChain.outerRule(PermissionRule(configuration)) - .around(RecorderRule(configuration)) - } -} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt index 5fff658a56..1c11ef79f9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt @@ -29,7 +29,6 @@ import org.matrix.android.sdk.internal.network.interceptors.CurlLoggingIntercept import org.matrix.android.sdk.internal.network.interceptors.FormattedJsonHttpLogger import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor -import okreplay.OkReplayInterceptor import java.util.concurrent.TimeUnit @Module @@ -44,12 +43,6 @@ internal object NetworkModule { return interceptor } - @Provides - @JvmStatic - fun providesOkReplayInterceptor(): OkReplayInterceptor { - return OkReplayInterceptor() - } - @Provides @JvmStatic fun providesStethoInterceptor(): StethoInterceptor { @@ -71,8 +64,7 @@ internal object NetworkModule { timeoutInterceptor: TimeOutInterceptor, userAgentInterceptor: UserAgentInterceptor, httpLoggingInterceptor: HttpLoggingInterceptor, - curlLoggingInterceptor: CurlLoggingInterceptor, - okReplayInterceptor: OkReplayInterceptor): OkHttpClient { + curlLoggingInterceptor: CurlLoggingInterceptor): OkHttpClient { return OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(60, TimeUnit.SECONDS) @@ -93,7 +85,6 @@ internal object NetworkModule { proxy(it) } } - .addInterceptor(okReplayInterceptor) .build() } From 282a3f8ee3ec6de7e2e606bfcb49ad65e0ff906e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 13:08:36 +0200 Subject: [PATCH 140/278] Upgrade com.google.gms:google-services from `4.3.2` to `4.3.4` --- CHANGES.md | 1 + build.gradle | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 8fdda34058..60f8129d9f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -32,6 +32,7 @@ Build 🧱: - Updates Gradle Wrapper from 5.6.4 to 6.6.1. (#2193) - Upgrade kotlin version from `1.3.72` to `1.4.10` and kotlin coroutines version from `1.3.8` to `1.3.9` - Upgrade build tools from `3.5.3` to `4.0.1` + - Upgrade com.google.gms:google-services from `4.3.2` to `4.3.4` Other changes: - Added registration/verification automated UI tests diff --git a/build.gradle b/build.gradle index ca502e4e7f..bd2f18d41b 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ buildscript { } dependencies { classpath 'com.android.tools.build:gradle:4.0.1' - classpath 'com.google.gms:google-services:4.3.2' + classpath 'com.google.gms:google-services:4.3.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.7.1' classpath 'com.google.android.gms:oss-licenses-plugin:0.10.2' From 1a0dba74227f90fb5a15e9d32fc8cf9a4b060dac Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 14:47:57 +0200 Subject: [PATCH 141/278] Upgrade Moshi to `1.11.0`, Dagger to `2.29.1`, Epoxy to `4.1.0` --- CHANGES.md | 1 + matrix-sdk-android/build.gradle | 4 ++-- vector/build.gradle | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 60f8129d9f..ec853d96ef 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -33,6 +33,7 @@ Build 🧱: - Upgrade kotlin version from `1.3.72` to `1.4.10` and kotlin coroutines version from `1.3.8` to `1.3.9` - Upgrade build tools from `3.5.3` to `4.0.1` - Upgrade com.google.gms:google-services from `4.3.2` to `4.3.4` + - Upgrade Moshi to `1.11.0`, Dagger to `2.29.1`, Epoxy to `4.1.0` Other changes: - Added registration/verification automated UI tests diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 495c204bfa..710b658bea 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -108,11 +108,11 @@ static def gitRevisionDate() { dependencies { def arrow_version = "0.8.2" - def moshi_version = '1.8.0' + def moshi_version = '1.11.0' def lifecycle_version = '2.2.0' def arch_version = '2.1.0' def markwon_version = '3.1.0' - def daggerVersion = '2.25.4' + def daggerVersion = '2.29.1' def work_version = '2.4.0' def retrofit_version = '2.6.2' diff --git a/vector/build.gradle b/vector/build.gradle index 3acfd99f87..cfcdea9ae6 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -280,14 +280,14 @@ android { dependencies { - def epoxy_version = '3.11.0' + def epoxy_version = '4.1.0' def fragment_version = '1.2.5' def arrow_version = "0.8.2" def markwon_version = '4.1.2' def big_image_viewer_version = '1.6.2' def glide_version = '4.11.0' - def moshi_version = '1.8.0' - def daggerVersion = '2.25.4' + def moshi_version = '1.11.0' + def daggerVersion = '2.29.1' def autofill_version = "1.0.0" def work_version = '2.4.0' def arch_version = '2.1.0' From e708b0f01b13faa8cffb994835bdaf8e2bf2a775 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 15:09:41 +0200 Subject: [PATCH 142/278] Fix compilation warning (due to Kotlin 1.4) --- .../org/matrix/android/sdk/internal/auth/version/Versions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt index 483c43f502..6f0c756127 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt @@ -105,6 +105,6 @@ private fun Versions.doesServerSeparatesAddAndBind(): Boolean { private fun Versions.getMaxVersion(): HomeServerVersion { return supportedVersions ?.mapNotNull { HomeServerVersion.parse(it) } - ?.max() + ?.maxOrNull() ?: HomeServerVersion.r0_0_0 } From 9e0ebc94c5e2e20f857ac621553084d19a21e53e Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 15:44:30 +0200 Subject: [PATCH 143/278] Upgrade other dependencies, and remove unused dependencies --- attachment-viewer/build.gradle | 16 +++++----------- matrix-sdk-android-rx/build.gradle | 6 +----- matrix-sdk-android/build.gradle | 22 +++++++++++----------- multipicker/build.gradle | 9 ++------- vector/build.gradle | 18 +++++++++--------- 5 files changed, 28 insertions(+), 43 deletions(-) diff --git a/attachment-viewer/build.gradle b/attachment-viewer/build.gradle index 3a5c3298d4..59ba6c4500 100644 --- a/attachment-viewer/build.gradle +++ b/attachment-viewer/build.gradle @@ -58,21 +58,15 @@ android { } dependencies { - implementation 'com.github.chrisbanes:PhotoView:2.0.0' + implementation 'com.github.chrisbanes:PhotoView:2.1.4' implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' - implementation fileTree(dir: "libs", include: ["*.jar"]) implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.3.0' - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'com.google.android.material:material:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - implementation 'androidx.navigation:navigation-fragment-ktx:2.1.0' - implementation 'androidx.navigation:navigation-ui-ktx:2.1.0' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation 'androidx.core:core-ktx:1.3.2' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation "androidx.recyclerview:recyclerview:1.1.0" + implementation 'com.google.android.material:material:1.2.1' } \ No newline at end of file diff --git a/matrix-sdk-android-rx/build.gradle b/matrix-sdk-android-rx/build.gradle index 70a05114c2..03b60bbcf7 100644 --- a/matrix-sdk-android-rx/build.gradle +++ b/matrix-sdk-android-rx/build.gradle @@ -35,7 +35,7 @@ android { dependencies { implementation project(":matrix-sdk-android") - implementation 'androidx.appcompat:appcompat:1.1.0' + implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // Paging @@ -43,8 +43,4 @@ dependencies { // Logging implementation 'com.jakewharton.timber:timber:4.7.1' - - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' } diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 710b658bea..c0030cca3d 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -121,7 +121,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" implementation "androidx.appcompat:appcompat:1.2.0" - implementation "androidx.core:core-ktx:1.3.1" + implementation "androidx.core:core-ktx:1.3.2" implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" @@ -141,7 +141,7 @@ dependencies { implementation "ru.noties.markwon:core:$markwon_version" // Image - implementation 'androidx.exifinterface:exifinterface:1.3.0-alpha01' + implementation 'androidx.exifinterface:exifinterface:1.3.0' // Database implementation 'com.github.Zhuinden:realm-monarchy:0.5.1' @@ -179,23 +179,23 @@ dependencies { // Use the same WebRTC library than the one used by Jitsi library implementation('com.facebook.react:react-native-webrtc:1.84.0-jitsi-5112273@aar') - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13' testImplementation 'org.robolectric:robolectric:4.3' //testImplementation 'org.robolectric:shadows-support-v4:3.0' // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 testImplementation 'io.mockk:mockk:1.9.2.kotlin12' - testImplementation 'org.amshove.kluent:kluent-android:1.44' + testImplementation 'org.amshove.kluent:kluent-android:1.61' testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" // Plant Timber tree for test testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' kaptAndroidTest "com.google.dagger:dagger-compiler:$daggerVersion" - androidTestImplementation 'androidx.test:core:1.2.0' - androidTestImplementation 'androidx.test:runner:1.2.0' - androidTestImplementation 'androidx.test:rules:1.2.0' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - androidTestImplementation 'org.amshove.kluent:kluent-android:1.44' + androidTestImplementation 'androidx.test:core:1.3.0' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'org.amshove.kluent:kluent-android:1.61' // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 androidTestImplementation 'io.mockk:mockk-android:1.9.2.kotlin12' androidTestImplementation "androidx.arch.core:core-testing:$arch_version" @@ -203,5 +203,5 @@ dependencies { // Plant Timber tree for test androidTestImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' - androidTestUtil 'androidx.test:orchestrator:1.2.0' + androidTestUtil 'androidx.test:orchestrator:1.3.0' } diff --git a/multipicker/build.gradle b/multipicker/build.gradle index 8f2226e884..0eb38c23dd 100644 --- a/multipicker/build.gradle +++ b/multipicker/build.gradle @@ -43,13 +43,8 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.3.0' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' - - implementation 'androidx.exifinterface:exifinterface:1.3.0-alpha01' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.exifinterface:exifinterface:1.3.0' // Log implementation 'com.jakewharton.timber:timber:4.7.1' diff --git a/vector/build.gradle b/vector/build.gradle index cfcdea9ae6..3b43aa12e1 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -281,7 +281,7 @@ android { dependencies { def epoxy_version = '4.1.0' - def fragment_version = '1.2.5' + def fragment_version = '1.3.0-beta01' def arrow_version = "0.8.2" def markwon_version = '4.1.2' def big_image_viewer_version = '1.6.2' @@ -294,7 +294,7 @@ dependencies { def lifecycle_version = '2.2.0' // Tests - def kluent_version = '1.44' + def kluent_version = '1.61' def androidxTest_version = '1.3.0' def espresso_version = '3.3.0' @@ -309,13 +309,13 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" - implementation "androidx.recyclerview:recyclerview:1.2.0-alpha05" + implementation "androidx.recyclerview:recyclerview:1.2.0-alpha06" implementation 'androidx.appcompat:appcompat:1.2.0' implementation "androidx.fragment:fragment:$fragment_version" implementation "androidx.fragment:fragment-ktx:$fragment_version" // Keep at 2.0.0-beta4 at the moment, as updating is breaking some UI implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' - implementation 'androidx.core:core-ktx:1.3.1' + implementation 'androidx.core:core-ktx:1.3.2' implementation "org.threeten:threetenbp:1.4.0:no-tzdb" implementation "com.gabrielittner.threetenbp:lazythreetenbp:0.7.0" @@ -346,7 +346,7 @@ dependencies { implementation "com.airbnb.android:epoxy-glide-preloading:$epoxy_version" kapt "com.airbnb.android:epoxy-processor:$epoxy_version" implementation "com.airbnb.android:epoxy-paging:$epoxy_version" - implementation 'com.airbnb.android:mvrx:1.3.0' + implementation 'com.airbnb.android:mvrx:1.5.1' // Work implementation "androidx.work:work-runtime-ktx:$work_version" @@ -362,7 +362,7 @@ dependencies { // UI implementation 'com.amulyakhare:com.amulyakhare.textdrawable:1.0.1' - implementation 'com.google.android.material:material:1.3.0-alpha01' + implementation 'com.google.android.material:material:1.3.0-alpha02' implementation 'me.gujun.android:span:1.7' implementation "io.noties.markwon:core:$markwon_version" implementation "io.noties.markwon:html:$markwon_version" @@ -397,7 +397,7 @@ dependencies { implementation "com.github.piasy:GlideImageViewFactory:$big_image_viewer_version" // implementation 'com.github.MikeOrtiz:TouchImageView:3.0.2' - implementation 'com.github.chrisbanes:PhotoView:2.0.0' + implementation 'com.github.chrisbanes:PhotoView:2.1.4' implementation "com.github.bumptech.glide:glide:$glide_version" kapt "com.github.bumptech.glide:compiler:$glide_version" @@ -414,7 +414,7 @@ dependencies { kapt 'com.squareup.inject:assisted-inject-processor-dagger2:0.5.0' // gplay flavor only - gplayImplementation('com.google.firebase:firebase-messaging:20.2.4') { + gplayImplementation('com.google.firebase:firebase-messaging:20.3.0') { exclude group: 'com.google.firebase', module: 'firebase-core' exclude group: 'com.google.firebase', module: 'firebase-analytics' exclude group: 'com.google.firebase', module: 'firebase-measurement-connector' @@ -438,7 +438,7 @@ dependencies { implementation 'me.dm7.barcodescanner:zxing:1.9.13' // TESTS - testImplementation 'junit:junit:4.12' + testImplementation 'junit:junit:4.13' testImplementation "org.amshove.kluent:kluent-android:$kluent_version" // Plant Timber tree for test testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' From 250ac42fa3e842bcc0c73829f5c7ac6a60859f19 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 15:57:31 +0200 Subject: [PATCH 144/278] Fix some compilation warnings --- .../vector/app/features/home/room/detail/RoomDetailViewModel.kt | 2 +- .../features/home/room/detail/timeline/item/MessagePollItem.kt | 2 +- .../im/vector/app/features/reactions/EmojiChooserFragment.kt | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index 871a550bd6..ebc265d935 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -1074,7 +1074,7 @@ class RoomDetailViewModel @AssistedInject constructor( .buffer(1, TimeUnit.SECONDS) .filter { it.isNotEmpty() } .subscribeBy(onNext = { actions -> - val bufferedMostRecentDisplayedEvent = actions.maxBy { it.event.displayIndex }?.event ?: return@subscribeBy + val bufferedMostRecentDisplayedEvent = actions.maxByOrNull { it.event.displayIndex }?.event ?: return@subscribeBy val globalMostRecentDisplayedEvent = mostRecentDisplayedEvent if (trackUnreadMessages.get()) { if (globalMostRecentDisplayedEvent == null) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessagePollItem.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessagePollItem.kt index 9d500b99b0..a7db58deb1 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessagePollItem.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/item/MessagePollItem.kt @@ -84,7 +84,7 @@ abstract class MessagePollItem : AbsMessageItem() { } } else { holder.resultWrapper.isVisible = true - val maxCount = votes?.maxBy { it.value }?.value ?: 0 + val maxCount = votes?.maxByOrNull { it.value }?.value ?: 0 optionsContent?.options?.forEachIndexed { index, item -> if (index < resultLines.size) { val optionCount = votes?.get(index) ?: 0 diff --git a/vector/src/main/java/im/vector/app/features/reactions/EmojiChooserFragment.kt b/vector/src/main/java/im/vector/app/features/reactions/EmojiChooserFragment.kt index 447525f72f..af40aa970d 100644 --- a/vector/src/main/java/im/vector/app/features/reactions/EmojiChooserFragment.kt +++ b/vector/src/main/java/im/vector/app/features/reactions/EmojiChooserFragment.kt @@ -17,7 +17,6 @@ package im.vector.app.features.reactions import android.os.Bundle import android.view.View -import androidx.lifecycle.observe import im.vector.app.R import im.vector.app.core.extensions.cleanup import im.vector.app.core.platform.VectorBaseFragment From 7e3acaa9875d6705ecaa541bcc4eab172dc0ad00 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 16:00:29 +0200 Subject: [PATCH 145/278] False positive --- .../java/im/vector/app/core/platform/VectorViewModel.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/platform/VectorViewModel.kt b/vector/src/main/java/im/vector/app/core/platform/VectorViewModel.kt index 6429c9dfe5..002dfcf068 100644 --- a/vector/src/main/java/im/vector/app/core/platform/VectorViewModel.kt +++ b/vector/src/main/java/im/vector/app/core/platform/VectorViewModel.kt @@ -42,9 +42,11 @@ abstract class VectorViewModel Single.toAsync(stateReducer: S.(Async) -> S): Single> { setState { stateReducer(Loading()) } - return this.map { Success(it) as Async } + return map { Success(it) as Async } .onErrorReturn { Fail(it) } .doOnSuccess { setState { stateReducer(it) } } } @@ -53,9 +55,11 @@ abstract class VectorViewModel Observable.toAsync(stateReducer: S.(Async) -> S): Observable> { setState { stateReducer(Loading()) } - return this.map { Success(it) as Async } + return map { Success(it) as Async } .onErrorReturn { Fail(it) } .doOnNext { setState { stateReducer(it) } } } From 3877b2f58ea3b39cc5b5d3590dcc5a7b403475c4 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Tue, 6 Oct 2020 17:02:49 +0300 Subject: [PATCH 146/278] Delete pending session store and states after session is created. --- CHANGES.md | 1 + .../im/vector/app/features/login/LoginViewModel.kt | 14 ++++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 85eb76f5f2..d2767d0174 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,7 @@ Improvements 🙌: Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) - Fix Splash layout on small screens + - Invalid popup when pressing back (#1635) Translations đŸ—Ŗ: - diff --git a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt index dc513d1666..81d6a78123 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginViewModel.kt @@ -419,10 +419,15 @@ class LoginViewModel @AssistedInject constructor( loginConfig = action.loginConfig // If there is a pending email validation continue on this step - currentThreePid?.let { - if (isRegistrationStarted) { - handle(LoginAction.PostViewEvent(LoginViewEvents.OnSendEmailSuccess(it))) + try { + if (registrationWizard?.isRegistrationStarted == true) { + currentThreePid?.let { + handle(LoginAction.PostViewEvent(LoginViewEvents.OnSendEmailSuccess(it))) + } } + } catch (e: Throwable) { + // NOOP. API is designed to use wizards in a login/registration flow, + // but we need to check the state anyway. } } @@ -679,6 +684,7 @@ class LoginViewModel @AssistedInject constructor( private fun onSessionCreated(session: Session) { activeSessionHolder.setActiveSession(session) + authenticationService.reset() session.configureAndStart(applicationContext) setState { copy( @@ -747,7 +753,7 @@ class LoginViewModel @AssistedInject constructor( override fun onSuccess(data: LoginFlowResult) { when (data) { - is LoginFlowResult.Success -> { + is LoginFlowResult.Success -> { val loginMode = when { // SSO login is taken first data.supportedLoginTypes.contains(LoginFlowTypes.SSO) -> LoginMode.Sso From 32434703d8297466ab1877c150f02b3f821d5148 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 16:17:54 +0200 Subject: [PATCH 147/278] onActivityCreated() is deprecated (not tested) --- .../KeysBackupRestoreFromKeyFragment.kt | 5 ++-- ...KeysBackupRestoreFromPassphraseFragment.kt | 4 +-- .../KeysBackupRestoreSuccessFragment.kt | 5 ++-- .../setup/KeysBackupSetupStep1Fragment.kt | 4 +-- .../setup/KeysBackupSetupStep2Fragment.kt | 5 ++-- .../setup/KeysBackupSetupStep3Fragment.kt | 4 +-- .../home/room/detail/RoomDetailFragment.kt | 29 ++++++++++--------- .../DisplayReadReceiptsBottomSheet.kt | 5 ++-- .../action/MessageActionsBottomSheet.kt | 5 ++-- .../edithistory/ViewEditHistoryBottomSheet.kt | 5 ++-- .../reactions/ViewReactionsBottomSheet.kt | 5 ++-- .../detail/widget/RoomWidgetsBottomSheet.kt | 5 ++-- .../RoomListQuickActionsBottomSheet.kt | 5 ++-- .../devices/DeviceListBottomSheet.kt | 5 ++-- .../devices/DeviceListFragment.kt | 5 ++-- .../devices/DeviceTrustInfoActionFragment.kt | 5 ++-- .../CrossSigningSettingsFragment.kt | 10 ++----- .../DeviceVerificationInfoBottomSheet.kt | 5 ++-- .../SignOutBottomSheetDialogFragment.kt | 4 +-- 19 files changed, 65 insertions(+), 55 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt index cc10256fc4..966ad9d0b8 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt @@ -19,6 +19,7 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import android.text.Editable +import android.view.View import android.view.inputmethod.EditorInfo import android.widget.EditText import androidx.lifecycle.Observer @@ -50,8 +51,8 @@ class KeysBackupRestoreFromKeyFragment @Inject constructor() @BindView(R.id.keys_restore_key_enter_edittext) lateinit var mKeyTextEdit: EditText - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) viewModel = fragmentViewModelProvider.get(KeysBackupRestoreFromKeyViewModel::class.java) sharedViewModel = activityViewModelProvider.get(KeysBackupRestoreSharedViewModel::class.java) mKeyTextEdit.setText(viewModel.recoveryCode.value) diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt index 7941d95add..79aa728da1 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromPassphraseFragment.kt @@ -59,8 +59,8 @@ class KeysBackupRestoreFromPassphraseFragment @Inject constructor() : VectorBase viewModel.showPasswordMode.value = !(viewModel.showPasswordMode.value ?: false) } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) viewModel = fragmentViewModelProvider.get(KeysBackupRestoreFromPassphraseViewModel::class.java) sharedViewModel = activityViewModelProvider.get(KeysBackupRestoreSharedViewModel::class.java) diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreSuccessFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreSuccessFragment.kt index fa571b86c1..30a6cfe696 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreSuccessFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreSuccessFragment.kt @@ -16,6 +16,7 @@ package im.vector.app.features.crypto.keysbackup.restore import android.os.Bundle +import android.view.View import android.widget.TextView import androidx.core.view.isVisible import butterknife.BindView @@ -36,8 +37,8 @@ class KeysBackupRestoreSuccessFragment @Inject constructor() : VectorBaseFragmen private lateinit var sharedViewModel: KeysBackupRestoreSharedViewModel - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) sharedViewModel = activityViewModelProvider.get(KeysBackupRestoreSharedViewModel::class.java) if (compareValues(sharedViewModel.importKeyResult?.totalNumberOfKeys, 0) > 0) { diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep1Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep1Fragment.kt index 0a82edd150..f855b86b6c 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep1Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep1Fragment.kt @@ -40,8 +40,8 @@ class KeysBackupSetupStep1Fragment @Inject constructor() : VectorBaseFragment() @BindView(R.id.keys_backup_setup_step1_manualExport) lateinit var manualExportButton: Button - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) viewModel = activityViewModelProvider.get(KeysBackupSetupSharedViewModel::class.java) diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt index 0520098866..af279c9140 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep2Fragment.kt @@ -16,6 +16,7 @@ package im.vector.app.features.crypto.keysbackup.setup import android.os.Bundle +import android.view.View import android.view.ViewGroup import android.view.inputmethod.EditorInfo import android.widget.EditText @@ -77,8 +78,8 @@ class KeysBackupSetupStep2Fragment @Inject constructor() : VectorBaseFragment() private lateinit var viewModel: KeysBackupSetupSharedViewModel - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) viewModel = activityViewModelProvider.get(KeysBackupSetupSharedViewModel::class.java) diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt index 41b7cbddfe..e508f06e4d 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt @@ -65,8 +65,8 @@ class KeysBackupSetupStep3Fragment @Inject constructor() : VectorBaseFragment() private lateinit var viewModel: KeysBackupSetupSharedViewModel - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) viewModel = activityViewModelProvider.get(KeysBackupSetupSharedViewModel::class.java) viewModel.shouldPromptOnBack = false diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index cca7e9e542..8694cf3978 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -371,6 +371,10 @@ class RoomDetailFragment @Inject constructor( is RoomDetailViewEvents.RequestNativeWidgetPermission -> requestNativeWidgetPermission(it) }.exhaustive } + + if(savedInstanceState == null) { + handleShareData() + } } private fun requestNativeWidgetPermission(it: RoomDetailViewEvents.RequestNativeWidgetPermission) { @@ -480,20 +484,17 @@ class RoomDetailFragment @Inject constructor( navigator.openRoom(vectorBaseActivity, action.roomId) } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) - if (savedInstanceState == null) { - when (val sharedData = roomDetailArgs.sharedData) { - is SharedData.Text -> { - roomDetailViewModel.handle(RoomDetailAction.EnterRegularMode(sharedData.text, fromSharing = true)) - } - is SharedData.Attachments -> { - // open share edition - onContentAttachmentsReady(sharedData.attachmentData) - } - null -> Timber.v("No share data to process") - }.exhaustive - } + private fun handleShareData() { + when (val sharedData = roomDetailArgs.sharedData) { + is SharedData.Text -> { + roomDetailViewModel.handle(RoomDetailAction.EnterRegularMode(sharedData.text, fromSharing = true)) + } + is SharedData.Attachments -> { + // open share edition + onContentAttachmentsReady(sharedData.attachmentData) + } + null -> Timber.v("No share data to process") + }.exhaustive } override fun onDestroyView() { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt index 7593118c9f..5fefc9aba8 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/readreceipts/DisplayReadReceiptsBottomSheet.kt @@ -18,6 +18,7 @@ package im.vector.app.features.home.room.detail.readreceipts import android.os.Bundle import android.os.Parcelable +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.MvRx @@ -59,8 +60,8 @@ class DisplayReadReceiptsBottomSheet : VectorBaseBottomSheetDialogFragment(), Di override fun getLayoutResId() = R.layout.bottom_sheet_generic_list_with_title - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) sharedActionViewModel = activityViewModelProvider.get(MessageSharedActionViewModel::class.java) recyclerView.configureWith(epoxyController, hasFixedSize = false) bottomSheetTitle.text = getString(R.string.seen_by) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsBottomSheet.kt index 9858d2a03c..f337f0ba5f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsBottomSheet.kt @@ -16,6 +16,7 @@ package im.vector.app.features.home.room.detail.timeline.action import android.os.Bundle +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.fragmentViewModel @@ -51,8 +52,8 @@ class MessageActionsBottomSheet : VectorBaseBottomSheetDialogFragment(), Message override fun getLayoutResId() = R.layout.bottom_sheet_generic_list - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) sharedActionViewModel = activityViewModelProvider.get(MessageSharedActionViewModel::class.java) recyclerView.configureWith(messageActionsEpoxyController, hasFixedSize = false, disableItemAnimation = true) messageActionsEpoxyController.listener = this diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryBottomSheet.kt index 93fdd253d8..080ccaea7c 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/edithistory/ViewEditHistoryBottomSheet.kt @@ -16,6 +16,7 @@ package im.vector.app.features.home.room.detail.timeline.edithistory import android.os.Bundle +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.MvRx @@ -55,8 +56,8 @@ class ViewEditHistoryBottomSheet : VectorBaseBottomSheetDialogFragment() { override fun getLayoutResId() = R.layout.bottom_sheet_generic_list_with_title - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) recyclerView.configureWith( epoxyController, showDivider = true, diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/reactions/ViewReactionsBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/reactions/ViewReactionsBottomSheet.kt index a5555e4ebb..2e0d07aa67 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/reactions/ViewReactionsBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/reactions/ViewReactionsBottomSheet.kt @@ -17,6 +17,7 @@ package im.vector.app.features.home.room.detail.timeline.reactions import android.os.Bundle +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.MvRx @@ -55,8 +56,8 @@ class ViewReactionsBottomSheet : VectorBaseBottomSheetDialogFragment(), ViewReac override fun getLayoutResId() = R.layout.bottom_sheet_generic_list_with_title - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) sharedActionViewModel = activityViewModelProvider.get(MessageSharedActionViewModel::class.java) recyclerView.configureWith(epoxyController, hasFixedSize = false, showDivider = true) bottomSheetTitle.text = context?.getString(R.string.reactions) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/widget/RoomWidgetsBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/widget/RoomWidgetsBottomSheet.kt index e87f5cdaa9..24f1299c19 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/widget/RoomWidgetsBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/widget/RoomWidgetsBottomSheet.kt @@ -17,6 +17,7 @@ package im.vector.app.features.home.room.detail.widget import android.os.Bundle +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.parentFragmentViewModel @@ -55,8 +56,8 @@ class RoomWidgetsBottomSheet : VectorBaseBottomSheetDialogFragment(), RoomWidget override fun getLayoutResId() = R.layout.bottom_sheet_generic_list_with_title - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) recyclerView.configureWith(epoxyController, hasFixedSize = false) bottomSheetTitle.text = getString(R.string.active_widgets_title) bottomSheetTitle.textSize = 20f diff --git a/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt b/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt index c33d964d22..ccd38125f9 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/list/actions/RoomListQuickActionsBottomSheet.kt @@ -18,6 +18,7 @@ package im.vector.app.features.home.room.list.actions import android.os.Bundle import android.os.Parcelable +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.fragmentViewModel @@ -67,8 +68,8 @@ class RoomListQuickActionsBottomSheet : VectorBaseBottomSheetDialogFragment(), R override fun getLayoutResId() = R.layout.bottom_sheet_generic_list - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) sharedActionViewModel = activityViewModelProvider.get(RoomListQuickActionsSharedActionViewModel::class.java) recyclerView.configureWith(roomListActionsEpoxyController, viewPool = sharedViewPool, hasFixedSize = false, disableItemAnimation = true) roomListActionsEpoxyController.listener = this diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt index 9ba1c59983..323e25a022 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListBottomSheet.kt @@ -20,6 +20,7 @@ import android.content.DialogInterface import android.os.Bundle import android.os.Parcelable import android.view.KeyEvent +import android.view.View import androidx.fragment.app.Fragment import com.airbnb.mvrx.MvRx import com.airbnb.mvrx.fragmentViewModel @@ -46,8 +47,8 @@ class DeviceListBottomSheet : VectorBaseBottomSheetDialogFragment() { injector.inject(this) } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) viewModel.observeViewEvents { when (it) { is DeviceListBottomSheetViewEvents.Verify -> { diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListFragment.kt index 9f90ffbb84..e9fdd15af4 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceListFragment.kt @@ -17,6 +17,7 @@ package im.vector.app.features.roommemberprofile.devices import android.os.Bundle +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.parentFragmentViewModel @@ -41,8 +42,8 @@ class DeviceListFragment @Inject constructor( @BindView(R.id.bottomSheetRecyclerView) lateinit var recyclerView: RecyclerView - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) recyclerView.setPadding(0, dimensionConverter.dpToPx(16), 0, dimensionConverter.dpToPx(16)) recyclerView.configureWith( epoxyController, diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceTrustInfoActionFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceTrustInfoActionFragment.kt index decc22c979..e31f3172e9 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceTrustInfoActionFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/devices/DeviceTrustInfoActionFragment.kt @@ -17,6 +17,7 @@ package im.vector.app.features.roommemberprofile.devices import android.os.Bundle +import android.view.View import androidx.recyclerview.widget.RecyclerView import butterknife.BindView import com.airbnb.mvrx.parentFragmentViewModel @@ -41,8 +42,8 @@ class DeviceTrustInfoActionFragment @Inject constructor( @BindView(R.id.bottomSheetRecyclerView) lateinit var recyclerView: RecyclerView - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) recyclerView.setPadding(0, dimensionConverter.dpToPx(16), 0, dimensionConverter.dpToPx(16)) recyclerView.configureWith( epoxyController, diff --git a/vector/src/main/java/im/vector/app/features/settings/crosssigning/CrossSigningSettingsFragment.kt b/vector/src/main/java/im/vector/app/features/settings/crosssigning/CrossSigningSettingsFragment.kt index 711819f764..ebeac5aca1 100644 --- a/vector/src/main/java/im/vector/app/features/settings/crosssigning/CrossSigningSettingsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/crosssigning/CrossSigningSettingsFragment.kt @@ -41,8 +41,9 @@ class CrossSigningSettingsFragment @Inject constructor( private val viewModel: CrossSigningSettingsViewModel by fragmentViewModel() - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + setupRecyclerView() viewModel.observeViewEvents { when (it) { is CrossSigningSettingsViewEvents.Failure -> { @@ -62,11 +63,6 @@ class CrossSigningSettingsFragment @Inject constructor( (activity as? VectorBaseActivity)?.supportActionBar?.setTitle(R.string.encryption_information_cross_signing_state) } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - setupRecyclerView() - } - override fun invalidate() = withState(viewModel) { state -> controller.setData(state) } diff --git a/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt b/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt index c8b12e26a5..dbaa99e1df 100644 --- a/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/settings/devices/DeviceVerificationInfoBottomSheet.kt @@ -17,6 +17,7 @@ package im.vector.app.features.settings.devices import android.os.Bundle import android.os.Parcelable +import android.view.View import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView import butterknife.BindView @@ -58,8 +59,8 @@ class DeviceVerificationInfoBottomSheet : VectorBaseBottomSheetDialogFragment(), override fun getLayoutResId() = R.layout.bottom_sheet_generic_list_with_title - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) recyclerView.configureWith( controller, showDivider = false, diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt index 30f7ed93a3..756aa3cbac 100644 --- a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt @@ -104,8 +104,8 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), viewModel.refreshRemoteStateIfNeeded() } - override fun onActivityCreated(savedInstanceState: Bundle?) { - super.onActivityCreated(savedInstanceState) + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) setupRecoveryButton.action = { BootstrapBottomSheet.show(parentFragmentManager, SetupMode.NORMAL) From dd1c9976e3413fdee955455dff1ac6061195a5b5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 17:13:57 +0200 Subject: [PATCH 148/278] Fix runtime issue after upgrading Moshi library --- .../session/content/ContentAttachmentData.kt | 5 ++- .../sdk/api/session/room/model/Signed.kt | 2 ++ .../crypto/IncomingSecretShareRequest.kt | 2 ++ .../android/sdk/internal/di/MoshiProvider.kt | 4 +++ .../parsing/CipherSuiteMoshiAdapter.kt | 35 +++++++++++++++++++ .../network/parsing/TlsVersionMoshiAdapter.kt | 35 +++++++++++++++++++ 6 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt index 045a9bc1a0..b89dfee77f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt @@ -20,9 +20,11 @@ package org.matrix.android.sdk.api.session.content import android.net.Uri import android.os.Parcelable import androidx.exifinterface.media.ExifInterface +import com.squareup.moshi.JsonClass import kotlinx.android.parcel.Parcelize @Parcelize +@JsonClass(generateAdapter = true) data class ContentAttachmentData( val size: Long = 0, val duration: Long? = 0, @@ -32,10 +34,11 @@ data class ContentAttachmentData( val exifOrientation: Int = ExifInterface.ORIENTATION_UNDEFINED, val name: String? = null, val queryUri: Uri, - private val mimeType: String?, + val mimeType: String?, val type: Type ) : Parcelable { + @JsonClass(generateAdapter = false) enum class Type { FILE, IMAGE, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt index 9c14275b3e..9f0e0c17ff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt @@ -18,7 +18,9 @@ package org.matrix.android.sdk.api.session.room.model import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass +@JsonClass(generateAdapter = true) data class Signed( @Json(name = "token") val token: String, @Json(name = "signatures") val signatures: Any, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt index 4b91ed5d76..de71fd2391 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt @@ -17,6 +17,7 @@ package org.matrix.android.sdk.internal.crypto +import com.squareup.moshi.JsonClass import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.internal.crypto.model.rest.SecretShareRequest @@ -24,6 +25,7 @@ import org.matrix.android.sdk.internal.crypto.model.rest.SecretShareRequest /** * IncomingRoomKeyRequest class defines the incoming room keys request. */ +@JsonClass(generateAdapter = true) data class IncomingSecretShareRequest( /** * The user id diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt index 5e16d0b455..5921e28f59 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt @@ -32,8 +32,10 @@ import org.matrix.android.sdk.api.session.room.model.message.MessageTextContent import org.matrix.android.sdk.api.session.room.model.message.MessageType import org.matrix.android.sdk.api.session.room.model.message.MessageVerificationRequestContent import org.matrix.android.sdk.api.session.room.model.message.MessageVideoContent +import org.matrix.android.sdk.internal.network.parsing.CipherSuiteMoshiAdapter import org.matrix.android.sdk.internal.network.parsing.ForceToBooleanJsonAdapter import org.matrix.android.sdk.internal.network.parsing.RuntimeJsonAdapterFactory +import org.matrix.android.sdk.internal.network.parsing.TlsVersionMoshiAdapter import org.matrix.android.sdk.internal.network.parsing.UriMoshiAdapter object MoshiProvider { @@ -41,6 +43,8 @@ object MoshiProvider { private val moshi: Moshi = Moshi.Builder() .add(UriMoshiAdapter()) .add(ForceToBooleanJsonAdapter()) + .add(CipherSuiteMoshiAdapter()) + .add(TlsVersionMoshiAdapter()) .add(RuntimeJsonAdapterFactory.of(MessageContent::class.java, "msgtype", MessageDefaultContent::class.java) .registerSubtype(MessageTextContent::class.java, MessageType.MSGTYPE_TEXT) .registerSubtype(MessageNoticeContent::class.java, MessageType.MSGTYPE_NOTICE) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt new file mode 100644 index 0000000000..ad5821cb0f --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2019 New Vector Ltd + * 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.network.parsing + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import okhttp3.CipherSuite + +internal class CipherSuiteMoshiAdapter { + + @ToJson + fun toJson(cipherSuite: CipherSuite): String { + return cipherSuite.javaName + } + + @FromJson + fun fromJson(cipherSuiteString: String): CipherSuite { + return CipherSuite.forJavaName(cipherSuiteString) + } +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt new file mode 100644 index 0000000000..75301521d5 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt @@ -0,0 +1,35 @@ +/* + * Copyright 2019 New Vector Ltd + * 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.network.parsing + +import com.squareup.moshi.FromJson +import com.squareup.moshi.ToJson +import okhttp3.TlsVersion + +internal class TlsVersionMoshiAdapter { + + @ToJson + fun toJson(tlsVersion: TlsVersion): String { + return tlsVersion.javaName + } + + @FromJson + fun fromJson(tlsVersionString: String): TlsVersion { + return TlsVersion.forJavaName(tlsVersionString) + } +} From 182158c3af11ba55a9b5f8cd6f2afccd93c7c663 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 17:47:00 +0200 Subject: [PATCH 149/278] Fix runtime issue after upgrading Moshi library --- .../crypto/IncomingGossipingRequestManager.kt | 12 ++++-- .../crypto/IncomingSecretShareRequest.kt | 4 +- .../sdk/internal/crypto/SendGossipWorker.kt | 40 ++++++++++++++----- .../keysbackup/model/rest/KeysVersion.kt | 7 +++- .../internal/crypto/store/IMXCryptoStore.kt | 29 ++++++++++---- .../crypto/store/db/RealmCryptoStore.kt | 11 +++-- 6 files changed, 74 insertions(+), 29 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt index da72186136..18356ffbb0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt @@ -17,6 +17,8 @@ package org.matrix.android.sdk.internal.crypto +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch import org.matrix.android.sdk.api.auth.data.Credentials import org.matrix.android.sdk.api.crypto.MXCryptoConfig import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_SSSS_NAME @@ -36,8 +38,6 @@ import org.matrix.android.sdk.internal.di.SessionId import org.matrix.android.sdk.internal.session.SessionScope import org.matrix.android.sdk.internal.util.MatrixCoroutineDispatchers import org.matrix.android.sdk.internal.worker.WorkerParamsFactory -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.launch import timber.log.Timber import javax.inject.Inject @@ -327,7 +327,9 @@ internal class IncomingGossipingRequestManager @Inject constructor( val params = SendGossipWorker.Params( sessionId = sessionId, secretValue = secretValue, - request = request + requestUserId = request.userId, + requestDeviceId = request.deviceId, + requestId = request.requestId ) cryptoStore.updateGossipingRequestState(request, GossipingRequestState.ACCEPTING) @@ -351,7 +353,9 @@ internal class IncomingGossipingRequestManager @Inject constructor( val params = SendGossipWorker.Params( sessionId = userId, secretValue = secretValue, - request = request + requestUserId = request.userId, + requestDeviceId = request.deviceId, + requestId = request.requestId ) cryptoStore.updateGossipingRequestState(request, GossipingRequestState.ACCEPTING) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt index de71fd2391..c376a66f09 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt @@ -17,15 +17,13 @@ package org.matrix.android.sdk.internal.crypto -import com.squareup.moshi.JsonClass import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.internal.crypto.model.rest.SecretShareRequest /** - * IncomingRoomKeyRequest class defines the incoming room keys request. + * IncomingSecretShareRequest class defines the incoming secret keys request. */ -@JsonClass(generateAdapter = true) data class IncomingSecretShareRequest( /** * The user id diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt index c8bfdcd542..1c28dc6fbb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt @@ -47,7 +47,9 @@ internal class SendGossipWorker(context: Context, internal data class Params( override val sessionId: String, val secretValue: String, - val request: IncomingSecretShareRequest, + val requestUserId: String?, + val requestDeviceId: String?, + val requestId: String?, override val lastFailureMessage: String? = null ) : SessionWorkerParams @@ -67,16 +69,21 @@ internal class SendGossipWorker(context: Context, val eventType: String = EventType.SEND_SECRET val toDeviceContent = SecretSendEventContent( - requestId = params.request.requestId ?: "", + requestId = params.requestId ?: "", secretValue = params.secretValue ) - val requestingUserId = params.request.userId ?: "" - val requestingDeviceId = params.request.deviceId ?: "" + val requestingUserId = params.requestUserId ?: "" + val requestingDeviceId = params.requestDeviceId ?: "" val deviceInfo = cryptoStore.getUserDevice(requestingUserId, requestingDeviceId) ?: return buildErrorResult(params, "Unknown deviceInfo, cannot send message").also { - cryptoStore.updateGossipingRequestState(params.request, GossipingRequestState.FAILED_TO_ACCEPTED) - Timber.e("Unknown deviceInfo, cannot send message, sessionId: ${params.request.deviceId}") + cryptoStore.updateGossipingRequestState( + requestUserId = params.requestUserId, + requestDeviceId = params.requestDeviceId, + requestId = params.requestId, + state = GossipingRequestState.FAILED_TO_ACCEPTED + ) + Timber.e("Unknown deviceInfo, cannot send message, sessionId: ${params.requestDeviceId}") } val sendToDeviceMap = MXUsersDevicesMap() @@ -88,7 +95,12 @@ internal class SendGossipWorker(context: Context, // no session with this device, probably because there // were no one-time keys. return buildErrorResult(params, "no session with this device").also { - cryptoStore.updateGossipingRequestState(params.request, GossipingRequestState.FAILED_TO_ACCEPTED) + cryptoStore.updateGossipingRequestState( + requestUserId = params.requestUserId, + requestDeviceId = params.requestDeviceId, + requestId = params.requestId, + state = GossipingRequestState.FAILED_TO_ACCEPTED + ) Timber.e("no session with this device, probably because there were no one-time keys.") } } @@ -121,13 +133,23 @@ internal class SendGossipWorker(context: Context, transactionId = localId ) ) - cryptoStore.updateGossipingRequestState(params.request, GossipingRequestState.ACCEPTED) + cryptoStore.updateGossipingRequestState( + requestUserId = params.requestUserId, + requestDeviceId = params.requestDeviceId, + requestId = params.requestId, + state = GossipingRequestState.ACCEPTED + ) return Result.success() } catch (throwable: Throwable) { return if (throwable.shouldBeRetried()) { Result.retry() } else { - cryptoStore.updateGossipingRequestState(params.request, GossipingRequestState.FAILED_TO_ACCEPTED) + cryptoStore.updateGossipingRequestState( + requestUserId = params.requestUserId, + requestDeviceId = params.requestDeviceId, + requestId = params.requestId, + state = GossipingRequestState.FAILED_TO_ACCEPTED + ) buildErrorResult(params, throwable.localizedMessage ?: "error") } } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt index 3ca8df3131..115e7814d6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt @@ -17,7 +17,12 @@ package org.matrix.android.sdk.internal.crypto.keysbackup.model.rest +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) data class KeysVersion( // the keys backup version - var version: String? = null + @Json(name = "version") + val version: String? = null ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt index f248e464c2..491a69a1de 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt @@ -1,4 +1,3 @@ - /* * Copyright 2016 OpenMarket Ltd * Copyright 2018 New Vector Ltd @@ -215,11 +214,12 @@ internal interface IMXCryptoStore { // TODO temp fun getLiveDeviceList(): LiveData> - fun getMyDevicesInfo() : List + fun getMyDevicesInfo(): List - fun getLiveMyDevicesInfo() : LiveData> + fun getLiveMyDevicesInfo(): LiveData> fun saveMyDevicesInfo(info: List) + /** * Store the crypto algorithm for a room. * @@ -367,7 +367,19 @@ internal interface IMXCryptoStore { fun saveGossipingEvent(event: Event) - fun updateGossipingRequestState(request: IncomingShareRequestCommon, state: GossipingRequestState) + fun updateGossipingRequestState(request: IncomingShareRequestCommon, state: GossipingRequestState) { + updateGossipingRequestState( + requestUserId = request.userId, + requestDeviceId = request.deviceId, + requestId = request.requestId, + state = state + ) + } + + fun updateGossipingRequestState(requestUserId: String?, + requestDeviceId: String?, + requestId: String?, + state: GossipingRequestState) /** * Search an IncomingRoomKeyRequest @@ -411,7 +423,7 @@ internal interface IMXCryptoStore { fun getLiveCrossSigningPrivateKeys(): LiveData> fun saveBackupRecoveryKey(recoveryKey: String?, version: String?) - fun getKeyBackupRecoveryKeyInfo() : SavedKeyBackupKeyInfo? + fun getKeyBackupRecoveryKeyInfo(): SavedKeyBackupKeyInfo? fun setUserKeysAsTrusted(userId: String, trusted: Boolean = true) fun setDeviceTrust(userId: String, deviceId: String, crossSignedVerified: Boolean, locallyVerified: Boolean?) @@ -421,12 +433,13 @@ internal interface IMXCryptoStore { fun updateUsersTrust(check: (String) -> Boolean) fun addWithHeldMegolmSession(withHeldContent: RoomKeyWithHeldContent) - fun getWithHeldMegolmSession(roomId: String, sessionId: String) : RoomKeyWithHeldContent? + fun getWithHeldMegolmSession(roomId: String, sessionId: String): RoomKeyWithHeldContent? fun markedSessionAsShared(roomId: String?, sessionId: String, userId: String, deviceId: String, chainIndex: Int) - fun wasSessionSharedWithUser(roomId: String?, sessionId: String, userId: String, deviceId: String) : SharedSessionResult + fun wasSessionSharedWithUser(roomId: String?, sessionId: String, userId: String, deviceId: String): SharedSessionResult data class SharedSessionResult(val found: Boolean, val chainIndex: Int?) - fun getSharedWithInfo(roomId: String?, sessionId: String) : MXUsersDevicesMap + + fun getSharedWithInfo(roomId: String?, sessionId: String): MXUsersDevicesMap // Dev tools fun getOutgoingRoomKeyRequests(): List 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 df71ef9eba..4f63ddc238 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 @@ -1134,12 +1134,15 @@ internal class RealmCryptoStore @Inject constructor( // } // } - override fun updateGossipingRequestState(request: IncomingShareRequestCommon, state: GossipingRequestState) { + override fun updateGossipingRequestState(requestUserId: String?, + requestDeviceId: String?, + requestId: String?, + state: GossipingRequestState) { doRealmTransaction(realmConfiguration) { realm -> realm.where() - .equalTo(IncomingGossipingRequestEntityFields.OTHER_USER_ID, request.userId) - .equalTo(IncomingGossipingRequestEntityFields.OTHER_DEVICE_ID, request.deviceId) - .equalTo(IncomingGossipingRequestEntityFields.REQUEST_ID, request.requestId) + .equalTo(IncomingGossipingRequestEntityFields.OTHER_USER_ID, requestUserId) + .equalTo(IncomingGossipingRequestEntityFields.OTHER_DEVICE_ID, requestDeviceId) + .equalTo(IncomingGossipingRequestEntityFields.REQUEST_ID, requestId) .findAll().forEach { it.requestState = state } From 3182850e19097ea6c58d433daaf677537e2966cf Mon Sep 17 00:00:00 2001 From: rkfg Date: Mon, 5 Oct 2020 20:44:49 +0000 Subject: [PATCH 150/278] 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 a7f034f50064741988f76e5b8ee8f4729d7373ec Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 10:53:37 +0200 Subject: [PATCH 151/278] Stop using deprecated API to manage Permissions request from Fragment --- .../vector/app/core/utils/PermissionsTools.kt | 57 ++------ .../VerificationChooseMethodFragment.kt | 16 +-- .../home/room/detail/RoomDetailFragment.kt | 124 +++++++++--------- .../roomprofile/RoomProfileFragment.kt | 16 +-- .../settings/VectorSettingsGeneralFragment.kt | 16 +-- 5 files changed, 90 insertions(+), 139 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt b/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt index aff26ae494..3b83364f35 100644 --- a/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt +++ b/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt @@ -22,6 +22,7 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Build import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityCompat @@ -105,7 +106,7 @@ fun checkPermissions(permissionsToBeGrantedBitMap: Int, activity: Activity, requestCode: Int, @StringRes rationaleMessage: Int = 0): Boolean { - return checkPermissions(permissionsToBeGrantedBitMap, activity, null, requestCode, rationaleMessage) + return checkPermissions(permissionsToBeGrantedBitMap, activity, null, null, requestCode, rationaleMessage) } /** @@ -117,9 +118,9 @@ fun checkPermissions(permissionsToBeGrantedBitMap: Int, */ fun checkPermissions(permissionsToBeGrantedBitMap: Int, fragment: Fragment, - requestCode: Int, - @StringRes rationaleMessage: Int = 0): Boolean { - return checkPermissions(permissionsToBeGrantedBitMap, fragment.activity, fragment, requestCode, rationaleMessage) + @StringRes rationaleMessage: Int = 0, + allGranted: (Boolean) -> Unit): Boolean { + return checkPermissions(permissionsToBeGrantedBitMap, fragment.activity, fragment, allGranted, 0, rationaleMessage) } /** @@ -143,6 +144,7 @@ fun checkPermissions(permissionsToBeGrantedBitMap: Int, private fun checkPermissions(permissionsToBeGrantedBitMap: Int, activity: Activity?, fragment: Fragment?, + allGranted: ((Boolean) -> Unit)?, requestCode: Int, @StringRes rationaleMessage: Int ): Boolean { @@ -222,7 +224,10 @@ private fun checkPermissions(permissionsToBeGrantedBitMap: Int, .setOnCancelListener { Toast.makeText(activity, R.string.missing_permissions_warning, Toast.LENGTH_SHORT).show() } .setPositiveButton(R.string.ok) { _, _ -> if (permissionsListToBeGranted.isNotEmpty()) { - fragment?.requestPermissions(permissionsListToBeGranted.toTypedArray(), requestCode) + fragment?.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result -> + allGranted?.invoke(result.keys.all { result[it] == true }) + } + ?.launch(permissionsListToBeGranted.toTypedArray()) ?: run { ActivityCompat.requestPermissions(activity, permissionsListToBeGranted.toTypedArray(), requestCode) } @@ -262,7 +267,10 @@ private fun checkPermissions(permissionsToBeGrantedBitMap: Int, .show() */ } else { - fragment?.requestPermissions(permissionsArrayToBeGranted, requestCode) + fragment?.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result -> + allGranted?.invoke(result.keys.all { result[it] == true }) + } + ?.launch(permissionsArrayToBeGranted) ?: run { ActivityCompat.requestPermissions(activity, permissionsArrayToBeGranted, requestCode) } @@ -307,43 +315,6 @@ private fun updatePermissionsToBeGranted(activity: Activity, return isRequestPermissionRequested } -/** - * Helper method to process [.PERMISSIONS_FOR_AUDIO_IP_CALL] - * on onRequestPermissionsResult() methods. - * - * @param context App context - * @param grantResults permissions granted results - * @return true if audio IP call is permitted, false otherwise - */ -fun onPermissionResultAudioIpCall(context: Context, grantResults: IntArray): Boolean { - val arePermissionsGranted = allGranted(grantResults) - - if (!arePermissionsGranted) { - Toast.makeText(context, R.string.permissions_action_not_performed_missing_permissions, Toast.LENGTH_SHORT).show() - } - - return arePermissionsGranted -} - -/** - * Helper method to process [.PERMISSIONS_FOR_VIDEO_IP_CALL] - * on onRequestPermissionsResult() methods. - * For video IP calls, record audio and camera permissions are both mandatory. - * - * @param context App context - * @param grantResults permissions granted results - * @return true if video IP call is permitted, false otherwise - */ -fun onPermissionResultVideoIpCall(context: Context, grantResults: IntArray): Boolean { - val arePermissionsGranted = allGranted(grantResults) - - if (!arePermissionsGranted) { - Toast.makeText(context, R.string.permissions_action_not_performed_missing_permissions, Toast.LENGTH_SHORT).show() - } - - return arePermissionsGranted -} - /** * Return true if all permissions are granted, false if not or if permission request has been cancelled */ diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt index fc715301f2..b176cc0815 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt @@ -27,8 +27,6 @@ import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.configureWith import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO -import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_LAUNCH_CAMERA -import im.vector.app.core.utils.allGranted import im.vector.app.core.utils.checkPermissions import im.vector.app.features.crypto.verification.VerificationAction import im.vector.app.features.crypto.verification.VerificationBottomSheetViewModel @@ -76,15 +74,11 @@ class VerificationChooseMethodFragment @Inject constructor( } override fun openCamera() { - if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this, PERMISSION_REQUEST_CODE_LAUNCH_CAMERA)) { - doOpenQRCodeScanner() - } - } - - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - - if (requestCode == PERMISSION_REQUEST_CODE_LAUNCH_CAMERA && allGranted(grantResults)) { + if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this) { allGranted -> + if (allGranted) { + doOpenQRCodeScanner() + } + }) { doOpenQRCodeScanner() } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 8694cf3978..6ee6212cf6 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -91,18 +91,13 @@ import im.vector.app.core.utils.KeyboardStateUtils import im.vector.app.core.utils.PERMISSIONS_FOR_AUDIO_IP_CALL import im.vector.app.core.utils.PERMISSIONS_FOR_VIDEO_IP_CALL import im.vector.app.core.utils.PERMISSIONS_FOR_WRITING_FILES -import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_INCOMING_URI -import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_PICK_ATTACHMENT import im.vector.app.core.utils.TextUtils -import im.vector.app.core.utils.allGranted import im.vector.app.core.utils.checkPermissions import im.vector.app.core.utils.colorizeMatchingText import im.vector.app.core.utils.copyToClipboard import im.vector.app.core.utils.createJSonViewerStyleProvider import im.vector.app.core.utils.createUIHandler import im.vector.app.core.utils.isValidUrl -import im.vector.app.core.utils.onPermissionResultAudioIpCall -import im.vector.app.core.utils.onPermissionResultVideoIpCall import im.vector.app.core.utils.openUrlInExternalBrowser import im.vector.app.core.utils.saveMedia import im.vector.app.core.utils.shareMedia @@ -234,11 +229,6 @@ class RoomDetailFragment @Inject constructor( ActiveCallView.Callback { companion object { - - private const val AUDIO_CALL_PERMISSION_REQUEST_CODE = 1 - private const val VIDEO_CALL_PERMISSION_REQUEST_CODE = 2 - private const val SAVE_ATTACHEMENT_REQUEST_CODE = 3 - /** * Sanitize the display name. * @@ -797,15 +787,35 @@ class RoomDetailFragment @Inject constructor( roomDetailViewModel.pendingAction = startCallAction if (isVideoCall) { if (checkPermissions(PERMISSIONS_FOR_VIDEO_IP_CALL, - this, VIDEO_CALL_PERMISSION_REQUEST_CODE, - R.string.permissions_rationale_msg_camera_and_audio)) { + this, + R.string.permissions_rationale_msg_camera_and_audio) { allGranted -> + if (allGranted) { + (roomDetailViewModel.pendingAction as? RoomDetailAction.StartCall)?.let { + roomDetailViewModel.pendingAction = null + roomDetailViewModel.handle(it) + } + } else { + context?.toast(R.string.permissions_action_not_performed_missing_permissions) + cleanUpAfterPermissionNotGranted() + } + }) { roomDetailViewModel.pendingAction = null roomDetailViewModel.handle(startCallAction) } } else { if (checkPermissions(PERMISSIONS_FOR_AUDIO_IP_CALL, - this, AUDIO_CALL_PERMISSION_REQUEST_CODE, - R.string.permissions_rationale_msg_record_audio)) { + this, + R.string.permissions_rationale_msg_record_audio) { allGranted -> + if (allGranted) { + (roomDetailViewModel.pendingAction as? RoomDetailAction.StartCall)?.let { + roomDetailViewModel.pendingAction = null + roomDetailViewModel.handle(it) + } + } else { + context?.toast(R.string.permissions_action_not_performed_missing_permissions) + cleanUpAfterPermissionNotGranted() + } + }) { roomDetailViewModel.pendingAction = null roomDetailViewModel.handle(startCallAction) } @@ -1027,7 +1037,17 @@ class RoomDetailFragment @Inject constructor( override fun onRichContentSelected(contentUri: Uri): Boolean { // We need WRITE_EXTERNAL permission - return if (checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this@RoomDetailFragment, PERMISSION_REQUEST_CODE_INCOMING_URI)) { + return if (checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this@RoomDetailFragment) { allGranted -> + if (allGranted) { + val pendingUri = roomDetailViewModel.pendingUri + if (pendingUri != null) { + roomDetailViewModel.pendingUri = null + sendUri(pendingUri) + } + } else { + cleanUpAfterPermissionNotGranted() + } + }) { sendUri(contentUri) } else { roomDetailViewModel.pendingUri = contentUri @@ -1417,52 +1437,11 @@ class RoomDetailFragment @Inject constructor( // // } // } - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { - if (allGranted(grantResults)) { - when (requestCode) { - SAVE_ATTACHEMENT_REQUEST_CODE -> { - sharedActionViewModel.pendingAction?.let { - handleActions(it) - sharedActionViewModel.pendingAction = null - } - } - PERMISSION_REQUEST_CODE_INCOMING_URI -> { - val pendingUri = roomDetailViewModel.pendingUri - if (pendingUri != null) { - roomDetailViewModel.pendingUri = null - sendUri(pendingUri) - } - } - PERMISSION_REQUEST_CODE_PICK_ATTACHMENT -> { - val pendingType = attachmentsHelper.pendingType - if (pendingType != null) { - attachmentsHelper.pendingType = null - launchAttachmentProcess(pendingType) - } - } - AUDIO_CALL_PERMISSION_REQUEST_CODE -> { - if (onPermissionResultAudioIpCall(requireContext(), grantResults)) { - (roomDetailViewModel.pendingAction as? RoomDetailAction.StartCall)?.let { - roomDetailViewModel.pendingAction = null - roomDetailViewModel.handle(it) - } - } - } - VIDEO_CALL_PERMISSION_REQUEST_CODE -> { - if (onPermissionResultVideoIpCall(requireContext(), grantResults)) { - (roomDetailViewModel.pendingAction as? RoomDetailAction.StartCall)?.let { - roomDetailViewModel.pendingAction = null - roomDetailViewModel.handle(it) - } - } - } - } - } else { - // Reset all pending data - roomDetailViewModel.pendingAction = null - roomDetailViewModel.pendingUri = null - attachmentsHelper.pendingType = null - } + private fun cleanUpAfterPermissionNotGranted() { + // Reset all pending data + roomDetailViewModel.pendingAction = null + roomDetailViewModel.pendingUri = null + attachmentsHelper.pendingType = null } // override fun onAudioMessageClicked(messageAudioContent: MessageAudioContent) { @@ -1579,7 +1558,16 @@ class RoomDetailFragment @Inject constructor( private fun onSaveActionClicked(action: EventSharedAction.Save) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q - && !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this, SAVE_ATTACHEMENT_REQUEST_CODE)) { + && !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this) { allGranted -> + if (allGranted) { + sharedActionViewModel.pendingAction?.let { + handleActions(it) + sharedActionViewModel.pendingAction = null + } + } else { + cleanUpAfterPermissionNotGranted() + } + }) { sharedActionViewModel.pendingAction = action return } @@ -1818,7 +1806,17 @@ class RoomDetailFragment @Inject constructor( // AttachmentTypeSelectorView.Callback override fun onTypeSelected(type: AttachmentTypeSelectorView.Type) { - if (checkPermissions(type.permissionsBit, this, PERMISSION_REQUEST_CODE_PICK_ATTACHMENT)) { + if (checkPermissions(type.permissionsBit, this) { allGranted -> + if (allGranted) { + val pendingType = attachmentsHelper.pendingType + if (pendingType != null) { + attachmentsHelper.pendingType = null + launchAttachmentProcess(pendingType) + } + } else { + cleanUpAfterPermissionNotGranted() + } + }) { launchAttachmentProcess(type) } else { attachmentsHelper.pendingType = type diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 477d557bea..f5c80b378f 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -46,8 +46,6 @@ import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.intent.getFilenameFromUri import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO -import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_LAUNCH_CAMERA -import im.vector.app.core.utils.allGranted import im.vector.app.core.utils.checkPermissions import im.vector.app.core.utils.copyToClipboard import im.vector.app.core.utils.startSharePlainTextIntent @@ -288,7 +286,11 @@ class RoomProfileFragment @Inject constructor( private var avatarCameraUri: Uri? = null private fun onAvatarTypeSelected(isCamera: Boolean) { if (isCamera) { - if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this, PERMISSION_REQUEST_CODE_LAUNCH_CAMERA)) { + if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this) { allGranted -> + if (allGranted) { + onAvatarTypeSelected(true) + } + }) { avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this) } } else { @@ -331,14 +333,6 @@ class RoomProfileFragment @Inject constructor( super.onActivityResult(requestCode, resultCode, data) } - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { - if (allGranted(grantResults)) { - when (requestCode) { - PERMISSION_REQUEST_CODE_LAUNCH_CAMERA -> onAvatarTypeSelected(true) - } - } - } - private fun onAvatarCropped(uri: Uri?) { if (uri != null) { roomProfileViewModel.handle(RoomProfileAction.ChangeRoomAvatar(uri, getFilenameFromUri(context, uri))) diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt index 6c0aefe9da..2f2c0d4c33 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt @@ -48,9 +48,7 @@ import im.vector.app.core.preference.UserAvatarPreference import im.vector.app.core.preference.VectorPreference import im.vector.app.core.preference.VectorSwitchPreference import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO -import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_LAUNCH_CAMERA import im.vector.app.core.utils.TextUtils -import im.vector.app.core.utils.allGranted import im.vector.app.core.utils.checkPermissions import im.vector.app.core.utils.getSizeOfFiles import im.vector.app.core.utils.toast @@ -279,14 +277,6 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { session.integrationManagerService().removeListener(integrationServiceListener) } - override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { - if (allGranted(grantResults)) { - if (requestCode == PERMISSION_REQUEST_CODE_LAUNCH_CAMERA) { - onAvatarTypeSelected(true) - } - } - } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) @@ -402,7 +392,11 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { private fun onAvatarTypeSelected(isCamera: Boolean) { if (isCamera) { - if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this, PERMISSION_REQUEST_CODE_LAUNCH_CAMERA)) { + if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this) { allGranted -> + if (allGranted) { + onAvatarTypeSelected(true) + } + }) { avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this) } } else { From 05950ec1c8a73ed08c56a21cd92bbdd8471fd4f7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 11:52:29 +0200 Subject: [PATCH 152/278] registerForActivityResult has to be called at Fragment creation --- .../vector/app/core/utils/PermissionsTools.kt | 39 +++--- .../VerificationChooseMethodFragment.kt | 13 +- .../home/room/detail/RoomDetailFragment.kt | 114 +++++++++--------- .../roomprofile/RoomProfileFragment.kt | 13 +- .../settings/VectorSettingsGeneralFragment.kt | 13 +- 5 files changed, 101 insertions(+), 91 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt b/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt index 3b83364f35..44fc6afa4e 100644 --- a/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt +++ b/vector/src/main/java/im/vector/app/core/utils/PermissionsTools.kt @@ -22,6 +22,7 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Build import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.StringRes import androidx.appcompat.app.AlertDialog @@ -95,6 +96,12 @@ fun logPermissionStatuses(context: Context) { } } +fun Fragment.registerForPermissionsResult(allGranted: (Boolean) -> Unit): ActivityResultLauncher> { + return registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result -> + allGranted.invoke(result.keys.all { result[it] == true }) + } +} + /** * See [.checkPermissions] * @@ -106,21 +113,21 @@ fun checkPermissions(permissionsToBeGrantedBitMap: Int, activity: Activity, requestCode: Int, @StringRes rationaleMessage: Int = 0): Boolean { - return checkPermissions(permissionsToBeGrantedBitMap, activity, null, null, requestCode, rationaleMessage) + return checkPermissions(permissionsToBeGrantedBitMap, activity, null, requestCode, rationaleMessage) } /** * See [.checkPermissions] * * @param permissionsToBeGrantedBitMap - * @param fragment + * @param activityResultLauncher from the calling fragment that is requesting the permissions * @return true if the permissions are granted (synchronous flow), false otherwise (asynchronous flow) */ fun checkPermissions(permissionsToBeGrantedBitMap: Int, - fragment: Fragment, - @StringRes rationaleMessage: Int = 0, - allGranted: (Boolean) -> Unit): Boolean { - return checkPermissions(permissionsToBeGrantedBitMap, fragment.activity, fragment, allGranted, 0, rationaleMessage) + activity: Activity, + activityResultLauncher: ActivityResultLauncher>, + @StringRes rationaleMessage: Int = 0): Boolean { + return checkPermissions(permissionsToBeGrantedBitMap, activity, activityResultLauncher, 0, rationaleMessage) } /** @@ -138,23 +145,19 @@ fun checkPermissions(permissionsToBeGrantedBitMap: Int, * * @param permissionsToBeGrantedBitMap the permissions bit map to be granted * @param activity the calling Activity that is requesting the permissions (or fragment parent) - * @param fragment the calling fragment that is requesting the permissions + * @param activityResultLauncher from the calling fragment that is requesting the permissions * @return true if the permissions are granted (synchronous flow), false otherwise (asynchronous flow) */ private fun checkPermissions(permissionsToBeGrantedBitMap: Int, - activity: Activity?, - fragment: Fragment?, - allGranted: ((Boolean) -> Unit)?, + activity: Activity, + activityResultLauncher: ActivityResultLauncher>?, requestCode: Int, @StringRes rationaleMessage: Int ): Boolean { var isPermissionGranted = false // sanity check - if (null == activity) { - Timber.w("## checkPermissions(): invalid input data") - isPermissionGranted = false - } else if (PERMISSIONS_EMPTY == permissionsToBeGrantedBitMap) { + if (PERMISSIONS_EMPTY == permissionsToBeGrantedBitMap) { isPermissionGranted = true } else if (PERMISSIONS_FOR_AUDIO_IP_CALL != permissionsToBeGrantedBitMap && PERMISSIONS_FOR_VIDEO_IP_CALL != permissionsToBeGrantedBitMap @@ -224,9 +227,7 @@ private fun checkPermissions(permissionsToBeGrantedBitMap: Int, .setOnCancelListener { Toast.makeText(activity, R.string.missing_permissions_warning, Toast.LENGTH_SHORT).show() } .setPositiveButton(R.string.ok) { _, _ -> if (permissionsListToBeGranted.isNotEmpty()) { - fragment?.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result -> - allGranted?.invoke(result.keys.all { result[it] == true }) - } + activityResultLauncher ?.launch(permissionsListToBeGranted.toTypedArray()) ?: run { ActivityCompat.requestPermissions(activity, permissionsListToBeGranted.toTypedArray(), requestCode) @@ -267,9 +268,7 @@ private fun checkPermissions(permissionsToBeGrantedBitMap: Int, .show() */ } else { - fragment?.registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { result -> - allGranted?.invoke(result.keys.all { result[it] == true }) - } + activityResultLauncher ?.launch(permissionsArrayToBeGranted) ?: run { ActivityCompat.requestPermissions(activity, permissionsArrayToBeGranted, requestCode) diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt index b176cc0815..a1ce84e2f4 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt @@ -28,6 +28,7 @@ import im.vector.app.core.extensions.configureWith import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO import im.vector.app.core.utils.checkPermissions +import im.vector.app.core.utils.registerForPermissionsResult import im.vector.app.features.crypto.verification.VerificationAction import im.vector.app.features.crypto.verification.VerificationBottomSheetViewModel import im.vector.app.features.qrcode.QrCodeScannerActivity @@ -73,12 +74,14 @@ class VerificationChooseMethodFragment @Inject constructor( state.pendingRequest.invoke()?.transactionId ?: "")) } + private val openCameraActivityResultLauncher = registerForPermissionsResult { allGranted -> + if (allGranted) { + doOpenQRCodeScanner() + } + } + override fun openCamera() { - if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this) { allGranted -> - if (allGranted) { - doOpenQRCodeScanner() - } - }) { + if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, requireActivity(), openCameraActivityResultLauncher)) { doOpenQRCodeScanner() } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 6ee6212cf6..c861e5ce73 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -99,6 +99,7 @@ import im.vector.app.core.utils.createJSonViewerStyleProvider import im.vector.app.core.utils.createUIHandler import im.vector.app.core.utils.isValidUrl import im.vector.app.core.utils.openUrlInExternalBrowser +import im.vector.app.core.utils.registerForPermissionsResult import im.vector.app.core.utils.saveMedia import im.vector.app.core.utils.shareMedia import im.vector.app.core.utils.toast @@ -782,40 +783,35 @@ class RoomDetailFragment @Inject constructor( } } + private val startCallActivityResultLauncher = registerForPermissionsResult { allGranted -> + if (allGranted) { + (roomDetailViewModel.pendingAction as? RoomDetailAction.StartCall)?.let { + roomDetailViewModel.pendingAction = null + roomDetailViewModel.handle(it) + } + } else { + context?.toast(R.string.permissions_action_not_performed_missing_permissions) + cleanUpAfterPermissionNotGranted() + } + } + + private fun safeStartCall2(isVideoCall: Boolean) { val startCallAction = RoomDetailAction.StartCall(isVideoCall) roomDetailViewModel.pendingAction = startCallAction if (isVideoCall) { if (checkPermissions(PERMISSIONS_FOR_VIDEO_IP_CALL, - this, - R.string.permissions_rationale_msg_camera_and_audio) { allGranted -> - if (allGranted) { - (roomDetailViewModel.pendingAction as? RoomDetailAction.StartCall)?.let { - roomDetailViewModel.pendingAction = null - roomDetailViewModel.handle(it) - } - } else { - context?.toast(R.string.permissions_action_not_performed_missing_permissions) - cleanUpAfterPermissionNotGranted() - } - }) { + requireActivity(), + startCallActivityResultLauncher, + R.string.permissions_rationale_msg_camera_and_audio)) { roomDetailViewModel.pendingAction = null roomDetailViewModel.handle(startCallAction) } } else { if (checkPermissions(PERMISSIONS_FOR_AUDIO_IP_CALL, - this, - R.string.permissions_rationale_msg_record_audio) { allGranted -> - if (allGranted) { - (roomDetailViewModel.pendingAction as? RoomDetailAction.StartCall)?.let { - roomDetailViewModel.pendingAction = null - roomDetailViewModel.handle(it) - } - } else { - context?.toast(R.string.permissions_action_not_performed_missing_permissions) - cleanUpAfterPermissionNotGranted() - } - }) { + requireActivity(), + startCallActivityResultLauncher, + R.string.permissions_rationale_msg_record_audio)) { roomDetailViewModel.pendingAction = null roomDetailViewModel.handle(startCallAction) } @@ -1005,6 +1001,18 @@ class RoomDetailFragment @Inject constructor( } } + private val writingFileActivityResultLauncher = registerForPermissionsResult { allGranted -> + if (allGranted) { + val pendingUri = roomDetailViewModel.pendingUri + if (pendingUri != null) { + roomDetailViewModel.pendingUri = null + sendUri(pendingUri) + } + } else { + cleanUpAfterPermissionNotGranted() + } + } + private fun setupComposer() { autoCompleter.setup(composerLayout.composerEditText) @@ -1037,17 +1045,7 @@ class RoomDetailFragment @Inject constructor( override fun onRichContentSelected(contentUri: Uri): Boolean { // We need WRITE_EXTERNAL permission - return if (checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this@RoomDetailFragment) { allGranted -> - if (allGranted) { - val pendingUri = roomDetailViewModel.pendingUri - if (pendingUri != null) { - roomDetailViewModel.pendingUri = null - sendUri(pendingUri) - } - } else { - cleanUpAfterPermissionNotGranted() - } - }) { + return if (checkPermissions(PERMISSIONS_FOR_WRITING_FILES, requireActivity(), writingFileActivityResultLauncher)) { sendUri(contentUri) } else { roomDetailViewModel.pendingUri = contentUri @@ -1556,18 +1554,20 @@ class RoomDetailFragment @Inject constructor( ) } + private val saveActionActivityResultLauncher = registerForPermissionsResult { allGranted -> + if (allGranted) { + sharedActionViewModel.pendingAction?.let { + handleActions(it) + sharedActionViewModel.pendingAction = null + } + } else { + cleanUpAfterPermissionNotGranted() + } + } + private fun onSaveActionClicked(action: EventSharedAction.Save) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q - && !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, this) { allGranted -> - if (allGranted) { - sharedActionViewModel.pendingAction?.let { - handleActions(it) - sharedActionViewModel.pendingAction = null - } - } else { - cleanUpAfterPermissionNotGranted() - } - }) { + && !checkPermissions(PERMISSIONS_FOR_WRITING_FILES, requireActivity(), saveActionActivityResultLauncher)) { sharedActionViewModel.pendingAction = action return } @@ -1805,18 +1805,20 @@ class RoomDetailFragment @Inject constructor( // AttachmentTypeSelectorView.Callback + private val typeSelectedActivityResultLauncher = registerForPermissionsResult { allGranted -> + if (allGranted) { + val pendingType = attachmentsHelper.pendingType + if (pendingType != null) { + attachmentsHelper.pendingType = null + launchAttachmentProcess(pendingType) + } + } else { + cleanUpAfterPermissionNotGranted() + } + } + override fun onTypeSelected(type: AttachmentTypeSelectorView.Type) { - if (checkPermissions(type.permissionsBit, this) { allGranted -> - if (allGranted) { - val pendingType = attachmentsHelper.pendingType - if (pendingType != null) { - attachmentsHelper.pendingType = null - launchAttachmentProcess(pendingType) - } - } else { - cleanUpAfterPermissionNotGranted() - } - }) { + if (checkPermissions(type.permissionsBit, requireActivity(), typeSelectedActivityResultLauncher)) { launchAttachmentProcess(type) } else { attachmentsHelper.pendingType = type diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index f5c80b378f..a6e1fda793 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -48,6 +48,7 @@ import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO import im.vector.app.core.utils.checkPermissions import im.vector.app.core.utils.copyToClipboard +import im.vector.app.core.utils.registerForPermissionsResult import im.vector.app.core.utils.startSharePlainTextIntent import im.vector.app.features.crypto.util.toImageRes import im.vector.app.features.home.AvatarRenderer @@ -283,14 +284,16 @@ class RoomProfileFragment @Inject constructor( .show() } + private val takePhotoActivityResultLauncher = registerForPermissionsResult { allGranted -> + if (allGranted) { + onAvatarTypeSelected(true) + } + } + private var avatarCameraUri: Uri? = null private fun onAvatarTypeSelected(isCamera: Boolean) { if (isCamera) { - if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this) { allGranted -> - if (allGranted) { - onAvatarTypeSelected(true) - } - }) { + if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, requireActivity(), takePhotoActivityResultLauncher)) { avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this) } } else { diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt index 2f2c0d4c33..c1d8eb1abe 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt @@ -51,6 +51,7 @@ import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO import im.vector.app.core.utils.TextUtils import im.vector.app.core.utils.checkPermissions import im.vector.app.core.utils.getSizeOfFiles +import im.vector.app.core.utils.registerForPermissionsResult import im.vector.app.core.utils.toast import im.vector.app.features.MainActivity import im.vector.app.features.MainActivityArgs @@ -390,13 +391,15 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { }.show() } + private val takePhotoActivityResultLauncher = registerForPermissionsResult { allGranted -> + if (allGranted) { + onAvatarTypeSelected(true) + } + } + private fun onAvatarTypeSelected(isCamera: Boolean) { if (isCamera) { - if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this) { allGranted -> - if (allGranted) { - onAvatarTypeSelected(true) - } - }) { + if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, requireActivity(), takePhotoActivityResultLauncher)) { avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this) } } else { From ff0f42900d4714afef65c226c218067dcafbac5b Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 16:02:01 +0200 Subject: [PATCH 153/278] Do not use deprecated Fragment.startActivityForResult anymore --- attachment-viewer/build.gradle | 1 + matrix-sdk-android-rx/build.gradle | 1 + matrix-sdk-android/build.gradle | 1 + multipicker/build.gradle | 2 +- .../im/vector/lib/multipicker/AudioPicker.kt | 11 +- .../im/vector/lib/multipicker/CameraPicker.kt | 67 +++++---- .../vector/lib/multipicker/ContactPicker.kt | 11 +- .../im/vector/lib/multipicker/FilePicker.kt | 11 +- .../im/vector/lib/multipicker/ImagePicker.kt | 11 +- .../java/im/vector/lib/multipicker/Picker.kt | 16 +-- .../im/vector/lib/multipicker/VideoPicker.kt | 11 +- .../im/vector/app/core/extensions/Fragment.kt | 16 ++- .../core/utils/ExternalApplicationsUtil.kt | 13 +- .../features/attachments/AttachmentsHelper.kt | 130 +++++++++--------- .../preview/AttachmentsPreviewActivity.kt | 2 - .../app/features/call/VectorCallActivity.kt | 1 + .../call/conference/VectorJitsiActivity.kt | 1 + .../createdirect/CreateDirectRoomActivity.kt | 1 + .../setup/KeysBackupSetupStep3Fragment.kt | 23 ++-- .../VerificationChooseMethodFragment.kt | 26 ++-- .../discovery/DiscoverySettingsFragment.kt | 21 ++- .../change/SetIdentityServerFragment.kt | 19 ++- .../home/room/detail/RoomDetailFragment.kt | 103 +++++++++----- .../room/detail/widget/WidgetRequestCodes.kt | 22 --- .../invite/InviteUsersToRoomActivity.kt | 1 + .../features/media/BigImageViewerActivity.kt | 5 +- .../features/navigation/DefaultNavigator.kt | 40 ++++-- .../app/features/navigation/Navigator.kt | 27 ++-- .../features/qrcode/QrCodeScannerActivity.kt | 6 +- .../reactions/EmojiReactionPickerActivity.kt | 8 +- .../roomprofile/RoomProfileFragment.kt | 50 ++++--- .../settings/VectorSettingsGeneralFragment.kt | 126 ++++------------- .../settings/VectorSettingsPinFragment.kt | 16 +-- .../VectorSettingsSecurityPrivacyFragment.kt | 103 +++++++------- .../features/share/IncomingShareFragment.kt | 21 ++- .../app/features/terms/ReviewTermsActivity.kt | 1 - .../app/features/widgets/WidgetFragment.kt | 41 +++--- .../SignOutBottomSheetDialogFragment.kt | 45 +++--- 38 files changed, 464 insertions(+), 547 deletions(-) delete mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/widget/WidgetRequestCodes.kt diff --git a/attachment-viewer/build.gradle b/attachment-viewer/build.gradle index 59ba6c4500..91ddd519df 100644 --- a/attachment-viewer/build.gradle +++ b/attachment-viewer/build.gradle @@ -66,6 +66,7 @@ dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" implementation 'androidx.core:core-ktx:1.3.2' implementation 'androidx.appcompat:appcompat:1.2.0' + implementation "androidx.fragment:fragment:1.3.0-beta01" implementation "androidx.recyclerview:recyclerview:1.1.0" implementation 'com.google.android.material:material:1.2.1' diff --git a/matrix-sdk-android-rx/build.gradle b/matrix-sdk-android-rx/build.gradle index 03b60bbcf7..3d62758065 100644 --- a/matrix-sdk-android-rx/build.gradle +++ b/matrix-sdk-android-rx/build.gradle @@ -36,6 +36,7 @@ android { dependencies { implementation project(":matrix-sdk-android") implementation 'androidx.appcompat:appcompat:1.2.0' + implementation "androidx.fragment:fragment:1.3.0-beta01" implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0' implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' // Paging diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index c0030cca3d..0bf4819d25 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -121,6 +121,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" implementation "androidx.appcompat:appcompat:1.2.0" + implementation "androidx.fragment:fragment:1.3.0-beta01" implementation "androidx.core:core-ktx:1.3.2" implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" diff --git a/multipicker/build.gradle b/multipicker/build.gradle index 0eb38c23dd..b6e500e493 100644 --- a/multipicker/build.gradle +++ b/multipicker/build.gradle @@ -41,9 +41,9 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.2.0' + implementation "androidx.fragment:fragment:1.3.0-beta01" implementation 'androidx.exifinterface:exifinterface:1.3.0' // Log diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt index c51084dd39..e796137af2 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt @@ -16,7 +16,6 @@ package im.vector.lib.multipicker -import android.app.Activity import android.content.Context import android.content.Intent import android.media.MediaMetadataRetriever @@ -30,15 +29,9 @@ class AudioPicker(override val requestCode: Int) : Picker( /** * Call this function from onActivityResult(int, int, Intent). - * Returns selected audio files or empty list if request code is wrong - * or result code is not Activity.RESULT_OK - * or user did not select any files. + * Returns selected audio files or empty list if user did not select any files. */ - override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List { - if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) { - return emptyList() - } - + override fun getSelectedFiles(context: Context, data: Intent?): List { val audioList = mutableListOf() getSelectedUriList(data).forEach { selectedUri -> diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt index be6fdb5ee8..319bc31af9 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt @@ -21,8 +21,8 @@ import android.content.Context import android.content.Intent import android.net.Uri import android.provider.MediaStore +import androidx.activity.result.ActivityResultLauncher import androidx.core.content.FileProvider -import androidx.fragment.app.Fragment import im.vector.lib.multipicker.entity.MultiPickerImageType import im.vector.lib.multipicker.utils.ImageUtils import java.io.File @@ -51,15 +51,14 @@ class CameraPicker(val requestCode: Int) { /** * Start camera by using a Fragment - * @param fragment Fragment to handle onActivityResult(). * @return Uri of taken photo or null if the operation is cancelled. */ - fun startWithExpectingFile(fragment: Fragment): Uri? { - val photoUri = createPhotoUri(fragment.requireContext()) + fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher): Uri? { + val photoUri = createPhotoUri(context) val intent = createIntent().apply { putExtra(MediaStore.EXTRA_OUTPUT, photoUri) } - fragment.startActivityForResult(intent, requestCode) + activityResultLauncher.launch(intent) return photoUri } @@ -69,40 +68,38 @@ class CameraPicker(val requestCode: Int) { * or result code is not Activity.RESULT_OK * or user cancelled the operation. */ - fun getTakenPhoto(context: Context, requestCode: Int, resultCode: Int, photoUri: Uri): MultiPickerImageType? { - if (requestCode == this.requestCode && resultCode == Activity.RESULT_OK) { - val projection = arrayOf( - MediaStore.Images.Media.DISPLAY_NAME, - MediaStore.Images.Media.SIZE - ) + fun getTakenPhoto(context: Context, photoUri: Uri): MultiPickerImageType? { + val projection = arrayOf( + MediaStore.Images.Media.DISPLAY_NAME, + MediaStore.Images.Media.SIZE + ) - context.contentResolver.query( - photoUri, - projection, - null, - null, - null - )?.use { cursor -> - val nameColumn = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME) - val sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE) + context.contentResolver.query( + photoUri, + projection, + null, + null, + null + )?.use { cursor -> + val nameColumn = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME) + val sizeColumn = cursor.getColumnIndex(MediaStore.Images.Media.SIZE) - if (cursor.moveToNext()) { - val name = cursor.getString(nameColumn) - val size = cursor.getLong(sizeColumn) + if (cursor.moveToNext()) { + val name = cursor.getString(nameColumn) + val size = cursor.getLong(sizeColumn) - val bitmap = ImageUtils.getBitmap(context, photoUri) - val orientation = ImageUtils.getOrientation(context, photoUri) + val bitmap = ImageUtils.getBitmap(context, photoUri) + val orientation = ImageUtils.getOrientation(context, photoUri) - return MultiPickerImageType( - name, - size, - context.contentResolver.getType(photoUri), - photoUri, - bitmap?.width ?: 0, - bitmap?.height ?: 0, - orientation - ) - } + return MultiPickerImageType( + name, + size, + context.contentResolver.getType(photoUri), + photoUri, + bitmap?.width ?: 0, + bitmap?.height ?: 0, + orientation + ) } } return null diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt index e9ae096174..5eb8a98999 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt @@ -16,7 +16,6 @@ package im.vector.lib.multipicker -import android.app.Activity import android.content.ContentResolver import android.content.Context import android.content.Intent @@ -30,15 +29,9 @@ class ContactPicker(override val requestCode: Int) : Picker { - if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) { - return emptyList() - } - + override fun getSelectedFiles(context: Context, data: Intent?): List { val contactList = mutableListOf() data?.data?.let { selectedUri -> diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt index d5718b9951..7510d06b2b 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt @@ -16,7 +16,6 @@ package im.vector.lib.multipicker -import android.app.Activity import android.content.Context import android.content.Intent import android.provider.OpenableColumns @@ -29,15 +28,9 @@ class FilePicker(override val requestCode: Int) : Picker(re /** * Call this function from onActivityResult(int, int, Intent). - * Returns selected files or empty list if request code is wrong - * or result code is not Activity.RESULT_OK - * or user did not select any files. + * Returns selected files or empty list if user did not select any files. */ - override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List { - if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) { - return emptyList() - } - + override fun getSelectedFiles(context: Context, data: Intent?): List { val fileList = mutableListOf() getSelectedUriList(data).forEach { selectedUri -> diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt index ec87e027f9..054bfba365 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt @@ -16,7 +16,6 @@ package im.vector.lib.multipicker -import android.app.Activity import android.content.Context import android.content.Intent import android.provider.MediaStore @@ -30,15 +29,9 @@ class ImagePicker(override val requestCode: Int) : Picker( /** * Call this function from onActivityResult(int, int, Intent). - * Returns selected image files or empty list if request code is wrong - * or result code is not Activity.RESULT_OK - * or user did not select any files. + * Returns selected image files or empty list if user did not select any files. */ - override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List { - if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) { - return emptyList() - } - + override fun getSelectedFiles(context: Context, data: Intent?): List { val imageList = mutableListOf() getSelectedUriList(data).forEach { selectedUri -> diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt index 65ec77e02a..33da23e2b6 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt @@ -22,7 +22,7 @@ import android.content.Intent import android.content.pm.PackageManager import android.content.pm.ResolveInfo import android.net.Uri -import androidx.fragment.app.Fragment +import androidx.activity.result.ActivityResultLauncher /** * Abstract class to provide all types of Pickers @@ -33,11 +33,9 @@ abstract class Picker(open val requestCode: Int) { /** * Call this function from onActivityResult(int, int, Intent). - * @return selected files or empty list if request code is wrong - * or result code is not Activity.RESULT_OK - * or user did not select any files. + * @return selected files or empty list if user did not select any files. */ - abstract fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List + abstract fun getSelectedFiles(context: Context, data: Intent?): List /** * Use this function to retrieve files which are shared from another application or internally @@ -61,7 +59,7 @@ abstract class Picker(open val requestCode: Int) { context.grantUriPermission(packageName, it, Intent.FLAG_GRANT_READ_URI_PERMISSION) } } - return getSelectedFiles(context, requestCode, Activity.RESULT_OK, data) + return getSelectedFiles(context, data) } /** @@ -84,10 +82,10 @@ abstract class Picker(open val requestCode: Int) { /** * Start Storage Access Framework UI by using a Fragment. - * @param fragment Fragment to handle onActivityResult(). + * @param activityResultLauncher to handle the result. */ - fun startWith(fragment: Fragment) { - fragment.startActivityForResult(createIntent().apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) }, requestCode) + fun startWith(activityResultLauncher: ActivityResultLauncher) { + activityResultLauncher.launch(createIntent().apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) }) } protected fun getSelectedUriList(data: Intent?): List { diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt index 965c8e08e0..c1d1f74aab 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt @@ -16,7 +16,6 @@ package im.vector.lib.multipicker -import android.app.Activity import android.content.Context import android.content.Intent import android.media.MediaMetadataRetriever @@ -30,15 +29,9 @@ class VideoPicker(override val requestCode: Int) : Picker( /** * Call this function from onActivityResult(int, int, Intent). - * Returns selected video files or empty list if request code is wrong - * or result code is not Activity.RESULT_OK - * or user did not select any files. + * Returns selected video files or empty list if user did not select any files. */ - override fun getSelectedFiles(context: Context, requestCode: Int, resultCode: Int, data: Intent?): List { - if (requestCode != this.requestCode && resultCode != Activity.RESULT_OK) { - return emptyList() - } - + override fun getSelectedFiles(context: Context, data: Intent?): List { val videoList = mutableListOf() getSelectedUriList(data).forEach { selectedUri -> diff --git a/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt b/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt index fbcd6900c1..80be149711 100644 --- a/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt +++ b/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt @@ -17,7 +17,11 @@ package im.vector.app.core.extensions import android.app.Activity +import android.content.Intent import android.os.Parcelable +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.Fragment import im.vector.app.R import im.vector.app.core.platform.VectorBaseFragment @@ -26,6 +30,10 @@ import java.text.SimpleDateFormat import java.util.Date import java.util.Locale +fun Fragment.registerStartForActivityResult(onResult: (ActivityResult) -> Unit): ActivityResultLauncher { + return registerForActivityResult(ActivityResultContracts.StartActivityForResult(), onResult) +} + fun VectorBaseFragment.addFragment( frameId: Int, fragment: Fragment, @@ -160,15 +168,15 @@ fun Fragment.getAllChildFragments(): List { // Define a missing constant const val POP_BACK_STACK_EXCLUSIVE = 0 -fun Fragment.queryExportKeys(userId: String, requestCode: Int) { +fun Fragment.queryExportKeys(userId: String, activityResultLauncher: ActivityResultLauncher) { val timestamp = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) selectTxtFileToWrite( activity = requireActivity(), - fragment = this, + activityResultLauncher = activityResultLauncher, defaultFileName = "element-megolm-export-$userId-$timestamp.txt", chooserHint = getString(R.string.keys_backup_setup_step1_manual_export), - requestCode = requestCode + requestCode = 0 ) } @@ -177,7 +185,7 @@ fun Activity.queryExportKeys(userId: String, requestCode: Int) { selectTxtFileToWrite( activity = this, - fragment = null, + activityResultLauncher = null, defaultFileName = "element-megolm-export-$userId-$timestamp.txt", chooserHint = getString(R.string.keys_backup_setup_step1_manual_export), requestCode = requestCode diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt index d28f6749a6..750c4e071b 100644 --- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt @@ -31,6 +31,7 @@ import android.provider.Browser import android.provider.MediaStore import android.webkit.MimeTypeMap import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher import androidx.browser.customtabs.CustomTabsIntent import androidx.browser.customtabs.CustomTabsSession import androidx.core.content.ContextCompat @@ -130,7 +131,7 @@ fun openSoundRecorder(activity: Activity, requestCode: Int) { * Open file selection activity */ fun openFileSelection(activity: Activity, - fragment: Fragment?, + activityResultLauncher: ActivityResultLauncher?, allowMultipleSelection: Boolean, requestCode: Int) { val fileIntent = Intent(Intent.ACTION_GET_CONTENT) @@ -140,8 +141,8 @@ fun openFileSelection(activity: Activity, fileIntent.type = "*/*" try { - fragment - ?.startActivityForResult(fileIntent, requestCode) + activityResultLauncher + ?.launch(fileIntent) ?: run { activity.startActivityForResult(fileIntent, requestCode) } @@ -440,7 +441,7 @@ fun openPlayStore(activity: Activity, appId: String = BuildConfig.APPLICATION_ID */ fun selectTxtFileToWrite( activity: Activity, - fragment: Fragment?, + activityResultLauncher: ActivityResultLauncher?, defaultFileName: String, chooserHint: String, requestCode: Int @@ -452,8 +453,8 @@ fun selectTxtFileToWrite( try { val chooserIntent = Intent.createChooser(intent, chooserHint) - if (fragment != null) { - fragment.startActivityForResult(chooserIntent, requestCode) + if (activityResultLauncher != null) { + activityResultLauncher.launch(chooserIntent) } else { activity.startActivityForResult(chooserIntent, requestCode) } diff --git a/vector/src/main/java/im/vector/app/features/attachments/AttachmentsHelper.kt b/vector/src/main/java/im/vector/app/features/attachments/AttachmentsHelper.kt index 1d7c67b046..d4efb22eb8 100644 --- a/vector/src/main/java/im/vector/app/features/attachments/AttachmentsHelper.kt +++ b/vector/src/main/java/im/vector/app/features/attachments/AttachmentsHelper.kt @@ -15,12 +15,11 @@ */ package im.vector.app.features.attachments -import android.app.Activity import android.content.Context import android.content.Intent import android.net.Uri import android.os.Bundle -import androidx.fragment.app.Fragment +import androidx.activity.result.ActivityResultLauncher import im.vector.app.core.platform.Restorable import im.vector.lib.multipicker.MultiPicker import org.matrix.android.sdk.BuildConfig @@ -48,6 +47,7 @@ class AttachmentsHelper(val context: Context, val callback: Callback) : Restorab // Capture path allows to handle camera image picking. It must be restored if the activity gets killed. private var captureUri: Uri? = null + // The pending type is set if we have to handle permission request. It must be restored if the activity gets killed. var pendingType: AttachmentTypeSelectorView.Type? = null @@ -72,99 +72,93 @@ class AttachmentsHelper(val context: Context, val callback: Callback) : Restorab /** * Starts the process for handling file picking */ - fun selectFile(fragment: Fragment) { - MultiPicker.get(MultiPicker.FILE).startWith(fragment) + fun selectFile(activityResultLauncher: ActivityResultLauncher) { + MultiPicker.get(MultiPicker.FILE).startWith(activityResultLauncher) } /** * Starts the process for handling image picking */ - fun selectGallery(fragment: Fragment) { - MultiPicker.get(MultiPicker.IMAGE).startWith(fragment) + fun selectGallery(activityResultLauncher: ActivityResultLauncher) { + MultiPicker.get(MultiPicker.IMAGE).startWith(activityResultLauncher) } /** * Starts the process for handling audio picking */ - fun selectAudio(fragment: Fragment) { - MultiPicker.get(MultiPicker.AUDIO).startWith(fragment) + fun selectAudio(activityResultLauncher: ActivityResultLauncher) { + MultiPicker.get(MultiPicker.AUDIO).startWith(activityResultLauncher) } /** * Starts the process for handling capture image picking */ - fun openCamera(fragment: Fragment) { - captureUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(fragment) + fun openCamera(context: Context, activityResultLauncher: ActivityResultLauncher) { + captureUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(context, activityResultLauncher) } /** * Starts the process for handling contact picking */ - fun selectContact(fragment: Fragment) { - MultiPicker.get(MultiPicker.CONTACT).startWith(fragment) + fun selectContact(activityResultLauncher: ActivityResultLauncher) { + MultiPicker.get(MultiPicker.CONTACT).startWith(activityResultLauncher) } /** - * This methods aims to handle on activity result data. - * - * @return true if it can handle the data, false otherwise + * This methods aims to handle the result data. */ - fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean { - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - MultiPicker.REQUEST_CODE_PICK_FILE -> { - callback.onContentAttachmentsReady( - MultiPicker.get(MultiPicker.FILE) - .getSelectedFiles(context, requestCode, resultCode, data) - .map { it.toContentAttachmentData() } - ) + fun onFileResult(data: Intent?) { + callback.onContentAttachmentsReady( + MultiPicker.get(MultiPicker.FILE) + .getSelectedFiles(context, data) + .map { it.toContentAttachmentData() } + ) + } + + fun onAudioResult(data: Intent?) { + callback.onContentAttachmentsReady( + MultiPicker.get(MultiPicker.AUDIO) + .getSelectedFiles(context, data) + .map { it.toContentAttachmentData() } + ) + } + + fun onContactResult(data: Intent?) { + MultiPicker.get(MultiPicker.CONTACT) + .getSelectedFiles(context, data) + .firstOrNull() + ?.toContactAttachment() + ?.let { + callback.onContactAttachmentReady(it) } - MultiPicker.REQUEST_CODE_PICK_AUDIO -> { - callback.onContentAttachmentsReady( - MultiPicker.get(MultiPicker.AUDIO) - .getSelectedFiles(context, requestCode, resultCode, data) - .map { it.toContentAttachmentData() } - ) - } - MultiPicker.REQUEST_CODE_PICK_CONTACT -> { - MultiPicker.get(MultiPicker.CONTACT) - .getSelectedFiles(context, requestCode, resultCode, data) - .firstOrNull() - ?.toContactAttachment() - ?.let { - callback.onContactAttachmentReady(it) - } - } - MultiPicker.REQUEST_CODE_PICK_IMAGE -> { - callback.onContentAttachmentsReady( - MultiPicker.get(MultiPicker.IMAGE) - .getSelectedFiles(context, requestCode, resultCode, data) - .map { it.toContentAttachmentData() } - ) - } - MultiPicker.REQUEST_CODE_TAKE_PHOTO -> { - captureUri?.let { captureUri -> - MultiPicker.get(MultiPicker.CAMERA) - .getTakenPhoto(context, requestCode, resultCode, captureUri) - ?.let { - callback.onContentAttachmentsReady( - listOf(it).map { it.toContentAttachmentData() } - ) - } + } + + fun onImageResult(data: Intent?) { + callback.onContentAttachmentsReady( + MultiPicker.get(MultiPicker.IMAGE) + .getSelectedFiles(context, data) + .map { it.toContentAttachmentData() } + ) + } + + fun onPhotoResult() { + captureUri?.let { captureUri -> + MultiPicker.get(MultiPicker.CAMERA) + .getTakenPhoto(context, captureUri) + ?.let { + callback.onContentAttachmentsReady( + listOf(it).map { it.toContentAttachmentData() } + ) } - } - MultiPicker.REQUEST_CODE_PICK_VIDEO -> { - callback.onContentAttachmentsReady( - MultiPicker.get(MultiPicker.VIDEO) - .getSelectedFiles(context, requestCode, resultCode, data) - .map { it.toContentAttachmentData() } - ) - } - else -> return false - } - return true } - return false + } + + fun onVideoResult(data: Intent?) { + callback.onContentAttachmentsReady( + MultiPicker.get(MultiPicker.VIDEO) + .getSelectedFiles(context, data) + .map { it.toContentAttachmentData() } + ) } /** diff --git a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt index bfa44a7a70..8e830d00a4 100644 --- a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt +++ b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewActivity.kt @@ -30,8 +30,6 @@ import org.matrix.android.sdk.api.session.content.ContentAttachmentData class AttachmentsPreviewActivity : VectorBaseActivity(), ToolbarConfigurable { companion object { - const val REQUEST_CODE = 55 - private const val EXTRA_FRAGMENT_ARGS = "EXTRA_FRAGMENT_ARGS" private const val ATTACHMENTS_PREVIEW_RESULT = "ATTACHMENTS_PREVIEW_RESULT" private const val KEEP_ORIGINAL_IMAGES_SIZE = "KEEP_ORIGINAL_IMAGES_SIZE" diff --git a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt index 4d6c4e3add..44c440c0d1 100644 --- a/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt +++ b/vector/src/main/java/im/vector/app/features/call/VectorCallActivity.kt @@ -298,6 +298,7 @@ class VectorCallActivity : VectorBaseActivity(), CallControlsView.InteractionLis } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (requestCode == CAPTURE_PERMISSION_REQUEST_CODE && allGranted(grantResults)) { start() } else { diff --git a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt index 5a4c25a8ad..1ab6fb6363 100644 --- a/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt +++ b/vector/src/main/java/im/vector/app/features/call/conference/VectorJitsiActivity.kt @@ -150,6 +150,7 @@ class VectorJitsiActivity : VectorBaseActivity(), JitsiMeetActivityInterface, Ji } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) JitsiMeetActivityDelegate.onRequestPermissionsResult(requestCode, permissions, grantResults) } diff --git a/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt b/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt index 27ca636142..501d0fdbb7 100644 --- a/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt +++ b/vector/src/main/java/im/vector/app/features/createdirect/CreateDirectRoomActivity.kt @@ -111,6 +111,7 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() { } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (allGranted(grantResults)) { if (requestCode == PERMISSION_REQUEST_CODE_READ_CONTACTS) { doOnPostResume { addFragmentToBackstack(R.id.container, ContactsBookFragment::class.java) } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt index e508f06e4d..03ad5d5d9f 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt @@ -31,6 +31,7 @@ import butterknife.BindView import butterknife.OnClick import com.google.android.material.bottomsheet.BottomSheetDialog import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.LiveEvent import im.vector.app.core.utils.copyToClipboard @@ -48,10 +49,6 @@ import javax.inject.Inject class KeysBackupSetupStep3Fragment @Inject constructor() : VectorBaseFragment() { - companion object { - private const val SAVE_RECOVERY_KEY_REQUEST_CODE = 2754 - } - override fun getLayoutResId() = R.layout.fragment_keys_backup_setup_step3 @BindView(R.id.keys_backup_setup_step3_button) @@ -138,10 +135,10 @@ class KeysBackupSetupStep3Fragment @Inject constructor() : VectorBaseFragment() val timestamp = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) selectTxtFileToWrite( activity = requireActivity(), - fragment = this, + activityResultLauncher = saveRecoveryActivityResultLauncher, defaultFileName = "recovery-key-$userId-$timestamp.txt", chooserHint = getString(R.string.save_recovery_key_chooser_hint), - requestCode = SAVE_RECOVERY_KEY_REQUEST_CODE + requestCode = 0 ) dialog.dismiss() } @@ -202,15 +199,11 @@ class KeysBackupSetupStep3Fragment @Inject constructor() : VectorBaseFragment() } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - when (requestCode) { - SAVE_RECOVERY_KEY_REQUEST_CODE -> { - val uri = data?.data - if (resultCode == Activity.RESULT_OK && uri != null) { - viewModel.recoveryKey.value?.let { - exportRecoveryKeyToFile(uri, it) - } - } + private val saveRecoveryActivityResultLauncher = registerStartForActivityResult { activityRessult -> + val uri = activityRessult.data?.data ?: return@registerStartForActivityResult + if (activityRessult.resultCode == Activity.RESULT_OK) { + viewModel.recoveryKey.value?.let { + exportRecoveryKeyToFile(uri, it) } } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt index a1ce84e2f4..72cd063bbd 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/choose/VerificationChooseMethodFragment.kt @@ -16,7 +16,6 @@ package im.vector.app.features.crypto.verification.choose import android.app.Activity -import android.content.Intent import android.os.Bundle import android.view.View import com.airbnb.mvrx.fragmentViewModel @@ -25,6 +24,7 @@ import com.airbnb.mvrx.withState import im.vector.app.R import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.configureWith +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO import im.vector.app.core.utils.checkPermissions @@ -91,24 +91,18 @@ class VerificationChooseMethodFragment @Inject constructor( } private fun doOpenQRCodeScanner() { - QrCodeScannerActivity.startForResult(this) + QrCodeScannerActivity.startForResult(requireActivity(), scanActivityResultLauncher) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) + private val scanActivityResultLauncher = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val scannedQrCode = QrCodeScannerActivity.getResultText(activityResult.data) + val wasQrCode = QrCodeScannerActivity.getResultIsQrCode(activityResult.data) - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - QrCodeScannerActivity.QR_CODE_SCANNER_REQUEST_CODE -> { - val scannedQrCode = QrCodeScannerActivity.getResultText(data) - val wasQrCode = QrCodeScannerActivity.getResultIsQrCode(data) - - if (wasQrCode && !scannedQrCode.isNullOrBlank()) { - onRemoteQrCodeScanned(scannedQrCode) - } else { - Timber.w("It was not a QR code, or empty result") - } - } + if (wasQrCode && !scannedQrCode.isNullOrBlank()) { + onRemoteQrCodeScanned(scannedQrCode) + } else { + Timber.w("It was not a QR code, or empty result") } } } diff --git a/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt b/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt index 21f65ec9ef..7dd32a7cd0 100644 --- a/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt @@ -16,7 +16,6 @@ package im.vector.app.features.discovery import android.app.Activity -import android.content.Intent import android.os.Bundle import android.view.View import androidx.appcompat.app.AlertDialog @@ -27,16 +26,17 @@ import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.configureWith import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.observeEvent +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.ensureProtocol import im.vector.app.features.discovery.change.SetIdentityServerFragment import im.vector.app.features.settings.VectorSettingsActivity -import im.vector.app.features.terms.ReviewTermsActivity import org.matrix.android.sdk.api.session.identity.SharedState import org.matrix.android.sdk.api.session.identity.ThreePid import org.matrix.android.sdk.api.session.terms.TermsService import kotlinx.android.synthetic.main.fragment_generic_recycler.* +import timber.log.Timber import javax.inject.Inject class DiscoverySettingsFragment @Inject constructor( @@ -92,22 +92,19 @@ class DiscoverySettingsFragment @Inject constructor( viewModel.handle(DiscoverySettingsAction.Refresh) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == ReviewTermsActivity.TERMS_REQUEST_CODE) { - if (Activity.RESULT_OK == resultCode) { - viewModel.handle(DiscoverySettingsAction.RetrieveBinding) - } else { - // add some error? - } + private val termsActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + viewModel.handle(DiscoverySettingsAction.RetrieveBinding) + } else { + // add some error? } - - super.onActivityResult(requestCode, resultCode, data) } override fun openIdentityServerTerms() = withState(viewModel) { state -> if (state.termsNotSigned) { navigator.openTerms( - this, + requireContext(), + termsActivityResultLauncher, TermsService.ServiceType.IdentityService, state.identityServer()?.ensureProtocol() ?: "", null) diff --git a/vector/src/main/java/im/vector/app/features/discovery/change/SetIdentityServerFragment.kt b/vector/src/main/java/im/vector/app/features/discovery/change/SetIdentityServerFragment.kt index 863270b762..05708089ea 100644 --- a/vector/src/main/java/im/vector/app/features/discovery/change/SetIdentityServerFragment.kt +++ b/vector/src/main/java/im/vector/app/features/discovery/change/SetIdentityServerFragment.kt @@ -16,7 +16,6 @@ package im.vector.app.features.discovery.change import android.app.Activity -import android.content.Intent import android.os.Bundle import android.view.View import android.view.inputmethod.EditorInfo @@ -28,13 +27,13 @@ import com.airbnb.mvrx.withState import com.jakewharton.rxbinding3.widget.textChanges import im.vector.app.R import im.vector.app.core.extensions.exhaustive +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.toReducedUrl import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider import im.vector.app.core.utils.colorizeMatchingText import im.vector.app.features.discovery.DiscoverySharedViewModel -import im.vector.app.features.terms.ReviewTermsActivity import org.matrix.android.sdk.api.session.terms.TermsService import kotlinx.android.synthetic.main.fragment_set_identity_server.* import javax.inject.Inject @@ -121,7 +120,8 @@ class SetIdentityServerFragment @Inject constructor( is SetIdentityServerViewEvents.TermsAccepted -> processIdentityServerChange() is SetIdentityServerViewEvents.ShowTerms -> { navigator.openTerms( - this, + requireContext(), + termsActivityResultLauncher, TermsService.ServiceType.IdentityService, it.identityServerUrl, null) @@ -150,15 +150,12 @@ class SetIdentityServerFragment @Inject constructor( (activity as? VectorBaseActivity)?.supportActionBar?.setTitle(R.string.identity_server) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == ReviewTermsActivity.TERMS_REQUEST_CODE) { - if (Activity.RESULT_OK == resultCode) { - processIdentityServerChange() - } else { - // add some error? - } + private val termsActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + processIdentityServerChange() + } else { + // add some error? } - super.onActivityResult(requestCode, resultCode, data) } private fun processIdentityServerChange() { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index c861e5ce73..61041aa70f 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -17,7 +17,7 @@ package im.vector.app.features.home.room.detail import android.annotation.SuppressLint -import android.app.Activity.RESULT_OK +import android.app.Activity import android.content.DialogInterface import android.content.Intent import android.graphics.Typeface @@ -73,6 +73,7 @@ import im.vector.app.core.epoxy.LayoutManagerStateRestorer import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.hideKeyboard +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.extensions.showKeyboard import im.vector.app.core.extensions.trackItemsVisibilityChange @@ -134,7 +135,6 @@ import im.vector.app.features.home.room.detail.timeline.item.MessageTextItem import im.vector.app.features.home.room.detail.timeline.item.ReadReceiptData import im.vector.app.features.home.room.detail.timeline.reactions.ViewReactionsBottomSheet import im.vector.app.features.home.room.detail.widget.RoomWidgetsBottomSheet -import im.vector.app.features.home.room.detail.widget.WidgetRequestCodes import im.vector.app.features.html.EventHtmlRenderer import im.vector.app.features.html.PillImageSpan import im.vector.app.features.invite.VectorInviteView @@ -202,8 +202,6 @@ data class RoomDetailArgs( val sharedData: SharedData? = null ) : Parcelable -private const val REACTION_SELECT_REQUEST_CODE = 0 - class RoomDetailFragment @Inject constructor( private val session: Session, private val avatarRenderer: AvatarRenderer, @@ -396,9 +394,14 @@ class RoomDetailFragment @Inject constructor( } } + private val integrationManagerActivityResultLauncher = registerStartForActivityResult { + // Noop + } + private fun openIntegrationManager(screen: String? = null) { navigator.openIntegrationManager( - fragment = this, + context = requireContext(), + activityResultLauncher = integrationManagerActivityResultLauncher, roomId = roomDetailArgs.roomId, integId = null, screen = screen @@ -435,7 +438,7 @@ class RoomDetailFragment @Inject constructor( } private fun openStickerPicker(event: RoomDetailViewEvents.OpenStickerPicker) { - navigator.openStickerPicker(this, roomDetailArgs.roomId, event.widget) + navigator.openStickerPicker(requireContext(), stickerActivityResultLauncher, roomDetailArgs.roomId, event.widget) } private fun startOpenFileIntent(action: RoomDetailViewEvents.OpenFile) { @@ -886,27 +889,63 @@ class RoomDetailFragment @Inject constructor( roomDetailViewModel.handle(RoomDetailAction.SaveDraft(composerLayout.composerEditText.text.toString())) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - val hasBeenHandled = attachmentsHelper.onActivityResult(requestCode, resultCode, data) - if (!hasBeenHandled && resultCode == RESULT_OK && data != null) { - when (requestCode) { - AttachmentsPreviewActivity.REQUEST_CODE -> { - val sendData = AttachmentsPreviewActivity.getOutput(data) - val keepOriginalSize = AttachmentsPreviewActivity.getKeepOriginalSize(data) - roomDetailViewModel.handle(RoomDetailAction.SendMedia(sendData, !keepOriginalSize)) - } - REACTION_SELECT_REQUEST_CODE -> { - val (eventId, reaction) = EmojiReactionPickerActivity.getOutput(data) ?: return - roomDetailViewModel.handle(RoomDetailAction.SendReaction(eventId, reaction)) - } - WidgetRequestCodes.STICKER_PICKER_REQUEST_CODE -> { - val content = WidgetActivity.getOutput(data).toModel() ?: return - roomDetailViewModel.handle(RoomDetailAction.SendSticker(content)) - } + private val attachmentFileActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + attachmentsHelper.onImageResult(it.data) + } + } + + private val attachmentAudioActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + attachmentsHelper.onAudioResult(it.data) + } + } + + private val attachmentContactActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + attachmentsHelper.onContactResult(it.data) + } + } + + private val attachmentImageActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + attachmentsHelper.onImageResult(it.data) + } + } + + private val attachmentPhotoActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + attachmentsHelper.onPhotoResult() + } + } + + private val contentAttachmentActivityResultLauncher = registerStartForActivityResult { activityResult -> + val data = activityResult.data ?: return@registerStartForActivityResult + if (activityResult.resultCode == Activity.RESULT_OK) { + val sendData = AttachmentsPreviewActivity.getOutput(data) + val keepOriginalSize = AttachmentsPreviewActivity.getKeepOriginalSize(data) + roomDetailViewModel.handle(RoomDetailAction.SendMedia(sendData, !keepOriginalSize)) + } + } + + private val emojiActivityResultLauncher = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val eventId = EmojiReactionPickerActivity.getOutputEventId(activityResult.data) + val reaction = EmojiReactionPickerActivity.getOutputReaction(activityResult.data) + if (eventId != null && reaction != null) { + roomDetailViewModel.handle(RoomDetailAction.SendReaction(eventId, reaction)) } } - // TODO why don't we call super here? - // super.onActivityResult(requestCode, resultCode, data) + } + + private val stickerActivityResultLauncher = registerStartForActivityResult { activityResult -> + val data = activityResult.data ?: return@registerStartForActivityResult + if (activityResult.resultCode == Activity.RESULT_OK) { + WidgetActivity.getOutput(data).toModel() + ?.let { content -> + roomDetailViewModel.handle(RoomDetailAction.SendSticker(content)) + } + } } // PRIVATE METHODS ***************************************************************************** @@ -1600,7 +1639,7 @@ class RoomDetailFragment @Inject constructor( openRoomMemberProfile(action.userId) } is EventSharedAction.AddReaction -> { - startActivityForResult(EmojiReactionPickerActivity.intent(requireContext(), action.eventId), REACTION_SELECT_REQUEST_CODE) + emojiActivityResultLauncher.launch(EmojiReactionPickerActivity.intent(requireContext(), action.eventId)) } is EventSharedAction.ViewReactions -> { ViewReactionsBottomSheet.newInstance(roomDetailArgs.roomId, action.messageInformationData) @@ -1827,11 +1866,11 @@ class RoomDetailFragment @Inject constructor( private fun launchAttachmentProcess(type: AttachmentTypeSelectorView.Type) { when (type) { - AttachmentTypeSelectorView.Type.CAMERA -> attachmentsHelper.openCamera(this) - AttachmentTypeSelectorView.Type.FILE -> attachmentsHelper.selectFile(this) - AttachmentTypeSelectorView.Type.GALLERY -> attachmentsHelper.selectGallery(this) - AttachmentTypeSelectorView.Type.AUDIO -> attachmentsHelper.selectAudio(this) - AttachmentTypeSelectorView.Type.CONTACT -> attachmentsHelper.selectContact(this) + AttachmentTypeSelectorView.Type.CAMERA -> attachmentsHelper.openCamera(requireContext(), attachmentPhotoActivityResultLauncher) + AttachmentTypeSelectorView.Type.FILE -> attachmentsHelper.selectFile(attachmentFileActivityResultLauncher) + AttachmentTypeSelectorView.Type.GALLERY -> attachmentsHelper.selectGallery(attachmentImageActivityResultLauncher) + AttachmentTypeSelectorView.Type.AUDIO -> attachmentsHelper.selectAudio(attachmentAudioActivityResultLauncher) + AttachmentTypeSelectorView.Type.CONTACT -> attachmentsHelper.selectContact(attachmentContactActivityResultLauncher) AttachmentTypeSelectorView.Type.STICKER -> roomDetailViewModel.handle(RoomDetailAction.SelectStickerAttachment) }.exhaustive } @@ -1850,7 +1889,7 @@ class RoomDetailFragment @Inject constructor( } if (grouped.previewables.isNotEmpty()) { val intent = AttachmentsPreviewActivity.newIntent(requireContext(), AttachmentsPreviewArgs(grouped.previewables)) - startActivityForResult(intent, AttachmentsPreviewActivity.REQUEST_CODE) + contentAttachmentActivityResultLauncher.launch(intent) } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/widget/WidgetRequestCodes.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/widget/WidgetRequestCodes.kt deleted file mode 100644 index 5f0e6866db..0000000000 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/widget/WidgetRequestCodes.kt +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (c) 2020 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.home.room.detail.widget - -object WidgetRequestCodes { - const val STICKER_PICKER_REQUEST_CODE = 16000 - const val INTEGRATION_MANAGER_REQUEST_CODE = 16001 -} diff --git a/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt b/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt index b4f0aabea5..8f3e11453e 100644 --- a/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt +++ b/vector/src/main/java/im/vector/app/features/invite/InviteUsersToRoomActivity.kt @@ -112,6 +112,7 @@ class InviteUsersToRoomActivity : SimpleFragmentActivity() { } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (allGranted(grantResults)) { if (requestCode == PERMISSION_REQUEST_CODE_READ_CONTACTS) { doOnPostResume { addFragmentToBackstack(R.id.container, ContactsBookFragment::class.java) } diff --git a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt index c619b4aa92..144b9739da 100644 --- a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt @@ -133,7 +133,7 @@ class BigImageViewerActivity : VectorBaseActivity() { MultiPicker.REQUEST_CODE_TAKE_PHOTO -> { avatarCameraUri?.let { uri -> MultiPicker.get(MultiPicker.CAMERA) - .getTakenPhoto(this, requestCode, resultCode, uri) + .getTakenPhoto(this, uri) ?.let { onRoomAvatarSelected(it) } @@ -142,7 +142,7 @@ class BigImageViewerActivity : VectorBaseActivity() { MultiPicker.REQUEST_CODE_PICK_IMAGE -> { MultiPicker .get(MultiPicker.IMAGE) - .getSelectedFiles(this, requestCode, resultCode, data) + .getSelectedFiles(this, data) .firstOrNull()?.let { onRoomAvatarSelected(it) } @@ -154,6 +154,7 @@ class BigImageViewerActivity : VectorBaseActivity() { } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) if (allGranted(grantResults)) { when (requestCode) { PERMISSION_REQUEST_CODE_LAUNCH_CAMERA -> onAvatarTypeSelected(true) diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 5ad600dfff..237fa4f65d 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -21,11 +21,11 @@ import android.content.Context import android.content.Intent import android.view.View import android.view.Window +import androidx.activity.result.ActivityResultLauncher import androidx.core.app.ActivityOptionsCompat import androidx.core.app.TaskStackBuilder import androidx.core.util.Pair import androidx.core.view.ViewCompat -import androidx.fragment.app.Fragment import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.error.fatalError @@ -45,7 +45,6 @@ import im.vector.app.features.home.room.detail.RoomDetailActivity import im.vector.app.features.home.room.detail.RoomDetailArgs import im.vector.app.features.home.room.detail.search.SearchActivity import im.vector.app.features.home.room.detail.search.SearchArgs -import im.vector.app.features.home.room.detail.widget.WidgetRequestCodes import im.vector.app.features.home.room.filtered.FilteredRoomsActivity import im.vector.app.features.invite.InviteUsersToRoomActivity import im.vector.app.features.media.AttachmentData @@ -266,21 +265,32 @@ class DefaultNavigator @Inject constructor( } } - override fun openTerms(fragment: Fragment, serviceType: TermsService.ServiceType, baseUrl: String, token: String?, requestCode: Int) { - val intent = ReviewTermsActivity.intent(fragment.requireContext(), serviceType, baseUrl, token) - fragment.startActivityForResult(intent, requestCode) + override fun openTerms(context: Context, + activityResultLauncher: ActivityResultLauncher, + serviceType: TermsService.ServiceType, + baseUrl: String, + token: String?) { + val intent = ReviewTermsActivity.intent(context, serviceType, baseUrl, token) + activityResultLauncher.launch(intent) } - override fun openStickerPicker(fragment: Fragment, roomId: String, widget: Widget, requestCode: Int) { + override fun openStickerPicker(context: Context, + activityResultLauncher: ActivityResultLauncher, + roomId: String, + widget: Widget) { val widgetArgs = widgetArgsBuilder.buildStickerPickerArgs(roomId, widget) - val intent = WidgetActivity.newIntent(fragment.requireContext(), widgetArgs) - fragment.startActivityForResult(intent, WidgetRequestCodes.STICKER_PICKER_REQUEST_CODE) + val intent = WidgetActivity.newIntent(context, widgetArgs) + activityResultLauncher.launch(intent) } - override fun openIntegrationManager(fragment: Fragment, roomId: String, integId: String?, screen: String?) { + override fun openIntegrationManager(context: Context, + activityResultLauncher: ActivityResultLauncher, + roomId: String, + integId: String?, + screen: String?) { val widgetArgs = widgetArgsBuilder.buildIntegrationManagerArgs(roomId, integId, screen) - val intent = WidgetActivity.newIntent(fragment.requireContext(), widgetArgs) - fragment.startActivityForResult(intent, WidgetRequestCodes.INTEGRATION_MANAGER_REQUEST_CODE) + val intent = WidgetActivity.newIntent(context, widgetArgs) + activityResultLauncher.launch(intent) } override fun openRoomWidget(context: Context, roomId: String, widget: Widget, options: Map?) { @@ -293,9 +303,11 @@ class DefaultNavigator @Inject constructor( } } - override fun openPinCode(fragment: Fragment, pinMode: PinMode, requestCode: Int) { - val intent = PinActivity.newIntent(fragment.requireContext(), PinArgs(pinMode)) - fragment.startActivityForResult(intent, requestCode) + override fun openPinCode(context: Context, + activityResultLauncher: ActivityResultLauncher, + pinMode: PinMode) { + val intent = PinActivity.newIntent(context, PinArgs(pinMode)) + activityResultLauncher.launch(intent) } override fun openPinCode(activity: Activity, pinMode: PinMode, requestCode: Int) { diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index b2efb1e931..4344f918ce 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -18,18 +18,17 @@ package im.vector.app.features.navigation import android.app.Activity import android.content.Context +import android.content.Intent import android.view.View +import androidx.activity.result.ActivityResultLauncher import androidx.core.util.Pair -import androidx.fragment.app.Fragment import im.vector.app.features.crypto.recover.SetupMode -import im.vector.app.features.home.room.detail.widget.WidgetRequestCodes import im.vector.app.features.media.AttachmentData import im.vector.app.features.pin.PinActivity import im.vector.app.features.pin.PinMode import im.vector.app.features.roomdirectory.roompreview.RoomPreviewData import im.vector.app.features.settings.VectorSettingsActivity import im.vector.app.features.share.SharedData -import im.vector.app.features.terms.ReviewTermsActivity import org.matrix.android.sdk.api.session.room.model.roomdirectory.PublicRoom import org.matrix.android.sdk.api.session.room.model.thirdparty.RoomDirectoryData import org.matrix.android.sdk.api.session.terms.TermsService @@ -84,22 +83,28 @@ interface Navigator { fun openBigImageViewer(activity: Activity, sharedElement: View?, matrixItem: MatrixItem) - fun openPinCode(fragment: Fragment, pinMode: PinMode, requestCode: Int = PinActivity.PIN_REQUEST_CODE) + fun openPinCode(context: Context, + activityResultLauncher: ActivityResultLauncher, + pinMode: PinMode) fun openPinCode(activity: Activity, pinMode: PinMode, requestCode: Int = PinActivity.PIN_REQUEST_CODE) - fun openTerms(fragment: Fragment, + fun openTerms(context: Context, + activityResultLauncher: ActivityResultLauncher, serviceType: TermsService.ServiceType, baseUrl: String, - token: String?, - requestCode: Int = ReviewTermsActivity.TERMS_REQUEST_CODE) + token: String?) - fun openStickerPicker(fragment: Fragment, + fun openStickerPicker(context: Context, + activityResultLauncher: ActivityResultLauncher, roomId: String, - widget: Widget, - requestCode: Int = WidgetRequestCodes.STICKER_PICKER_REQUEST_CODE) + widget: Widget) - fun openIntegrationManager(fragment: Fragment, roomId: String, integId: String?, screen: String?) + fun openIntegrationManager(context: Context, + activityResultLauncher: ActivityResultLauncher, + roomId: String, + integId: String?, + screen: String?) fun openRoomWidget(context: Context, roomId: String, widget: Widget, options: Map? = null) diff --git a/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt b/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt index 616da791d3..563f9c65fa 100644 --- a/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt @@ -19,7 +19,7 @@ package im.vector.app.features.qrcode import android.app.Activity import android.content.Intent import android.os.Bundle -import androidx.fragment.app.Fragment +import androidx.activity.result.ActivityResultLauncher import com.google.zxing.BarcodeFormat import com.google.zxing.Result import com.google.zxing.ResultMetadataType @@ -82,8 +82,8 @@ class QrCodeScannerActivity : VectorBaseActivity() { activity.startActivityForResult(Intent(activity, QrCodeScannerActivity::class.java), requestCode) } - fun startForResult(fragment: Fragment, requestCode: Int = QR_CODE_SCANNER_REQUEST_CODE) { - fragment.startActivityForResult(Intent(fragment.requireActivity(), QrCodeScannerActivity::class.java), requestCode) + fun startForResult(activity: Activity, activityResultLauncher: ActivityResultLauncher) { + activityResultLauncher.launch(Intent(activity, QrCodeScannerActivity::class.java)) } fun getResultText(data: Intent?): String? { diff --git a/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt b/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt index 4fe74c2bcc..25cb90d3a4 100644 --- a/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/reactions/EmojiReactionPickerActivity.kt @@ -212,10 +212,8 @@ class EmojiReactionPickerActivity : VectorBaseActivity(), return intent } - fun getOutput(data: Intent): Pair? { - val eventId = data.getStringExtra(EXTRA_EVENT_ID) ?: return null - val reaction = data.getStringExtra(EXTRA_REACTION_RESULT) ?: return null - return eventId to reaction - } + fun getOutputEventId(data: Intent?): String? = data?.getStringExtra(EXTRA_EVENT_ID) + + fun getOutputReaction(data: Intent?): String? = data?.getStringExtra(EXTRA_REACTION_RESULT) } } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index a6e1fda793..82c16db5ee 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -42,6 +42,7 @@ import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.configureWith import im.vector.app.core.extensions.copyOnLongClick import im.vector.app.core.extensions.exhaustive +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.setTextOrHide import im.vector.app.core.intent.getFilenameFromUri import im.vector.app.core.platform.VectorBaseFragment @@ -284,7 +285,7 @@ class RoomProfileFragment @Inject constructor( .show() } - private val takePhotoActivityResultLauncher = registerForPermissionsResult { allGranted -> + private val takePhotoPermissionActivityResultLauncher = registerForPermissionsResult { allGranted -> if (allGranted) { onAvatarTypeSelected(true) } @@ -293,11 +294,11 @@ class RoomProfileFragment @Inject constructor( private var avatarCameraUri: Uri? = null private fun onAvatarTypeSelected(isCamera: Boolean) { if (isCamera) { - if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, requireActivity(), takePhotoActivityResultLauncher)) { - avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this) + if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, requireActivity(), takePhotoPermissionActivityResultLauncher)) { + avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(requireActivity(), takePhotoActivityResultLauncher) } } else { - MultiPicker.get(MultiPicker.IMAGE).single().startWith(this) + MultiPicker.get(MultiPicker.IMAGE).single().startWith(pickImageActivityResultLauncher) } } @@ -309,30 +310,37 @@ class RoomProfileFragment @Inject constructor( .start(requireContext(), this) } + private val takePhotoActivityResultLauncher = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + avatarCameraUri?.let { uri -> + MultiPicker.get(MultiPicker.CAMERA) + .getTakenPhoto(requireContext(), uri) + ?.let { + onRoomAvatarSelected(it) + } + } + } + } + + private val pickImageActivityResultLauncher = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + MultiPicker + .get(MultiPicker.IMAGE) + .getSelectedFiles(requireContext(), activityResult.data) + .firstOrNull()?.let { + onRoomAvatarSelected(it) + } + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (resultCode == Activity.RESULT_OK) { when (requestCode) { - MultiPicker.REQUEST_CODE_TAKE_PHOTO -> { - avatarCameraUri?.let { uri -> - MultiPicker.get(MultiPicker.CAMERA) - .getTakenPhoto(requireContext(), requestCode, resultCode, uri) - ?.let { - onRoomAvatarSelected(it) - } - } - } - MultiPicker.REQUEST_CODE_PICK_IMAGE -> { - MultiPicker - .get(MultiPicker.IMAGE) - .getSelectedFiles(requireContext(), requestCode, resultCode, data) - .firstOrNull()?.let { - onRoomAvatarSelected(it) - } - } UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } BigImageViewerActivity.REQUEST_CODE -> data?.let { onAvatarCropped(it.data) } } } + // TODO super.onActivityResult(requestCode, resultCode, data) } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt index c1d8eb1abe..9928325289 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt @@ -41,6 +41,7 @@ import com.google.android.material.textfield.TextInputLayout import com.yalantis.ucrop.UCrop import im.vector.app.R import im.vector.app.core.extensions.hideKeyboard +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.showPassword import im.vector.app.core.intent.getFilenameFromUri import im.vector.app.core.platform.SimpleTextWatcher @@ -278,81 +279,38 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { session.integrationManagerService().removeListener(integrationServiceListener) } + private val attachmentPhotoActivityResultLauncher = registerStartForActivityResult {activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + avatarCameraUri?.let { uri -> + MultiPicker.get(MultiPicker.CAMERA) + .getTakenPhoto(requireContext(), uri) + ?.let { + onAvatarSelected(it) + } + } + } + } + + private val attachmentImageActivityResultLauncher = registerStartForActivityResult {activityResult -> + val data = activityResult.data ?: return@registerStartForActivityResult + if (activityResult.resultCode == Activity.RESULT_OK) { + MultiPicker + .get(MultiPicker.IMAGE) + .getSelectedFiles(requireContext(), data) + .firstOrNull()?.let { + onAvatarSelected(it) + } + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + @Suppress("DEPRECATION") super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { when (requestCode) { - REQUEST_NEW_PHONE_NUMBER -> refreshPhoneNumbersList() - REQUEST_PHONEBOOK_COUNTRY -> onPhonebookCountryUpdate(data) - MultiPicker.REQUEST_CODE_TAKE_PHOTO -> { - avatarCameraUri?.let { uri -> - MultiPicker.get(MultiPicker.CAMERA) - .getTakenPhoto(requireContext(), requestCode, resultCode, uri) - ?.let { - onAvatarSelected(it) - } - } - } - MultiPicker.REQUEST_CODE_PICK_IMAGE -> { - MultiPicker - .get(MultiPicker.IMAGE) - .getSelectedFiles(requireContext(), requestCode, resultCode, data) - .firstOrNull()?.let { - onAvatarSelected(it) - } - } - UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } - /* TODO - VectorUtils.TAKE_IMAGE -> { - val thumbnailUri = VectorUtils.getThumbnailUriFromIntent(activity, data, session.mediaCache) - - if (null != thumbnailUri) { - displayLoadingView() - - val resource = ResourceUtils.openResource(activity, thumbnailUri, null) - - if (null != resource) { - session.mediaCache.uploadContent(resource.mContentStream, null, resource.mMimeType, null, object : MXMediaUploadListener() { - - override fun onUploadError(uploadId: String?, serverResponseCode: Int, serverErrorMessage: String?) { - activity?.runOnUiThread { onCommonDone(serverResponseCode.toString() + " : " + serverErrorMessage) } - } - - override fun onUploadComplete(uploadId: String?, contentUri: String?) { - activity?.runOnUiThread { - session.myUser.updateAvatarUrl(contentUri, object : MatrixCallback { - override fun onSuccess(info: Void?) { - onCommonDone(null) - refreshDisplay() - } - - override fun onNetworkError(e: Exception) { - onCommonDone(e.localizedMessage) - } - - override fun onMatrixError(e: MatrixError) { - if (MatrixError.M_CONSENT_NOT_GIVEN == e.errcode) { - activity?.runOnUiThread { - hideLoadingView() - (activity as VectorAppCompatActivity).consentNotGivenHelper.displayDialog(e) - } - } else { - onCommonDone(e.localizedMessage) - } - } - - override fun onUnexpectedError(e: Exception) { - onCommonDone(e.localizedMessage) - } - }) - } - } - }) - } - } - } - */ + // TODO Migrate this too + UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } } } } @@ -400,10 +358,10 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { private fun onAvatarTypeSelected(isCamera: Boolean) { if (isCamera) { if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, requireActivity(), takePhotoActivityResultLauncher)) { - avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this) + avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(requireActivity(), attachmentPhotoActivityResultLauncher) } } else { - MultiPicker.get(MultiPicker.IMAGE).single().startWith(this) + MultiPicker.get(MultiPicker.IMAGE).single().startWith(attachmentImageActivityResultLauncher) } } @@ -461,29 +419,10 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { */ } - private fun onPhonebookCountryUpdate(data: Intent?) { - /* TODO - if (data != null && data.hasExtra(CountryPickerActivity.EXTRA_OUT_COUNTRY_NAME) - && data.hasExtra(CountryPickerActivity.EXTRA_OUT_COUNTRY_CODE)) { - val countryCode = data.getStringExtra(CountryPickerActivity.EXTRA_OUT_COUNTRY_CODE) - if (!TextUtils.equals(countryCode, PhoneNumberUtils.getCountryCode(activity))) { - PhoneNumberUtils.setCountryCode(activity, countryCode) - mContactPhonebookCountryPreference.summary = data.getStringExtra(CountryPickerActivity.EXTRA_OUT_COUNTRY_NAME) - } - } - */ - } - // ============================================================================================================== // Phone number management // ============================================================================================================== - /** - * Refresh phone number list - */ - private fun refreshPhoneNumbersList() { - } - /** * Update the password. */ @@ -643,9 +582,4 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { }) } } - - companion object { - private const val REQUEST_NEW_PHONE_NUMBER = 456 - private const val REQUEST_PHONEBOOK_COUNTRY = 789 - } } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPinFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPinFragment.kt index 4a6965618e..37465258f6 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPinFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsPinFragment.kt @@ -16,14 +16,13 @@ package im.vector.app.features.settings -import android.content.Intent import androidx.lifecycle.lifecycleScope import androidx.preference.Preference import androidx.preference.SwitchPreference import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.features.navigation.Navigator import im.vector.app.features.notifications.NotificationDrawerManager -import im.vector.app.features.pin.PinActivity import im.vector.app.features.pin.PinCodeStore import im.vector.app.features.pin.PinMode import kotlinx.coroutines.launch @@ -67,17 +66,18 @@ class VectorSettingsPinFragment @Inject constructor( refreshPinCodeStatus() } } else { - navigator.openPinCode(this@VectorSettingsPinFragment, PinMode.CREATE) + navigator.openPinCode( + requireContext(), + pinActivityResultLauncher, + PinMode.CREATE + ) } true } } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == PinActivity.PIN_REQUEST_CODE) { - refreshPinCodeStatus() - } + private val pinActivityResultLauncher = registerStartForActivityResult { + refreshPinCodeStatus() } } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt index b0ec7426a7..39120f1157 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt @@ -39,6 +39,7 @@ import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.dialogs.ExportKeysDialog import im.vector.app.core.extensions.queryExportKeys +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.showPassword import im.vector.app.core.intent.ExternalIntentData import im.vector.app.core.intent.analyseIntent @@ -55,7 +56,6 @@ import im.vector.app.features.crypto.keysbackup.settings.KeysBackupManageActivit import im.vector.app.features.crypto.recover.BootstrapBottomSheet import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.navigation.Navigator -import im.vector.app.features.pin.PinActivity import im.vector.app.features.pin.PinCodeStore import im.vector.app.features.pin.PinMode import im.vector.app.features.raw.wellknown.getElementWellknown @@ -320,48 +320,45 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - REQUEST_CODE_SAVE_MEGOLM_EXPORT -> { - val uri = data?.data - if (uri != null) { - activity?.let { activity -> - ExportKeysDialog().show(activity, object : ExportKeysDialog.ExportKeyDialogListener { - override fun onPassphrase(passphrase: String) { - displayLoadingView() + private val saveMegolmStartForActivityResult = registerStartForActivityResult { + val uri = it.data?.data ?: return@registerStartForActivityResult + if (it.resultCode == Activity.RESULT_OK) + ExportKeysDialog().show(requireActivity(), object : ExportKeysDialog.ExportKeyDialogListener { + override fun onPassphrase(passphrase: String) { + displayLoadingView() - KeysExporter(session) - .export(requireContext(), - passphrase, - uri, - object : MatrixCallback { - override fun onSuccess(data: Boolean) { - if (data) { - requireActivity().toast(getString(R.string.encryption_exported_successfully)) - } else { - requireActivity().toast(getString(R.string.unexpected_error)) - } - hideLoadingView() - } + KeysExporter(session) + .export(requireContext(), + passphrase, + uri, + object : MatrixCallback { + override fun onSuccess(data: Boolean) { + if (data) { + requireActivity().toast(getString(R.string.encryption_exported_successfully)) + } else { + requireActivity().toast(getString(R.string.unexpected_error)) + } + hideLoadingView() + } - override fun onFailure(failure: Throwable) { - onCommonDone(failure.localizedMessage) - } - }) - } - }) - } - } + override fun onFailure(failure: Throwable) { + onCommonDone(failure.localizedMessage) + } + }) } - PinActivity.PIN_REQUEST_CODE -> { - doOpenPinCodePreferenceScreen() - } - REQUEST_E2E_FILE_REQUEST_CODE -> { - importKeys(data) - } - } + }) + } + + private val pinActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + doOpenPinCodePreferenceScreen() + } + } + + private val importKeysActivityResultLauncher = registerStartForActivityResult { + val data = it.data ?: return@registerStartForActivityResult + if (it.resultCode == Activity.RESULT_OK) { + importKeys(data) } } @@ -369,7 +366,10 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( lifecycleScope.launchWhenResumed { val hasPinCode = pinCodeStore.hasEncodedPin() if (hasPinCode) { - navigator.openPinCode(this@VectorSettingsSecurityPrivacyFragment, PinMode.AUTH) + navigator.openPinCode( + requireContext(), + pinActivityResultLauncher, + PinMode.AUTH) } else { doOpenPinCodePreferenceScreen() } @@ -391,7 +391,7 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( } exportPref.onPreferenceClickListener = Preference.OnPreferenceClickListener { - queryExportKeys(activeSessionHolder.getSafeActiveSession()?.myUserId ?: "", REQUEST_CODE_SAVE_MEGOLM_EXPORT) + queryExportKeys(activeSessionHolder.getSafeActiveSession()?.myUserId ?: "", saveMegolmStartForActivityResult) true } @@ -406,7 +406,12 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( */ @SuppressLint("NewApi") private fun importKeys() { - activity?.let { openFileSelection(it, this, false, REQUEST_E2E_FILE_REQUEST_CODE) } + openFileSelection( + requireActivity(), + importKeysActivityResultLauncher, + false, + 0 + ) } /** @@ -414,12 +419,7 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( * * @param intent the intent result */ - private fun importKeys(intent: Intent?) { - // sanity check - if (null == intent) { - return - } - + private fun importKeys(intent: Intent) { val sharedDataItems = analyseIntent(intent) val thisActivity = activity @@ -605,9 +605,4 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( } }) } - - companion object { - private const val REQUEST_E2E_FILE_REQUEST_CODE = 123 - private const val REQUEST_CODE_SAVE_MEGOLM_EXPORT = 124 - } } diff --git a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt index a75cfa4304..5e776fb17a 100644 --- a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt +++ b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt @@ -33,6 +33,7 @@ import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.extensions.cleanup import im.vector.app.core.extensions.configureWith import im.vector.app.core.extensions.exhaustive +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.features.attachments.AttachmentsHelper import im.vector.app.features.attachments.preview.AttachmentsPreviewActivity @@ -118,20 +119,16 @@ class IncomingShareFragment @Inject constructor( private fun handleEditMediaBeforeSending(event: IncomingShareViewEvents.EditMediaBeforeSending) { val intent = AttachmentsPreviewActivity.newIntent(requireContext(), AttachmentsPreviewArgs(event.contentAttachmentData)) - startActivityForResult(intent, AttachmentsPreviewActivity.REQUEST_CODE) + attachmentPreviewActivityResultLauncher.launch(intent) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - val hasBeenHandled = attachmentsHelper.onActivityResult(requestCode, resultCode, data) - if (!hasBeenHandled && resultCode == Activity.RESULT_OK && data != null) { - when (requestCode) { - AttachmentsPreviewActivity.REQUEST_CODE -> { - val sendData = AttachmentsPreviewActivity.getOutput(data) - val keepOriginalSize = AttachmentsPreviewActivity.getKeepOriginalSize(data) - viewModel.handle(IncomingShareAction.UpdateSharedData(SharedData.Attachments(sendData))) - viewModel.handle(IncomingShareAction.ShareMedia(keepOriginalSize)) - } - } + private val attachmentPreviewActivityResultLauncher = registerStartForActivityResult { + val data = it.data ?: return@registerStartForActivityResult + if (it.resultCode == Activity.RESULT_OK) { + val sendData = AttachmentsPreviewActivity.getOutput(data) + val keepOriginalSize = AttachmentsPreviewActivity.getKeepOriginalSize(data) + viewModel.handle(IncomingShareAction.UpdateSharedData(SharedData.Attachments(sendData))) + viewModel.handle(IncomingShareAction.ShareMedia(keepOriginalSize)) } } diff --git a/vector/src/main/java/im/vector/app/features/terms/ReviewTermsActivity.kt b/vector/src/main/java/im/vector/app/features/terms/ReviewTermsActivity.kt index 4fea176249..9d1f10f39e 100644 --- a/vector/src/main/java/im/vector/app/features/terms/ReviewTermsActivity.kt +++ b/vector/src/main/java/im/vector/app/features/terms/ReviewTermsActivity.kt @@ -73,7 +73,6 @@ class ReviewTermsActivity : SimpleFragmentActivity() { } companion object { - const val TERMS_REQUEST_CODE = 15000 private const val EXTRA_INFO = "EXTRA_INFO" fun intent(context: Context, serviceType: TermsService.ServiceType, baseUrl: String, token: String?): Intent { diff --git a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt index 37ae89ab36..2d3e5e4e69 100644 --- a/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt +++ b/vector/src/main/java/im/vector/app/features/widgets/WidgetFragment.kt @@ -37,11 +37,10 @@ import com.airbnb.mvrx.args import com.airbnb.mvrx.withState import org.matrix.android.sdk.api.session.terms.TermsService import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.OnBackPressed import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.openUrlInExternalBrowser -import im.vector.app.features.home.room.detail.widget.WidgetRequestCodes -import im.vector.app.features.terms.ReviewTermsActivity import im.vector.app.features.webview.WebViewEventListener import im.vector.app.features.widgets.webview.clearAfterWidget import im.vector.app.features.widgets.webview.setupForWidget @@ -86,19 +85,18 @@ class WidgetFragment @Inject constructor() : VectorBaseFragment(), WebViewEventL viewModel.handle(WidgetAction.LoadFormattedUrl) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - when (requestCode) { - ReviewTermsActivity.TERMS_REQUEST_CODE -> { - Timber.v("On terms results") - if (resultCode == Activity.RESULT_OK) { - viewModel.handle(WidgetAction.OnTermsReviewed) - } else { - vectorBaseActivity.finish() - } - } - WidgetRequestCodes.INTEGRATION_MANAGER_REQUEST_CODE -> { - viewModel.handle(WidgetAction.LoadFormattedUrl) - } + private val termsActivityResultLauncher = registerStartForActivityResult { + Timber.v("On terms results") + if (it.resultCode == Activity.RESULT_OK) { + viewModel.handle(WidgetAction.OnTermsReviewed) + } else { + vectorBaseActivity.finish() + } + } + + private val integrationManagerActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + viewModel.handle(WidgetAction.LoadFormattedUrl) } } @@ -146,7 +144,12 @@ class WidgetFragment @Inject constructor() : VectorBaseFragment(), WebViewEventL override fun onOptionsItemSelected(item: MenuItem): Boolean = withState(viewModel) { state -> when (item.itemId) { R.id.action_edit -> { - navigator.openIntegrationManager(this, state.roomId, state.widgetId, state.widgetKind.screenId) + navigator.openIntegrationManager( + requireContext(), + integrationManagerActivityResultLauncher, + state.roomId, + state.widgetId, + state.widgetKind.screenId) return@withState true } R.id.action_delete -> { @@ -261,7 +264,8 @@ class WidgetFragment @Inject constructor() : VectorBaseFragment(), WebViewEventL private fun displayTerms(displayTerms: WidgetViewEvents.DisplayTerms) { navigator.openTerms( - fragment = this, + context = requireContext(), + activityResultLauncher = termsActivityResultLauncher, serviceType = TermsService.ServiceType.IntegrationManager, baseUrl = displayTerms.url, token = displayTerms.token @@ -287,7 +291,8 @@ class WidgetFragment @Inject constructor() : VectorBaseFragment(), WebViewEventL private fun displayIntegrationManager(event: WidgetViewEvents.DisplayIntegrationManager) { navigator.openIntegrationManager( - fragment = this, + context = requireContext(), + activityResultLauncher = integrationManagerActivityResultLauncher, roomId = fragmentArgs.roomId, integId = event.integId, screen = event.integType diff --git a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt index 756aa3cbac..2fe984dfc7 100644 --- a/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt +++ b/vector/src/main/java/im/vector/app/features/workers/signout/SignOutBottomSheetDialogFragment.kt @@ -18,7 +18,6 @@ package im.vector.app.features.workers.signout import android.app.Activity import android.app.Dialog -import android.content.Intent import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -39,6 +38,7 @@ import im.vector.app.R import im.vector.app.core.di.ScreenComponent import im.vector.app.core.dialogs.ExportKeysDialog import im.vector.app.core.extensions.queryExportKeys +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.features.crypto.keysbackup.setup.KeysBackupSetupActivity import im.vector.app.features.crypto.recover.BootstrapBottomSheet @@ -77,9 +77,6 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), companion object { fun newInstance() = SignOutBottomSheetDialogFragment() - - private const val EXPORT_REQ = 0 - private const val QUERY_EXPORT_KEYS = 1 } init { @@ -130,12 +127,12 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), exportManuallyButton.action = { withState(viewModel) { state -> - queryExportKeys(state.userId, QUERY_EXPORT_KEYS) + queryExportKeys(state.userId, manualExportKeysActivityResultLauncher) } } setupMegolmBackupButton.action = { - startActivityForResult(KeysBackupSetupActivity.intent(requireContext(), true), EXPORT_REQ) + setupBackupActivityResultLauncher.launch(KeysBackupSetupActivity.intent(requireContext(), true)) } viewModel.observeViewEvents { @@ -289,26 +286,26 @@ class SignOutBottomSheetDialogFragment : VectorBaseBottomSheetDialogFragment(), return dialog } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - - if (resultCode == Activity.RESULT_OK) { - if (requestCode == QUERY_EXPORT_KEYS) { - val uri = data?.data - if (resultCode == Activity.RESULT_OK && uri != null) { - activity?.let { activity -> - ExportKeysDialog().show(activity, object : ExportKeysDialog.ExportKeyDialogListener { - override fun onPassphrase(passphrase: String) { - viewModel.handle(SignoutCheckViewModel.Actions.ExportKeys(passphrase, uri)) - } - }) - } - } - } else if (requestCode == EXPORT_REQ) { - if (data?.getBooleanExtra(KeysBackupSetupActivity.MANUAL_EXPORT, false) == true) { - viewModel.handle(SignoutCheckViewModel.Actions.KeySuccessfullyManuallyExported) + private val manualExportKeysActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + val uri = it.data?.data + if (uri != null) { + activity?.let { activity -> + ExportKeysDialog().show(activity, object : ExportKeysDialog.ExportKeyDialogListener { + override fun onPassphrase(passphrase: String) { + viewModel.handle(SignoutCheckViewModel.Actions.ExportKeys(passphrase, uri)) + } + }) } } } } + + private val setupBackupActivityResultLauncher = registerStartForActivityResult { + if (it.resultCode == Activity.RESULT_OK) { + if (it.data?.getBooleanExtra(KeysBackupSetupActivity.MANUAL_EXPORT, false) == true) { + viewModel.handle(SignoutCheckViewModel.Actions.KeySuccessfullyManuallyExported) + } + } + } } From c53f79ca8b3e45debf1625be7612abd45aa0db5a Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 17:21:05 +0200 Subject: [PATCH 154/278] Do not use deprecated Fragment.startActivityForResult anymore - step 2 --- .../im/vector/app/core/utils/SystemUtils.kt | 22 ++++++--- .../KeysBackupRestoreFromKeyFragment.kt | 44 +++++++---------- .../setup/KeysBackupSetupStep3Fragment.kt | 10 ++-- .../quads/SharedSecuredStorageKeyFragment.kt | 16 ++---- .../recover/BootstrapMigrateBackupFragment.kt | 16 ++---- .../BootstrapSaveRecoveryKeyFragment.kt | 49 +++++++++---------- .../verification/VerificationBottomSheet.kt | 18 +++---- .../features/media/BigImageViewerActivity.kt | 1 - .../RoomMemberProfileFragment.kt | 7 ++- .../roomprofile/RoomProfileFragment.kt | 21 ++++++-- ...rSettingsNotificationPreferenceFragment.kt | 27 +++++----- .../VectorSettingsVoiceVideoFragment.kt | 27 ++++------ 12 files changed, 120 insertions(+), 138 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt index c1253e76d3..7c41457811 100644 --- a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt +++ b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt @@ -28,6 +28,7 @@ import android.os.Build import android.os.PowerManager import android.provider.Settings import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes import androidx.appcompat.app.AppCompatActivity import androidx.core.content.getSystemService @@ -136,32 +137,37 @@ fun startAddGoogleAccountIntent(context: AppCompatActivity, requestCode: Int) { } } -fun startSharePlainTextIntent(fragment: Fragment, chooserTitle: String?, text: String, subject: String? = null, requestCode: Int? = null) { +fun startSharePlainTextIntent(fragment: Fragment, + activityResultLauncher: ActivityResultLauncher?, + chooserTitle: String?, + text: String, + subject: String? = null) { val share = Intent(Intent.ACTION_SEND) share.type = "text/plain" share.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT) // Add data to the intent, the receiving app will decide what to do with it. share.putExtra(Intent.EXTRA_SUBJECT, subject) share.putExtra(Intent.EXTRA_TEXT, text) + val intent = Intent.createChooser(share, chooserTitle) try { - if (requestCode != null) { - fragment.startActivityForResult(Intent.createChooser(share, chooserTitle), requestCode) + if (activityResultLauncher != null) { + activityResultLauncher.launch(intent) } else { - fragment.startActivity(Intent.createChooser(share, chooserTitle)) + fragment.startActivity(intent) } } catch (activityNotFoundException: ActivityNotFoundException) { fragment.activity?.toast(R.string.error_no_external_application_found) } } -fun startImportTextFromFileIntent(fragment: Fragment, requestCode: Int) { +fun startImportTextFromFileIntent(context: Context, activityResultLauncher: ActivityResultLauncher) { val intent = Intent(Intent.ACTION_GET_CONTENT).apply { type = "text/plain" } - if (intent.resolveActivity(fragment.requireActivity().packageManager) != null) { - fragment.startActivityForResult(intent, requestCode) + if (intent.resolveActivity(context.packageManager) != null) { + activityResultLauncher.launch(intent) } else { - fragment.activity?.toast(R.string.error_no_external_application_found) + context.toast(R.string.error_no_external_application_found) } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt index 966ad9d0b8..580a3443e7 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreFromKeyFragment.kt @@ -16,7 +16,6 @@ package im.vector.app.features.crypto.keysbackup.restore import android.app.Activity -import android.content.Intent import android.os.Bundle import android.text.Editable import android.view.View @@ -28,19 +27,15 @@ import butterknife.OnClick import butterknife.OnTextChanged import com.google.android.material.textfield.TextInputLayout import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.startImportTextFromFileIntent -import timber.log.Timber +import org.matrix.android.sdk.api.extensions.tryOrNull import javax.inject.Inject class KeysBackupRestoreFromKeyFragment @Inject constructor() : VectorBaseFragment() { - companion object { - - private const val REQUEST_TEXT_FILE_GET = 1 - } - override fun getLayoutResId() = R.layout.fragment_keys_backup_restore_from_key private lateinit var viewModel: KeysBackupRestoreFromKeyViewModel @@ -48,6 +43,7 @@ class KeysBackupRestoreFromKeyFragment @Inject constructor() @BindView(R.id.keys_backup_key_enter_til) lateinit var mKeyInputLayout: TextInputLayout + @BindView(R.id.keys_restore_key_enter_edittext) lateinit var mKeyTextEdit: EditText @@ -89,29 +85,23 @@ class KeysBackupRestoreFromKeyFragment @Inject constructor() @OnClick(R.id.keys_backup_import) fun onImport() { - startImportTextFromFileIntent(this, REQUEST_TEXT_FILE_GET) + startImportTextFromFileIntent(requireContext(), textFileStartForActivityResult) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == REQUEST_TEXT_FILE_GET && resultCode == Activity.RESULT_OK) { - val dataURI = data?.data - if (dataURI != null) { - try { - activity - ?.contentResolver - ?.openInputStream(dataURI) - ?.bufferedReader() - ?.use { it.readText() } - ?.let { - mKeyTextEdit.setText(it) - mKeyTextEdit.setSelection(it.length) - } - } catch (e: Exception) { - Timber.e(e, "Failed to read recovery kay from text") - } + private val textFileStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val dataURI = activityResult.data?.data ?: return@registerStartForActivityResult + tryOrNull(message = "Failed to read recovery kay from text") { + activity + ?.contentResolver + ?.openInputStream(dataURI) + ?.bufferedReader() + ?.use { it.readText() } + ?.let { + mKeyTextEdit.setText(it) + mKeyTextEdit.setSelection(it.length) + } } - return } - super.onActivityResult(requestCode, resultCode, data) } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt index 03ad5d5d9f..5e7a2a738a 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt @@ -144,10 +144,12 @@ class KeysBackupSetupStep3Fragment @Inject constructor() : VectorBaseFragment() } dialog.findViewById(R.id.keys_backup_setup_share)?.setOnClickListener { - startSharePlainTextIntent(this, - context?.getString(R.string.keys_backup_setup_step3_share_intent_chooser_title), - recoveryKey, - context?.getString(R.string.recovery_key)) + startSharePlainTextIntent( + fragment = this, + activityResultLauncher = null, + chooserTitle = context?.getString(R.string.keys_backup_setup_step3_share_intent_chooser_title), + text = recoveryKey, + subject = context?.getString(R.string.recovery_key)) viewModel.copyHasBeenMade = true dialog.dismiss() } diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt index 366c979155..9fb3f637e1 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecuredStorageKeyFragment.kt @@ -17,7 +17,6 @@ package im.vector.app.features.crypto.quads import android.app.Activity -import android.content.Intent import android.os.Bundle import android.view.View import android.view.inputmethod.EditorInfo @@ -25,6 +24,7 @@ import com.airbnb.mvrx.activityViewModel import com.jakewharton.rxbinding3.widget.editorActionEvents import com.jakewharton.rxbinding3.widget.textChanges import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.startImportTextFromFileIntent import io.reactivex.android.schedulers.AndroidSchedulers @@ -61,7 +61,7 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment } .disposeOnDestroyView() - ssss_key_use_file.debouncedClicks { startImportTextFromFileIntent(this, IMPORT_FILE_REQ) } + ssss_key_use_file.debouncedClicks { startImportTextFromFileIntent(requireContext(), importFileStartForActivityResult) } ssss_key_reset.clickableView.debouncedClicks { sharedViewModel.handle(SharedSecureStorageAction.ForgotResetAll) @@ -85,9 +85,9 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment sharedViewModel.handle(SharedSecureStorageAction.SubmitKey(text)) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == IMPORT_FILE_REQ && resultCode == Activity.RESULT_OK) { - data?.data?.let { dataURI -> + private val importFileStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + activityResult.data?.data?.let { dataURI -> tryOrNull { activity?.contentResolver?.openInputStream(dataURI) ?.bufferedReader() @@ -97,12 +97,6 @@ class SharedSecuredStorageKeyFragment @Inject constructor() : VectorBaseFragment } } } - return } - super.onActivityResult(requestCode, resultCode, data) - } - - companion object { - private const val IMPORT_FILE_REQ = 0 } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt index a89e08988c..69c809c773 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapMigrateBackupFragment.kt @@ -17,7 +17,6 @@ package im.vector.app.features.crypto.recover import android.app.Activity -import android.content.Intent import android.os.Bundle import android.text.InputType.TYPE_CLASS_TEXT import android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE @@ -32,6 +31,7 @@ import com.jakewharton.rxbinding3.widget.editorActionEvents import com.jakewharton.rxbinding3.widget.textChanges import im.vector.app.R import im.vector.app.core.extensions.hideKeyboard +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.showPassword import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider @@ -82,7 +82,7 @@ class BootstrapMigrateBackupFragment @Inject constructor( bootstrapMigrateContinueButton.debouncedClicks { submit() } bootstrapMigrateShowPassword.debouncedClicks { sharedViewModel.handle(BootstrapActions.TogglePasswordVisibility) } bootstrapMigrateForgotPassphrase.debouncedClicks { sharedViewModel.handle(BootstrapActions.HandleForgotBackupPassphrase) } - bootstrapMigrateUseFile.debouncedClicks { startImportTextFromFileIntent(this, IMPORT_FILE_REQ) } + bootstrapMigrateUseFile.debouncedClicks { startImportTextFromFileIntent(requireContext(), importFileStartForActivityResult) } } private fun submit() = withState(sharedViewModel) { state -> @@ -147,9 +147,9 @@ class BootstrapMigrateBackupFragment @Inject constructor( } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == IMPORT_FILE_REQ && resultCode == Activity.RESULT_OK) { - data?.data?.let { dataURI -> + private val importFileStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + activityResult.data?.data?.let { dataURI -> tryOrNull { activity?.contentResolver?.openInputStream(dataURI) ?.bufferedReader() @@ -159,12 +159,6 @@ class BootstrapMigrateBackupFragment @Inject constructor( } } } - return } - super.onActivityResult(requestCode, resultCode, data) - } - - companion object { - private const val IMPORT_FILE_REQ = 0 } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt index 750dadbc9f..e426394d77 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/recover/BootstrapSaveRecoveryKeyFragment.kt @@ -16,7 +16,7 @@ package im.vector.app.features.crypto.recover -import android.app.Activity.RESULT_OK +import android.app.Activity import android.content.ActivityNotFoundException import android.content.Intent import android.os.Bundle @@ -25,6 +25,7 @@ import androidx.core.view.isVisible import com.airbnb.mvrx.parentFragmentViewModel import com.airbnb.mvrx.withState import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.resources.ColorProvider import im.vector.app.core.utils.startSharePlainTextIntent @@ -65,43 +66,46 @@ class BootstrapSaveRecoveryKeyFragment @Inject constructor( try { sharedViewModel.handle(BootstrapActions.SaveReqQueryStarted) - startActivityForResult(Intent.createChooser(intent, getString(R.string.keys_backup_setup_step3_please_make_copy)), REQUEST_CODE_SAVE) + saveStartForActivityResult.launch(Intent.createChooser(intent, getString(R.string.keys_backup_setup_step3_please_make_copy))) } catch (activityNotFoundException: ActivityNotFoundException) { requireActivity().toast(R.string.error_no_external_application_found) sharedViewModel.handle(BootstrapActions.SaveReqFailed) } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == REQUEST_CODE_SAVE) { - val uri = data?.data - if (resultCode == RESULT_OK && uri != null) { - GlobalScope.launch(Dispatchers.IO) { - try { - sharedViewModel.handle(BootstrapActions.SaveKeyToUri(requireContext().contentResolver!!.openOutputStream(uri)!!)) - } catch (failure: Throwable) { - sharedViewModel.handle(BootstrapActions.SaveReqFailed) - } + private val saveStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val uri = activityResult.data?.data ?: return@registerStartForActivityResult + GlobalScope.launch(Dispatchers.IO) { + try { + sharedViewModel.handle(BootstrapActions.SaveKeyToUri(requireContext().contentResolver!!.openOutputStream(uri)!!)) + } catch (failure: Throwable) { + sharedViewModel.handle(BootstrapActions.SaveReqFailed) } - } else { - // result code seems to be always cancelled here.. so act as if it was saved - sharedViewModel.handle(BootstrapActions.SaveReqFailed) } - return - } else if (requestCode == REQUEST_CODE_COPY) { + } else { + // result code seems to be always cancelled here.. so act as if it was saved + sharedViewModel.handle(BootstrapActions.SaveReqFailed) + } + } + + private val copyStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { sharedViewModel.handle(BootstrapActions.RecoveryKeySaved) } - super.onActivityResult(requestCode, resultCode, data) } private fun shareRecoveryKey() = withState(sharedViewModel) { state -> val recoveryKey = state.recoveryKeyCreationInfo?.recoveryKey?.formatRecoveryKey() ?: return@withState - startSharePlainTextIntent(this, + startSharePlainTextIntent( + this, + copyStartForActivityResult, context?.getString(R.string.keys_backup_setup_step3_share_intent_chooser_title), recoveryKey, - context?.getString(R.string.recovery_key), REQUEST_CODE_COPY) + context?.getString(R.string.recovery_key) + ) } override fun invalidate() = withState(sharedViewModel) { state -> @@ -111,9 +115,4 @@ class BootstrapSaveRecoveryKeyFragment @Inject constructor( recoveryContinue.isVisible = step.isSaved bootstrapRecoveryKeyText.text = state.recoveryKeyCreationInfo?.recoveryKey?.formatRecoveryKey() } - - companion object { - const val REQUEST_CODE_SAVE = 123 - const val REQUEST_CODE_COPY = 124 - } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt index c7ce4d6f01..d91194e002 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt @@ -35,6 +35,7 @@ import im.vector.app.R import im.vector.app.core.di.ScreenComponent import im.vector.app.core.extensions.commitTransaction import im.vector.app.core.extensions.exhaustive +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.platform.VectorBaseBottomSheetDialogFragment import im.vector.app.features.crypto.quads.SharedSecureStorageActivity @@ -108,12 +109,12 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { when (it) { is VerificationBottomSheetViewEvents.Dismiss -> dismiss() is VerificationBottomSheetViewEvents.AccessSecretStore -> { - startActivityForResult(SharedSecureStorageActivity.newIntent( + secretStartForActivityResult.launch(SharedSecureStorageActivity.newIntent( requireContext(), null, // use default key listOf(MASTER_KEY_SSSS_NAME, USER_SIGNING_KEY_SSSS_NAME, SELF_SIGNING_KEY_SSSS_NAME, KEYBACKUP_SECRET_SSSS_NAME), SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS - ), SECRET_REQUEST_CODE) + )) } is VerificationBottomSheetViewEvents.ModalError -> { AlertDialog.Builder(requireContext()) @@ -145,10 +146,10 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (resultCode == Activity.RESULT_OK && requestCode == SECRET_REQUEST_CODE) { - val result = data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) - val reset = data?.getBooleanExtra(SharedSecureStorageActivity.EXTRA_DATA_RESET, false) ?: false + private val secretStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val result = activityResult.data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) + val reset = activityResult.data?.getBooleanExtra(SharedSecureStorageActivity.EXTRA_DATA_RESET, false) ?: false if (result != null) { viewModel.handle(VerificationAction.GotResultFromSsss(result, SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS)) } else if (reset) { @@ -156,11 +157,9 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { viewModel.handle(VerificationAction.SecuredStorageHasBeenReset) } } - super.onActivityResult(requestCode, resultCode, data) } override fun invalidate() = withState(viewModel) { state -> - state.otherUserMxItem?.let { matrixItem -> if (state.isMe) { avatarRenderer.render(matrixItem, otherUserAvatarImageView) @@ -347,9 +346,6 @@ class VerificationBottomSheet : VectorBaseBottomSheetDialogFragment() { } companion object { - - const val SECRET_REQUEST_CODE = 101 - fun withArgs(roomId: String?, otherUserId: String, transactionId: String? = null): VerificationBottomSheet { return VerificationBottomSheet().apply { arguments = Bundle().apply { diff --git a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt index 144b9739da..04fd6e3850 100644 --- a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt @@ -175,7 +175,6 @@ class BigImageViewerActivity : VectorBaseActivity() { private const val EXTRA_TITLE = "EXTRA_TITLE" private const val EXTRA_IMAGE_URL = "EXTRA_IMAGE_URL" private const val EXTRA_CAN_EDIT_IMAGE = "EXTRA_CAN_EDIT_IMAGE" - const val REQUEST_CODE = 1000 fun newIntent(context: Context, title: String?, imageUrl: String, canEditImage: Boolean = false): Intent { return Intent(context, BigImageViewerActivity::class.java).apply { diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt index cda2d83e3d..169cba09eb 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt @@ -284,7 +284,12 @@ class RoomMemberProfileFragment @Inject constructor( } private fun handleShareRoomMemberProfile(permalink: String) { - startSharePlainTextIntent(fragment = this, chooserTitle = null, text = permalink) + startSharePlainTextIntent( + fragment = this, + activityResultLauncher = null, + chooserTitle = null, + text = permalink + ) } private fun onAvatarClicked(view: View, userMatrixItem: MatrixItem) { diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 82c16db5ee..2b67624ed1 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -260,14 +260,19 @@ class RoomProfileFragment @Inject constructor( } private fun onShareRoomProfile(permalink: String) { - startSharePlainTextIntent(fragment = this, chooserTitle = null, text = permalink) + startSharePlainTextIntent( + fragment = this, + activityResultLauncher = null, + chooserTitle = null, + text = permalink + ) } private fun onAvatarClicked(view: View, matrixItem: MatrixItem.RoomItem) = withState(roomProfileViewModel) { if (matrixItem.avatarUrl?.isNotEmpty() == true) { val intent = BigImageViewerActivity.newIntent(requireContext(), matrixItem.getBestName(), matrixItem.avatarUrl!!, it.canChangeAvatar) val options = ActivityOptionsCompat.makeSceneTransitionAnimation(requireActivity(), view, ViewCompat.getTransitionName(view) ?: "") - startActivityForResult(intent, BigImageViewerActivity.REQUEST_CODE, options.toBundle()) + bigImageStartForActivityResult.launch(intent, options) } else if (it.canChangeAvatar) { showAvatarSelector() } @@ -333,14 +338,20 @@ class RoomProfileFragment @Inject constructor( } } + private val bigImageStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + activityResult.data?.let { onAvatarCropped(it.data) } + } + } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (resultCode == Activity.RESULT_OK) { when (requestCode) { - UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } - BigImageViewerActivity.REQUEST_CODE -> data?.let { onAvatarCropped(it.data) } + UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } } } - // TODO + // TODO handle this one (Ucrop lib) + @Suppress("DEPRECATION") super.onActivityResult(requestCode, resultCode, data) } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt index d6d9cf6e31..99a05ae6c1 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt @@ -27,6 +27,7 @@ import androidx.preference.Preference import androidx.preference.SwitchPreference import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.preference.VectorEditTextPreference import im.vector.app.core.preference.VectorPreference import im.vector.app.core.preference.VectorPreferenceCategory @@ -210,27 +211,22 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( intent.putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, vectorPreferences.getNotificationRingTone()) } - startActivityForResult(intent, REQUEST_NOTIFICATION_RINGTONE) + ringtoneStartForActivityResult.launch(intent) false } } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - REQUEST_NOTIFICATION_RINGTONE -> { - vectorPreferences.setNotificationRingTone(data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) as Uri?) + private val ringtoneStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + vectorPreferences.setNotificationRingTone(activityResult.data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) as Uri?) - // test if the selected ring tone can be played - val notificationRingToneName = vectorPreferences.getNotificationRingToneName() - if (null != notificationRingToneName) { - vectorPreferences.setNotificationRingTone(vectorPreferences.getNotificationRingTone()) - findPreference(VectorPreferences.SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY)!! - .summary = notificationRingToneName - } - } + // test if the selected ring tone can be played + val notificationRingToneName = vectorPreferences.getNotificationRingToneName() + if (null != notificationRingToneName) { + vectorPreferences.setNotificationRingTone(vectorPreferences.getNotificationRingTone()) + findPreference(VectorPreferences.SETTINGS_NOTIFICATION_RINGTONE_SELECTION_PREFERENCE_KEY)!! + .summary = notificationRingToneName } } } @@ -342,7 +338,6 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( } companion object { - private const val REQUEST_NOTIFICATION_RINGTONE = 888 private const val REQUEST_BATTERY_OPTIMIZATION = 500 } } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt index dba3c78220..05d1a1f60f 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsVoiceVideoFragment.kt @@ -23,6 +23,7 @@ import android.net.Uri import androidx.preference.Preference import androidx.preference.SwitchPreference import im.vector.app.R +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.preference.VectorPreference import im.vector.app.core.utils.getCallRingtoneName import im.vector.app.core.utils.getCallRingtoneUri @@ -57,19 +58,13 @@ class VectorSettingsVoiceVideoFragment : VectorSettingsBaseFragment() { } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - REQUEST_CALL_RINGTONE -> { - val callRingtoneUri: Uri? = data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) - val thisActivity = activity - if (callRingtoneUri != null && thisActivity != null) { - setCallRingtoneUri(thisActivity, callRingtoneUri) - mCallRingtonePreference.summary = getCallRingtoneName(thisActivity) - } - } + private val ringtoneStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val callRingtoneUri: Uri? = activityResult.data?.getParcelableExtra(RingtoneManager.EXTRA_RINGTONE_PICKED_URI) + val thisActivity = activity + if (callRingtoneUri != null && thisActivity != null) { + setCallRingtoneUri(thisActivity, callRingtoneUri) + mCallRingtonePreference.summary = getCallRingtoneName(thisActivity) } } } @@ -82,10 +77,6 @@ class VectorSettingsVoiceVideoFragment : VectorSettingsBaseFragment() { putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_RINGTONE) activity?.let { putExtra(RingtoneManager.EXTRA_RINGTONE_EXISTING_URI, getCallRingtoneUri(it)) } } - startActivityForResult(intent, REQUEST_CALL_RINGTONE) - } - - companion object { - private const val REQUEST_CALL_RINGTONE = 999 + ringtoneStartForActivityResult.launch(intent) } } From 29d25c377bf20b6ecb3d08552f569249f2a4a9e7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 18:07:04 +0200 Subject: [PATCH 155/278] Do not use deprecated Activity.startActivityForResult anymore - step 2 --- .../troubleshoot/TestFirebaseToken.kt | 6 ++-- .../settings/troubleshoot/TestPlayServices.kt | 4 ++- .../troubleshoot/TestTokenRegistration.kt | 8 +++-- .../im/vector/app/core/extensions/Activity.kt | 9 ++++++ .../im/vector/app/core/extensions/Fragment.kt | 10 +++--- .../app/core/platform/VectorBaseActivity.kt | 32 +++++++++---------- .../core/utils/ExternalApplicationsUtil.kt | 11 ++----- .../im/vector/app/core/utils/SystemUtils.kt | 16 ++++------ .../restore/KeysBackupRestoreActivity.kt | 26 +++++++-------- .../setup/KeysBackupSetupActivity.kt | 13 ++++---- .../setup/KeysBackupSetupStep3Fragment.kt | 3 +- .../features/navigation/DefaultNavigator.kt | 4 +-- .../app/features/navigation/Navigator.kt | 2 +- .../im/vector/app/features/pin/PinActivity.kt | 2 -- ...rSettingsNotificationPreferenceFragment.kt | 13 ++++---- ...ttingsNotificationsTroubleshootFragment.kt | 18 ++++++----- .../NotificationTroubleshootTestManager.kt | 16 ++++------ .../troubleshoot/TestAccountSettings.kt | 8 +++-- .../troubleshoot/TestDeviceSettings.kt | 6 ++-- .../troubleshoot/TestPushRulesSettings.kt | 4 ++- .../troubleshoot/TestSystemSettings.kt | 6 ++-- .../settings/troubleshoot/TroubleshootTest.kt | 4 ++- 22 files changed, 112 insertions(+), 109 deletions(-) diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt index 318867af91..46bdb7967a 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt @@ -15,6 +15,8 @@ */ package im.vector.app.gplay.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import com.google.firebase.iid.FirebaseInstanceId import im.vector.app.R @@ -32,7 +34,7 @@ import javax.inject.Inject class TestFirebaseToken @Inject constructor(private val context: AppCompatActivity, private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_fcm_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { status = TestStatus.RUNNING try { FirebaseInstanceId.getInstance().instanceId @@ -48,7 +50,7 @@ class TestFirebaseToken @Inject constructor(private val context: AppCompatActivi description = stringProvider.getString(R.string.settings_troubleshoot_test_fcm_failed_account_missing, errorMsg) quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_fcm_failed_account_missing_quick_fix) { override fun doFix() { - startAddGoogleAccountIntent(context, NotificationTroubleshootTestManager.REQ_CODE_FIX) + startAddGoogleAccountIntent(context, activityResultLauncher) } } } else { diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPlayServices.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPlayServices.kt index 133fe1cb05..92e713de81 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPlayServices.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPlayServices.kt @@ -15,6 +15,8 @@ */ package im.vector.app.gplay.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import com.google.android.gms.common.ConnectionResult import com.google.android.gms.common.GoogleApiAvailability @@ -31,7 +33,7 @@ class TestPlayServices @Inject constructor(private val context: AppCompatActivit private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_play_services_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { val apiAvailability = GoogleApiAvailability.getInstance() val resultCode = apiAvailability.isGooglePlayServicesAvailable(context) if (resultCode == ConnectionResult.SUCCESS) { diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestTokenRegistration.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestTokenRegistration.kt index 6cb9c38fc6..f400c17d46 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestTokenRegistration.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestTokenRegistration.kt @@ -15,6 +15,8 @@ */ package im.vector.app.gplay.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.Observer import androidx.work.WorkInfo @@ -37,7 +39,7 @@ class TestTokenRegistration @Inject constructor(private val context: AppCompatAc private val activeSessionHolder: ActiveSessionHolder) : TroubleshootTest(R.string.settings_troubleshoot_test_token_registration_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { // Check if we have a registered pusher for this token val fcmToken = FcmHelper.getFcmToken(context) ?: run { status = TestStatus.FAILED @@ -59,9 +61,9 @@ class TestTokenRegistration @Inject constructor(private val context: AppCompatAc WorkManager.getInstance(context).getWorkInfoByIdLiveData(workId).observe(context, Observer { workInfo -> if (workInfo != null) { if (workInfo.state == WorkInfo.State.SUCCEEDED) { - manager?.retry() + manager?.retry(activityResultLauncher) } else if (workInfo.state == WorkInfo.State.FAILED) { - manager?.retry() + manager?.retry(activityResultLauncher) } } }) diff --git a/vector/src/main/java/im/vector/app/core/extensions/Activity.kt b/vector/src/main/java/im/vector/app/core/extensions/Activity.kt index cc67f633eb..53c2b7fc6c 100644 --- a/vector/src/main/java/im/vector/app/core/extensions/Activity.kt +++ b/vector/src/main/java/im/vector/app/core/extensions/Activity.kt @@ -17,11 +17,20 @@ package im.vector.app.core.extensions import android.app.Activity +import android.content.Intent import android.os.Parcelable +import androidx.activity.ComponentActivity +import androidx.activity.result.ActivityResult +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentTransaction import im.vector.app.core.platform.VectorBaseActivity +fun ComponentActivity.registerStartForActivityResult(onResult: (ActivityResult) -> Unit): ActivityResultLauncher { + return registerForActivityResult(ActivityResultContracts.StartActivityForResult(), onResult) +} + fun VectorBaseActivity.addFragment( frameId: Int, fragment: Fragment, diff --git a/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt b/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt index 80be149711..2740d5393a 100644 --- a/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt +++ b/vector/src/main/java/im/vector/app/core/extensions/Fragment.kt @@ -175,19 +175,17 @@ fun Fragment.queryExportKeys(userId: String, activityResultLauncher: ActivityRes activity = requireActivity(), activityResultLauncher = activityResultLauncher, defaultFileName = "element-megolm-export-$userId-$timestamp.txt", - chooserHint = getString(R.string.keys_backup_setup_step1_manual_export), - requestCode = 0 + chooserHint = getString(R.string.keys_backup_setup_step1_manual_export) ) } -fun Activity.queryExportKeys(userId: String, requestCode: Int) { +fun Activity.queryExportKeys(userId: String, activityResultLauncher: ActivityResultLauncher) { val timestamp = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) selectTxtFileToWrite( activity = this, - activityResultLauncher = null, + activityResultLauncher = activityResultLauncher, defaultFileName = "element-megolm-export-$userId-$timestamp.txt", - chooserHint = getString(R.string.keys_backup_setup_step1_manual_export), - requestCode = requestCode + chooserHint = getString(R.string.keys_backup_setup_step1_manual_export) ) } 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 81f73556a5..a8e070d79c 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 @@ -60,6 +60,7 @@ import im.vector.app.core.dialogs.UnrecognizedCertificateDialog import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.observeEvent import im.vector.app.core.extensions.observeNotNull +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.restart import im.vector.app.core.extensions.vectorComponent import im.vector.app.core.utils.toast @@ -68,7 +69,6 @@ import im.vector.app.features.MainActivityArgs import im.vector.app.features.configuration.VectorConfiguration import im.vector.app.features.consent.ConsentNotGivenHelper import im.vector.app.features.navigation.Navigator -import im.vector.app.features.pin.PinActivity import im.vector.app.features.pin.PinLocker import im.vector.app.features.pin.PinMode import im.vector.app.features.pin.UnlockedActivity @@ -206,7 +206,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { }) pinLocker.getLiveState().observeNotNull(this) { if (this@VectorBaseActivity !is UnlockedActivity && it == PinLocker.State.LOCKED) { - navigator.openPinCode(this, PinMode.AUTH) + navigator.openPinCode(this, PinMode.AUTH, pinStartForActivityResult) } } sessionListener = vectorComponent.sessionListener() @@ -313,22 +313,20 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { uiDisposables.dispose() } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (requestCode == PinActivity.PIN_REQUEST_CODE) { - when (resultCode) { - Activity.RESULT_OK -> { - Timber.v("Pin ok, unlock app") - pinLocker.unlock() + private val pinStartForActivityResult = registerStartForActivityResult { activityResult -> + when (activityResult.resultCode) { + Activity.RESULT_OK -> { + Timber.v("Pin ok, unlock app") + pinLocker.unlock() - // Cancel any new started PinActivity, after a screen rotation for instance - finishActivity(PinActivity.PIN_REQUEST_CODE) - } - else -> { - if (pinLocker.getLiveState().value != PinLocker.State.UNLOCKED) { - // Remove the task, to be sure that PIN code will be requested when resumed - finishAndRemoveTask() - } + // Cancel any new started PinActivity, after a screen rotation for instance + // FIXME I cannot use this anymore :/ + // finishActivity(PinActivity.PIN_REQUEST_CODE) + } + else -> { + if (pinLocker.getLiveState().value != PinLocker.State.UNLOCKED) { + // Remove the task, to be sure that PIN code will be requested when resumed + finishAndRemoveTask() } } } diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt index 750c4e071b..8c415c7184 100644 --- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt @@ -441,10 +441,9 @@ fun openPlayStore(activity: Activity, appId: String = BuildConfig.APPLICATION_ID */ fun selectTxtFileToWrite( activity: Activity, - activityResultLauncher: ActivityResultLauncher?, + activityResultLauncher: ActivityResultLauncher, defaultFileName: String, - chooserHint: String, - requestCode: Int + chooserHint: String ) { val intent = Intent(Intent.ACTION_CREATE_DOCUMENT) intent.addCategory(Intent.CATEGORY_OPENABLE) @@ -453,11 +452,7 @@ fun selectTxtFileToWrite( try { val chooserIntent = Intent.createChooser(intent, chooserHint) - if (activityResultLauncher != null) { - activityResultLauncher.launch(chooserIntent) - } else { - activity.startActivityForResult(chooserIntent, requestCode) - } + activityResultLauncher.launch(chooserIntent) } catch (activityNotFoundException: ActivityNotFoundException) { activity.toast(R.string.error_no_external_application_found) } diff --git a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt index 7c41457811..5e722ae209 100644 --- a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt +++ b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt @@ -68,15 +68,11 @@ fun isAnimationDisabled(context: Context): Boolean { * will return false and the notification privacy will fallback to "LOW_DETAIL". */ @TargetApi(Build.VERSION_CODES.M) -fun requestDisablingBatteryOptimization(activity: Activity, fragment: Fragment?, requestCode: Int) { +fun requestDisablingBatteryOptimization(activity: Activity, activityResultLauncher: ActivityResultLauncher) { val intent = Intent() intent.action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS intent.data = Uri.parse("package:" + activity.packageName) - if (fragment != null) { - fragment.startActivityForResult(intent, requestCode) - } else { - activity.startActivityForResult(intent, requestCode) - } + activityResultLauncher.launch(intent) } // ============================================================================================================== @@ -101,7 +97,7 @@ fun copyToClipboard(context: Context, text: CharSequence, showToast: Boolean = t * Shows notification settings for the current app. * In android O will directly opens the notification settings, in lower version it will show the App settings */ -fun startNotificationSettingsIntent(activity: AppCompatActivity, requestCode: Int) { +fun startNotificationSettingsIntent(activity: AppCompatActivity, activityResultLauncher: ActivityResultLauncher) { val intent = Intent() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS @@ -111,7 +107,7 @@ fun startNotificationSettingsIntent(activity: AppCompatActivity, requestCode: In intent.putExtra("app_package", activity.packageName) intent.putExtra("app_uid", activity.applicationInfo?.uid) } - activity.startActivityForResult(intent, requestCode) + activityResultLauncher.launch(intent) } /** @@ -127,11 +123,11 @@ fun startNotificationChannelSettingsIntent(fragment: Fragment, channelID: String fragment.startActivity(intent) } -fun startAddGoogleAccountIntent(context: AppCompatActivity, requestCode: Int) { +fun startAddGoogleAccountIntent(context: Context, activityResultLauncher: ActivityResultLauncher) { try { val intent = Intent(Settings.ACTION_ADD_ACCOUNT) intent.putExtra(Settings.EXTRA_ACCOUNT_TYPES, arrayOf("com.google")) - context.startActivityForResult(intent, requestCode) + activityResultLauncher.launch(intent) } catch (activityNotFoundException: ActivityNotFoundException) { context.toast(R.string.error_no_external_application_found) } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreActivity.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreActivity.kt index 40953cb5f6..80ae46262d 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreActivity.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/restore/KeysBackupRestoreActivity.kt @@ -23,6 +23,7 @@ import androidx.lifecycle.Observer import im.vector.app.R import im.vector.app.core.extensions.addFragmentToBackstack import im.vector.app.core.extensions.observeEvent +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.replaceFragment import im.vector.app.core.platform.SimpleFragmentActivity import im.vector.app.core.ui.views.KeysBackupBanner @@ -32,8 +33,6 @@ import org.matrix.android.sdk.api.session.crypto.crosssigning.KEYBACKUP_SECRET_S class KeysBackupRestoreActivity : SimpleFragmentActivity() { companion object { - - private const val REQUEST_4S_SECRET = 100 const val SECRET_ALIAS = SharedSecureStorageActivity.DEFAULT_RESULT_KEYSTORE_ALIAS fun intent(context: Context): Intent { @@ -130,22 +129,19 @@ class KeysBackupRestoreActivity : SimpleFragmentActivity() { requestedSecrets = listOf(KEYBACKUP_SECRET_SSSS_NAME), resultKeyStoreAlias = SECRET_ALIAS ).let { - startActivityForResult(it, REQUEST_4S_SECRET) + secretStartForActivityResult.launch(it) } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == REQUEST_4S_SECRET) { - val extraResult = data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) - if (resultCode == Activity.RESULT_OK && extraResult != null) { - viewModel.handleGotSecretFromSSSS( - extraResult, - SECRET_ALIAS - ) - } else { - finish() - } + private val secretStartForActivityResult = registerStartForActivityResult { activityResult -> + val extraResult = activityResult.data?.getStringExtra(SharedSecureStorageActivity.EXTRA_DATA_RESULT) + if (activityResult.resultCode == Activity.RESULT_OK && extraResult != null) { + viewModel.handleGotSecretFromSSSS( + extraResult, + SECRET_ALIAS + ) + } else { + finish() } - super.onActivityResult(requestCode, resultCode, data) } } diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupActivity.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupActivity.kt index 1bba2c3a39..ab8e725959 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupActivity.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupActivity.kt @@ -26,6 +26,7 @@ import im.vector.app.R import im.vector.app.core.dialogs.ExportKeysDialog import im.vector.app.core.extensions.observeEvent import im.vector.app.core.extensions.queryExportKeys +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.extensions.replaceFragment import im.vector.app.core.platform.SimpleFragmentActivity import im.vector.app.core.utils.toast @@ -93,7 +94,7 @@ class KeysBackupSetupActivity : SimpleFragmentActivity() { .show() } KeysBackupSetupSharedViewModel.NAVIGATE_MANUAL_EXPORT -> { - queryExportKeys(session.myUserId, REQUEST_CODE_SAVE_MEGOLM_EXPORT) + queryExportKeys(session.myUserId, saveStartForActivityResult) } } } @@ -125,10 +126,10 @@ class KeysBackupSetupActivity : SimpleFragmentActivity() { }) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (requestCode == REQUEST_CODE_SAVE_MEGOLM_EXPORT) { - val uri = data?.data - if (resultCode == Activity.RESULT_OK && uri != null) { + private val saveStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + val uri = activityResult.data?.data + if (uri != null) { ExportKeysDialog().show(this, object : ExportKeysDialog.ExportKeyDialogListener { override fun onPassphrase(passphrase: String) { showWaitingView() @@ -163,7 +164,6 @@ class KeysBackupSetupActivity : SimpleFragmentActivity() { hideWaitingView() } } - super.onActivityResult(requestCode, resultCode, data) } override fun onBackPressed() { @@ -198,7 +198,6 @@ class KeysBackupSetupActivity : SimpleFragmentActivity() { const val KEYS_VERSION = "KEYS_VERSION" const val MANUAL_EXPORT = "MANUAL_EXPORT" const val EXTRA_SHOW_MANUAL_EXPORT = "SHOW_MANUAL_EXPORT" - const val REQUEST_CODE_SAVE_MEGOLM_EXPORT = 101 fun intent(context: Context, showManualExport: Boolean): Intent { val intent = Intent(context, KeysBackupSetupActivity::class.java) diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt index 5e7a2a738a..d357625bcc 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt @@ -137,8 +137,7 @@ class KeysBackupSetupStep3Fragment @Inject constructor() : VectorBaseFragment() activity = requireActivity(), activityResultLauncher = saveRecoveryActivityResultLauncher, defaultFileName = "recovery-key-$userId-$timestamp.txt", - chooserHint = getString(R.string.save_recovery_key_chooser_hint), - requestCode = 0 + chooserHint = getString(R.string.save_recovery_key_chooser_hint) ) dialog.dismiss() } diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 237fa4f65d..2aaaf0162d 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -310,9 +310,9 @@ class DefaultNavigator @Inject constructor( activityResultLauncher.launch(intent) } - override fun openPinCode(activity: Activity, pinMode: PinMode, requestCode: Int) { + override fun openPinCode(activity: Activity, pinMode: PinMode, activityResultLauncher: ActivityResultLauncher) { val intent = PinActivity.newIntent(activity, PinArgs(pinMode)) - activity.startActivityForResult(intent, requestCode) + activityResultLauncher.launch(intent) } override fun openMediaViewer(activity: Activity, diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index 4344f918ce..81ff798ac8 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -87,7 +87,7 @@ interface Navigator { activityResultLauncher: ActivityResultLauncher, pinMode: PinMode) - fun openPinCode(activity: Activity, pinMode: PinMode, requestCode: Int = PinActivity.PIN_REQUEST_CODE) + fun openPinCode(activity: Activity, pinMode: PinMode, activityResultLauncher: ActivityResultLauncher) fun openTerms(context: Context, activityResultLauncher: ActivityResultLauncher, diff --git a/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt b/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt index 0216ec512e..2e6a0b6c08 100644 --- a/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt +++ b/vector/src/main/java/im/vector/app/features/pin/PinActivity.kt @@ -28,8 +28,6 @@ import im.vector.app.core.platform.VectorBaseActivity class PinActivity : VectorBaseActivity(), ToolbarConfigurable, UnlockedActivity { companion object { - const val PIN_REQUEST_CODE = 17890 - fun newIntent(context: Context, args: PinArgs): Intent { return Intent(context, PinActivity::class.java).apply { putExtra(MvRx.KEY_ARG, args) diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt index 99a05ae6c1..5f3a0e32ca 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt @@ -115,6 +115,11 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( handleSystemPreference() } + private val batteryStartForActivityResult = registerStartForActivityResult { + // Noop + } + + // BackgroundSyncModeChooserDialog.InteractionListener override fun onOptionSelected(mode: BackgroundSyncMode) { // option has change, need to act @@ -123,9 +128,7 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( // Even if using foreground service with foreground notif, it stops to work // in doze mode for certain devices :/ if (!isIgnoringBatteryOptimizations(requireContext())) { - requestDisablingBatteryOptimization(requireActivity(), - this@VectorSettingsNotificationPreferenceFragment, - REQUEST_BATTERY_OPTIMIZATION) + requestDisablingBatteryOptimization(requireActivity(), batteryStartForActivityResult, 0) } } vectorPreferences.setFdroidSyncBackgroundMode(mode) @@ -336,8 +339,4 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( }) } } - - companion object { - private const val REQUEST_BATTERY_OPTIMIZATION = 500 - } } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt index f07d6471c9..b989ae44d0 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt @@ -17,7 +17,6 @@ package im.vector.app.features.settings import android.app.Activity import android.content.Context -import android.content.Intent import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -30,6 +29,7 @@ import androidx.transition.TransitionManager import butterknife.BindView import im.vector.app.R import im.vector.app.core.extensions.cleanup +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.features.rageshake.BugReporter @@ -76,7 +76,7 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( } mRunButton.debouncedClicks { - testManager?.retry() + testManager?.retry(testStartForActivityResult) } startUI() } @@ -134,7 +134,7 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( } } mRecyclerView.adapter = testManager?.adapter - testManager?.runDiagnostic() + testManager?.runDiagnostic(testStartForActivityResult) } override fun onDestroyView() { @@ -142,12 +142,14 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( super.onDestroyView() } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (resultCode == Activity.RESULT_OK && requestCode == NotificationTroubleshootTestManager.REQ_CODE_FIX) { - testManager?.retry() - return + private val testStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + retry() } - super.onActivityResult(requestCode, resultCode, data) + } + + private fun retry() { + testManager?.retry(testStartForActivityResult) } override fun onDetach() { diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt index 92e8eecb4d..e977dc5963 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt @@ -15,8 +15,10 @@ */ package im.vector.app.features.settings.troubleshoot +import android.content.Intent import android.os.Handler import android.os.Looper +import androidx.activity.result.ActivityResultLauncher import androidx.fragment.app.Fragment import kotlin.properties.Delegates @@ -41,7 +43,7 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { test.manager = this } - fun runDiagnostic() { + fun runDiagnostic(activityResultLauncher: ActivityResultLauncher) { if (isCancelled) return currentTestIndex = 0 val handler = Handler(Looper.getMainLooper()) @@ -60,7 +62,7 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { // Cosmetic: Start with a small delay for UI/UX reason (better animation effect) for non async tests handler.postDelayed({ if (fragment.isAdded) { - troubleshootTest.perform() + troubleshootTest.perform(activityResultLauncher) } }, 600) } else { @@ -72,18 +74,18 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { } } if (fragment.isAdded) { - testList.firstOrNull()?.perform() + testList.firstOrNull()?.perform(activityResultLauncher) } } - fun retry() { + fun retry(activityResultLauncher: ActivityResultLauncher) { for (test in testList) { test.cancel() test.description = null test.quickFix = null test.status = TroubleshootTest.TestStatus.NOT_STARTED } - runDiagnostic() + runDiagnostic(activityResultLauncher) } fun cancel() { @@ -92,8 +94,4 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { test.cancel() } } - - companion object { - const val REQ_CODE_FIX = 9099 - } } diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt index df1ff80b31..d0415c059c 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestAccountSettings.kt @@ -15,6 +15,8 @@ */ package im.vector.app.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.pushrules.RuleIds import org.matrix.android.sdk.api.pushrules.RuleKind @@ -30,7 +32,7 @@ class TestAccountSettings @Inject constructor(private val stringProvider: String private val activeSessionHolder: ActiveSessionHolder) : TroubleshootTest(R.string.settings_troubleshoot_test_account_settings_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { val session = activeSessionHolder.getSafeActiveSession() ?: return val defaultRule = session.getPushRules().getAllRules() .find { it.ruleId == RuleIds.RULE_ID_DISABLE_ALL } @@ -49,11 +51,11 @@ class TestAccountSettings @Inject constructor(private val stringProvider: String session.updatePushRuleEnableStatus(RuleKind.OVERRIDE, defaultRule, !defaultRule.enabled, object : MatrixCallback { override fun onSuccess(data: Unit) { - manager?.retry() + manager?.retry(activityResultLauncher) } override fun onFailure(failure: Throwable) { - manager?.retry() + manager?.retry(activityResultLauncher) } }) } diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestDeviceSettings.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestDeviceSettings.kt index 61c2fb120e..0d661e8b16 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestDeviceSettings.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestDeviceSettings.kt @@ -15,6 +15,8 @@ */ package im.vector.app.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import im.vector.app.R import im.vector.app.core.resources.StringProvider import im.vector.app.features.settings.VectorPreferences @@ -27,7 +29,7 @@ class TestDeviceSettings @Inject constructor(private val vectorPreferences: Vect private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_device_settings_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { if (vectorPreferences.areNotificationEnabledForDevice()) { description = stringProvider.getString(R.string.settings_troubleshoot_test_device_settings_success) quickFix = null @@ -36,7 +38,7 @@ class TestDeviceSettings @Inject constructor(private val vectorPreferences: Vect quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_device_settings_quickfix) { override fun doFix() { vectorPreferences.setNotificationEnabledForDevice(true) - manager?.retry() + manager?.retry(activityResultLauncher) } } description = stringProvider.getString(R.string.settings_troubleshoot_test_device_settings_failed) diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestPushRulesSettings.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestPushRulesSettings.kt index 22b2331449..31b4e213ca 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestPushRulesSettings.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestPushRulesSettings.kt @@ -15,6 +15,8 @@ */ package im.vector.app.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import org.matrix.android.sdk.api.pushrules.RuleIds import org.matrix.android.sdk.api.pushrules.getActions import im.vector.app.R @@ -38,7 +40,7 @@ class TestPushRulesSettings @Inject constructor(private val activeSessionHolder: R.string.settings_messages_in_one_to_one, R.string.settings_messages_in_group_chat) - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { val session = activeSessionHolder.getSafeActiveSession() ?: return val pushRules = session.getPushRules().getAllRules() var oneOrMoreRuleIsOff = false diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt index 92eae017f9..8e64514e7f 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt @@ -15,6 +15,8 @@ */ package im.vector.app.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NotificationManagerCompat import im.vector.app.R @@ -29,7 +31,7 @@ class TestSystemSettings @Inject constructor(private val context: AppCompatActiv private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_system_settings_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { if (NotificationManagerCompat.from(context).areNotificationsEnabled()) { description = stringProvider.getString(R.string.settings_troubleshoot_test_system_settings_success) quickFix = null @@ -39,7 +41,7 @@ class TestSystemSettings @Inject constructor(private val context: AppCompatActiv quickFix = object : TroubleshootQuickFix(R.string.open_settings) { override fun doFix() { if (manager?.diagStatus == TestStatus.RUNNING) return // wait before all is finished - startNotificationSettingsIntent(context, NotificationTroubleshootTestManager.REQ_CODE_FIX) + startNotificationSettingsIntent(context, activityResultLauncher) } } status = TestStatus.FAILED diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt index 7abec31ae4..f894fcc0ef 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt @@ -15,6 +15,8 @@ */ package im.vector.app.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes import kotlin.properties.Delegates @@ -37,7 +39,7 @@ abstract class TroubleshootTest(@StringRes val titleResId: Int) { var manager: NotificationTroubleshootTestManager? = null - abstract fun perform() + abstract fun perform(activityResultLauncher: ActivityResultLauncher) fun isFinished(): Boolean = (status == TestStatus.FAILED || status == TestStatus.SUCCESS) From a80f1538c78701726bca740d60cc2ce26e4e45cb Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 18:08:37 +0200 Subject: [PATCH 156/278] Cleanup --- .../java/im/vector/app/core/platform/VectorBaseActivity.kt | 3 +-- .../im/vector/app/features/navigation/DefaultNavigator.kt | 5 ----- .../main/java/im/vector/app/features/navigation/Navigator.kt | 2 -- 3 files changed, 1 insertion(+), 9 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 a8e070d79c..cdba5b2ef2 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 @@ -18,7 +18,6 @@ package im.vector.app.core.platform import android.app.Activity import android.content.Context -import android.content.Intent import android.content.res.Configuration import android.os.Bundle import android.os.Parcelable @@ -206,7 +205,7 @@ abstract class VectorBaseActivity : AppCompatActivity(), HasScreenInjector { }) pinLocker.getLiveState().observeNotNull(this) { if (this@VectorBaseActivity !is UnlockedActivity && it == PinLocker.State.LOCKED) { - navigator.openPinCode(this, PinMode.AUTH, pinStartForActivityResult) + navigator.openPinCode(this, pinStartForActivityResult, PinMode.AUTH) } } sessionListener = vectorComponent.sessionListener() diff --git a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt index 2aaaf0162d..106d804cd3 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/DefaultNavigator.kt @@ -310,11 +310,6 @@ class DefaultNavigator @Inject constructor( activityResultLauncher.launch(intent) } - override fun openPinCode(activity: Activity, pinMode: PinMode, activityResultLauncher: ActivityResultLauncher) { - val intent = PinActivity.newIntent(activity, PinArgs(pinMode)) - activityResultLauncher.launch(intent) - } - override fun openMediaViewer(activity: Activity, roomId: String, mediaData: AttachmentData, diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index 81ff798ac8..05cba654f2 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -87,8 +87,6 @@ interface Navigator { activityResultLauncher: ActivityResultLauncher, pinMode: PinMode) - fun openPinCode(activity: Activity, pinMode: PinMode, activityResultLauncher: ActivityResultLauncher) - fun openTerms(context: Context, activityResultLauncher: ActivityResultLauncher, serviceType: TermsService.ServiceType, From e224ae62b4c3f00c572b41d987bcadb3ab125bec Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 18:27:25 +0200 Subject: [PATCH 157/278] Do not use deprecated Activity.startActivityForResult anymore - step 3 --- .../im/vector/lib/multipicker/AudioPicker.kt | 2 +- .../im/vector/lib/multipicker/CameraPicker.kt | 18 +----- .../vector/lib/multipicker/ContactPicker.kt | 2 +- .../im/vector/lib/multipicker/FilePicker.kt | 2 +- .../im/vector/lib/multipicker/ImagePicker.kt | 2 +- .../im/vector/lib/multipicker/MultiPicker.kt | 21 +++---- .../java/im/vector/lib/multipicker/Picker.kt | 13 +---- .../im/vector/lib/multipicker/VideoPicker.kt | 2 +- .../app/features/debug/DebugMenuActivity.kt | 41 +++++++------- .../preview/AttachmentsPreviewFragment.kt | 4 ++ .../features/media/BigImageViewerActivity.kt | 56 +++++++++++-------- .../features/qrcode/QrCodeScannerActivity.kt | 7 --- .../roomprofile/RoomProfileFragment.kt | 7 ++- .../settings/VectorSettingsGeneralFragment.kt | 2 +- ...rSettingsNotificationPreferenceFragment.kt | 2 +- 15 files changed, 78 insertions(+), 103 deletions(-) diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt index e796137af2..516022100d 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/AudioPicker.kt @@ -25,7 +25,7 @@ import im.vector.lib.multipicker.entity.MultiPickerAudioType /** * Audio file picker implementation */ -class AudioPicker(override val requestCode: Int) : Picker(requestCode) { +class AudioPicker : Picker() { /** * Call this function from onActivityResult(int, int, Intent). diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt index 319bc31af9..e70e3c574f 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt @@ -33,24 +33,10 @@ import java.util.Locale /** * Implementation of taking a photo with Camera */ -class CameraPicker(val requestCode: Int) { +class CameraPicker { /** - * Start camera by using an Activity - * @param activity Activity to handle onActivityResult(). - * @return Uri of taken photo or null if the operation is cancelled. - */ - fun startWithExpectingFile(activity: Activity): Uri? { - val photoUri = createPhotoUri(activity) - val intent = createIntent().apply { - putExtra(MediaStore.EXTRA_OUTPUT, photoUri) - } - activity.startActivityForResult(intent, requestCode) - return photoUri - } - - /** - * Start camera by using a Fragment + * Start camera by using a ActivityResultLauncher * @return Uri of taken photo or null if the operation is cancelled. */ fun startWithExpectingFile(context: Context, activityResultLauncher: ActivityResultLauncher): Uri? { diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt index 5eb8a98999..315fe6cbf2 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/ContactPicker.kt @@ -25,7 +25,7 @@ import im.vector.lib.multipicker.entity.MultiPickerContactType /** * Contact Picker implementation */ -class ContactPicker(override val requestCode: Int) : Picker(requestCode) { +class ContactPicker : Picker() { /** * Call this function from onActivityResult(int, int, Intent). diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt index 7510d06b2b..39bd93d03e 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/FilePicker.kt @@ -24,7 +24,7 @@ import im.vector.lib.multipicker.entity.MultiPickerFileType /** * Implementation of selecting any type of files */ -class FilePicker(override val requestCode: Int) : Picker(requestCode) { +class FilePicker : Picker() { /** * Call this function from onActivityResult(int, int, Intent). diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt index 054bfba365..ce73058039 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/ImagePicker.kt @@ -25,7 +25,7 @@ import im.vector.lib.multipicker.utils.ImageUtils /** * Image Picker implementation */ -class ImagePicker(override val requestCode: Int) : Picker(requestCode) { +class ImagePicker : Picker() { /** * Call this function from onActivityResult(int, int, Intent). diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt index d28dcf9586..7e639a9bd3 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/MultiPicker.kt @@ -26,23 +26,16 @@ class MultiPicker { val CONTACT by lazy { MultiPicker() } val CAMERA by lazy { MultiPicker() } - const val REQUEST_CODE_PICK_IMAGE = 5000 - const val REQUEST_CODE_PICK_VIDEO = 5001 - const val REQUEST_CODE_PICK_FILE = 5002 - const val REQUEST_CODE_PICK_AUDIO = 5003 - const val REQUEST_CODE_PICK_CONTACT = 5004 - const val REQUEST_CODE_TAKE_PHOTO = 5005 - @Suppress("UNCHECKED_CAST") fun get(type: MultiPicker): T { return when (type) { - IMAGE -> ImagePicker(REQUEST_CODE_PICK_IMAGE) as T - VIDEO -> VideoPicker(REQUEST_CODE_PICK_VIDEO) as T - FILE -> FilePicker(REQUEST_CODE_PICK_FILE) as T - AUDIO -> AudioPicker(REQUEST_CODE_PICK_AUDIO) as T - CONTACT -> ContactPicker(REQUEST_CODE_PICK_CONTACT) as T - CAMERA -> CameraPicker(REQUEST_CODE_TAKE_PHOTO) as T - else -> throw IllegalArgumentException("Unsupported type $type") + IMAGE -> ImagePicker() as T + VIDEO -> VideoPicker() as T + FILE -> FilePicker() as T + AUDIO -> AudioPicker() as T + CONTACT -> ContactPicker() as T + CAMERA -> CameraPicker() as T + else -> throw IllegalArgumentException("Unsupported type $type") } } } diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt index 33da23e2b6..ba765a3b1d 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/Picker.kt @@ -16,7 +16,6 @@ package im.vector.lib.multipicker -import android.app.Activity import android.content.Context import android.content.Intent import android.content.pm.PackageManager @@ -27,7 +26,7 @@ import androidx.activity.result.ActivityResultLauncher /** * Abstract class to provide all types of Pickers */ -abstract class Picker(open val requestCode: Int) { +abstract class Picker { protected var single = false @@ -73,15 +72,7 @@ abstract class Picker(open val requestCode: Int) { abstract fun createIntent(): Intent /** - * Start Storage Access Framework UI by using an Activity. - * @param activity Activity to handle onActivityResult(). - */ - fun startWith(activity: Activity) { - activity.startActivityForResult(createIntent().apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) }, requestCode) - } - - /** - * Start Storage Access Framework UI by using a Fragment. + * Start Storage Access Framework UI by using a ActivityResultLauncher. * @param activityResultLauncher to handle the result. */ fun startWith(activityResultLauncher: ActivityResultLauncher) { diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt index c1d1f74aab..c7c06f795f 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/VideoPicker.kt @@ -25,7 +25,7 @@ import im.vector.lib.multipicker.entity.MultiPickerVideoType /** * Video Picker implementation */ -class VideoPicker(override val requestCode: Int) : Picker(requestCode) { +class VideoPicker : Picker() { /** * Call this function from onActivityResult(int, int, Intent). diff --git a/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt b/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt index 5590e19c10..9cca462d1a 100644 --- a/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt +++ b/vector/src/debug/java/im/vector/app/features/debug/DebugMenuActivity.kt @@ -28,6 +28,7 @@ import butterknife.OnClick import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ScreenComponent +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.utils.PERMISSIONS_FOR_TAKING_PHOTO import im.vector.app.core.utils.PERMISSION_REQUEST_CODE_LAUNCH_CAMERA @@ -196,33 +197,29 @@ class DebugMenuActivity : VectorBaseActivity() { } private fun doScanQRCode() { - QrCodeScannerActivity.startForResult(this) + QrCodeScannerActivity.startForResult(this, qrStartForActivityResult) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - QrCodeScannerActivity.QR_CODE_SCANNER_REQUEST_CODE -> { - toast("QrCode: " + QrCodeScannerActivity.getResultText(data) + " is QRCode: " + QrCodeScannerActivity.getResultIsQrCode(data)) + private val qrStartForActivityResult = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + toast("QrCode: " + QrCodeScannerActivity.getResultText(activityResult.data) + + " is QRCode: " + QrCodeScannerActivity.getResultIsQrCode(activityResult.data)) - // Also update the current QR Code (reverse operation) - // renderQrCode(QrCodeScannerActivity.getResultText(data) ?: "") - val result = QrCodeScannerActivity.getResultText(data)!! + // Also update the current QR Code (reverse operation) + // renderQrCode(QrCodeScannerActivity.getResultText(data) ?: "") + val result = QrCodeScannerActivity.getResultText(activityResult.data)!! - val qrCodeData = result.toQrCodeData() - Timber.e("qrCodeData: $qrCodeData") + val qrCodeData = result.toQrCodeData() + Timber.e("qrCodeData: $qrCodeData") - if (result.length != buffer.size) { - Timber.e("Error, length are not the same") - } else { - // Convert to ByteArray - val byteArrayResult = result.toByteArray(Charsets.ISO_8859_1) - for (i in byteArrayResult.indices) { - if (buffer[i] != byteArrayResult[i]) { - Timber.e("Error for byte $i, expecting ${buffer[i]} and get ${byteArrayResult[i]}") - } - } + if (result.length != buffer.size) { + Timber.e("Error, length are not the same") + } else { + // Convert to ByteArray + val byteArrayResult = result.toByteArray(Charsets.ISO_8859_1) + for (i in byteArrayResult.indices) { + if (buffer[i] != byteArrayResult[i]) { + Timber.e("Error for byte $i, expecting ${buffer[i]} and get ${byteArrayResult[i]}") } } } diff --git a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt index 387cfb2261..f6a6e3abcf 100644 --- a/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt +++ b/vector/src/main/java/im/vector/app/features/attachments/preview/AttachmentsPreviewFragment.kt @@ -81,6 +81,10 @@ class AttachmentsPreviewFragment @Inject constructor( } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + // TODO handle this one (Ucrop lib) + @Suppress("DEPRECATION") + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == RESULT_OK) { if (requestCode == UCrop.REQUEST_CROP && data != null) { Timber.v("Crop success") diff --git a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt index 04fd6e3850..81d6f1f996 100644 --- a/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/media/BigImageViewerActivity.kt @@ -30,6 +30,7 @@ import com.yalantis.ucrop.UCrop import im.vector.app.R import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.ScreenComponent +import im.vector.app.core.extensions.registerStartForActivityResult import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.resources.ColorProvider import im.vector.app.core.resources.StringProvider @@ -112,10 +113,10 @@ class BigImageViewerActivity : VectorBaseActivity() { private fun onAvatarTypeSelected(isCamera: Boolean) { if (isCamera) { if (checkPermissions(PERMISSIONS_FOR_TAKING_PHOTO, this, PERMISSION_REQUEST_CODE_LAUNCH_CAMERA)) { - avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this) + avatarCameraUri = MultiPicker.get(MultiPicker.CAMERA).startWithExpectingFile(this, takePhotoActivityResultLauncher) } } else { - MultiPicker.get(MultiPicker.IMAGE).single().startWith(this) + MultiPicker.get(MultiPicker.IMAGE).single().startWith(pickImageActivityResultLauncher) } } @@ -127,30 +128,39 @@ class BigImageViewerActivity : VectorBaseActivity() { .start(this) } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - if (resultCode == Activity.RESULT_OK) { - when (requestCode) { - MultiPicker.REQUEST_CODE_TAKE_PHOTO -> { - avatarCameraUri?.let { uri -> - MultiPicker.get(MultiPicker.CAMERA) - .getTakenPhoto(this, uri) - ?.let { - onRoomAvatarSelected(it) - } - } - } - MultiPicker.REQUEST_CODE_PICK_IMAGE -> { - MultiPicker - .get(MultiPicker.IMAGE) - .getSelectedFiles(this, data) - .firstOrNull()?.let { - onRoomAvatarSelected(it) - } - } - UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } + private val takePhotoActivityResultLauncher = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + avatarCameraUri?.let { uri -> + MultiPicker.get(MultiPicker.CAMERA) + .getTakenPhoto(this, uri) + ?.let { + onRoomAvatarSelected(it) + } } } + } + + private val pickImageActivityResultLauncher = registerStartForActivityResult { activityResult -> + if (activityResult.resultCode == Activity.RESULT_OK) { + MultiPicker + .get(MultiPicker.IMAGE) + .getSelectedFiles(this, activityResult.data) + .firstOrNull()?.let { + onRoomAvatarSelected(it) + } + } + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + // TODO handle this one (Ucrop lib) + @Suppress("DEPRECATION") super.onActivityResult(requestCode, resultCode, data) + + if (resultCode == Activity.RESULT_OK) { + when (requestCode) { + UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } + } + } } override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { diff --git a/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt b/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt index 563f9c65fa..8a5126a160 100644 --- a/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/qrcode/QrCodeScannerActivity.kt @@ -75,13 +75,6 @@ class QrCodeScannerActivity : VectorBaseActivity() { private const val EXTRA_OUT_TEXT = "EXTRA_OUT_TEXT" private const val EXTRA_OUT_IS_QR_CODE = "EXTRA_OUT_IS_QR_CODE" - const val QR_CODE_SCANNER_REQUEST_CODE = 429 - - // For test only - fun startForResult(activity: Activity, requestCode: Int = QR_CODE_SCANNER_REQUEST_CODE) { - activity.startActivityForResult(Intent(activity, QrCodeScannerActivity::class.java), requestCode) - } - fun startForResult(activity: Activity, activityResultLauncher: ActivityResultLauncher) { activityResultLauncher.launch(Intent(activity, QrCodeScannerActivity::class.java)) } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 2b67624ed1..399c1ecf32 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -345,14 +345,15 @@ class RoomProfileFragment @Inject constructor( } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + // TODO handle this one (Ucrop lib) + @Suppress("DEPRECATION") + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == Activity.RESULT_OK) { when (requestCode) { UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } } } - // TODO handle this one (Ucrop lib) - @Suppress("DEPRECATION") - super.onActivityResult(requestCode, resultCode, data) } private fun onAvatarCropped(uri: Uri?) { diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt index 9928325289..3f7ddbb9c8 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt @@ -304,12 +304,12 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { } override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + // TODO handle this one (Ucrop lib) @Suppress("DEPRECATION") super.onActivityResult(requestCode, resultCode, data) if (resultCode == Activity.RESULT_OK) { when (requestCode) { - // TODO Migrate this too UCrop.REQUEST_CROP -> data?.let { onAvatarCropped(UCrop.getOutput(it)) } } } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt index 5f3a0e32ca..fdff5253d5 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt @@ -128,7 +128,7 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( // Even if using foreground service with foreground notif, it stops to work // in doze mode for certain devices :/ if (!isIgnoringBatteryOptimizations(requireContext())) { - requestDisablingBatteryOptimization(requireActivity(), batteryStartForActivityResult, 0) + requestDisablingBatteryOptimization(requireActivity(), batteryStartForActivityResult) } } vectorPreferences.setFdroidSyncBackgroundMode(mode) From e67fe1476c2f401d724c1f91fce6d0c957f5a264 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 18:51:51 +0200 Subject: [PATCH 158/278] Fix the latest warning \o/ --- .../crypto/quads/SharedSecureStorageActivity.kt | 17 ++++++++++++++--- .../features/settings/VectorSettingsActivity.kt | 3 ++- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt index 42d000ecc3..2abad9dd38 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/quads/SharedSecureStorageActivity.kt @@ -24,6 +24,8 @@ import android.os.Parcelable import android.view.View import androidx.appcompat.app.AlertDialog import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentOnAttachListener import com.airbnb.mvrx.MvRx import com.airbnb.mvrx.viewModel import im.vector.app.R @@ -38,7 +40,10 @@ import kotlinx.android.synthetic.main.activity.* import javax.inject.Inject import kotlin.reflect.KClass -class SharedSecureStorageActivity : SimpleFragmentActivity(), VectorBaseBottomSheetDialogFragment.ResultListener { +class SharedSecureStorageActivity : + SimpleFragmentActivity(), + VectorBaseBottomSheetDialogFragment.ResultListener, + FragmentOnAttachListener { @Parcelize data class Args( @@ -58,6 +63,8 @@ class SharedSecureStorageActivity : SimpleFragmentActivity(), VectorBaseBottomSh override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + supportFragmentManager.addFragmentOnAttachListener(this) + toolbar.visibility = View.GONE viewModel.observeViewEvents { observeViewEvents(it) } @@ -65,6 +72,11 @@ class SharedSecureStorageActivity : SimpleFragmentActivity(), VectorBaseBottomSh viewModel.subscribe(this) { renderState(it) } } + override fun onDestroy() { + super.onDestroy() + supportFragmentManager.removeFragmentOnAttachListener(this) + } + override fun onBackPressed() { viewModel.handle(SharedSecureStorageAction.Back) } @@ -119,8 +131,7 @@ class SharedSecureStorageActivity : SimpleFragmentActivity(), VectorBaseBottomSh } } - override fun onAttachFragment(fragment: Fragment) { - super.onAttachFragment(fragment) + override fun onAttachFragment(fragmentManager: FragmentManager, fragment: Fragment) { if (fragment is VectorBaseBottomSheetDialogFragment) { fragment.resultListener = this } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt index 50692ef255..8bea54fcbe 100755 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsActivity.kt @@ -107,7 +107,8 @@ class VectorSettingsActivity : VectorBaseActivity(), } if (oFragment != null) { - oFragment.setTargetFragment(caller, 0) + // Deprecated, I comment it, I think it is useless + // oFragment.setTargetFragment(caller, 0) // Replace the existing Fragment with the new Fragment supportFragmentManager.beginTransaction() .setCustomAnimations(R.anim.right_in, R.anim.fade_out, R.anim.fade_in, R.anim.right_out) From f7e040efd2b5287a0ba15820d8a6ad923a15fc19 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 19:08:00 +0200 Subject: [PATCH 159/278] F-Droid compilation --- .../features/settings/troubleshoot/TestAutoStartBoot.kt | 6 ++++-- .../settings/troubleshoot/TestBackgroundRestrictions.kt | 4 +++- .../settings/troubleshoot/TestBatteryOptimization.kt | 7 ++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestAutoStartBoot.kt b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestAutoStartBoot.kt index b7834ecf45..e46a07f712 100644 --- a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestAutoStartBoot.kt +++ b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestAutoStartBoot.kt @@ -15,6 +15,8 @@ */ package im.vector.app.fdroid.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import im.vector.app.R import im.vector.app.core.resources.StringProvider import im.vector.app.features.settings.VectorPreferences @@ -28,7 +30,7 @@ class TestAutoStartBoot @Inject constructor(private val vectorPreferences: Vecto private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_service_boot_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { if (vectorPreferences.autoStartOnBoot()) { description = stringProvider.getString(R.string.settings_troubleshoot_test_service_boot_success) status = TestStatus.SUCCESS @@ -38,7 +40,7 @@ class TestAutoStartBoot @Inject constructor(private val vectorPreferences: Vecto quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_service_boot_quickfix) { override fun doFix() { vectorPreferences.setAutoStartOnBoot(true) - manager?.retry() + manager?.retry(activityResultLauncher) } } status = TestStatus.FAILED diff --git a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt index 3e053d7fec..abdd696724 100644 --- a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt +++ b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBackgroundRestrictions.kt @@ -15,7 +15,9 @@ */ package im.vector.app.fdroid.features.settings.troubleshoot +import android.content.Intent import android.net.ConnectivityManager +import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import androidx.core.content.getSystemService import androidx.core.net.ConnectivityManagerCompat @@ -28,7 +30,7 @@ class TestBackgroundRestrictions @Inject constructor(private val context: AppCom private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_bg_restricted_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { context.getSystemService()!!.apply { // Checks if the device is on a metered network if (isActiveNetworkMetered) { diff --git a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBatteryOptimization.kt b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBatteryOptimization.kt index 510ade0a33..b1eeae6681 100644 --- a/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBatteryOptimization.kt +++ b/vector/src/fdroid/java/im/vector/app/fdroid/features/settings/troubleshoot/TestBatteryOptimization.kt @@ -15,12 +15,13 @@ */ package im.vector.app.fdroid.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import im.vector.app.R import im.vector.app.core.resources.StringProvider import im.vector.app.core.utils.isIgnoringBatteryOptimizations import im.vector.app.core.utils.requestDisablingBatteryOptimization -import im.vector.app.features.settings.troubleshoot.NotificationTroubleshootTestManager import im.vector.app.features.settings.troubleshoot.TroubleshootTest import javax.inject.Inject @@ -29,7 +30,7 @@ class TestBatteryOptimization @Inject constructor( private val stringProvider: StringProvider ) : TroubleshootTest(R.string.settings_troubleshoot_test_battery_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { if (isIgnoringBatteryOptimizations(context)) { description = stringProvider.getString(R.string.settings_troubleshoot_test_battery_success) status = TestStatus.SUCCESS @@ -38,7 +39,7 @@ class TestBatteryOptimization @Inject constructor( description = stringProvider.getString(R.string.settings_troubleshoot_test_battery_failed) quickFix = object : TroubleshootQuickFix(R.string.settings_troubleshoot_test_battery_quickfix) { override fun doFix() { - requestDisablingBatteryOptimization(context, null, NotificationTroubleshootTestManager.REQ_CODE_FIX) + requestDisablingBatteryOptimization(context, activityResultLauncher) } } status = TestStatus.FAILED From 573ec29829ffe64d3bf7acd897d7355f06a1b027 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 7 Oct 2020 19:10:53 +0200 Subject: [PATCH 160/278] ktlint cleanup --- .../src/main/java/im/vector/lib/multipicker/CameraPicker.kt | 1 - .../gplay/features/settings/troubleshoot/TestFirebaseToken.kt | 1 - .../java/im/vector/app/core/utils/ExternalApplicationsUtil.kt | 1 - .../crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt | 1 - .../features/crypto/verification/VerificationBottomSheet.kt | 1 - .../app/features/discovery/DiscoverySettingsFragment.kt | 1 - .../app/features/home/room/detail/RoomDetailFragment.kt | 3 +-- .../main/java/im/vector/app/features/navigation/Navigator.kt | 1 - .../app/features/settings/VectorSettingsGeneralFragment.kt | 4 ++-- .../settings/VectorSettingsNotificationPreferenceFragment.kt | 1 - .../settings/VectorSettingsSecurityPrivacyFragment.kt | 3 ++- 11 files changed, 5 insertions(+), 13 deletions(-) diff --git a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt index e70e3c574f..3f24a28c28 100644 --- a/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt +++ b/multipicker/src/main/java/im/vector/lib/multipicker/CameraPicker.kt @@ -16,7 +16,6 @@ package im.vector.lib.multipicker -import android.app.Activity import android.content.Context import android.content.Intent import android.net.Uri diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt index 46bdb7967a..32888dafd7 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestFirebaseToken.kt @@ -22,7 +22,6 @@ import com.google.firebase.iid.FirebaseInstanceId import im.vector.app.R import im.vector.app.core.resources.StringProvider import im.vector.app.core.utils.startAddGoogleAccountIntent -import im.vector.app.features.settings.troubleshoot.NotificationTroubleshootTestManager import im.vector.app.features.settings.troubleshoot.TroubleshootTest import im.vector.app.push.fcm.FcmHelper import timber.log.Timber diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt index 8c415c7184..1e19a1231a 100644 --- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt @@ -37,7 +37,6 @@ import androidx.browser.customtabs.CustomTabsSession import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import androidx.core.content.getSystemService -import androidx.fragment.app.Fragment import im.vector.app.BuildConfig import im.vector.app.R import im.vector.app.features.notifications.NotificationUtils diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt index d357625bcc..78471c6848 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysbackup/setup/KeysBackupSetupStep3Fragment.kt @@ -16,7 +16,6 @@ package im.vector.app.features.crypto.keysbackup.setup import android.app.Activity -import android.content.Intent import android.net.Uri import android.os.Bundle import android.view.View diff --git a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt index d91194e002..35ea96de6f 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/verification/VerificationBottomSheet.kt @@ -17,7 +17,6 @@ package im.vector.app.features.crypto.verification import android.app.Activity import android.app.Dialog -import android.content.Intent import android.os.Bundle import android.os.Parcelable import android.view.KeyEvent diff --git a/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt b/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt index 7dd32a7cd0..145dfc56c3 100644 --- a/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt +++ b/vector/src/main/java/im/vector/app/features/discovery/DiscoverySettingsFragment.kt @@ -36,7 +36,6 @@ import org.matrix.android.sdk.api.session.identity.SharedState import org.matrix.android.sdk.api.session.identity.ThreePid import org.matrix.android.sdk.api.session.terms.TermsService import kotlinx.android.synthetic.main.fragment_generic_recycler.* -import timber.log.Timber import javax.inject.Inject class DiscoverySettingsFragment @Inject constructor( diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 61041aa70f..66e49cf060 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -361,7 +361,7 @@ class RoomDetailFragment @Inject constructor( }.exhaustive } - if(savedInstanceState == null) { + if (savedInstanceState == null) { handleShareData() } } @@ -798,7 +798,6 @@ class RoomDetailFragment @Inject constructor( } } - private fun safeStartCall2(isVideoCall: Boolean) { val startCallAction = RoomDetailAction.StartCall(isVideoCall) roomDetailViewModel.pendingAction = startCallAction diff --git a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt index 05cba654f2..1d01a5e4f0 100644 --- a/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt +++ b/vector/src/main/java/im/vector/app/features/navigation/Navigator.kt @@ -24,7 +24,6 @@ import androidx.activity.result.ActivityResultLauncher import androidx.core.util.Pair import im.vector.app.features.crypto.recover.SetupMode import im.vector.app.features.media.AttachmentData -import im.vector.app.features.pin.PinActivity import im.vector.app.features.pin.PinMode import im.vector.app.features.roomdirectory.roompreview.RoomPreviewData import im.vector.app.features.settings.VectorSettingsActivity diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt index 3f7ddbb9c8..dfae073e7e 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsGeneralFragment.kt @@ -279,7 +279,7 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { session.integrationManagerService().removeListener(integrationServiceListener) } - private val attachmentPhotoActivityResultLauncher = registerStartForActivityResult {activityResult -> + private val attachmentPhotoActivityResultLauncher = registerStartForActivityResult { activityResult -> if (activityResult.resultCode == Activity.RESULT_OK) { avatarCameraUri?.let { uri -> MultiPicker.get(MultiPicker.CAMERA) @@ -291,7 +291,7 @@ class VectorSettingsGeneralFragment : VectorSettingsBaseFragment() { } } - private val attachmentImageActivityResultLauncher = registerStartForActivityResult {activityResult -> + private val attachmentImageActivityResultLauncher = registerStartForActivityResult { activityResult -> val data = activityResult.data ?: return@registerStartForActivityResult if (activityResult.resultCode == Activity.RESULT_OK) { MultiPicker diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt index fdff5253d5..4bee1ac0c8 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationPreferenceFragment.kt @@ -119,7 +119,6 @@ class VectorSettingsNotificationPreferenceFragment @Inject constructor( // Noop } - // BackgroundSyncModeChooserDialog.InteractionListener override fun onOptionSelected(mode: BackgroundSyncMode) { // option has change, need to act diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt index 39120f1157..457fc00273 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsSecurityPrivacyFragment.kt @@ -322,7 +322,7 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( private val saveMegolmStartForActivityResult = registerStartForActivityResult { val uri = it.data?.data ?: return@registerStartForActivityResult - if (it.resultCode == Activity.RESULT_OK) + if (it.resultCode == Activity.RESULT_OK) { ExportKeysDialog().show(requireActivity(), object : ExportKeysDialog.ExportKeyDialogListener { override fun onPassphrase(passphrase: String) { displayLoadingView() @@ -347,6 +347,7 @@ class VectorSettingsSecurityPrivacyFragment @Inject constructor( }) } }) + } } private val pinActivityResultLauncher = registerStartForActivityResult { From efa7c66d98912f9166d6f91b9b8e8d93bb659ce4 Mon Sep 17 00:00:00 2001 From: Constantin Wartenburger Date: Thu, 8 Oct 2020 00:56:36 +0200 Subject: [PATCH 161/278] Skip conversion to radians --- .../room/detail/composer/rainbow/RainbowGenerator.kt | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt index 7a64d437c5..7f9e40f218 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/rainbow/RainbowGenerator.kt @@ -31,7 +31,7 @@ class RainbowGenerator @Inject constructor() { fun generate(text: String): String { val split = text.splitEmoji() - val frequency = 360.0 / split.size + val frequency = 2 * Math.PI / split.size return split .mapIndexed { idx, letter -> @@ -48,21 +48,21 @@ class RainbowGenerator @Inject constructor() { } private fun generateAB(hue: Double, chroma: Float): Pair { - val radians = Math.toRadians(hue) - - val a = chroma * 127 * cos(radians) - val b = chroma * 127 * sin(radians) + val a = chroma * 127 * cos(hue) + val b = chroma * 127 * sin(hue) return Pair(a, b) } private fun labToRGB(l: Int, a: Double, b: Double): RgbColor { + // Convert CIELAB to CIEXYZ (D65) var y = (l + 16) / 116.0 val x = adjustXYZ(y + a / 500) * 0.9505 val z = adjustXYZ(y - b / 200) * 1.0890 y = adjustXYZ(y) + // Linear transformation from CIEXYZ to RGB val red = 3.24096994 * x - 1.53738318 * y - 0.49861076 * z val green = -0.96924364 * x + 1.8759675 * y + 0.04155506 * z val blue = 0.05563008 * x - 0.20397696 * y + 1.05697151 * z @@ -78,6 +78,7 @@ class RainbowGenerator @Inject constructor() { } private fun gammaCorrection(value: Double): Double { + // Non-linear transformation to sRGB if (value <= 0.0031308) { return 12.92 * value } From e846e30905cd4df3c68517ce7e126ffbb47faf76 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 09:22:55 +0200 Subject: [PATCH 162/278] Lint: fixes 80 UseAppTint issues --- .../res/layout/bottom_sheet_bootstrap.xml | 5 ++-- .../layout/bottom_sheet_save_recovery_key.xml | 7 +++-- ...constraint_set_composer_layout_compact.xml | 21 +++++++------ ...onstraint_set_composer_layout_expanded.xml | 20 ++++++++----- .../custom_action_item_layout_badge.xml | 5 ++-- .../res/layout/dialog_change_password.xml | 3 +- .../res/layout/dialog_disclaimer_content.xml | 3 +- .../res/layout/dialog_export_e2e_keys.xml | 6 ++-- .../res/layout/dialog_import_e2e_keys.xml | 5 ++-- .../res/layout/dialog_prompt_password.xml | 5 ++-- .../layout/dialog_recovery_key_saved_info.xml | 4 ++- ...gment_bootstrap_enter_account_password.xml | 5 ++-- .../fragment_bootstrap_enter_passphrase.xml | 5 ++-- .../fragment_bootstrap_migrate_backup.xml | 5 ++-- .../layout/fragment_deactivate_account.xml | 5 ++-- .../main/res/layout/fragment_home_drawer.xml | 5 ++-- .../fragment_keys_backup_restore_from_key.xml | 10 ++++--- ...nt_keys_backup_restore_from_passphrase.xml | 10 ++++--- .../fragment_keys_backup_restore_success.xml | 5 ++-- .../fragment_keys_backup_setup_step1.xml | 5 ++-- .../fragment_keys_backup_setup_step2.xml | 5 ++-- .../fragment_keys_backup_setup_step3.xml | 4 ++- vector/src/main/res/layout/fragment_login.xml | 10 ++++--- .../layout/fragment_login_reset_password.xml | 5 ++-- .../fragment_login_server_selection.xml | 10 ++++--- .../layout/fragment_login_server_url_form.xml | 3 +- ...fragment_login_signup_signin_selection.xml | 5 ++-- .../main/res/layout/fragment_login_splash.xml | 19 +++++++----- .../layout/fragment_ssss_access_from_key.xml | 5 ++-- .../fragment_ssss_access_from_passphrase.xml | 10 ++++--- .../res/layout/item_bottom_sheet_action.xml | 10 ++++--- .../layout/item_bottom_sheet_room_preview.xml | 5 ++-- .../layout/item_create_direct_room_user.xml | 5 ++-- vector/src/main/res/layout/item_group.xml | 5 ++-- .../src/main/res/layout/item_help_footer.xml | 5 ++-- .../src/main/res/layout/item_known_user.xml | 5 ++-- .../res/layout/item_login_password_form.xml | 5 ++-- vector/src/main/res/layout/item_policy.xml | 5 ++-- .../main/res/layout/item_profile_action.xml | 5 ++-- .../res/layout/item_profile_matrix_item.xml | 5 ++-- .../item_profile_matrix_item_progress.xml | 5 ++-- vector/src/main/res/layout/item_room.xml | 10 ++++--- .../res/layout/item_settings_three_pid.xml | 10 ++++--- .../main/res/layout/item_signout_action.xml | 5 +++- .../item_timeline_event_poll_result_item.xml | 4 ++- .../layout/item_timeline_event_poll_stub.xml | 4 ++- vector/src/main/res/layout/item_tos.xml | 5 ++-- .../src/main/res/layout/item_uploads_file.xml | 15 ++++++---- .../res/layout/item_verification_action.xml | 10 ++++--- .../res/layout/item_verification_wait.xml | 11 ++++--- .../main/res/layout/merge_composer_layout.xml | 4 +-- .../layout/merge_image_attachment_overlay.xml | 15 ++++++---- .../main/res/layout/view_call_controls.xml | 30 +++++++++---------- vector/src/main/res/layout/view_file_icon.xml | 6 ++-- .../res/layout/view_keys_backup_banner.xml | 5 ++-- vector/src/main/res/layout/view_state.xml | 5 ++-- 56 files changed, 251 insertions(+), 163 deletions(-) diff --git a/vector/src/main/res/layout/bottom_sheet_bootstrap.xml b/vector/src/main/res/layout/bottom_sheet_bootstrap.xml index 0011bf1987..d3dfe09842 100644 --- a/vector/src/main/res/layout/bottom_sheet_bootstrap.xml +++ b/vector/src/main/res/layout/bottom_sheet_bootstrap.xml @@ -24,9 +24,10 @@ android:importantForAccessibility="no" android:scaleType="fitCenter" android:src="@drawable/ic_security_key_24dp" - android:tint="?riotx_text_primary" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> + tools:ignore="MissingConstraints,MissingPrefix" + tools:src="@drawable/ic_edit" + app:tint="?riotx_text_primary" /> + tools:visibility="visible" + tools:ignore="MissingPrefix" /> + app:layout_constraintStart_toEndOf="@id/composerEditText" + tools:ignore="MissingPrefix" /> + app:layout_constraintStart_toEndOf="@id/attachmentButton" + tools:ignore="MissingPrefix" /> + tools:src="@drawable/ic_edit" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@id/composer_related_message_preview" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toBottomOf="parent" + tools:ignore="MissingPrefix" /> + app:layout_constraintVertical_bias="1" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="@color/riotx_accent" + tools:ignore="MissingPrefix" /> + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/dialog_disclaimer_content.xml b/vector/src/main/res/layout/dialog_disclaimer_content.xml index 541b75e7c7..89fa1395b9 100644 --- a/vector/src/main/res/layout/dialog_disclaimer_content.xml +++ b/vector/src/main/res/layout/dialog_disclaimer_content.xml @@ -26,7 +26,8 @@ android:layout_height="wrap_content" android:layout_margin="32dp" android:src="@drawable/ic_arrow_right" - android:tint="?riotx_text_secondary" /> + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@id/exportDialogTil" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@id/importDialogTil" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> + tools:contentDescription="@string/a11y_show_password" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/dialog_recovery_key_saved_info.xml b/vector/src/main/res/layout/dialog_recovery_key_saved_info.xml index 36c9a68077..b131d45495 100644 --- a/vector/src/main/res/layout/dialog_recovery_key_saved_info.xml +++ b/vector/src/main/res/layout/dialog_recovery_key_saved_info.xml @@ -1,5 +1,6 @@ + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/bootstrapAccountPasswordTil" + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/ssss_passphrase_enter_til" + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/bootstrapRecoveryKeyEnterTil" + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> + tools:contentDescription="@string/a11y_show_password" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/fragment_home_drawer.xml b/vector/src/main/res/layout/fragment_home_drawer.xml index 12562bc98a..d34ea0b815 100644 --- a/vector/src/main/res/layout/fragment_home_drawer.xml +++ b/vector/src/main/res/layout/fragment_home_drawer.xml @@ -24,9 +24,10 @@ android:layout_height="@dimen/layout_touch_size" android:scaleType="center" android:src="@drawable/ic_settings_x" - android:tint="@color/riotx_accent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="@color/riotx_accent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@id/keys_backup_key_enter_til" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/keys_backup_passphrase_enter_til" + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintVertical_chainStyle="spread" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@id/keys_backup_passphrase_enter_til" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + tools:src="@drawable/ic_logo_matrix_org" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + tools:contentDescription="@string/a11y_show_password" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/fragment_login_reset_password.xml b/vector/src/main/res/layout/fragment_login_reset_password.xml index 341435bdc4..5da5298b3d 100644 --- a/vector/src/main/res/layout/fragment_login_reset_password.xml +++ b/vector/src/main/res/layout/fragment_login_reset_password.xml @@ -84,8 +84,9 @@ android:background="?attr/selectableItemBackground" android:scaleType="center" android:src="@drawable/ic_eye" - android:tint="?attr/colorAccent" - tools:contentDescription="@string/a11y_show_password" /> + tools:contentDescription="@string/a11y_show_password" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/fragment_login_server_selection.xml b/vector/src/main/res/layout/fragment_login_server_selection.xml index 00fcfa9183..b2046b73ee 100644 --- a/vector/src/main/res/layout/fragment_login_server_selection.xml +++ b/vector/src/main/res/layout/fragment_login_server_selection.xml @@ -62,11 +62,12 @@ android:layout_height="wrap_content" android:importantForAccessibility="no" android:src="@drawable/ic_logo_matrix_org" - android:tint="?riotx_text_primary" app:layout_constraintBottom_toTopOf="@+id/loginServerChoiceMatrixOrgText" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:layout_constraintVertical_chainStyle="packed" /> + app:layout_constraintVertical_chainStyle="packed" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintVertical_chainStyle="packed" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + tools:visibility="visible" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix,UnknownId" /> + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> @@ -93,9 +95,10 @@ android:layout_marginStart="2dp" android:importantForAccessibility="no" android:src="@drawable/ic_login_splash_message_circle" - android:tint="?riotx_text_secondary" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@+id/loginSplashText1" /> + app:layout_constraintTop_toTopOf="@+id/loginSplashText1" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/loginSplashText2" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/loginSplashText3" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/ssss_restore_with_key" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/ssss_restore_with_passphrase" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="@+id/ssss_passphrase_enter_til" + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_bottom_sheet_action.xml b/vector/src/main/res/layout/item_bottom_sheet_action.xml index 2d10d513ab..8b5716cd8e 100644 --- a/vector/src/main/res/layout/item_bottom_sheet_action.xml +++ b/vector/src/main/res/layout/item_bottom_sheet_action.xml @@ -30,11 +30,12 @@ android:layout_centerVertical="true" android:layout_toEndOf="@id/actionStartSpace" android:scaleType="center" - android:tint="?riotx_text_secondary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toEndOf="@+id/actionStartSpace" app:layout_constraintTop_toTopOf="parent" - tools:src="@drawable/ic_room_actions_notifications_all" /> + tools:src="@drawable/ic_room_actions_notifications_all" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> + tools:visibility="visible" + app:tint="@color/riotx_accent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_bottom_sheet_room_preview.xml b/vector/src/main/res/layout/item_bottom_sheet_room_preview.xml index bed1d5eb2f..74781468b2 100644 --- a/vector/src/main/res/layout/item_bottom_sheet_room_preview.xml +++ b/vector/src/main/res/layout/item_bottom_sheet_room_preview.xml @@ -64,9 +64,10 @@ android:contentDescription="@string/room_list_quick_actions_settings" android:scaleType="centerInside" android:src="@drawable/ic_room_actions_settings" - android:tint="?riotx_text_secondary" app:layout_constraintBottom_toBottomOf="@+id/bottomSheetRoomPreviewAvatar" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="@id/bottomSheetRoomPreviewAvatar" /> + app:layout_constraintTop_toTopOf="@id/bottomSheetRoomPreviewAvatar" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_create_direct_room_user.xml b/vector/src/main/res/layout/item_create_direct_room_user.xml index fa7e742584..108c02cd02 100644 --- a/vector/src/main/res/layout/item_create_direct_room_user.xml +++ b/vector/src/main/res/layout/item_create_direct_room_user.xml @@ -32,8 +32,9 @@ android:layout_height="40dp" android:scaleType="centerInside" android:src="@drawable/ic_material_done" - android:tint="@android:color/white" - android:visibility="visible" /> + android:visibility="visible" + app:tint="@android:color/white" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?attr/riotx_text_secondary" + tools:ignore="MissingPrefix" /> + android:visibility="visible" + app:tint="@android:color/white" + tools:ignore="MissingPrefix" /> + tools:contentDescription="@string/a11y_show_password" + app:tint="?attr/colorAccent" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_policy.xml b/vector/src/main/res/layout/item_policy.xml index b5a14b27db..fbf5e39987 100644 --- a/vector/src/main/res/layout/item_policy.xml +++ b/vector/src/main/res/layout/item_policy.xml @@ -54,9 +54,10 @@ android:paddingEnd="0dp" android:rotationY="@integer/rtl_mirror_flip" android:src="@drawable/ic_material_chevron_right_black" - android:tint="?riotx_android_secondary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_android_secondary" + tools:ignore="MissingPrefix" /> \ No newline at end of file diff --git a/vector/src/main/res/layout/item_profile_action.xml b/vector/src/main/res/layout/item_profile_action.xml index 6d3ba36d06..c928a5f59b 100644 --- a/vector/src/main/res/layout/item_profile_action.xml +++ b/vector/src/main/res/layout/item_profile_action.xml @@ -84,11 +84,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_arrow_right" - android:tint="?riotx_text_secondary" android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" - tools:visibility="visible" /> + tools:visibility="visible" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_profile_matrix_item.xml b/vector/src/main/res/layout/item_profile_matrix_item.xml index 1c84a65691..f35141576c 100644 --- a/vector/src/main/res/layout/item_profile_matrix_item.xml +++ b/vector/src/main/res/layout/item_profile_matrix_item.xml @@ -80,10 +80,11 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_arrow_right" - android:tint="?riotx_text_secondary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_profile_matrix_item_progress.xml b/vector/src/main/res/layout/item_profile_matrix_item_progress.xml index 66cff4840e..69e4b40bb4 100644 --- a/vector/src/main/res/layout/item_profile_matrix_item_progress.xml +++ b/vector/src/main/res/layout/item_profile_matrix_item_progress.xml @@ -92,11 +92,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_arrow_right" - android:tint="?riotx_text_secondary" android:visibility="visible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" - tools:visibility="visible" /> + tools:visibility="visible" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_room.xml b/vector/src/main/res/layout/item_room.xml index 814ef645d7..cdbcaf5757 100644 --- a/vector/src/main/res/layout/item_room.xml +++ b/vector/src/main/res/layout/item_room.xml @@ -42,8 +42,9 @@ android:layout_height="56dp" android:scaleType="centerInside" android:src="@drawable/ic_material_done" - android:tint="@android:color/white" - android:visibility="visible" /> + android:visibility="visible" + app:tint="@android:color/white" + tools:ignore="MissingPrefix" /> @@ -105,12 +106,13 @@ android:layout_marginEnd="4dp" android:src="@drawable/ic_edit" android:visibility="gone" - android:tint="?riotx_text_primary" app:layout_constraintBottom_toBottomOf="@+id/roomNameView" app:layout_constraintEnd_toStartOf="@+id/roomUnreadCounterBadgeView" app:layout_constraintStart_toEndOf="@+id/roomNameView" app:layout_constraintTop_toTopOf="@+id/roomNameView" - tools:visibility="visible" /> + tools:visibility="visible" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + tools:src="@drawable/ic_phone" + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="@color/riotx_destructive_accent" + tools:ignore="MissingPrefix" /> \ No newline at end of file diff --git a/vector/src/main/res/layout/item_signout_action.xml b/vector/src/main/res/layout/item_signout_action.xml index 16d10a3ff0..10292beb55 100644 --- a/vector/src/main/res/layout/item_signout_action.xml +++ b/vector/src/main/res/layout/item_signout_action.xml @@ -1,5 +1,7 @@ + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:tint="?riotx_text_secondary" + tools:ignore="MissingPrefix" /> + app:tint="@color/riotx_accent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> \ No newline at end of file diff --git a/vector/src/main/res/layout/item_uploads_file.xml b/vector/src/main/res/layout/item_uploads_file.xml index 58edcc78a4..5c40327d95 100644 --- a/vector/src/main/res/layout/item_uploads_file.xml +++ b/vector/src/main/res/layout/item_uploads_file.xml @@ -13,10 +13,11 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/layout_horizontal_margin" android:src="@drawable/ic_file" - android:tint="?riotx_text_primary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?colorAccent" + tools:ignore="MissingPrefix" /> \ No newline at end of file diff --git a/vector/src/main/res/layout/item_verification_action.xml b/vector/src/main/res/layout/item_verification_action.xml index 263a8ff107..ae49893792 100644 --- a/vector/src/main/res/layout/item_verification_action.xml +++ b/vector/src/main/res/layout/item_verification_action.xml @@ -20,13 +20,14 @@ android:layout_width="48dp" android:layout_height="48dp" android:scaleType="center" - android:tint="?riotx_text_primary" android:visibility="gone" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:src="@drawable/ic_share" - tools:visibility="visible" /> + tools:visibility="visible" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + tools:src="@drawable/ic_arrow_right" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> diff --git a/vector/src/main/res/layout/item_verification_wait.xml b/vector/src/main/res/layout/item_verification_wait.xml index 6cfc497b16..675af87cbf 100644 --- a/vector/src/main/res/layout/item_verification_wait.xml +++ b/vector/src/main/res/layout/item_verification_wait.xml @@ -1,6 +1,7 @@ + app:layout_constraintTop_toBottomOf="@+id/use_latest_riot" + app:tint="?vctr_notice_secondary" + tools:ignore="MissingPrefix" /> + app:layout_constraintTop_toBottomOf="@+id/use_latest_riot" + app:tint="?vctr_notice_secondary" + tools:ignore="MissingPrefix" /> + tools:ignore="MissingConstraints,MissingPrefix" + app:tint="?riotx_text_primary" /> + app:srcCompat="@drawable/ic_back_24dp" + app:tint="@color/white" + tools:ignore="MissingPrefix" /> + app:srcCompat="@drawable/ic_share" + app:tint="@color/white" + tools:ignore="MissingPrefix" /> + app:srcCompat="@drawable/ic_play_arrow" + app:tint="@color/white" + tools:ignore="MissingPrefix" /> + tools:ignore="MissingConstraints,MissingPrefix" + app:tint="@color/white" /> + tools:ignore="MissingConstraints,MissingPrefix" + app:tint="@color/white" /> + tools:ignore="MissingConstraints,MissingPrefix" + app:tint="?attr/riotx_text_primary" /> + tools:ignore="MissingConstraints,MissingPrefix" + tools:src="@drawable/ic_microphone_on" + app:tint="?attr/riotx_text_primary" /> + tools:ignore="MissingConstraints,MissingPrefix" + app:tint="@color/white" /> + tools:ignore="MissingConstraints,MissingPrefix" + app:tint="?attr/riotx_text_primary" /> + tools:ignore="MissingConstraints,MissingPrefix" + app:tint="?attr/riotx_text_primary" /> + tools:src="@drawable/ic_paperclip" + app:tint="?vctr_notice_secondary" + tools:ignore="MissingPrefix" /> \ No newline at end of file diff --git a/vector/src/main/res/layout/view_keys_backup_banner.xml b/vector/src/main/res/layout/view_keys_backup_banner.xml index 7e54823fae..7cd3f3d954 100644 --- a/vector/src/main/res/layout/view_keys_backup_banner.xml +++ b/vector/src/main/res/layout/view_keys_backup_banner.xml @@ -14,10 +14,11 @@ android:layout_height="32dp" android:layout_marginStart="19dp" android:src="@drawable/ic_secure_backup" - android:tint="?riotx_text_primary" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> + tools:src="@drawable/ic_noun_party_popper" + app:tint="?riotx_text_primary" + tools:ignore="MissingPrefix" /> Date: Thu, 8 Oct 2020 09:30:25 +0200 Subject: [PATCH 163/278] Lint: fixes UseCompatTextViewDrawableXml issues --- vector/lint.xml | 1 + vector/src/main/res/layout/dialog_no_sticker_pack.xml | 5 +++-- .../res/layout/fragment_bootstrap_enter_passphrase.xml | 6 +++--- .../res/layout/fragment_bootstrap_setup_recovery.xml | 4 ++-- vector/src/main/res/layout/fragment_ssss_reset_all.xml | 10 +++++----- .../res/layout/item_bottom_sheet_message_status.xml | 5 +++-- vector/src/main/res/layout/item_public_room.xml | 6 +++--- vector/src/main/res/layout/item_room_category.xml | 5 +++-- vector/src/main/res/layout/item_room_invitation.xml | 4 ++-- .../src/main/res/layout/item_timeline_event_create.xml | 5 +++-- .../res/layout/item_timeline_event_merged_utd_stub.xml | 4 ++-- .../res/layout/item_timeline_event_redacted_stub.xml | 4 ++-- .../layout/item_timeline_event_verification_stub.xml | 5 +++-- vector/src/main/res/layout/view_active_call_view.xml | 4 ++-- .../main/res/layout/view_active_conference_view.xml | 4 ++-- .../src/main/res/layout/view_jump_to_read_marker.xml | 5 +++-- 16 files changed, 42 insertions(+), 35 deletions(-) diff --git a/vector/lint.xml b/vector/lint.xml index bd49091a3f..4ac0f20e51 100644 --- a/vector/lint.xml +++ b/vector/lint.xml @@ -27,6 +27,7 @@ + diff --git a/vector/src/main/res/layout/dialog_no_sticker_pack.xml b/vector/src/main/res/layout/dialog_no_sticker_pack.xml index 427916cd89..1cf225a30f 100644 --- a/vector/src/main/res/layout/dialog_no_sticker_pack.xml +++ b/vector/src/main/res/layout/dialog_no_sticker_pack.xml @@ -1,10 +1,11 @@ + android:text="@string/no_sticker_application_dialog_content" + app:drawableBottomCompat="@drawable/stickerpack_rabbit" /> diff --git a/vector/src/main/res/layout/fragment_bootstrap_enter_passphrase.xml b/vector/src/main/res/layout/fragment_bootstrap_enter_passphrase.xml index 41b6c9b48c..5984ba8b86 100644 --- a/vector/src/main/res/layout/fragment_bootstrap_enter_passphrase.xml +++ b/vector/src/main/res/layout/fragment_bootstrap_enter_passphrase.xml @@ -54,12 +54,12 @@ android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" - android:drawableStart="@drawable/ic_alert_triangle" android:drawablePadding="4dp" - android:drawableTint="@color/riotx_destructive_accent" android:gravity="center_vertical" android:text="@string/bootstrap_dont_reuse_pwd" - android:textSize="12sp" /> + android:textSize="12sp" + app:drawableStartCompat="@drawable/ic_alert_triangle" + app:drawableTint="@color/riotx_destructive_accent" /> diff --git a/vector/src/main/res/layout/fragment_bootstrap_setup_recovery.xml b/vector/src/main/res/layout/fragment_bootstrap_setup_recovery.xml index 14a4b45ded..5c4590dc40 100644 --- a/vector/src/main/res/layout/fragment_bootstrap_setup_recovery.xml +++ b/vector/src/main/res/layout/fragment_bootstrap_setup_recovery.xml @@ -83,8 +83,8 @@ android:layout_marginEnd="16dp" android:text="@string/reset_secure_backup_warning" android:textColor="@color/riotx_destructive_accent" - android:drawableStart="@drawable/ic_warning_badge" android:drawablePadding="4dp" - android:textSize="14sp" /> + android:textSize="14sp" + app:drawableStartCompat="@drawable/ic_warning_badge" /> diff --git a/vector/src/main/res/layout/fragment_ssss_reset_all.xml b/vector/src/main/res/layout/fragment_ssss_reset_all.xml index a3b2984bce..d64750eef3 100644 --- a/vector/src/main/res/layout/fragment_ssss_reset_all.xml +++ b/vector/src/main/res/layout/fragment_ssss_reset_all.xml @@ -16,16 +16,16 @@ android:layout_height="wrap_content" android:layout_marginStart="16dp" android:layout_marginTop="16dp" - android:drawableStart="@drawable/ic_alert_triangle" android:drawablePadding="8dp" - android:drawableTint="?riot_primary_text_color" android:text="@string/secure_backup_reset_all" android:textColor="?riotx_text_primary" android:textSize="20sp" android:textStyle="bold" android:tint="?riot_primary_text_color" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:drawableTint="?riot_primary_text_color" + app:drawableStartCompat="@drawable/ic_alert_triangle" /> + tools:visibility="visible" + app:drawableStartCompat="@drawable/ic_smartphone" /> + tools:text="@string/unable_to_send_message" + app:drawableStartCompat="@drawable/ic_warning_badge" /> diff --git a/vector/src/main/res/layout/item_public_room.xml b/vector/src/main/res/layout/item_public_room.xml index ae8287fdc4..bb9d379f31 100644 --- a/vector/src/main/res/layout/item_public_room.xml +++ b/vector/src/main/res/layout/item_public_room.xml @@ -65,9 +65,7 @@ android:layout_height="wrap_content" android:layout_marginTop="2dp" android:layout_marginEnd="8dp" - android:drawableStart="@drawable/ic_user" android:drawablePadding="8dp" - android:drawableTint="?riotx_text_secondary" android:gravity="center_vertical" android:minWidth="56dp" android:textColor="?riotx_text_secondary" @@ -75,7 +73,9 @@ app:layout_constraintBottom_toTopOf="@+id/itemPublicRoomBottomSeparator" app:layout_constraintStart_toStartOf="@+id/itemPublicRoomName" app:layout_constraintTop_toBottomOf="@+id/itemPublicRoomTopic" - tools:text="148" /> + tools:text="148" + app:drawableTint="?riotx_text_secondary" + app:drawableStartCompat="@drawable/ic_user" /> + tools:text="@string/room_participants_header_direct_chats" + app:drawableTint="?riotx_text_secondary" /> + tools:text="@sample/matrix.json/data/displayName" + app:drawableEndCompat="@drawable/ic_arrow_right" /> @@ -12,11 +13,11 @@ android:layout_marginTop="16dp" android:layout_marginBottom="16dp" android:background="?attr/riotx_keys_backup_banner_accent_color" - android:drawableStart="@drawable/error" android:drawablePadding="16dp" android:gravity="center|start" android:minHeight="80dp" android:padding="16dp" - tools:text="This room is continuationâ€Ļ" /> + tools:text="This room is continuationâ€Ļ" + app:drawableStartCompat="@drawable/error" /> \ No newline at end of file diff --git a/vector/src/main/res/layout/item_timeline_event_merged_utd_stub.xml b/vector/src/main/res/layout/item_timeline_event_merged_utd_stub.xml index 3f0c269e90..538a8930c4 100644 --- a/vector/src/main/res/layout/item_timeline_event_merged_utd_stub.xml +++ b/vector/src/main/res/layout/item_timeline_event_merged_utd_stub.xml @@ -25,13 +25,13 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginStart="8dp" - android:drawableStart="@drawable/ic_clock" android:drawablePadding="2dp" android:gravity="start" android:text="@string/notice_crypto_unable_to_decrypt_merged" android:textColor="?riotx_text_secondary" android:textSize="15sp" - app:drawableTint="?riotx_text_secondary" /> + app:drawableTint="?riotx_text_secondary" + app:drawableStartCompat="@drawable/ic_clock" /> \ No newline at end of file + app:drawableTint="?riotx_text_primary_body_contrast" + app:drawableStartCompat="@drawable/ic_trash_16" /> \ No newline at end of file diff --git a/vector/src/main/res/layout/item_timeline_event_verification_stub.xml b/vector/src/main/res/layout/item_timeline_event_verification_stub.xml index 41a5c37042..cdfbd0add2 100644 --- a/vector/src/main/res/layout/item_timeline_event_verification_stub.xml +++ b/vector/src/main/res/layout/item_timeline_event_verification_stub.xml @@ -1,5 +1,6 @@ + tools:text="@string/verification_request" + app:drawableStartCompat="@drawable/ic_shield_black" /> + app:drawableTint="@color/white" + app:drawableStartCompat="@drawable/ic_call" /> + tools:text="@string/ongoing_conference_call" + app:drawableStartCompat="@drawable/ic_call" /> + android:textColor="@color/white" + app:drawableStartCompat="@drawable/arrow_up_circle" /> Date: Wed, 7 Oct 2020 09:12:38 +0000 Subject: [PATCH 164/278] 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 6872a488ded562adcdee97c11c3cabbf048f01dd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 13:04:55 +0200 Subject: [PATCH 165/278] Fix the latest lint issue (will modify the pipeline to let the test compilation pass --- build.gradle | 3 ++- vector/src/main/AndroidManifest.xml | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index bd2f18d41b..e68d545c91 100644 --- a/build.gradle +++ b/build.gradle @@ -64,7 +64,8 @@ allprojects { tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { // Warnings are potential errors, so stop ignoring them - kotlinOptions.allWarningsAsErrors = true + // You can override by passing `-PallWarningsAsErrors=false` in the command line + kotlinOptions.allWarningsAsErrors = project.properties['allWarningsAsErrors']?.toBoolean() ?: true } } diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 3f7ff8c808..3f178a3d20 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -232,9 +232,11 @@ + + android:exported="false" + tools:ignore="Instantiatable" /> Date: Mon, 5 Oct 2020 18:42:34 +0200 Subject: [PATCH 166/278] Implement "Jump to read receipt" and "Mention" actions on the room member profile screen --- CHANGES.md | 1 + .../sdk/api/session/room/read/ReadService.kt | 8 ++++++ .../session/room/read/DefaultReadService.kt | 10 ++++++++ .../im/vector/app/core/di/VectorComponent.kt | 3 +++ .../vector/app/core/utils/TemporaryStore.kt | 17 +++++++------ .../home/room/detail/RoomDetailAction.kt | 2 ++ .../home/room/detail/RoomDetailFragment.kt | 14 ++++++++++- .../room/detail/RoomDetailPendingAction.kt | 22 ++++++++++++++++ .../detail/RoomDetailPendingActionStore.kt | 25 +++++++++++++++++++ .../home/room/detail/RoomDetailViewModel.kt | 6 +++++ .../RoomMemberProfileFragment.kt | 11 +++++--- .../members/RoomMemberListFragment.kt | 11 +++++++- 12 files changed, 118 insertions(+), 12 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt create mode 100644 vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingActionStore.kt diff --git a/CHANGES.md b/CHANGES.md index ec853d96ef..05d189ed12 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,7 @@ Improvements 🙌: - Add a menu item in the timeline as a shortcut to invite user (#2171) - 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 Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt index 3aa9d60e6a..8f76295fe7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt @@ -63,6 +63,14 @@ interface ReadService { */ fun getMyReadReceiptLive(): LiveData> + /** + * Get the eventId where the read receipt for the provided user is + * @param otherUserId the userId param to look for + * + * @return the eventId where the read receipt for the provided user is attached, or null if not found + */ + fun getUserReadReceipt(otherUserId: String): String? + /** * Returns a live list of read receipts for a given event * @param eventId: the event diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt index a5520972b0..162ad7d895 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt @@ -107,6 +107,16 @@ internal class DefaultReadService @AssistedInject constructor( } } + override fun getUserReadReceipt(otherUserId: String): String? { + var eventId: String? = null + monarchy.doWithRealm { + eventId = ReadReceiptEntity.where(it, roomId = roomId, userId = otherUserId) + .findFirst() + ?.eventId + } + return eventId + } + override fun getEventReadReceiptsLive(eventId: String): LiveData> { val liveRealmData = monarchy.findAllMappedWithChanges( { ReadReceiptsSummaryEntity.where(it, eventId) }, diff --git a/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt b/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt index 4ba3d6ba13..28f3a52efa 100644 --- a/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt +++ b/vector/src/main/java/im/vector/app/core/di/VectorComponent.kt @@ -36,6 +36,7 @@ import im.vector.app.features.crypto.verification.IncomingVerificationRequestHan import im.vector.app.features.grouplist.SelectedGroupDataSource import im.vector.app.features.home.AvatarRenderer import im.vector.app.features.home.HomeRoomListDataSource +import im.vector.app.features.home.room.detail.RoomDetailPendingActionStore import im.vector.app.features.home.room.detail.timeline.helper.MatrixItemColorProvider import im.vector.app.features.html.EventHtmlRenderer import im.vector.app.features.html.VectorHtmlCompressor @@ -114,6 +115,8 @@ interface VectorComponent { fun selectedGroupStore(): SelectedGroupDataSource + fun roomDetailPendingActionStore(): RoomDetailPendingActionStore + fun activeSessionObservableStore(): ActiveSessionDataSource fun incomingVerificationRequestHandler(): IncomingVerificationRequestHandler diff --git a/vector/src/main/java/im/vector/app/core/utils/TemporaryStore.kt b/vector/src/main/java/im/vector/app/core/utils/TemporaryStore.kt index 32b995c004..63f80341eb 100644 --- a/vector/src/main/java/im/vector/app/core/utils/TemporaryStore.kt +++ b/vector/src/main/java/im/vector/app/core/utils/TemporaryStore.kt @@ -23,6 +23,7 @@ const val THREE_MINUTES = 3 * 60_000L /** * Store an object T for a specific period of time + * @param delay delay to keep the data, in millis */ open class TemporaryStore(private val delay: Long = THREE_MINUTES) { @@ -30,14 +31,16 @@ open class TemporaryStore(private val delay: Long = THREE_MINUTES) { var data: T? = null set(value) { - field = value timer?.cancel() - timer = Timer().also { - it.schedule(object : TimerTask() { - override fun run() { - field = null - } - }, delay) + field = value + if (value != null) { + timer = Timer().also { + it.schedule(object : TimerTask() { + override fun run() { + field = null + } + }, delay) + } } } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt index 5f851b8da7..03809d3c75 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailAction.kt @@ -88,4 +88,6 @@ sealed class RoomDetailAction : VectorViewModelAction { data class EnsureNativeWidgetAllowed(val widget: Widget, val userJustAccepted: Boolean, val grantedEvents: RoomDetailViewEvents) : RoomDetailAction() + + data class JumpToReadReceipt(val userId: String) : RoomDetailAction() } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 66e49cf060..eadea299e6 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -216,7 +216,8 @@ class RoomDetailFragment @Inject constructor( private val notificationUtils: NotificationUtils, private val webRtcPeerConnectionManager: WebRtcPeerConnectionManager, private val matrixItemColorProvider: MatrixItemColorProvider, - private val imageContentRenderer: ImageContentRenderer + private val imageContentRenderer: ImageContentRenderer, + private val roomDetailPendingActionStore: RoomDetailPendingActionStore ) : VectorBaseFragment(), TimelineEventController.Callback, @@ -878,6 +879,17 @@ class RoomDetailFragment @Inject constructor( override fun onResume() { super.onResume() notificationDrawerManager.setCurrentRoom(roomDetailArgs.roomId) + roomDetailPendingActionStore.data?.let { handlePendingAction(it) } + roomDetailPendingActionStore.data = null + } + + private fun handlePendingAction(roomDetailPendingAction: RoomDetailPendingAction) { + when (roomDetailPendingAction) { + is RoomDetailPendingAction.JumpToReadReceipt -> + roomDetailViewModel.handle(RoomDetailAction.JumpToReadReceipt(roomDetailPendingAction.userId)) + is RoomDetailPendingAction.MentionUser -> + insertUserDisplayNameInTextEditor(roomDetailPendingAction.userId) + }.exhaustive } override fun onPause() { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt new file mode 100644 index 0000000000..394d46ef8d --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingAction.kt @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 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.home.room.detail + +sealed class RoomDetailPendingAction { + data class JumpToReadReceipt(val userId: String) : RoomDetailPendingAction() + data class MentionUser(val userId: String) : RoomDetailPendingAction() +} diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingActionStore.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingActionStore.kt new file mode 100644 index 0000000000..9ffbb83a47 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailPendingActionStore.kt @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 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.home.room.detail + +import im.vector.app.core.utils.TemporaryStore +import javax.inject.Inject +import javax.inject.Singleton + +// Store to keep a pending action from sub screen of a room detail +@Singleton +class RoomDetailPendingActionStore @Inject constructor() : TemporaryStore(10_000) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt index ebc265d935..009f8ec802 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailViewModel.kt @@ -274,9 +274,15 @@ class RoomDetailViewModel @AssistedInject constructor( is RoomDetailAction.RemoveWidget -> handleDeleteWidget(action.widgetId) is RoomDetailAction.EnsureNativeWidgetAllowed -> handleCheckWidgetAllowed(action) is RoomDetailAction.CancelSend -> handleCancel(action) + is RoomDetailAction.JumpToReadReceipt -> handleJumpToReadReceipt(action) }.exhaustive } + private fun handleJumpToReadReceipt(action: RoomDetailAction.JumpToReadReceipt) { + room.getUserReadReceipt(action.userId) + ?.let { handleNavigateToEvent(RoomDetailAction.NavigateToEvent(it, true)) } + } + private fun handleSendSticker(action: RoomDetailAction.SendSticker) { room.sendEvent(EventType.STICKER, action.stickerContent.toContent()) } diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt index 169cba09eb..2f5b2d5387 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileFragment.kt @@ -43,6 +43,8 @@ import im.vector.app.core.platform.VectorBaseFragment import im.vector.app.core.utils.startSharePlainTextIntent import im.vector.app.features.crypto.verification.VerificationBottomSheet import im.vector.app.features.home.AvatarRenderer +import im.vector.app.features.home.room.detail.RoomDetailPendingAction +import im.vector.app.features.home.room.detail.RoomDetailPendingActionStore import im.vector.app.features.roommemberprofile.devices.DeviceListBottomSheet import im.vector.app.features.roommemberprofile.powerlevel.EditPowerLevelDialogs import kotlinx.android.parcel.Parcelize @@ -61,7 +63,8 @@ data class RoomMemberProfileArgs( class RoomMemberProfileFragment @Inject constructor( val viewModelFactory: RoomMemberProfileViewModel.Factory, private val roomMemberProfileController: RoomMemberProfileController, - private val avatarRenderer: AvatarRenderer + private val avatarRenderer: AvatarRenderer, + private val roomDetailPendingActionStore: RoomDetailPendingActionStore ) : VectorBaseFragment(), RoomMemberProfileController.Callback { private val fragmentArgs: RoomMemberProfileArgs by args() @@ -276,11 +279,13 @@ class RoomMemberProfileFragment @Inject constructor( } override fun onJumpToReadReceiptClicked() { - vectorBaseActivity.notImplemented("Jump to read receipts") + roomDetailPendingActionStore.data = RoomDetailPendingAction.JumpToReadReceipt(fragmentArgs.userId) + vectorBaseActivity.finish() } override fun onMentionClicked() { - vectorBaseActivity.notImplemented("Mention") + roomDetailPendingActionStore.data = RoomDetailPendingAction.MentionUser(fragmentArgs.userId) + vectorBaseActivity.finish() } private fun handleShareRoomMemberProfile(permalink: String) { 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..d6d56b8cb9 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 @@ -36,6 +36,7 @@ import im.vector.app.core.extensions.cleanup 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.home.room.detail.RoomDetailPendingActionStore import im.vector.app.features.roomprofile.RoomProfileArgs import kotlinx.android.synthetic.main.fragment_room_setting_generic.* import javax.inject.Inject @@ -43,7 +44,8 @@ import javax.inject.Inject class RoomMemberListFragment @Inject constructor( val viewModelFactory: RoomMemberListViewModel.Factory, private val roomMemberListController: RoomMemberListController, - private val avatarRenderer: AvatarRenderer + private val avatarRenderer: AvatarRenderer, + private val roomDetailPendingActionStore: RoomDetailPendingActionStore ) : VectorBaseFragment(), RoomMemberListController.Callback { private val viewModel: RoomMemberListViewModel by fragmentViewModel() @@ -96,6 +98,13 @@ class RoomMemberListFragment @Inject constructor( }) } + override fun onResume() { + super.onResume() + if (roomDetailPendingActionStore.data != null) { + vectorBaseActivity.finish() + } + } + override fun onDestroyView() { recyclerView.cleanup() super.onDestroyView() From 6325ee9310915e54df71ae6b2b9893319294b235 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 5 Oct 2020 18:53:32 +0200 Subject: [PATCH 167/278] "Jump to read receipt" available only for joined members --- .../RoomMemberProfileController.kt | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt index ca9ecb62ef..776138a686 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt @@ -172,13 +172,16 @@ class RoomMemberProfileController @Inject constructor( val membership = state.asyncMembership() ?: return buildProfileSection(stringProvider.getString(R.string.room_profile_section_more)) - buildProfileAction( - id = "read_receipt", - editable = false, - title = stringProvider.getString(R.string.room_member_jump_to_read_receipt), - dividerColor = dividerColor, - action = { callback?.onJumpToReadReceiptClicked() } - ) + + if (membership == Membership.JOIN) { + buildProfileAction( + id = "read_receipt", + editable = false, + title = stringProvider.getString(R.string.room_member_jump_to_read_receipt), + dividerColor = dividerColor, + action = { callback?.onJumpToReadReceiptClicked() } + ) + } val ignoreActionTitle = state.buildIgnoreActionTitle() From e33bc7146bd4568329eb4552f83ffef6f0cdb42f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 6 Oct 2020 10:05:20 +0200 Subject: [PATCH 168/278] Correction: "Jump to read receipt" available only for members with read receipt info (invited member can have read receipt info from a previous membership) Not live for the moment, I think it is acceptable. Also the Activity will finish itself instead of the Fragment --- .../roommemberprofile/RoomMemberProfileController.kt | 2 +- .../roommemberprofile/RoomMemberProfileViewModel.kt | 3 ++- .../roommemberprofile/RoomMemberProfileViewState.kt | 1 + .../app/features/roomprofile/RoomProfileActivity.kt | 11 +++++++++++ .../roomprofile/members/RoomMemberListFragment.kt | 11 +---------- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt index 776138a686..a3ffd80ade 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileController.kt @@ -173,7 +173,7 @@ class RoomMemberProfileController @Inject constructor( buildProfileSection(stringProvider.getString(R.string.room_profile_section_more)) - if (membership == Membership.JOIN) { + if (state.hasReadReceipt) { buildProfileAction( id = "read_receipt", editable = false, diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt index f2c85c96c7..78562ea351 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewModel.kt @@ -85,7 +85,8 @@ class RoomMemberProfileViewModel @AssistedInject constructor(@Assisted private v setState { copy( isMine = session.myUserId == this.userId, - userMatrixItem = room?.getRoomMember(initialState.userId)?.toMatrixItem()?.let { Success(it) } ?: Uninitialized + userMatrixItem = room?.getRoomMember(initialState.userId)?.toMatrixItem()?.let { Success(it) } ?: Uninitialized, + hasReadReceipt = room?.getUserReadReceipt(initialState.userId) != null ) } observeIgnoredState() diff --git a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewState.kt b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewState.kt index dec003b37d..f943a5cf08 100644 --- a/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewState.kt +++ b/vector/src/main/java/im/vector/app/features/roommemberprofile/RoomMemberProfileViewState.kt @@ -39,6 +39,7 @@ data class RoomMemberProfileViewState( val allDevicesAreTrusted: Boolean = false, val allDevicesAreCrossSignedTrusted: Boolean = false, val asyncMembership: Async = Uninitialized, + val hasReadReceipt: Boolean = false, val actionPermissions: ActionPermissions = ActionPermissions() ) : MvRxState { diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt index 6bcb9f9c7f..734620e378 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileActivity.kt @@ -29,6 +29,7 @@ import im.vector.app.core.extensions.addFragment import im.vector.app.core.extensions.addFragmentToBackstack import im.vector.app.core.platform.ToolbarConfigurable import im.vector.app.core.platform.VectorBaseActivity +import im.vector.app.features.home.room.detail.RoomDetailPendingActionStore import im.vector.app.features.room.RequireActiveMembershipViewEvents import im.vector.app.features.room.RequireActiveMembershipViewModel import im.vector.app.features.room.RequireActiveMembershipViewState @@ -61,6 +62,9 @@ class RoomProfileActivity : @Inject lateinit var requireActiveMembershipViewModelFactory: RequireActiveMembershipViewModel.Factory + @Inject + lateinit var roomDetailPendingActionStore: RoomDetailPendingActionStore + override fun create(initialState: RequireActiveMembershipViewState): RequireActiveMembershipViewModel { return requireActiveMembershipViewModelFactory.create(initialState) } @@ -97,6 +101,13 @@ class RoomProfileActivity : } } + override fun onResume() { + super.onResume() + if (roomDetailPendingActionStore.data != null) { + finish() + } + } + private fun handleRoomLeft(roomLeft: RequireActiveMembershipViewEvents.RoomLeft) { if (roomLeft.leftMessage != null) { Toast.makeText(this, roomLeft.leftMessage, Toast.LENGTH_LONG).show() 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 d6d56b8cb9..67577e866e 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 @@ -36,7 +36,6 @@ import im.vector.app.core.extensions.cleanup 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.home.room.detail.RoomDetailPendingActionStore import im.vector.app.features.roomprofile.RoomProfileArgs import kotlinx.android.synthetic.main.fragment_room_setting_generic.* import javax.inject.Inject @@ -44,8 +43,7 @@ import javax.inject.Inject class RoomMemberListFragment @Inject constructor( val viewModelFactory: RoomMemberListViewModel.Factory, private val roomMemberListController: RoomMemberListController, - private val avatarRenderer: AvatarRenderer, - private val roomDetailPendingActionStore: RoomDetailPendingActionStore + private val avatarRenderer: AvatarRenderer ) : VectorBaseFragment(), RoomMemberListController.Callback { private val viewModel: RoomMemberListViewModel by fragmentViewModel() @@ -98,13 +96,6 @@ class RoomMemberListFragment @Inject constructor( }) } - override fun onResume() { - super.onResume() - if (roomDetailPendingActionStore.data != null) { - vectorBaseActivity.finish() - } - } - override fun onDestroyView() { recyclerView.cleanup() super.onDestroyView() From 1dfc739f1970dded244786b116c97f6e3598d86f Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 14:19:56 +0200 Subject: [PATCH 169/278] Onuray's review --- .../matrix/android/sdk/api/session/room/read/ReadService.kt | 4 ++-- .../sdk/internal/session/room/read/DefaultReadService.kt | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt index 8f76295fe7..4fc13e9228 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt @@ -65,11 +65,11 @@ interface ReadService { /** * Get the eventId where the read receipt for the provided user is - * @param otherUserId the userId param to look for + * @param userId the id of the user to look for * * @return the eventId where the read receipt for the provided user is attached, or null if not found */ - fun getUserReadReceipt(otherUserId: String): String? + fun getUserReadReceipt(userId: String): String? /** * Returns a live list of read receipts for a given event diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt index 162ad7d895..bea3d6624d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt @@ -107,10 +107,10 @@ internal class DefaultReadService @AssistedInject constructor( } } - override fun getUserReadReceipt(otherUserId: String): String? { + override fun getUserReadReceipt(userId: String): String? { var eventId: String? = null monarchy.doWithRealm { - eventId = ReadReceiptEntity.where(it, roomId = roomId, userId = otherUserId) + eventId = ReadReceiptEntity.where(it, roomId = roomId, userId = userId) .findFirst() ?.eventId } From bd69fd5815ca253c664d7ae2ec2bee3e569689b7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 14:42:44 +0200 Subject: [PATCH 170/278] Check copyright mention SDK side: we need Matrix copyright and not Element copyright on SDK source files. Next step should be to ensure that the copyright is present --- tools/check/check_code_quality.sh | 11 ++++++- tools/check/forbidden_strings_in_code_sdk.txt | 29 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 tools/check/forbidden_strings_in_code_sdk.txt diff --git a/tools/check/check_code_quality.sh b/tools/check/check_code_quality.sh index 8f850734fc..e855440e81 100755 --- a/tools/check/check_code_quality.sh +++ b/tools/check/check_code_quality.sh @@ -75,6 +75,15 @@ ${searchForbiddenStringsScript} ./tools/check/forbidden_strings_in_code.txt \ resultForbiddenStringInCode=$? +echo +echo "Search for forbidden patterns specific for SDK code..." + +${searchForbiddenStringsScript} ./tools/check/forbidden_strings_in_code_sdk.txt \ + ./matrix-sdk-android/src \ + ./matrix-sdk-android-rx/src + +resultForbiddenStringInCodeSdk=$? + echo echo "Search for forbidden patterns in resources..." @@ -148,7 +157,7 @@ fi echo -if [[ ${resultNbOfDrawable} -eq 0 ]] && [[ ${resultForbiddenStringInCode} -eq 0 ]] && [[ ${resultForbiddenStringInResource} -eq 0 ]] && [[ ${resultLongFiles} -eq 0 ]] && [[ ${resultPngInDrawable} -eq 0 ]]; then +if [[ ${resultNbOfDrawable} -eq 0 ]] && [[ ${resultForbiddenStringInCode} -eq 0 ]] && [[ ${resultForbiddenStringInCodeSdk} -eq 0 ]] && [[ ${resultForbiddenStringInResource} -eq 0 ]] && [[ ${resultLongFiles} -eq 0 ]] && [[ ${resultPngInDrawable} -eq 0 ]]; then echo "MAIN OK" else echo "❌ MAIN ERROR" diff --git a/tools/check/forbidden_strings_in_code_sdk.txt b/tools/check/forbidden_strings_in_code_sdk.txt new file mode 100644 index 0000000000..9907c68080 --- /dev/null +++ b/tools/check/forbidden_strings_in_code_sdk.txt @@ -0,0 +1,29 @@ +# +# Copyright 2020 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. +# + +# This file list String which are not allowed in source code. +# Use Perl regex to write forbidden strings +# Note: line cannot start with a space. Use \s instead. +# It is possible to specify an authorized number of occurrence with === suffix. Default is 0 +# Example: +# AuthorizedStringThreeTimes===3 + +# Extension:java +# Extension:kt + +### "The Matrix.org Foundation C.I.C." copyright is required on this file, and not "New Vector Ltd" +New Vector Ltd + From 44114e66c2772fa79a944446d168aac0dc2ac779 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 15:04:55 +0200 Subject: [PATCH 171/278] Fix Copyright mention in SDK code --- .../android/sdk/rx/LiveDataObservable.kt | 1 - .../org/matrix/android/sdk/rx/OptionalRx.kt | 1 - .../android/sdk/rx/RxCallbackBuilders.kt | 1 - .../java/org/matrix/android/sdk/rx/RxRoom.kt | 1 - .../org/matrix/android/sdk/rx/RxSession.kt | 1 - .../sdk/rx/SecretsSynchronisationInfo.kt | 1 - .../matrix/android/sdk/InstrumentedTest.kt | 2 +- .../android/sdk/LiveDataTestObserver.java | 2 +- .../android/sdk/MainThreadExecutor.java | 2 +- .../sdk/SingleThreadCoroutineDispatcher.kt | 2 +- .../sdk/account/AccountCreationTest.kt | 2 +- .../android/sdk/account/ChangePasswordTest.kt | 2 +- .../sdk/account/DeactivateAccountTest.kt | 2 +- .../java/org/matrix/android/sdk/api/Matrix.kt | 2 +- .../android/sdk/common/CommonTestHelper.kt | 2 +- .../android/sdk/common/CryptoTestData.kt | 2 +- .../android/sdk/common/CryptoTestHelper.kt | 2 +- .../sdk/common/MockOkHttpInterceptor.kt | 2 +- .../android/sdk/common/SessionTestParams.kt | 2 +- .../android/sdk/common/TestAssertUtil.kt | 2 +- .../android/sdk/common/TestConstants.kt | 2 +- .../android/sdk/common/TestMatrixCallback.kt | 2 +- .../android/sdk/common/TestMatrixComponent.kt | 2 +- .../matrix/android/sdk/common/TestModule.kt | 2 +- .../android/sdk/common/TestNetworkModule.kt | 2 +- .../crypto/AttachmentEncryptionTest.kt | 2 +- .../sdk/internal/crypto/CryptoStoreHelper.kt | 2 +- .../sdk/internal/crypto/CryptoStoreTest.kt | 2 +- .../internal/crypto/ExportEncryptionTest.kt | 2 +- .../sdk/internal/crypto/UnwedgingTest.kt | 2 +- .../crypto/crosssigning/ExtensionsKtTest.kt | 2 +- .../crypto/crosssigning/XSigningTest.kt | 16 +++++++++++ .../crypto/gossiping/KeyShareTests.kt | 2 +- .../crypto/gossiping/WithHeldTests.kt | 2 +- .../keysbackup/KeysBackupPasswordTest.kt | 2 +- .../keysbackup/KeysBackupScenarioData.kt | 2 +- .../crypto/keysbackup/KeysBackupTest.kt | 2 +- .../keysbackup/KeysBackupTestConstants.kt | 2 +- .../crypto/keysbackup/KeysBackupTestHelper.kt | 2 +- .../keysbackup/PrepareKeysBackupDataResult.kt | 2 +- .../crypto/keysbackup/StateObserver.kt | 2 +- .../sdk/internal/crypto/ssss/QuadSTests.kt | 2 +- .../internal/crypto/verification/SASTest.kt | 2 +- .../crypto/verification/qrcode/HexParser.kt | 2 +- .../crypto/verification/qrcode/QrCodeTest.kt | 2 +- .../verification/qrcode/SharedSecretTest.kt | 2 +- .../verification/qrcode/VerificationTest.kt | 2 +- .../session/room/send/MarkdownParserTest.kt | 2 +- .../internal/util/JsonCanonicalizerTest.kt | 2 +- .../session/room/timeline/ChunkEntityTest.kt | 2 +- .../timeline/FakeGetContextOfEventTask.kt | 2 +- .../room/timeline/FakePaginationTask.kt | 2 +- .../room/timeline/FakeTokenChunkEvent.kt | 2 +- .../session/room/timeline/RoomDataHelper.kt | 2 +- .../TimelineBackToPreviousLastForwardTest.kt | 2 +- .../timeline/TimelineForwardPaginationTest.kt | 2 +- .../TimelinePreviousLastForwardTest.kt | 2 +- .../sdk/session/room/timeline/TimelineTest.kt | 2 +- .../sdk/session/search/SearchMessagesTest.kt | 1 - .../sdk/internal/database/RealmDebugTools.kt | 2 +- .../interceptors/CurlLoggingInterceptor.kt | 2 +- .../interceptors/FormattedJsonHttpLogger.kt | 2 +- .../java/org/matrix/android/sdk/api/Matrix.kt | 1 - .../matrix/android/sdk/api/MatrixCallback.kt | 1 - .../android/sdk/api/MatrixConfiguration.kt | 1 - .../matrix/android/sdk/api/MatrixPatterns.kt | 1 - .../sdk/api/auth/AuthenticationService.kt | 1 - .../matrix/android/sdk/api/auth/Constants.kt | 1 - .../android/sdk/api/auth/data/Credentials.kt | 1 - .../sdk/api/auth/data/DiscoveryInformation.kt | 1 - .../auth/data/HomeServerConnectionConfig.kt | 1 - .../sdk/api/auth/data/LoginFlowResult.kt | 1 - .../sdk/api/auth/data/LoginFlowTypes.kt | 1 - .../sdk/api/auth/data/SessionParams.kt | 1 - .../android/sdk/api/auth/data/WellKnown.kt | 1 - .../sdk/api/auth/data/WellKnownBaseConfig.kt | 1 - .../android/sdk/api/auth/login/LoginWizard.kt | 1 - .../api/auth/registration/RegisterThreePid.kt | 1 - .../auth/registration/RegistrationResult.kt | 1 - .../auth/registration/RegistrationWizard.kt | 1 - .../sdk/api/auth/registration/Stage.kt | 1 - .../sdk/api/auth/wellknown/WellknownResult.kt | 1 - .../api/comparators/DatedObjectComparators.kt | 1 - .../matrix/android/sdk/api/crypto/Emojis.kt | 1 - .../android/sdk/api/crypto/MXCryptoConfig.kt | 1 - .../api/crypto/RoomEncryptionTrustLevel.kt | 1 - .../android/sdk/api/extensions/Booleans.kt | 1 - .../sdk/api/extensions/MatrixSdkExtensions.kt | 1 - .../android/sdk/api/extensions/Strings.kt | 1 - .../matrix/android/sdk/api/extensions/Try.kt | 1 - .../android/sdk/api/failure/Extensions.kt | 1 - .../matrix/android/sdk/api/failure/Failure.kt | 1 - .../android/sdk/api/failure/GlobalError.kt | 1 - .../android/sdk/api/failure/MatrixError.kt | 1 - .../android/sdk/api/interfaces/DatedObject.kt | 1 - .../sdk/api/legacy/LegacySessionImporter.kt | 1 - .../sdk/api/listeners/ProgressListener.kt | 1 - .../sdk/api/listeners/StepProgressListener.kt | 1 - .../android/sdk/api/pushrules/Action.kt | 1 - .../android/sdk/api/pushrules/Condition.kt | 1 - .../sdk/api/pushrules/ConditionResolver.kt | 1 - .../pushrules/ContainsDisplayNameCondition.kt | 1 - .../sdk/api/pushrules/EventMatchCondition.kt | 1 - .../matrix/android/sdk/api/pushrules/Kind.kt | 1 - .../sdk/api/pushrules/PushRuleService.kt | 1 - .../api/pushrules/RoomMemberCountCondition.kt | 1 - .../android/sdk/api/pushrules/RuleIds.kt | 1 - .../android/sdk/api/pushrules/RuleScope.kt | 1 - .../android/sdk/api/pushrules/RuleSetKey.kt | 1 - .../SenderNotificationPermissionCondition.kt | 1 - .../pushrules/rest/GetPushRulesResponse.kt | 1 - .../sdk/api/pushrules/rest/PushCondition.kt | 1 - .../sdk/api/pushrules/rest/PushRule.kt | 1 - .../android/sdk/api/pushrules/rest/RuleSet.kt | 1 - .../android/sdk/api/query/QueryStringValue.kt | 1 - .../android/sdk/api/raw/RawCacheStrategy.kt | 1 - .../matrix/android/sdk/api/raw/RawService.kt | 1 - .../api/session/InitialSyncProgressService.kt | 1 - .../matrix/android/sdk/api/session/Session.kt | 1 - .../sdk/api/session/account/AccountService.kt | 1 - .../session/accountdata/AccountDataService.kt | 1 - .../accountdata/UserAccountDataEvent.kt | 1 - .../accountdata/UserAccountDataTypes.kt | 1 - .../sdk/api/session/cache/CacheService.kt | 1 - .../api/session/call/CallSignalingService.kt | 1 - .../android/sdk/api/session/call/CallState.kt | 1 - .../sdk/api/session/call/CallsListener.kt | 1 - .../android/sdk/api/session/call/EglUtils.kt | 1 - .../android/sdk/api/session/call/MxCall.kt | 1 - .../api/session/call/TurnServerResponse.kt | 1 - .../session/content/ContentAttachmentData.kt | 1 - .../content/ContentUploadStateTracker.kt | 1 - .../api/session/content/ContentUrlResolver.kt | 1 - .../sdk/api/session/crypto/CryptoService.kt | 1 - .../sdk/api/session/crypto/MXCryptoError.kt | 1 - .../crosssigning/CrossSigningService.kt | 1 - .../CrossSigningSsssSecretConstants.kt | 1 - .../crypto/crosssigning/MXCrossSigningInfo.kt | 1 - .../crypto/keysbackup/KeysBackupService.kt | 1 - .../crypto/keysbackup/KeysBackupState.kt | 1 - .../keysbackup/KeysBackupStateListener.kt | 1 - .../keyshare/GossipingRequestListener.kt | 1 - .../session/crypto/verification/CancelCode.kt | 1 - .../verification/EmojiRepresentation.kt | 1 - .../IncomingSasVerificationTransaction.kt | 1 - .../OutgoingSasVerificationTransaction.kt | 1 - .../PendingVerificationRequest.kt | 1 - .../QrCodeVerificationTransaction.kt | 1 - .../session/crypto/verification/SasMode.kt | 1 - .../SasVerificationTransaction.kt | 1 - .../ValidVerificationInfoReady.kt | 1 - .../ValidVerificationInfoRequest.kt | 1 - .../crypto/verification/VerificationMethod.kt | 1 - .../verification/VerificationService.kt | 1 - .../verification/VerificationTransaction.kt | 1 - .../verification/VerificationTxState.kt | 1 - .../events/model/AggregatedAnnotation.kt | 1 - .../events/model/AggregatedRelations.kt | 1 - .../model/DefaultUnsignedRelationInfo.kt | 1 - .../sdk/api/session/events/model/Event.kt | 1 - .../sdk/api/session/events/model/EventType.kt | 1 - .../sdk/api/session/events/model/LocalEcho.kt | 1 - .../session/events/model/RelationChunkInfo.kt | 1 - .../api/session/events/model/RelationType.kt | 1 - .../api/session/events/model/UnsignedData.kt | 1 - .../events/model/UnsignedRelationInfo.kt | 1 - .../file/ContentDownloadStateTracker.kt | 1 - .../sdk/api/session/file/FileService.kt | 3 +-- .../api/session/file/MatrixSDKFileProvider.kt | 1 - .../android/sdk/api/session/group/Group.kt | 1 - .../sdk/api/session/group/GroupService.kt | 1 - .../session/group/GroupSummaryQueryParams.kt | 1 - .../api/session/group/model/GroupSummary.kt | 1 - .../homeserver/HomeServerCapabilities.kt | 1 - .../HomeServerCapabilitiesService.kt | 1 - .../sdk/api/session/identity/FoundThreePid.kt | 1 - .../api/session/identity/IdentityService.kt | 1 - .../session/identity/IdentityServiceError.kt | 1 - .../identity/IdentityServiceListener.kt | 1 - .../sdk/api/session/identity/SharedState.kt | 1 - .../sdk/api/session/identity/ThreePid.kt | 1 - .../IntegrationManagerConfig.kt | 1 - .../IntegrationManagerService.kt | 1 - .../api/session/permalinks/MatrixLinkify.kt | 1 - .../session/permalinks/MatrixPermalinkSpan.kt | 1 - .../api/session/permalinks/PermalinkData.kt | 1 - .../api/session/permalinks/PermalinkParser.kt | 1 - .../session/permalinks/PermalinkService.kt | 1 - .../sdk/api/session/profile/ProfileService.kt | 1 - .../android/sdk/api/session/pushers/Pusher.kt | 1 - .../sdk/api/session/pushers/PushersService.kt | 1 - .../android/sdk/api/session/room/Room.kt | 1 - .../api/session/room/RoomDirectoryService.kt | 1 - .../sdk/api/session/room/RoomService.kt | 1 - .../session/room/RoomSummaryQueryParams.kt | 1 - .../api/session/room/call/RoomCallService.kt | 1 - .../session/room/crypto/RoomCryptoService.kt | 1 - .../session/room/failure/CreateRoomFailure.kt | 1 - .../session/room/failure/JoinRoomFailure.kt | 1 - .../room/members/ChangeMembershipState.kt | 1 - .../session/room/members/MembershipService.kt | 1 - .../room/members/RoomMemberQueryParams.kt | 1 - .../room/model/EditAggregatedSummary.kt | 1 - .../room/model/EventAnnotationsSummary.kt | 1 - .../sdk/api/session/room/model/Invite.kt | 1 - .../sdk/api/session/room/model/Membership.kt | 1 - .../model/PollResponseAggregatedSummary.kt | 1 - .../session/room/model/PollSummaryContent.kt | 1 - .../session/room/model/PowerLevelsContent.kt | 1 - .../room/model/ReactionAggregatedSummary.kt | 1 - .../sdk/api/session/room/model/ReadReceipt.kt | 1 - .../room/model/ReferencesAggregatedContent.kt | 1 - .../room/model/ReferencesAggregatedSummary.kt | 1 - .../session/room/model/RoomAliasesContent.kt | 1 - .../session/room/model/RoomAvatarContent.kt | 1 - .../room/model/RoomCanonicalAliasContent.kt | 1 - .../room/model/RoomDirectoryVisibility.kt | 1 - .../room/model/RoomGuestAccessContent.kt | 1 - .../room/model/RoomHistoryVisibility.kt | 1 - .../model/RoomHistoryVisibilityContent.kt | 1 - .../api/session/room/model/RoomJoinRules.kt | 1 - .../room/model/RoomJoinRulesContent.kt | 1 - .../session/room/model/RoomMemberContent.kt | 1 - .../session/room/model/RoomMemberSummary.kt | 1 - .../api/session/room/model/RoomNameContent.kt | 1 - .../sdk/api/session/room/model/RoomSummary.kt | 1 - .../room/model/RoomThirdPartyInviteContent.kt | 1 - .../session/room/model/RoomTopicContent.kt | 1 - .../sdk/api/session/room/model/Signed.kt | 1 - .../api/session/room/model/VersioningState.kt | 1 - .../room/model/call/CallAnswerContent.kt | 1 - .../room/model/call/CallCandidatesContent.kt | 1 - .../room/model/call/CallHangupContent.kt | 1 - .../room/model/call/CallInviteContent.kt | 1 - .../api/session/room/model/call/SdpType.kt | 1 - .../room/model/create/CreateRoomParams.kt | 1 - .../room/model/create/CreateRoomPreset.kt | 1 - .../session/room/model/create/Predecessor.kt | 1 - .../room/model/create/RoomCreateContent.kt | 1 - .../session/room/model/message/AudioInfo.kt | 1 - .../session/room/model/message/FileInfo.kt | 1 - .../session/room/model/message/ImageInfo.kt | 1 - .../room/model/message/LocationInfo.kt | 1 - .../room/model/message/MessageAudioContent.kt | 1 - .../room/model/message/MessageContent.kt | 1 - .../MessageContentWithFormattedBody.kt | 1 - .../model/message/MessageDefaultContent.kt | 1 - .../room/model/message/MessageEmoteContent.kt | 1 - .../room/model/message/MessageFileContent.kt | 1 - .../room/model/message/MessageFormat.kt | 1 - .../room/model/message/MessageImageContent.kt | 1 - .../model/message/MessageImageInfoContent.kt | 1 - .../model/message/MessageLocationContent.kt | 1 - .../model/message/MessageNoticeContent.kt | 1 - .../model/message/MessageOptionsContent.kt | 1 - .../message/MessagePollResponseContent.kt | 1 - .../model/message/MessageRelationContent.kt | 1 - .../model/message/MessageStickerContent.kt | 1 - .../room/model/message/MessageTextContent.kt | 1 - .../session/room/model/message/MessageType.kt | 1 - .../MessageVerificationAcceptContent.kt | 1 - .../MessageVerificationCancelContent.kt | 1 - .../message/MessageVerificationDoneContent.kt | 1 - .../message/MessageVerificationKeyContent.kt | 1 - .../message/MessageVerificationMacContent.kt | 1 - .../MessageVerificationReadyContent.kt | 1 - .../MessageVerificationRequestContent.kt | 1 - .../MessageVerificationStartContent.kt | 1 - .../room/model/message/MessageVideoContent.kt | 1 - .../message/MessageWithAttachmentContent.kt | 1 - .../session/room/model/message/OptionItem.kt | 1 - .../room/model/message/ThumbnailInfo.kt | 1 - .../session/room/model/message/VideoInfo.kt | 1 - .../room/model/relation/ReactionContent.kt | 1 - .../room/model/relation/ReactionInfo.kt | 1 - .../room/model/relation/RelationContent.kt | 1 - .../model/relation/RelationDefaultContent.kt | 1 - .../room/model/relation/RelationService.kt | 1 - .../room/model/relation/ReplyToContent.kt | 1 - .../sdk/api/session/room/model/tag/RoomTag.kt | 1 - .../session/room/model/tag/RoomTagContent.kt | 1 - .../room/model/thirdparty/FieldType.kt | 1 - .../model/thirdparty/RoomDirectoryData.kt | 1 - .../model/thirdparty/ThirdPartyProtocol.kt | 1 - .../thirdparty/ThirdPartyProtocolInstance.kt | 1 - .../model/tombstone/RoomTombstoneContent.kt | 1 - .../notification/RoomNotificationState.kt | 1 - .../room/notification/RoomPushRuleService.kt | 1 - .../room/powerlevels/PowerLevelsHelper.kt | 1 - .../sdk/api/session/room/powerlevels/Role.kt | 1 - .../sdk/api/session/room/read/ReadService.kt | 1 - .../room/reporting/ReportingService.kt | 1 - .../sdk/api/session/room/send/DraftService.kt | 1 - .../api/session/room/send/MatrixItemSpan.kt | 1 - .../sdk/api/session/room/send/SendService.kt | 1 - .../sdk/api/session/room/send/SendState.kt | 1 - .../sdk/api/session/room/send/UserDraft.kt | 1 - .../sdk/api/session/room/sender/SenderInfo.kt | 1 - .../api/session/room/state/StateService.kt | 1 - .../room/summary/RoomSummaryConstants.kt | 2 +- .../sdk/api/session/room/tags/TagsService.kt | 1 - .../sdk/api/session/room/timeline/Timeline.kt | 1 - .../session/room/timeline/TimelineEvent.kt | 1 - .../room/timeline/TimelineEventFilters.kt | 2 +- .../session/room/timeline/TimelineService.kt | 1 - .../session/room/timeline/TimelineSettings.kt | 1 - .../api/session/room/typing/TypingService.kt | 1 - .../session/room/uploads/GetUploadsResult.kt | 1 - .../api/session/room/uploads/UploadEvent.kt | 1 - .../session/room/uploads/UploadsService.kt | 1 - .../sdk/api/session/search/SearchResult.kt | 1 - .../sdk/api/session/search/SearchService.kt | 1 - .../securestorage/EncryptedSecretContent.kt | 1 - .../session/securestorage/IntegrityResult.kt | 1 - .../session/securestorage/KeyInfoResult.kt | 1 - .../api/session/securestorage/KeySigner.kt | 1 - .../securestorage/SecretStorageKeyContent.kt | 1 - .../securestorage/SecureStorageService.kt | 1 - .../securestorage/SharedSecretStorageError.kt | 1 - .../SharedSecretStorageService.kt | 1 - .../securestorage/SsssKeyCreationInfo.kt | 1 - .../api/session/securestorage/SsssKeySpec.kt | 1 - .../sdk/api/session/signout/SignOutService.kt | 1 - .../sdk/api/session/sync/FilterService.kt | 1 - .../android/sdk/api/session/sync/SyncState.kt | 1 - .../sdk/api/session/terms/GetTermsResponse.kt | 1 - .../sdk/api/session/terms/TermsService.kt | 1 - .../api/session/typing/TypingUsersTracker.kt | 1 - .../sdk/api/session/user/UserService.kt | 1 - .../sdk/api/session/user/model/User.kt | 1 - .../widgets/WidgetManagementFailure.kt | 1 - .../session/widgets/WidgetPostAPIMediator.kt | 1 - .../sdk/api/session/widgets/WidgetService.kt | 1 - .../api/session/widgets/WidgetURLFormatter.kt | 1 - .../sdk/api/session/widgets/model/Widget.kt | 1 - .../session/widgets/model/WidgetContent.kt | 1 - .../api/session/widgets/model/WidgetType.kt | 1 - .../matrix/android/sdk/api/util/Cancelable.kt | 1 - .../android/sdk/api/util/CancelableBag.kt | 1 - .../android/sdk/api/util/ContentUtils.kt | 1 - .../sdk/api/util/MatrixCallbackDelegate.kt | 1 - .../matrix/android/sdk/api/util/MatrixItem.kt | 1 - .../matrix/android/sdk/api/util/Optional.kt | 27 +++++++++---------- .../org/matrix/android/sdk/api/util/Types.kt | 1 - .../android/sdk/internal/SessionManager.kt | 1 - .../android/sdk/internal/auth/AuthAPI.kt | 1 - .../android/sdk/internal/auth/AuthModule.kt | 1 - .../auth/DefaultAuthenticationService.kt | 1 - .../sdk/internal/auth/PendingSessionStore.kt | 1 - .../sdk/internal/auth/SessionCreator.kt | 1 - .../sdk/internal/auth/SessionParamsStore.kt | 1 - .../data/InteractiveAuthenticationFlow.kt | 1 - .../internal/auth/data/LoginFlowResponse.kt | 1 - .../sdk/internal/auth/data/LoginParams.kt | 1 - .../internal/auth/data/PasswordLoginParams.kt | 1 - .../sdk/internal/auth/data/RiotConfig.kt | 1 - .../sdk/internal/auth/data/ThreePidMedium.kt | 1 - .../internal/auth/data/TokenLoginParams.kt | 1 - .../internal/auth/db/AuthRealmMigration.kt | 1 - .../sdk/internal/auth/db/AuthRealmModule.kt | 1 - .../internal/auth/db/PendingSessionData.kt | 1 - .../internal/auth/db/PendingSessionEntity.kt | 1 - .../internal/auth/db/PendingSessionMapper.kt | 1 - .../auth/db/RealmPendingSessionStore.kt | 1 - .../auth/db/RealmSessionParamsStore.kt | 1 - .../internal/auth/db/SessionParamsEntity.kt | 1 - .../internal/auth/db/SessionParamsMapper.kt | 1 - .../internal/auth/login/DefaultLoginWizard.kt | 1 - .../internal/auth/login/DirectLoginTask.kt | 1 - .../internal/auth/login/ResetPasswordData.kt | 1 - .../auth/login/ResetPasswordMailConfirmed.kt | 1 - .../AddThreePidRegistrationParams.kt | 1 - .../AddThreePidRegistrationResponse.kt | 1 - .../internal/auth/registration/AuthParams.kt | 1 - .../registration/DefaultRegistrationWizard.kt | 1 - .../LocalizedFlowDataLoginTerms.kt | 1 - .../registration/RegisterAddThreePidTask.kt | 1 - .../auth/registration/RegisterTask.kt | 1 - .../registration/RegistrationFlowResponse.kt | 1 - .../auth/registration/RegistrationParams.kt | 1 - .../auth/registration/SuccessResult.kt | 1 - .../auth/registration/ThreePidData.kt | 1 - .../auth/registration/ValidateCodeTask.kt | 1 - .../auth/registration/ValidationCodeBody.kt | 1 - .../auth/version/HomeServerVersion.kt | 1 - .../sdk/internal/auth/version/Versions.kt | 1 - .../crypto/CancelGossipRequestWorker.kt | 1 - .../sdk/internal/crypto/CryptoConstants.kt | 1 - .../sdk/internal/crypto/CryptoModule.kt | 1 - .../internal/crypto/DefaultCryptoService.kt | 1 - .../sdk/internal/crypto/DeviceListManager.kt | 1 - .../internal/crypto/GossipingRequestState.kt | 1 - .../internal/crypto/GossipingWorkManager.kt | 1 - .../crypto/IncomingGossipingRequestManager.kt | 1 - .../internal/crypto/IncomingRoomKeyRequest.kt | 1 - .../crypto/IncomingSecretShareRequest.kt | 1 - .../crypto/IncomingShareRequestCommon.kt | 1 - .../sdk/internal/crypto/MXCryptoAlgorithms.kt | 1 - .../sdk/internal/crypto/MXOlmDevice.kt | 1 - .../sdk/internal/crypto/MegolmSessionData.kt | 1 - .../sdk/internal/crypto/MyDeviceInfoHolder.kt | 1 - .../sdk/internal/crypto/NewSessionListener.kt | 1 - .../sdk/internal/crypto/ObjectSigner.kt | 1 - .../internal/crypto/OneTimeKeysUploader.kt | 1 - .../crypto/OutgoingGossipingRequest.kt | 1 - .../crypto/OutgoingGossipingRequestManager.kt | 1 - .../internal/crypto/OutgoingRoomKeyRequest.kt | 1 - .../internal/crypto/OutgoingSecretRequest.kt | 1 - .../internal/crypto/RoomDecryptorProvider.kt | 1 - .../internal/crypto/RoomEncryptorsStore.kt | 1 - .../crypto/SendGossipRequestWorker.kt | 1 - .../sdk/internal/crypto/SendGossipWorker.kt | 1 - .../EnsureOlmSessionsForDevicesAction.kt | 1 - .../EnsureOlmSessionsForUsersAction.kt | 1 - .../actions/MegolmSessionDataImporter.kt | 1 - .../crypto/actions/MessageEncrypter.kt | 1 - .../actions/SetDeviceVerificationAction.kt | 1 - .../crypto/algorithms/IMXDecrypting.kt | 1 - .../crypto/algorithms/IMXWithHeldExtension.kt | 1 - .../algorithms/megolm/MXMegolmDecryption.kt | 1 - .../megolm/MXMegolmDecryptionFactory.kt | 1 - .../algorithms/megolm/MXMegolmEncryption.kt | 1 - .../megolm/MXMegolmEncryptionFactory.kt | 1 - .../algorithms/megolm/SharedWithHelper.kt | 1 - .../crypto/algorithms/olm/MXOlmDecryption.kt | 1 - .../algorithms/olm/MXOlmDecryptionFactory.kt | 1 - .../crypto/algorithms/olm/MXOlmEncryption.kt | 1 - .../algorithms/olm/MXOlmEncryptionFactory.kt | 1 - .../crypto/attachments/EncryptionResult.kt | 1 - .../MatrixDigestCheckInputStream.kt | 2 +- .../crypto/crosssigning/ComputeTrustTask.kt | 1 - .../DefaultCrossSigningService.kt | 1 - .../crypto/crosssigning/DeviceTrustLevel.kt | 1 - .../crypto/crosssigning/DeviceTrustResult.kt | 1 - .../crypto/crosssigning/Extensions.kt | 1 - .../SessionToCryptoRoomMembersUpdate.kt | 1 - .../crypto/crosssigning/ShieldTrustUpdater.kt | 1 - .../crypto/crosssigning/UserTrustResult.kt | 1 - .../keysbackup/DefaultKeysBackupService.kt | 1 - .../crypto/keysbackup/KeysBackupPassword.kt | 1 - .../keysbackup/KeysBackupStateManager.kt | 1 - .../crypto/keysbackup/api/RoomKeysApi.kt | 1 - .../keysbackup/model/KeyBackupVersionTrust.kt | 1 - .../model/KeyBackupVersionTrustSignature.kt | 1 - .../model/KeysBackupVersionTrust.kt | 1 - .../model/KeysBackupVersionTrustSignature.kt | 1 - .../keysbackup/model/MegolmBackupAuthData.kt | 1 - .../model/MegolmBackupCreationInfo.kt | 1 - .../keysbackup/model/rest/BackupKeysResult.kt | 1 - .../model/rest/CreateKeysBackupVersionBody.kt | 1 - .../keysbackup/model/rest/KeyBackupData.kt | 1 - .../model/rest/KeysAlgorithmAndData.kt | 1 - .../keysbackup/model/rest/KeysBackupData.kt | 1 - .../keysbackup/model/rest/KeysVersion.kt | 1 - .../model/rest/KeysVersionResult.kt | 1 - .../model/rest/RoomKeysBackupData.kt | 1 - .../model/rest/UpdateKeysBackupVersionBody.kt | 1 - .../tasks/CreateKeysBackupVersionTask.kt | 1 - .../keysbackup/tasks/DeleteBackupTask.kt | 1 - .../tasks/DeleteRoomSessionDataTask.kt | 1 - .../tasks/DeleteRoomSessionsDataTask.kt | 1 - .../tasks/DeleteSessionsDataTask.kt | 1 - .../tasks/GetKeysBackupLastVersionTask.kt | 1 - .../tasks/GetKeysBackupVersionTask.kt | 1 - .../tasks/GetRoomSessionDataTask.kt | 1 - .../tasks/GetRoomSessionsDataTask.kt | 1 - .../keysbackup/tasks/GetSessionsDataTask.kt | 1 - .../tasks/StoreRoomSessionDataTask.kt | 1 - .../tasks/StoreRoomSessionsDataTask.kt | 1 - .../keysbackup/tasks/StoreSessionsDataTask.kt | 1 - .../tasks/UpdateKeysBackupVersionTask.kt | 1 - .../internal/crypto/keysbackup/util/Base58.kt | 1 - .../crypto/keysbackup/util/RecoveryKey.kt | 1 - .../crypto/model/CryptoCrossSigningKey.kt | 1 - .../internal/crypto/model/CryptoDeviceInfo.kt | 1 - .../sdk/internal/crypto/model/CryptoInfo.kt | 1 - .../internal/crypto/model/CryptoInfoMapper.kt | 1 - .../crypto/model/ImportRoomKeysResult.kt | 1 - .../sdk/internal/crypto/model/MXDeviceInfo.kt | 1 - .../sdk/internal/crypto/model/MXKey.kt | 1 - .../crypto/model/MXUsersDevicesMap.kt | 1 - .../model/OlmInboundGroupSessionWrapper.kt | 1 - .../model/OlmInboundGroupSessionWrapper2.kt | 1 - .../crypto/model/OlmSessionWrapper.kt | 1 - .../model/event/RoomKeyWithHeldContent.kt | 1 - .../model/event/SecretSendEventContent.kt | 1 - .../internal/crypto/model/rest/DeviceInfo.kt | 1 - .../internal/crypto/model/rest/DeviceKeys.kt | 1 - .../model/rest/DeviceKeysWithUnsigned.kt | 1 - .../crypto/model/rest/DummyContent.kt | 1 - .../model/rest/EncryptedBodyFileInfo.kt | 1 - .../crypto/model/rest/EncryptedMessage.kt | 1 - .../model/rest/GossipingToDeviceObject.kt | 1 - .../model/rest/KeyVerificationAccept.kt | 1 - .../model/rest/KeyVerificationCancel.kt | 1 - .../crypto/model/rest/KeyVerificationDone.kt | 1 - .../crypto/model/rest/KeyVerificationKey.kt | 1 - .../crypto/model/rest/KeyVerificationMac.kt | 1 - .../crypto/model/rest/KeyVerificationReady.kt | 1 - .../model/rest/KeyVerificationRequest.kt | 1 - .../crypto/model/rest/KeyVerificationStart.kt | 1 - .../crypto/model/rest/KeysUploadBody.kt | 1 - .../internal/crypto/model/rest/RestKeyInfo.kt | 1 - .../crypto/model/rest/RoomKeyRequestBody.kt | 1 - .../crypto/model/rest/RoomKeyShareRequest.kt | 1 - .../crypto/model/rest/SecretShareRequest.kt | 1 - .../crypto/model/rest/SendToDeviceBody.kt | 1 - .../crypto/model/rest/SendToDeviceObject.kt | 1 - .../model/rest/ShareRequestCancellation.kt | 1 - .../crypto/model/rest/UnsignedDeviceInfo.kt | 1 - .../model/rest/UploadSignatureQueryBuilder.kt | 1 - .../model/rest/UploadSigningKeysBody.kt | 1 - .../crypto/model/rest/UserPasswordAuth.kt | 1 - .../model/rest/VerificationMethodValues.kt | 1 - .../WarnOnUnknownDeviceRepository.kt | 1 - .../DefaultSharedSecretStorageService.kt | 1 - .../internal/crypto/store/IMXCryptoStore.kt | 1 - .../internal/crypto/store/PrivateKeysInfo.kt | 1 - .../crypto/store/SavedKeyBackupKeyInfo.kt | 1 - .../sdk/internal/crypto/store/db/Helper.kt | 1 - .../crypto/store/db/RealmCryptoStore.kt | 1 - .../store/db/RealmCryptoStoreMigration.kt | 1 - .../crypto/store/db/RealmCryptoStoreModule.kt | 1 - .../crypto/store/db/SafeObjectInputStream.kt | 1 - .../store/db/mapper/CrossSigningKeysMapper.kt | 1 - .../store/db/model/CrossSigningInfoEntity.kt | 1 - .../crypto/store/db/model/CryptoMapper.kt | 1 - .../store/db/model/CryptoMetadataEntity.kt | 1 - .../crypto/store/db/model/CryptoRoomEntity.kt | 1 - .../crypto/store/db/model/DeviceInfoEntity.kt | 1 - .../store/db/model/GossipingEventEntity.kt | 1 - .../model/IncomingGossipingRequestEntity.kt | 1 - .../crypto/store/db/model/KeyInfoEntity.kt | 1 - .../store/db/model/KeysBackupDataEntity.kt | 1 - .../db/model/MyDeviceLastSeenInfoEntity.kt | 1 - .../db/model/OlmInboundGroupSessionEntity.kt | 1 - .../crypto/store/db/model/OlmSessionEntity.kt | 1 - .../model/OutgoingGossipingRequestEntity.kt | 1 - .../store/db/model/SharedSessionEntity.kt | 1 - .../crypto/store/db/model/TrustLevelEntity.kt | 1 - .../crypto/store/db/model/UserEntity.kt | 1 - .../store/db/model/WithHeldSessionEntity.kt | 1 - .../db/query/CrossSigningInfoEntityQueries.kt | 1 - .../store/db/query/CryptoRoomEntityQueries.kt | 1 - .../store/db/query/DeviceInfoEntityQueries.kt | 1 - .../store/db/query/SharedSessionQueries.kt | 1 - .../store/db/query/UserEntitiesQueries.kt | 1 - .../store/db/query/WithHeldSessionQueries.kt | 1 - .../ClaimOneTimeKeysForUsersDeviceTask.kt | 1 - .../internal/crypto/tasks/DeleteDeviceTask.kt | 1 - .../tasks/DeleteDeviceWithUserPasswordTask.kt | 1 - .../crypto/tasks/DownloadKeysForUsersTask.kt | 1 - .../internal/crypto/tasks/EncryptEventTask.kt | 1 - .../crypto/tasks/GetDeviceInfoTask.kt | 1 - .../internal/crypto/tasks/GetDevicesTask.kt | 1 - .../crypto/tasks/GetKeyChangesTask.kt | 1 - .../tasks/InitializeCrossSigningTask.kt | 1 - .../internal/crypto/tasks/SendEventTask.kt | 1 - .../internal/crypto/tasks/SendToDeviceTask.kt | 1 - .../tasks/SendVerificationMessageTask.kt | 1 - .../crypto/tasks/SetDeviceNameTask.kt | 1 - .../internal/crypto/tasks/UploadKeysTask.kt | 1 - .../crypto/tasks/UploadSignaturesTask.kt | 1 - .../crypto/tasks/UploadSigningKeysTask.kt | 1 - .../sdk/internal/crypto/tools/HkdfSha256.kt | 1 - .../sdk/internal/crypto/tools/Tools.kt | 1 - ...comingSASDefaultVerificationTransaction.kt | 1 - ...tgoingSASDefaultVerificationTransaction.kt | 1 - .../DefaultVerificationService.kt | 1 - .../DefaultVerificationTransaction.kt | 1 - .../SASDefaultVerificationTransaction.kt | 1 - .../SendVerificationMessageWorker.kt | 1 - .../crypto/verification/VerificationEmoji.kt | 1 - .../crypto/verification/VerificationInfo.kt | 1 - .../verification/VerificationInfoAccept.kt | 1 - .../verification/VerificationInfoCancel.kt | 1 - .../verification/VerificationInfoDone.kt | 1 - .../verification/VerificationInfoKey.kt | 1 - .../verification/VerificationInfoMac.kt | 1 - .../verification/VerificationInfoReady.kt | 1 - .../verification/VerificationInfoRequest.kt | 1 - .../verification/VerificationInfoStart.kt | 1 - .../VerificationMessageProcessor.kt | 1 - .../verification/VerificationTransport.kt | 1 - .../VerificationTransportRoomMessage.kt | 1 - .../VerificationTransportToDevice.kt | 1 - .../DefaultQrCodeVerificationTransaction.kt | 1 - .../crypto/verification/qrcode/Extensions.kt | 1 - .../crypto/verification/qrcode/QrCodeData.kt | 1 - .../verification/qrcode/SharedSecret.kt | 1 - .../sdk/internal/database/AsyncTransaction.kt | 25 +++++++++-------- .../sdk/internal/database/DBConstants.kt | 1 - .../sdk/internal/database/DatabaseCleaner.kt | 1 - .../database/EventInsertLiveObserver.kt | 1 - .../internal/database/RealmInstanceWrapper.kt | 2 +- .../sdk/internal/database/RealmKeysUtils.kt | 1 - .../database/RealmLiveEntityObserver.kt | 1 - .../sdk/internal/database/RealmQueryLatch.kt | 1 - .../internal/database/RealmSessionProvider.kt | 2 +- .../database/RealmSessionStoreMigration.kt | 1 - .../SessionRealmConfigurationFactory.kt | 1 - .../database/helper/ChunkEntityHelper.kt | 1 - .../database/helper/RoomEntityHelper.kt | 1 - .../helper/TimelineEventEntityHelper.kt | 1 - .../database/mapper/AccountDataMapper.kt | 1 - .../internal/database/mapper/ContentMapper.kt | 1 - .../internal/database/mapper/DraftMapper.kt | 1 - .../mapper/EventAnnotationsSummaryMapper.kt | 1 - .../internal/database/mapper/EventMapper.kt | 1 - .../database/mapper/GroupSummaryMapper.kt | 1 - .../mapper/HomeServerCapabilitiesMapper.kt | 1 - .../database/mapper/IsUselessResolver.kt | 1 - ...llResponseAggregatedSummaryEntityMapper.kt | 1 - .../database/mapper/PushConditionMapper.kt | 1 - .../database/mapper/PushRulesMapper.kt | 1 - .../internal/database/mapper/PushersMapper.kt | 1 - .../mapper/ReadReceiptsSummaryMapper.kt | 1 - .../mapper/RoomMemberSummaryMapper.kt | 1 - .../database/mapper/RoomSummaryMapper.kt | 1 - .../database/mapper/TimelineEventMapper.kt | 1 - .../internal/database/mapper/UserMapper.kt | 1 - .../database/model/BreadcrumbsEntity.kt | 1 - .../internal/database/model/ChunkEntity.kt | 1 - .../database/model/CurrentStateEventEntity.kt | 1 - .../internal/database/model/DraftEntity.kt | 1 - .../model/EditAggregatedSummaryEntity.kt | 1 - .../model/EventAnnotationsSummaryEntity.kt | 1 - .../internal/database/model/EventEntity.kt | 1 - .../database/model/EventInsertEntity.kt | 1 - .../database/model/EventInsertType.java | 1 - .../internal/database/model/FilterEntity.kt | 1 - .../internal/database/model/GroupEntity.kt | 1 - .../database/model/GroupSummaryEntity.kt | 1 - .../model/HomeServerCapabilitiesEntity.kt | 1 - .../database/model/IgnoredUserEntity.kt | 1 - .../database/model/PendingThreePidEntity.kt | 1 - .../PollResponseAggregatedSummaryEntity.kt | 1 - .../database/model/PushConditionEntity.kt | 1 - .../internal/database/model/PushRuleEntity.kt | 1 - .../database/model/PushRulesEntity.kt | 1 - .../database/model/PusherDataEntity.kt | 1 - .../internal/database/model/PusherEntity.kt | 1 - .../internal/database/model/RawCacheEntity.kt | 1 - .../model/ReactionAggregatedSummaryEntity.kt | 1 - .../database/model/ReadMarkerEntity.kt | 1 - .../database/model/ReadReceiptEntity.kt | 1 - .../model/ReadReceiptsSummaryEntity.kt | 1 - .../ReferencesAggregatedSummaryEntity.kt | 1 - .../sdk/internal/database/model/RoomEntity.kt | 1 - .../database/model/RoomMemberSummaryEntity.kt | 1 - .../database/model/RoomSummaryEntity.kt | 1 - .../internal/database/model/RoomTagEntity.kt | 1 - .../database/model/ScalarTokenEntity.kt | 1 - .../database/model/SessionRealmModule.kt | 1 - .../sdk/internal/database/model/SyncEntity.kt | 1 - .../database/model/TimelineEventEntity.kt | 1 - .../database/model/UserAccountDataEntity.kt | 1 - .../database/model/UserDraftsEntity.kt | 1 - .../sdk/internal/database/model/UserEntity.kt | 1 - .../database/model/UserThreePidEntity.kt | 1 - ...WellknownIntegrationManagerConfigEntity.kt | 1 - .../database/query/BreadcrumbsEntityQuery.kt | 1 - .../database/query/ChunkEntityQueries.kt | 1 - .../query/CurrentStateEventEntityQueries.kt | 1 - .../EventAnnotationsSummaryEntityQuery.kt | 1 - .../database/query/EventEntityQueries.kt | 1 - .../database/query/FilterEntityQueries.kt | 1 - .../database/query/GroupEntityQueries.kt | 1 - .../query/GroupSummaryEntityQueries.kt | 1 - .../query/HomeServerCapabilitiesQueries.kt | 1 - .../internal/database/query/PushersQueries.kt | 1 - .../database/query/RawCacheQueries.kt | 1 - .../database/query/ReadMarkerEntityQueries.kt | 1 - .../internal/database/query/ReadQueries.kt | 1 - .../query/ReadReceiptEntityQueries.kt | 1 - .../query/ReadReceiptsSummaryEntityQueries.kt | 1 - ...eferencesAggregatedSummaryEntityQueries.kt | 1 - .../database/query/RoomEntityQueries.kt | 1 - .../database/query/RoomMemberEntityQueries.kt | 1 - .../query/RoomSummaryEntityQueries.kt | 1 - .../database/query/ScalarTokenQuery.kt | 1 - .../query/TimelineEventEntityQueries.kt | 1 - .../database/query/TimelineEventFilter.kt | 1 - .../database/query/UserDraftsEntityQueries.kt | 1 - .../database/query/UserEntityQueries.kt | 1 - .../android/sdk/internal/di/AuthQualifiers.kt | 1 - .../android/sdk/internal/di/DbQualifiers.kt | 1 - .../android/sdk/internal/di/FileQualifiers.kt | 1 - .../sdk/internal/di/MatrixComponent.kt | 1 - .../android/sdk/internal/di/MatrixModule.kt | 1 - .../android/sdk/internal/di/MatrixScope.kt | 1 - .../android/sdk/internal/di/MoshiProvider.kt | 1 - .../android/sdk/internal/di/NetworkModule.kt | 1 - .../android/sdk/internal/di/NoOpTestModule.kt | 1 - .../android/sdk/internal/di/SerializeNulls.kt | 1 - .../di/SessionAssistedInjectModule.kt | 1 - .../sdk/internal/di/StringQualifiers.kt | 1 - .../sdk/internal/di/WorkManagerProvider.kt | 1 - .../internal/eventbus/EventBusTimberLogger.kt | 1 - .../sdk/internal/extensions/LiveData.kt | 1 - .../sdk/internal/extensions/Primitives.kt | 1 - .../internal/extensions/RealmExtensions.kt | 1 - .../android/sdk/internal/extensions/Result.kt | 27 +++++++++---------- .../android/sdk/internal/extensions/Try.kt | 1 - .../legacy/DefaultLegacySessionImporter.kt | 1 - .../sdk/internal/legacy/riot/Credentials.java | 1 - .../sdk/internal/legacy/riot/Fingerprint.java | 1 - .../riot/HomeServerConnectionConfig.java | 1 - .../internal/legacy/riot/LoginStorage.java | 1 - .../sdk/internal/legacy/riot/WellKnown.kt | 1 - .../legacy/riot/WellKnownBaseConfig.kt | 1 - .../legacy/riot/WellKnownManagerConfig.kt | 1 - .../legacy/riot/WellKnownPreferredConfig.kt | 1 - .../network/AccessTokenInterceptor.kt | 1 - .../sdk/internal/network/HttpHeaders.kt | 1 - .../network/NetworkCallbackStrategy.kt | 1 - .../network/NetworkConnectivityChecker.kt | 1 - .../sdk/internal/network/NetworkConstants.kt | 1 - .../internal/network/NetworkInfoReceiver.kt | 1 - .../internal/network/ProgressRequestBody.kt | 1 - .../android/sdk/internal/network/Request.kt | 1 - .../internal/network/RetrofitExtensions.kt | 1 - .../sdk/internal/network/RetrofitFactory.kt | 1 - .../internal/network/TimeOutInterceptor.kt | 1 - .../internal/network/UnitConverterFactory.kt | 1 - .../sdk/internal/network/UserAgentHolder.kt | 1 - .../internal/network/UserAgentInterceptor.kt | 1 - .../network/httpclient/OkHttpClientUtil.kt | 1 - .../network/parsing/CheckNumberType.kt | 2 +- .../parsing/CipherSuiteMoshiAdapter.kt | 1 - .../network/parsing/ForceToBoolean.kt | 1 - .../parsing/RuntimeJsonAdapterFactory.java | 1 - .../network/parsing/TlsVersionMoshiAdapter.kt | 1 - .../network/parsing/UriMoshiAdapter.kt | 1 - .../sdk/internal/network/ssl/CertUtil.kt | 1 - .../sdk/internal/network/ssl/Fingerprint.kt | 1 - .../network/ssl/PinnedTrustManager.kt | 1 - .../network/ssl/PinnedTrustManagerApi24.kt | 1 - .../network/ssl/PinnedTrustManagerProvider.kt | 1 - .../internal/network/ssl/TLSSocketFactory.kt | 1 - .../ssl/UnrecognizedCertificateException.kt | 1 - .../network/token/AccessTokenProvider.kt | 1 - .../token/HomeserverAccessTokenProvider.kt | 1 - .../internal/query/QueryEnumListProcessor.kt | 1 - .../query/QueryStringValueProcessor.kt | 1 - .../internal/raw/DefaultCleanRawCacheTask.kt | 1 - .../sdk/internal/raw/DefaultGetUrlTask.kt | 1 - .../sdk/internal/raw/DefaultRawService.kt | 2 +- .../sdk/internal/raw/GlobalRealmModule.kt | 1 - .../matrix/android/sdk/internal/raw/RawAPI.kt | 1 - .../android/sdk/internal/raw/RawModule.kt | 1 - .../internal/session/DefaultFileService.kt | 1 - .../DefaultInitialSyncProgressService.kt | 1 - .../sdk/internal/session/DefaultSession.kt | 1 - .../session/EventInsertLiveProcessor.kt | 1 - .../sdk/internal/session/SessionComponent.kt | 1 - .../session/SessionLifecycleObserver.kt | 1 - .../sdk/internal/session/SessionListeners.kt | 1 - .../sdk/internal/session/SessionModule.kt | 1 - .../sdk/internal/session/SessionScope.kt | 1 - .../sdk/internal/session/TestInterceptor.kt | 1 - .../internal/session/account/AccountAPI.kt | 1 - .../internal/session/account/AccountModule.kt | 1 - .../session/account/ChangePasswordParams.kt | 1 - .../session/account/ChangePasswordTask.kt | 1 - .../account/DeactivateAccountParams.kt | 1 - .../session/account/DeactivateAccountTask.kt | 1 - .../session/account/DefaultAccountService.kt | 1 - .../sdk/internal/session/cache/CacheModule.kt | 1 - .../internal/session/cache/ClearCacheTask.kt | 1 - .../session/cache/DefaultCacheService.kt | 1 - .../session/call/ActiveCallHandler.kt | 2 +- .../session/call/CallEventProcessor.kt | 1 - .../sdk/internal/session/call/CallModule.kt | 1 - .../call/DefaultCallSignalingService.kt | 1 - .../session/call/GetTurnServerTask.kt | 1 - .../sdk/internal/session/call/VoipApi.kt | 1 - .../internal/session/call/model/MxCallImpl.kt | 1 - .../session/cleanup/CleanupSession.kt | 1 - .../internal/session/content/ContentModule.kt | 1 - .../session/content/ContentUploadResponse.kt | 1 - .../DefaultContentUploadStateTracker.kt | 1 - .../content/DefaultContentUrlResolver.kt | 1 - .../internal/session/content/FileUploader.kt | 1 - .../session/content/ImageCompressor.kt | 1 - .../session/content/ThumbnailExtractor.kt | 1 - .../session/content/UploadContentWorker.kt | 1 - .../DefaultContentDownloadStateTracker.kt | 1 - .../download/DownloadProgressInterceptor.kt | 1 - .../session/download/ProgressResponseBody.kt | 1 - .../session/filter/DefaultFilterRepository.kt | 1 - .../session/filter/DefaultFilterService.kt | 1 - .../session/filter/DefaultSaveFilterTask.kt | 1 - .../internal/session/filter/EventFilter.kt | 1 - .../sdk/internal/session/filter/Filter.kt | 1 - .../sdk/internal/session/filter/FilterApi.kt | 1 - .../internal/session/filter/FilterFactory.kt | 1 - .../internal/session/filter/FilterModule.kt | 1 - .../session/filter/FilterRepository.kt | 1 - .../internal/session/filter/FilterResponse.kt | 1 - .../sdk/internal/session/filter/FilterUtil.kt | 1 - .../session/filter/RoomEventFilter.kt | 1 - .../sdk/internal/session/filter/RoomFilter.kt | 1 - .../session/group/DefaultGetGroupDataTask.kt | 1 - .../internal/session/group/DefaultGroup.kt | 1 - .../session/group/DefaultGroupService.kt | 1 - .../session/group/GetGroupDataWorker.kt | 1 - .../sdk/internal/session/group/GroupAPI.kt | 1 - .../internal/session/group/GroupFactory.kt | 1 - .../sdk/internal/session/group/GroupModule.kt | 1 - .../session/group/model/GroupProfile.kt | 1 - .../internal/session/group/model/GroupRoom.kt | 1 - .../session/group/model/GroupRooms.kt | 1 - .../group/model/GroupSummaryResponse.kt | 1 - .../group/model/GroupSummaryRoomsSection.kt | 1 - .../session/group/model/GroupSummaryUser.kt | 1 - .../group/model/GroupSummaryUsersSection.kt | 1 - .../internal/session/group/model/GroupUser.kt | 1 - .../session/group/model/GroupUsers.kt | 1 - .../session/homeserver/CapabilitiesAPI.kt | 1 - .../DefaultGetHomeServerCapabilitiesTask.kt | 1 - .../DefaultHomeServerCapabilitiesService.kt | 1 - .../homeserver/GetCapabilitiesResult.kt | 1 - .../homeserver/GetUploadCapabilitiesResult.kt | 1 - .../HomeServerCapabilitiesModule.kt | 1 - .../session/homeserver/HomeServerPinger.kt | 1 - .../identity/DefaultIdentityService.kt | 1 - .../session/identity/EnsureIdentityToken.kt | 1 - .../internal/session/identity/IdentityAPI.kt | 1 - .../identity/IdentityAccessTokenProvider.kt | 1 - .../session/identity/IdentityApiProvider.kt | 1 - .../session/identity/IdentityAuthAPI.kt | 1 - .../identity/IdentityBulkLookupTask.kt | 1 - .../identity/IdentityDisconnectTask.kt | 1 - .../session/identity/IdentityModule.kt | 1 - .../session/identity/IdentityPingTask.kt | 1 - .../session/identity/IdentityRegisterTask.kt | 1 - .../IdentityRequestTokenForBindingTask.kt | 1 - .../IdentitySubmitTokenForBindingTask.kt | 1 - .../session/identity/IdentityTaskHelper.kt | 1 - .../session/identity/data/IdentityData.kt | 1 - .../identity/data/IdentityPendingBinding.kt | 1 - .../session/identity/data/IdentityStore.kt | 1 - .../session/identity/db/IdentityDataEntity.kt | 1 - .../identity/db/IdentityDataEntityQuery.kt | 1 - .../session/identity/db/IdentityMapper.kt | 1 - .../db/IdentityPendingBindingEntity.kt | 1 - .../db/IdentityPendingBindingEntityQuery.kt | 1 - .../identity/db/IdentityRealmModule.kt | 1 - .../session/identity/db/RealmIdentityStore.kt | 1 - .../identity/model/IdentityAccountResponse.kt | 1 - .../model/IdentityHashDetailResponse.kt | 1 - .../identity/model/IdentityLookUpParams.kt | 1 - .../identity/model/IdentityLookUpResponse.kt | 1 - .../model/IdentityRegisterResponse.kt | 1 - .../model/IdentityRequestOwnershipParams.kt | 1 - .../model/IdentityRequestTokenBody.kt | 1 - .../model/IdentityRequestTokenResponse.kt | 1 - .../AllowedWidgetsContent.kt | 1 - .../DefaultIntegrationManagerService.kt | 1 - .../integrationmanager/IntegrationManager.kt | 1 - .../IntegrationManagerConfigExtractor.kt | 1 - .../IntegrationManagerModule.kt | 1 - .../IntegrationManagerWidgetData.kt | 1 - .../IntegrationProvisioningContent.kt | 1 - .../notification/DefaultPushRuleService.kt | 1 - .../notification/ProcessEventForPushTask.kt | 1 - .../session/openid/GetOpenIdTokenTask.kt | 1 - .../sdk/internal/session/openid/OpenIdAPI.kt | 1 - .../internal/session/openid/OpenIdModule.kt | 1 - .../openid/RequestOpenIdTokenResponse.kt | 1 - .../permalinks/DefaultPermalinkService.kt | 1 - .../session/permalinks/PermalinkFactory.kt | 1 - .../profile/AccountThreePidsResponse.kt | 1 - .../internal/session/profile/AddEmailBody.kt | 1 - .../session/profile/AddEmailResponse.kt | 1 - .../internal/session/profile/AddMsisdnBody.kt | 1 - .../session/profile/AddMsisdnResponse.kt | 1 - .../session/profile/AddThreePidTask.kt | 1 - .../session/profile/BindThreePidBody.kt | 1 - .../session/profile/BindThreePidsTask.kt | 1 - .../session/profile/DefaultProfileService.kt | 1 - .../session/profile/DeleteThreePidBody.kt | 1 - .../session/profile/DeleteThreePidResponse.kt | 1 - .../session/profile/DeleteThreePidTask.kt | 1 - .../profile/FinalizeAddThreePidBody.kt | 1 - .../profile/FinalizeAddingThreePidTask.kt | 1 - .../session/profile/GetProfileInfoTask.kt | 1 - .../session/profile/PendingThreePid.kt | 2 +- .../session/profile/PendingThreePidMapper.kt | 2 +- .../internal/session/profile/ProfileAPI.kt | 1 - .../internal/session/profile/ProfileModule.kt | 1 - .../profile/RefreshUserThreePidsTask.kt | 1 - .../session/profile/SetAvatarUrlBody.kt | 1 - .../session/profile/SetAvatarUrlTask.kt | 1 - .../session/profile/SetDisplayNameBody.kt | 1 - .../session/profile/SetDisplayNameTask.kt | 1 - .../session/profile/ThirdPartyIdentifier.kt | 1 - .../session/profile/UnbindThreePidBody.kt | 1 - .../session/profile/UnbindThreePidResponse.kt | 1 - .../session/profile/UnbindThreePidsTask.kt | 1 - .../session/profile/ValidateSmsCodeTask.kt | 1 - .../session/pushers/AddHttpPusherWorker.kt | 1 - .../session/pushers/AddPushRuleTask.kt | 1 - .../pushers/DefaultConditionResolver.kt | 1 - .../session/pushers/DefaultPushersService.kt | 1 - .../session/pushers/GetPushRulesTask.kt | 1 - .../session/pushers/GetPushersResponse.kt | 1 - .../session/pushers/GetPushersTask.kt | 1 - .../internal/session/pushers/JsonPusher.kt | 1 - .../session/pushers/JsonPusherData.kt | 1 - .../internal/session/pushers/PushRulesApi.kt | 1 - .../internal/session/pushers/PushersAPI.kt | 1 - .../internal/session/pushers/PushersModule.kt | 1 - .../session/pushers/RemovePushRuleTask.kt | 1 - .../session/pushers/RemovePusherTask.kt | 1 - .../session/pushers/SavePushRulesTask.kt | 1 - .../pushers/UpdatePushRuleActionsTask.kt | 1 - .../pushers/UpdatePushRuleEnableStatusTask.kt | 1 - .../sdk/internal/session/room/DefaultRoom.kt | 1 - .../room/DefaultRoomDirectoryService.kt | 1 - .../session/room/DefaultRoomService.kt | 1 - .../EventRelationsAggregationProcessor.kt | 1 - .../sdk/internal/session/room/RoomAPI.kt | 1 - .../session/room/RoomAvatarResolver.kt | 1 - .../sdk/internal/session/room/RoomFactory.kt | 1 - .../sdk/internal/session/room/RoomGetter.kt | 1 - .../sdk/internal/session/room/RoomModule.kt | 1 - .../session/room/alias/AddRoomAliasBody.kt | 1 - .../session/room/alias/AddRoomAliasTask.kt | 1 - .../room/alias/GetRoomIdByAliasTask.kt | 1 - .../room/alias/RoomAliasDescription.kt | 1 - .../room/call/DefaultRoomCallService.kt | 1 - .../session/room/create/CreateRoomBody.kt | 1 - .../room/create/CreateRoomBodyBuilder.kt | 1 - .../session/room/create/CreateRoomResponse.kt | 1 - .../session/room/create/CreateRoomTask.kt | 1 - .../room/create/RoomCreateEventProcessor.kt | 1 - .../room/directory/GetPublicRoomTask.kt | 1 - .../directory/GetThirdPartyProtocolsTask.kt | 1 - .../session/room/draft/DefaultDraftService.kt | 1 - .../session/room/draft/DraftRepository.kt | 1 - .../membership/DefaultMembershipService.kt | 1 - .../room/membership/LoadRoomMembersTask.kt | 1 - .../RoomChangeMembershipStateDataSource.kt | 1 - .../membership/RoomDisplayNameResolver.kt | 1 - .../membership/RoomMemberEntityFactory.kt | 1 - .../room/membership/RoomMemberEventHandler.kt | 1 - .../room/membership/RoomMemberHelper.kt | 1 - .../room/membership/RoomMembersResponse.kt | 1 - .../membership/admin/MembershipAdminTask.kt | 1 - .../room/membership/admin/UserIdAndReason.kt | 1 - .../room/membership/joining/InviteBody.kt | 1 - .../room/membership/joining/InviteTask.kt | 1 - .../room/membership/joining/JoinRoomTask.kt | 1 - .../room/membership/leaving/LeaveRoomTask.kt | 1 - .../membership/threepid/InviteThreePidTask.kt | 1 - .../membership/threepid/ThreePidInviteBody.kt | 1 - .../DefaultRoomPushRuleService.kt | 1 - .../session/room/notification/RoomPushRule.kt | 1 - .../room/notification/RoomPushRuleMapper.kt | 1 - .../SetRoomNotificationStateTask.kt | 1 - .../room/prune/RedactionEventProcessor.kt | 1 - .../session/room/read/DefaultReadService.kt | 1 - .../session/room/read/FullyReadContent.kt | 1 - .../session/room/read/MarkAllRoomsReadTask.kt | 1 - .../session/room/read/SetReadMarkersTask.kt | 1 - .../room/relation/DefaultRelationService.kt | 1 - .../room/relation/FetchEditHistoryTask.kt | 1 - .../relation/FindReactionEventForUndoTask.kt | 1 - .../room/relation/RelationsResponse.kt | 1 - .../room/relation/SendRelationWorker.kt | 1 - .../room/relation/UpdateQuickReactionTask.kt | 1 - .../room/reporting/DefaultReportingService.kt | 1 - .../room/reporting/ReportContentBody.kt | 1 - .../room/reporting/ReportContentTask.kt | 1 - .../session/room/send/CancelSendTracker.kt | 1 - .../session/room/send/DefaultSendService.kt | 1 - .../session/room/send/EncryptEventWorker.kt | 1 - .../room/send/LocalEchoEventFactory.kt | 1 - .../session/room/send/LocalEchoIdentifiers.kt | 2 +- .../session/room/send/LocalEchoRepository.kt | 1 - .../session/room/send/MarkdownParser.kt | 1 - .../MultipleEventSendingDispatcherWorker.kt | 1 - .../internal/session/room/send/NoMerger.kt | 1 - .../session/room/send/RedactEventWorker.kt | 1 - .../session/room/send/RoomEventSender.kt | 1 - .../session/room/send/SendEventWorker.kt | 1 - .../session/room/send/SendResponse.kt | 1 - .../internal/session/room/send/TextContent.kt | 1 - .../room/send/pills/MentionLinkSpec.kt | 1 - .../send/pills/MentionLinkSpecComparator.kt | 1 - .../session/room/send/pills/TextPillsUtils.kt | 1 - .../session/room/state/DefaultStateService.kt | 1 - .../session/room/state/SendStateTask.kt | 1 - .../room/state/StateEventDataSource.kt | 1 - .../room/summary/RoomSummaryDataSource.kt | 1 - .../room/summary/RoomSummaryEventsHelper.kt | 2 +- .../room/summary/RoomSummaryUpdater.kt | 1 - .../session/room/tags/AddTagToRoomTask.kt | 1 - .../session/room/tags/DefaultTagsService.kt | 1 - .../room/tags/DeleteTagFromRoomTask.kt | 1 - .../sdk/internal/session/room/tags/TagBody.kt | 1 - .../timeline/DefaultGetContextOfEventTask.kt | 1 - .../room/timeline/DefaultPaginationTask.kt | 1 - .../session/room/timeline/DefaultTimeline.kt | 1 - .../room/timeline/DefaultTimelineService.kt | 1 - .../room/timeline/EventContextResponse.kt | 1 - .../timeline/FetchTokenAndPaginateTask.kt | 1 - .../session/room/timeline/GetEventTask.kt | 1 - .../room/timeline/PaginationDirection.kt | 1 - .../room/timeline/PaginationResponse.kt | 1 - .../room/timeline/TimelineEventDecryptor.kt | 1 - .../timeline/TimelineHiddenReadReceipts.kt | 1 - .../timeline/TimelineSendEventWorkCommon.kt | 1 - .../session/room/timeline/TokenChunkEvent.kt | 1 - .../room/timeline/TokenChunkEventPersistor.kt | 1 - .../tombstone/RoomTombstoneEventProcessor.kt | 1 - .../room/typing/DefaultTypingService.kt | 1 - .../session/room/typing/SendTypingTask.kt | 1 - .../session/room/typing/TypingBody.kt | 1 - .../session/room/typing/TypingEventContent.kt | 1 - .../room/uploads/DefaultUploadsService.kt | 1 - .../session/room/uploads/GetUploadsTask.kt | 1 - .../session/search/DefaultSearchService.kt | 1 - .../sdk/internal/session/search/SearchAPI.kt | 2 +- .../internal/session/search/SearchModule.kt | 2 +- .../sdk/internal/session/search/SearchTask.kt | 1 - .../search/request/SearchRequestBody.kt | 1 - .../search/request/SearchRequestCategories.kt | 1 - .../request/SearchRequestEventContext.kt | 1 - .../search/request/SearchRequestFilter.kt | 1 - .../search/request/SearchRequestOrder.kt | 1 - .../search/request/SearchRequestRoomEvents.kt | 1 - .../session/search/response/SearchResponse.kt | 1 - .../response/SearchResponseCategories.kt | 1 - .../response/SearchResponseEventContext.kt | 1 - .../search/response/SearchResponseItem.kt | 1 - .../response/SearchResponseRoomEvents.kt | 1 - .../DefaultSecureStorageService.kt | 1 - .../securestorage/SecretStoringUtils.kt | 1 - .../session/signout/DefaultSignOutService.kt | 1 - .../session/signout/SignInAgainTask.kt | 1 - .../internal/session/signout/SignOutAPI.kt | 1 - .../internal/session/signout/SignOutModule.kt | 1 - .../internal/session/signout/SignOutTask.kt | 1 - .../session/sync/CryptoSyncHandler.kt | 1 - .../internal/session/sync/GroupSyncHandler.kt | 1 - .../session/sync/ReadReceiptHandler.kt | 1 - .../session/sync/RoomFullyReadHandler.kt | 1 - .../internal/session/sync/RoomSyncHandler.kt | 1 - .../internal/session/sync/RoomTagHandler.kt | 1 - .../session/sync/RoomTypingUsersHandler.kt | 1 - .../sdk/internal/session/sync/SyncAPI.kt | 1 - .../sdk/internal/session/sync/SyncModule.kt | 1 - .../session/sync/SyncResponseHandler.kt | 1 - .../sdk/internal/session/sync/SyncTask.kt | 1 - .../session/sync/SyncTaskSequencer.kt | 1 - .../internal/session/sync/SyncTokenStore.kt | 1 - .../sync/UserAccountDataSyncHandler.kt | 1 - .../internal/session/sync/job/SyncService.kt | 1 - .../internal/session/sync/job/SyncThread.kt | 1 - .../internal/session/sync/job/SyncWorker.kt | 1 - .../internal/session/sync/model/DeviceInfo.kt | 1 - .../session/sync/model/DeviceListResponse.kt | 1 - .../DeviceOneTimeKeysCountSyncResponse.kt | 1 - .../session/sync/model/DevicesListResponse.kt | 1 - .../session/sync/model/GroupSyncProfile.kt | 1 - .../session/sync/model/GroupsSyncResponse.kt | 1 - .../session/sync/model/InvitedGroupSync.kt | 1 - .../session/sync/model/InvitedRoomSync.kt | 1 - .../sync/model/PresenceSyncResponse.kt | 1 - .../session/sync/model/RoomInviteState.kt | 1 - .../session/sync/model/RoomResponse.kt | 1 - .../internal/session/sync/model/RoomSync.kt | 1 - .../session/sync/model/RoomSyncAccountData.kt | 1 - .../session/sync/model/RoomSyncEphemeral.kt | 1 - .../session/sync/model/RoomSyncState.kt | 1 - .../session/sync/model/RoomSyncSummary.kt | 1 - .../session/sync/model/RoomSyncTimeline.kt | 1 - .../sync/model/RoomSyncUnreadNotifications.kt | 1 - .../session/sync/model/RoomsSyncResponse.kt | 1 - .../session/sync/model/SyncResponse.kt | 1 - .../sync/model/ToDeviceSyncResponse.kt | 1 - .../session/sync/model/TokensChunkResponse.kt | 1 - .../model/accountdata/AcceptedTermsContent.kt | 1 - .../model/accountdata/BreadcrumbsContent.kt | 1 - .../accountdata/DirectMessagesContent.kt | 1 - .../accountdata/IdentityServerContent.kt | 1 - .../model/accountdata/IgnoredUsersContent.kt | 1 - .../model/accountdata/UserAccountDataSync.kt | 1 - .../internal/session/terms/AcceptTermsBody.kt | 1 - .../session/terms/DefaultTermsService.kt | 1 - .../sdk/internal/session/terms/TermsAPI.kt | 1 - .../sdk/internal/session/terms/TermsModule.kt | 1 - .../internal/session/terms/TermsResponse.kt | 1 - .../typing/DefaultTypingUsersTracker.kt | 1 - .../session/user/DefaultUserService.kt | 1 - .../internal/session/user/SearchUserAPI.kt | 1 - .../internal/session/user/UserDataSource.kt | 1 - .../session/user/UserEntityFactory.kt | 1 - .../sdk/internal/session/user/UserModule.kt | 1 - .../sdk/internal/session/user/UserStore.kt | 1 - .../user/accountdata/AccountDataAPI.kt | 1 - .../user/accountdata/AccountDataContent.kt | 1 - .../user/accountdata/AccountDataDataSource.kt | 1 - .../user/accountdata/AccountDataModule.kt | 1 - .../accountdata/DefaultAccountDataService.kt | 1 - .../user/accountdata/DirectChatsHelper.kt | 1 - .../user/accountdata/SaveBreadcrumbsTask.kt | 1 - .../user/accountdata/SaveIgnoredUsersTask.kt | 1 - .../user/accountdata/UpdateBreadcrumbsTask.kt | 1 - .../accountdata/UpdateIgnoredUserIdsTask.kt | 1 - .../accountdata/UpdateUserAccountDataTask.kt | 1 - .../internal/session/user/model/SearchUser.kt | 1 - .../session/user/model/SearchUserTask.kt | 1 - .../session/user/model/SearchUsersParams.kt | 1 - .../session/user/model/SearchUsersResponse.kt | 1 - .../session/widgets/CreateWidgetTask.kt | 1 - .../widgets/DefaultWidgetPostAPIMediator.kt | 1 - .../session/widgets/DefaultWidgetService.kt | 1 - .../widgets/DefaultWidgetURLFormatter.kt | 1 - .../session/widgets/RegisterWidgetResponse.kt | 1 - .../internal/session/widgets/WidgetManager.kt | 1 - .../internal/session/widgets/WidgetModule.kt | 1 - .../widgets/WidgetPostMessageAPIProvider.kt | 1 - .../internal/session/widgets/WidgetsAPI.kt | 1 - .../session/widgets/WidgetsAPIProvider.kt | 1 - .../widgets/helper/UserAccountWidgets.kt | 1 - .../session/widgets/helper/WidgetFactory.kt | 1 - .../widgets/token/GetScalarTokenTask.kt | 1 - .../session/widgets/token/ScalarTokenStore.kt | 1 - .../sdk/internal/task/ConfigurableTask.kt | 1 - .../sdk/internal/task/CoroutineSequencer.kt | 1 - .../sdk/internal/task/CoroutineToCallback.kt | 1 - .../matrix/android/sdk/internal/task/Task.kt | 1 - .../android/sdk/internal/task/TaskExecutor.kt | 1 - .../android/sdk/internal/task/TaskThread.kt | 1 - .../util/BackgroundDetectionObserver.kt | 1 - .../android/sdk/internal/util/Base64.kt | 1 - .../sdk/internal/util/CancelableCoroutine.kt | 1 - .../sdk/internal/util/CancelableWork.kt | 1 - .../android/sdk/internal/util/CompatUtil.kt | 1 - .../android/sdk/internal/util/Debouncer.kt | 1 - .../android/sdk/internal/util/Exhaustive.kt | 1 - .../android/sdk/internal/util/FileSaver.kt | 1 - .../matrix/android/sdk/internal/util/Glob.kt | 1 - .../android/sdk/internal/util/Handler.kt | 1 - .../matrix/android/sdk/internal/util/Hash.kt | 1 - .../sdk/internal/util/JsonCanonicalizer.kt | 1 - .../sdk/internal/util/LiveDataUtils.kt | 1 - .../util/MatrixCoroutineDispatchers.kt | 1 - .../android/sdk/internal/util/Monarchy.kt | 1 - .../sdk/internal/util/SecretKeyAndVersion.kt | 1 - .../sdk/internal/util/StringProvider.kt | 1 - .../android/sdk/internal/util/StringUtils.kt | 1 - .../internal/util/SuspendMatrixCallback.kt | 27 +++++++++---------- .../android/sdk/internal/util/UrlUtils.kt | 1 - .../internal/wellknown/GetWellknownTask.kt | 1 - .../sdk/internal/wellknown/WellKnownAPI.kt | 1 - .../sdk/internal/wellknown/WellknownModule.kt | 1 - .../internal/worker/AlwaysSuccessfulWorker.kt | 1 - .../internal/worker/DelegateWorkerFactory.kt | 1 - .../android/sdk/internal/worker/Extensions.kt | 1 - .../internal/worker/MatrixWorkerFactory.kt | 1 - .../worker/SessionSafeCoroutineWorker.kt | 2 +- .../internal/worker/SessionWorkerParams.kt | 1 - .../android/sdk/internal/worker/Worker.kt | 1 - .../internal/worker/WorkerParamsFactory.kt | 1 - .../androidsdk/crypto/data/MXDeviceInfo.java | 1 - .../data/MXOlmInboundGroupSession2.java | 1 - .../interceptors/CurlLoggingInterceptor.kt | 2 +- .../interceptors/FormattedJsonHttpLogger.kt | 2 +- .../android/sdk/test/shared/TestRules.kt | 2 +- .../java/org/matrix/android/sdk/MatrixTest.kt | 2 +- .../sdk/api/auth/data/VersionsKtTest.kt | 2 +- .../sdk/api/pushrules/PushRuleActionsTest.kt | 2 +- .../api/pushrules/PushRulesConditionTest.kt | 2 +- .../crypto/keysbackup/util/Base58Test.kt | 2 +- .../crypto/keysbackup/util/RecoveryKeyTest.kt | 2 +- .../internal/crypto/store/db/HelperTest.kt | 2 +- .../verification/qrcode/BinaryStringTest.kt | 2 +- .../internal/task/CoroutineSequencersTest.kt | 2 +- 1183 files changed, 146 insertions(+), 1237 deletions(-) diff --git a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/LiveDataObservable.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/LiveDataObservable.kt index ec0d0cd288..2174c6f118 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/LiveDataObservable.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/LiveDataObservable.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/OptionalRx.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/OptionalRx.kt index 551e277353..ff4b0d755c 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/OptionalRx.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/OptionalRx.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxCallbackBuilders.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxCallbackBuilders.kt index 793d4694ce..f6dbe3d160 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxCallbackBuilders.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxCallbackBuilders.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt index 2bb6c0ff69..228e83faff 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxRoom.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt index 55ede52c0c..03df708c0c 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/RxSession.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/SecretsSynchronisationInfo.kt b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/SecretsSynchronisationInfo.kt index e80bca1d7d..6da3217070 100644 --- a/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/SecretsSynchronisationInfo.kt +++ b/matrix-sdk-android-rx/src/main/java/org/matrix/android/sdk/rx/SecretsSynchronisationInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/InstrumentedTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/InstrumentedTest.kt index cb6e624bce..b784884363 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/InstrumentedTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/InstrumentedTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/LiveDataTestObserver.java b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/LiveDataTestObserver.java index a09a655008..26920fbb35 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/LiveDataTestObserver.java +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/LiveDataTestObserver.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/MainThreadExecutor.java b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/MainThreadExecutor.java index d26782d538..7ef2534037 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/MainThreadExecutor.java +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/MainThreadExecutor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/SingleThreadCoroutineDispatcher.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/SingleThreadCoroutineDispatcher.kt index 4316b09b89..9942ea9db3 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/SingleThreadCoroutineDispatcher.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/SingleThreadCoroutineDispatcher.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/AccountCreationTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/AccountCreationTest.kt index cbb5af5911..5dede9dcfd 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/AccountCreationTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/AccountCreationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/ChangePasswordTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/ChangePasswordTest.kt index e2140328e6..ec5477f976 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/ChangePasswordTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/ChangePasswordTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/DeactivateAccountTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/DeactivateAccountTest.kt index 36d09fb497..a6fbfd9b7a 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/DeactivateAccountTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/account/DeactivateAccountTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. 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 751b2a708c..053b4e19bd 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt index 84e76cbe52..9986315c65 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt @@ -1,6 +1,6 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestData.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestData.kt index 283ddd6fde..76e59d9a90 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestData.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestData.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestHelper.kt index 9765d35bc5..370b416f54 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CryptoTestHelper.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/MockOkHttpInterceptor.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/MockOkHttpInterceptor.kt index a9bd9403d2..e7978a9cb2 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/MockOkHttpInterceptor.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/MockOkHttpInterceptor.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/SessionTestParams.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/SessionTestParams.kt index 287cafcdfd..428d44b666 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/SessionTestParams.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/SessionTestParams.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestAssertUtil.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestAssertUtil.kt index d972ad621c..2253360adc 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestAssertUtil.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestAssertUtil.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestConstants.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestConstants.kt index cbfc9bbbf6..8eb7e251e2 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestConstants.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestConstants.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixCallback.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixCallback.kt index 800c6ae7e0..c2e1ec0f92 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixCallback.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixCallback.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixComponent.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixComponent.kt index e2ab16cad3..33de345630 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixComponent.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestMatrixComponent.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestModule.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestModule.kt index c3b11d65cc..3e4d5fe08e 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestModule.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestModule.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestNetworkModule.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestNetworkModule.kt index 80467d91f4..4cd92ca272 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestNetworkModule.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/TestNetworkModule.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt index 1e109f11ae..b6cb7f9e79 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/AttachmentEncryptionTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. 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 261c0903f0..6e6a11d568 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 @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreTest.kt index 79477e3a4d..1d838b5c84 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/CryptoStoreTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ExportEncryptionTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ExportEncryptionTest.kt index 0ee79c2e1e..17664c78aa 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ExportEncryptionTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ExportEncryptionTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/UnwedgingTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/UnwedgingTest.kt index e9a1775ac3..0e3b29118c 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/UnwedgingTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/UnwedgingTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/ExtensionsKtTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/ExtensionsKtTest.kt index 9467e861db..9fa7458ea7 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/ExtensionsKtTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/ExtensionsKtTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/XSigningTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/XSigningTest.kt index 09f14032d0..38c57bd22a 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/XSigningTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/crosssigning/XSigningTest.kt @@ -1,3 +1,19 @@ +/* + * 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.crosssigning import androidx.test.ext.junit.runners.AndroidJUnit4 diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/KeyShareTests.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/KeyShareTests.kt index 7c1a88dc75..197e36df06 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/KeyShareTests.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/KeyShareTests.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt index 03f9de2894..80cc14fcb6 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/gossiping/WithHeldTests.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPasswordTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPasswordTest.kt index f38b55beba..cc71f88fc0 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPasswordTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPasswordTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupScenarioData.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupScenarioData.kt index 29a0b5ffd6..864f3c12e4 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupScenarioData.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupScenarioData.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTest.kt index aef97d5687..ca8993fb00 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestConstants.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestConstants.kt index f31e67b0e8..1248c8f07d 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestConstants.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestConstants.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestHelper.kt index f84a90708c..944d1036d3 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupTestHelper.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/PrepareKeysBackupDataResult.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/PrepareKeysBackupDataResult.kt index c28b7990e0..6aefe98f86 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/PrepareKeysBackupDataResult.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/PrepareKeysBackupDataResult.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/StateObserver.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/StateObserver.kt index 90d2fd7812..ff8ce43b55 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/StateObserver.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/keysbackup/StateObserver.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ssss/QuadSTests.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ssss/QuadSTests.kt index 42cee74334..0489ee179f 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ssss/QuadSTests.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/ssss/QuadSTests.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/SASTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/SASTest.kt index a6beeb123c..75c7ad4d53 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/SASTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/SASTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/HexParser.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/HexParser.kt index cd5aa32d59..29d4e7850a 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/HexParser.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/HexParser.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. 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 54a0f7e771..92afd3ee47 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecretTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecretTest.kt index 4032890723..97b93dcf5a 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecretTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecretTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/VerificationTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/VerificationTest.kt index 0c003215ee..1385dac1ec 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/VerificationTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/VerificationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParserTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParserTest.kt index eebaa93415..1713578932 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParserTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParserTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt index 854d420a82..b5ab6589ff 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/internal/util/JsonCanonicalizerTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. 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 a2a1586864..237386832c 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt index 9a133032b6..b86c86c0c7 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeGetContextOfEventTask.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt index 06828ef3d1..d09bfb18c6 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakePaginationTask.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt index 0301157d09..657f622c5b 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/FakeTokenChunkEvent.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. 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 a6fe675218..0dace9bd4c 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt index 8c5e7f17f2..3774e6f513 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineBackToPreviousLastForwardTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt index facb905b35..34edf37733 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelineForwardPaginationTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt index 28ce75c221..9ebac8766a 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/room/timeline/TimelinePreviousLastForwardTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. 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 b0da49cdbb..91016f7d01 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt index 8ae8ef1b44..7db159cd0b 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/session/search/SearchMessagesTest.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/database/RealmDebugTools.kt b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/database/RealmDebugTools.kt index 324a3c1062..e5f4af2377 100644 --- a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/database/RealmDebugTools.kt +++ b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/database/RealmDebugTools.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt index ee2c6076cc..2103dc954d 100644 --- a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt +++ b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt @@ -1,6 +1,6 @@ /* * Copyright (C) 2016 Jeff Gilfelt. - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt index 349110aff8..5c03e8a855 100644 --- a/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt +++ b/matrix-sdk-android/src/debug/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/Matrix.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/Matrix.kt index e6f982682b..cf6f37cec8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/Matrix.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/Matrix.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixCallback.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixCallback.kt index e20d9074a8..5dede5abdd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixCallback.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixCallback.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt index bfcc9105eb..725fd08d3b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixConfiguration.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt index f6e9a33aee..d8532c77c8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/MatrixPatterns.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt index 91e2845cd2..360b955869 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/AuthenticationService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/Constants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/Constants.kt index 590b84f35b..6cacf55a38 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/Constants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/Constants.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/Credentials.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/Credentials.kt index 6dfa56f16a..434e4a6e2e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/Credentials.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/Credentials.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/DiscoveryInformation.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/DiscoveryInformation.kt index d5d732ccc2..384dcdce45 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/DiscoveryInformation.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/DiscoveryInformation.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/HomeServerConnectionConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/HomeServerConnectionConfig.kt index 02fab04067..e1c5171bfc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/HomeServerConnectionConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/HomeServerConnectionConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt index 13693e5bf1..64d3ddcca5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowTypes.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowTypes.kt index 64a1fd88d1..f2cebff199 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowTypes.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/LoginFlowTypes.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/SessionParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/SessionParams.kt index cbeece7e03..b2a57c7f5c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/SessionParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/SessionParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnown.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnown.kt index 4f7bc75556..4bcef60605 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnown.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnown.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnownBaseConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnownBaseConfig.kt index f0b252f973..ad6b9970de 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnownBaseConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/data/WellKnownBaseConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/login/LoginWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/login/LoginWizard.kt index 25cf8209fe..645fb55bb9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/login/LoginWizard.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/login/LoginWizard.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegisterThreePid.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegisterThreePid.kt index 3dd2b460b2..8fb318d77d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegisterThreePid.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegisterThreePid.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationResult.kt index 544cbf63cc..439b4beb41 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt index 0629915a42..ed7b249f1e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/RegistrationWizard.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/Stage.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/Stage.kt index 2635adc733..c21b667cf7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/Stage.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/registration/Stage.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt index ec2dfd214c..c68a9e9699 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/auth/wellknown/WellknownResult.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/comparators/DatedObjectComparators.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/comparators/DatedObjectComparators.kt index 409fec4437..d762b7961e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/comparators/DatedObjectComparators.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/comparators/DatedObjectComparators.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/Emojis.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/Emojis.kt index 97454684a3..9c0eb10970 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/Emojis.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/Emojis.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/MXCryptoConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/MXCryptoConfig.kt index 9eae1265f0..9a686de2e1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/MXCryptoConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/MXCryptoConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/RoomEncryptionTrustLevel.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/RoomEncryptionTrustLevel.kt index 23f21f8829..f381ae8455 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/RoomEncryptionTrustLevel.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/crypto/RoomEncryptionTrustLevel.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Booleans.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Booleans.kt index 606f321196..6a5d9c93bf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Booleans.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Booleans.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/MatrixSdkExtensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/MatrixSdkExtensions.kt index 2f3c8c13c5..1cdb6d49a5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/MatrixSdkExtensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/MatrixSdkExtensions.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Strings.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Strings.kt index f25898077a..a17e65b8e0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Strings.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Strings.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Try.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Try.kt index 555909aef9..0e35d36d03 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Try.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/extensions/Try.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt index e27eaa2921..4711f7957d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Extensions.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Failure.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Failure.kt index a930d7d633..de881b9e02 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Failure.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/Failure.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/GlobalError.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/GlobalError.kt index 053ad670b9..ef770ea1d2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/GlobalError.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/GlobalError.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/MatrixError.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/MatrixError.kt index 77a5dc4f85..c6ef33327a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/MatrixError.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/failure/MatrixError.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/interfaces/DatedObject.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/interfaces/DatedObject.kt index b1296c8aa3..0d636b58aa 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/interfaces/DatedObject.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/interfaces/DatedObject.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/legacy/LegacySessionImporter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/legacy/LegacySessionImporter.kt index 05128005cc..57de3f5ac0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/legacy/LegacySessionImporter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/legacy/LegacySessionImporter.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/ProgressListener.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/ProgressListener.kt index 9d6c9387f1..02ebd7f784 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/ProgressListener.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/ProgressListener.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/StepProgressListener.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/StepProgressListener.kt index afe6ac51bd..0fabfed2ff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/StepProgressListener.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/listeners/StepProgressListener.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Action.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Action.kt index ff58650781..34cdab58af 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Action.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Action.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Condition.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Condition.kt index 3b1082ea0a..04cccf7319 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Condition.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Condition.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ConditionResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ConditionResolver.kt index dc92ce8d29..0a7366e5d2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ConditionResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ConditionResolver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ContainsDisplayNameCondition.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ContainsDisplayNameCondition.kt index 72eda20679..7f43023873 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ContainsDisplayNameCondition.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/ContainsDisplayNameCondition.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/EventMatchCondition.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/EventMatchCondition.kt index c9aa0d001a..eec5b0a402 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/EventMatchCondition.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/EventMatchCondition.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Kind.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Kind.kt index 78f3a8a156..293a06af9f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Kind.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/Kind.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/PushRuleService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/PushRuleService.kt index 64ccdcdece..880a7be9ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/PushRuleService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/PushRuleService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RoomMemberCountCondition.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RoomMemberCountCondition.kt index ba36c54fb4..328e6dae11 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RoomMemberCountCondition.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RoomMemberCountCondition.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleIds.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleIds.kt index 2353d06252..4c01588b03 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleIds.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleIds.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleScope.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleScope.kt index d94026f438..7c1edc1aca 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleScope.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleScope.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleSetKey.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleSetKey.kt index f716b33f23..5b6f6713f8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleSetKey.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/RuleSetKey.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/SenderNotificationPermissionCondition.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/SenderNotificationPermissionCondition.kt index aeb2f01c80..4f9c84a47c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/SenderNotificationPermissionCondition.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/SenderNotificationPermissionCondition.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/GetPushRulesResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/GetPushRulesResponse.kt index f83d893c0a..35b4d77c0e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/GetPushRulesResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/GetPushRulesResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushCondition.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushCondition.kt index 29466ca33b..b31a1e6343 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushCondition.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushCondition.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushRule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushRule.kt index bdb4f2cf29..3a9fc4fb83 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushRule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/PushRule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/RuleSet.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/RuleSet.kt index a8708819f5..46f5148714 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/RuleSet.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/pushrules/rest/RuleSet.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt index 21ff3aebca..8f83beface 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/query/QueryStringValue.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawCacheStrategy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawCacheStrategy.kt index 06657a9869..944f458b6f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawCacheStrategy.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawCacheStrategy.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawService.kt index 5c96d175cb..4e24a17047 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/raw/RawService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/InitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/InitialSyncProgressService.kt index 42bb29efca..09c6b8e94c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/InitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/InitialSyncProgressService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt index 226a793bf4..f8dc906502 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/Session.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/account/AccountService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/account/AccountService.kt index 40c373820c..b05f0036b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/account/AccountService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/account/AccountService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/AccountDataService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/AccountDataService.kt index a90a34de4b..f5d2a7df3e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/AccountDataService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/AccountDataService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataEvent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataEvent.kt index 57eda657ac..744e3e5379 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataEvent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataEvent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataTypes.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataTypes.kt index 2414e4a1fb..69b15ff7d4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataTypes.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/accountdata/UserAccountDataTypes.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/cache/CacheService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/cache/CacheService.kt index a36856a7e6..c1c5663227 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/cache/CacheService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/cache/CacheService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallSignalingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallSignalingService.kt index 382ab54248..494c1afd1a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallSignalingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallSignalingService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallState.kt index 60268abf70..e55546e12d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallState.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallsListener.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallsListener.kt index 81430c71ea..37ab198487 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallsListener.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/CallsListener.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/EglUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/EglUtils.kt index 6b70d8500f..131779a4dc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/EglUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/EglUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/MxCall.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/MxCall.kt index 04af588b93..2c115a63f2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/MxCall.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/MxCall.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/TurnServerResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/TurnServerResponse.kt index f63a1a0d28..d6e65dd669 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/TurnServerResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/call/TurnServerResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt index b89dfee77f..4677c2be32 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentAttachmentData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUploadStateTracker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUploadStateTracker.kt index a216770939..924da6c19b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUploadStateTracker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUploadStateTracker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUrlResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUrlResolver.kt index 890e72edd9..36c471bb2b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUrlResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/content/ContentUrlResolver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt index 726f9b624a..c6e5056198 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/CryptoService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt index 53bee09f11..d0d36ec953 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt @@ -1,7 +1,6 @@ /* * Copyright 2016 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningService.kt index 490b1d19c1..6a646cd4c7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningSsssSecretConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningSsssSecretConstants.kt index bc85254f69..04af85b091 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningSsssSecretConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/CrossSigningSsssSecretConstants.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/MXCrossSigningInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/MXCrossSigningInfo.kt index 0212dee36c..6327dd92fd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/MXCrossSigningInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/crosssigning/MXCrossSigningInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt index ceeb87c128..fb6bb74454 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupState.kt index 9ab190ac98..1dc75ce687 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupStateListener.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupStateListener.kt index 10cfe6ce85..a6f4bd0ec7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupStateListener.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keysbackup/KeysBackupStateListener.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keyshare/GossipingRequestListener.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keyshare/GossipingRequestListener.kt index 3daee31bcf..491d42cd05 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keyshare/GossipingRequestListener.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/keyshare/GossipingRequestListener.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/CancelCode.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/CancelCode.kt index acd0866401..5a025f37e1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/CancelCode.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/CancelCode.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/EmojiRepresentation.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/EmojiRepresentation.kt index 6b568ee143..2c1bf9ff4d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/EmojiRepresentation.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/EmojiRepresentation.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/IncomingSasVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/IncomingSasVerificationTransaction.kt index 45d04e66f0..db2ea72e88 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/IncomingSasVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/IncomingSasVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/OutgoingSasVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/OutgoingSasVerificationTransaction.kt index c6be940cde..38ee5dc7e7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/OutgoingSasVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/OutgoingSasVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/PendingVerificationRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/PendingVerificationRequest.kt index 8da60976ac..1ee161724a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/PendingVerificationRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/PendingVerificationRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/QrCodeVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/QrCodeVerificationTransaction.kt index e4956aaabb..37855099be 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/QrCodeVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/QrCodeVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasMode.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasMode.kt index 2dc5c308ee..eff56f6f29 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasMode.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasMode.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasVerificationTransaction.kt index 00da238bd2..da546be68f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/SasVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoReady.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoReady.kt index 68c1bb7bb0..46924a95a7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoReady.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoReady.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoRequest.kt index 431c9728ee..9a41b35f33 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/ValidVerificationInfoRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationMethod.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationMethod.kt index 15a728ccf2..c4432f3a8a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationMethod.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationMethod.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationService.kt index 623f9e5c0e..65c6a1f1f7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTransaction.kt index 7e7dcb6d90..4d35bc44ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTxState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTxState.kt index a8ae81bc30..39de2cc712 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTxState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/verification/VerificationTxState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedAnnotation.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedAnnotation.kt index 30a1e29d81..239f749993 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedAnnotation.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedAnnotation.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedRelations.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedRelations.kt index 8bc1af25e0..34096d603f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedRelations.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/AggregatedRelations.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/DefaultUnsignedRelationInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/DefaultUnsignedRelationInfo.kt index f8be9e26a0..242d01555c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/DefaultUnsignedRelationInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/DefaultUnsignedRelationInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt index 1068b92019..6a119319e9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/Event.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt index f9f2e10af4..82dea81a5b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/EventType.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/LocalEcho.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/LocalEcho.kt index aa3726d49e..a7d7cf4ebd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/LocalEcho.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/LocalEcho.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationChunkInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationChunkInfo.kt index 72ab3e5c0e..a8a8d48a95 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationChunkInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationChunkInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationType.kt index 2c18bd6c8a..83f3931b1f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/RelationType.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedData.kt index a16d9ec5bd..dfe1db7b1c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedRelationInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedRelationInfo.kt index 04371ae54b..0eba953c8e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedRelationInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/events/model/UnsignedRelationInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/ContentDownloadStateTracker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/ContentDownloadStateTracker.kt index 52bf0ed05c..169947e2f3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/ContentDownloadStateTracker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/ContentDownloadStateTracker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/FileService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/FileService.kt index da42bfa485..31f016be14 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/FileService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/FileService.kt @@ -1,12 +1,11 @@ /* - * Copyright 2019 New Vector Ltd * 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 + * 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, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/MatrixSDKFileProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/MatrixSDKFileProvider.kt index b456626ef7..ee1550d1db 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/MatrixSDKFileProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/file/MatrixSDKFileProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/Group.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/Group.kt index 10435ee054..a4186b5a32 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/Group.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/Group.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupService.kt index 6858db4646..a96466603c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupSummaryQueryParams.kt index bf9535f271..0761a22c77 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/GroupSummaryQueryParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/model/GroupSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/model/GroupSummary.kt index 2633bdcdeb..ef50fce82f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/model/GroupSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/group/model/GroupSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt index e12d99d6b8..da99ab8d54 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilities.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt index bcf1052b98..2c9121ce4a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/homeserver/HomeServerCapabilitiesService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/FoundThreePid.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/FoundThreePid.kt index 2ac1720400..d921072df4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/FoundThreePid.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/FoundThreePid.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityService.kt index 2a4054114e..537104a084 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceError.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceError.kt index a9f8ccb9d3..72bb72cc2c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceError.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceError.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceListener.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceListener.kt index f01d4e97c3..f0c00bb185 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceListener.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/IdentityServiceListener.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/SharedState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/SharedState.kt index 3dae4b43ee..92ebdc3e92 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/SharedState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/SharedState.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/ThreePid.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/ThreePid.kt index de4e0a9a5a..42d777849b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/ThreePid.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/identity/ThreePid.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerConfig.kt index 0bee245537..171d7d6b16 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerService.kt index 003e8bc9aa..e27d81edb7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/integrationmanager/IntegrationManagerService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixLinkify.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixLinkify.kt index 8927f06c77..7f264c6228 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixLinkify.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixLinkify.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixPermalinkSpan.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixPermalinkSpan.kt index a660930646..2f8f5f99a5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixPermalinkSpan.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixPermalinkSpan.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkData.kt index 1da65b3002..b3fbdcf1a2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt index 59e289ffd7..dc47c81a5f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkParser.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkService.kt index 804cde5b30..ac1d726d03 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/PermalinkService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt index 15066cc4a6..1fd8360253 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/profile/ProfileService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/Pusher.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/Pusher.kt index 6cc089e152..eed75c9daf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/Pusher.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/Pusher.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt index f42721f485..0e33be400c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt index 9afff5f59c..837bda031b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/Room.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomDirectoryService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomDirectoryService.kt index 17d3a2a95a..dc5b3d55f5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomDirectoryService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomDirectoryService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt index 1161dce518..965e7e23bb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt index 5af23f8e24..f859d74a6f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/RoomSummaryQueryParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/call/RoomCallService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/call/RoomCallService.kt index 0ec27fdd5d..cac5217dd6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/call/RoomCallService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/call/RoomCallService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt index b7f018bda8..e7e6bacc22 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/crypto/RoomCryptoService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/CreateRoomFailure.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/CreateRoomFailure.kt index 508cf5ea1d..b0df2963f7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/CreateRoomFailure.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/CreateRoomFailure.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/JoinRoomFailure.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/JoinRoomFailure.kt index ef15fbc7c1..510c760f4f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/JoinRoomFailure.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/failure/JoinRoomFailure.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/ChangeMembershipState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/ChangeMembershipState.kt index 6d13b0bf94..2f366d0a9e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/ChangeMembershipState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/ChangeMembershipState.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/MembershipService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/MembershipService.kt index 5c9a50dc0c..2c3ffac687 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/MembershipService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/MembershipService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/RoomMemberQueryParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/RoomMemberQueryParams.kt index 39fc7598f6..c2c5a7f804 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/RoomMemberQueryParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/members/RoomMemberQueryParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt index 721dcf4f2e..10fb81dc7f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EditAggregatedSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EventAnnotationsSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EventAnnotationsSummary.kt index d1b0c89410..3a4912e457 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EventAnnotationsSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/EventAnnotationsSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Invite.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Invite.kt index 6b3a333672..2841da35d1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Invite.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Invite.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Membership.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Membership.kt index fc89ff06df..5844aead8d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Membership.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Membership.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollResponseAggregatedSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollResponseAggregatedSummary.kt index 695a3353d5..a15d8be084 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollResponseAggregatedSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollResponseAggregatedSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollSummaryContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollSummaryContent.kt index 07d62a173c..3ae8783edd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollSummaryContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PollSummaryContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt index e55508c9db..696b612389 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/PowerLevelsContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReactionAggregatedSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReactionAggregatedSummary.kt index 97fd0a16ab..76ed6d0a30 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReactionAggregatedSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReactionAggregatedSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReadReceipt.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReadReceipt.kt index d6ced198d7..67cb9600c8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReadReceipt.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReadReceipt.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt index 82291fa062..0947c96bb0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedSummary.kt index 298567262a..31ac09efb8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/ReferencesAggregatedSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAliasesContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAliasesContent.kt index 94628e6987..f70e013786 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAliasesContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAliasesContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAvatarContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAvatarContent.kt index ded2e49657..8c1c9e6b12 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAvatarContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomAvatarContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomCanonicalAliasContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomCanonicalAliasContent.kt index d5f41b66dc..5487b2ff82 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomCanonicalAliasContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomCanonicalAliasContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomDirectoryVisibility.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomDirectoryVisibility.kt index bd37884407..a98f47f7c1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomDirectoryVisibility.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomDirectoryVisibility.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomGuestAccessContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomGuestAccessContent.kt index d2b944c0eb..beae8834de 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomGuestAccessContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomGuestAccessContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibility.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibility.kt index d6546b1065..0b628649f5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibility.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibility.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibilityContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibilityContent.kt index 8955320d89..31493be7ea 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibilityContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomHistoryVisibilityContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRules.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRules.kt index d6c947b753..09aacfabbe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRules.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRules.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRulesContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRulesContent.kt index 14a88885b6..3be2d38be7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRulesContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomJoinRulesContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberContent.kt index 278db67a0e..f29dd6a3e5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberSummary.kt index 17b0cf30b1..fba3a1dd71 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomMemberSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomNameContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomNameContent.kt index c3d93a5a16..a0b45e881b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomNameContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomNameContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt index 0df86e09d7..f170c098bc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomThirdPartyInviteContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomThirdPartyInviteContent.kt index f8372f3142..776acbd8ea 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomThirdPartyInviteContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomThirdPartyInviteContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomTopicContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomTopicContent.kt index 38d3ca93f4..b97ee44dee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomTopicContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/RoomTopicContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt index 9f0e0c17ff..98101b9b1e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/Signed.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt index 202d64d621..b4e7b10d44 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/VersioningState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallAnswerContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallAnswerContent.kt index 2e21ebea86..c4d1f6486f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallAnswerContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallAnswerContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallCandidatesContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallCandidatesContent.kt index 6a6f1c82c3..cad2356c2d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallCandidatesContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallCandidatesContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallHangupContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallHangupContent.kt index aef774008c..d30441df4b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallHangupContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallHangupContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallInviteContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallInviteContent.kt index 6baef034c2..b961a6f654 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallInviteContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/CallInviteContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/SdpType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/SdpType.kt index a760e6ef93..ff393135ea 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/SdpType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/call/SdpType.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomParams.kt index 2e78ae10f9..0860b25d69 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomParams.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomPreset.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomPreset.kt index 7bc4f664c5..c9a905e032 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomPreset.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/CreateRoomPreset.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/Predecessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/Predecessor.kt index fb726808e9..f48beb299a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/Predecessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/Predecessor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/RoomCreateContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/RoomCreateContent.kt index 2a9b4ca9cf..0b595b1b2b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/RoomCreateContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/create/RoomCreateContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/AudioInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/AudioInfo.kt index 7b0097db2c..b72c8e5dfd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/AudioInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/AudioInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/FileInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/FileInfo.kt index 290909ded1..e85bb0800a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/FileInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/FileInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ImageInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ImageInfo.kt index 26c196bb14..048febec39 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ImageInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ImageInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/LocationInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/LocationInfo.kt index 258fd75c94..a6908dce5b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/LocationInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/LocationInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageAudioContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageAudioContent.kt index 14022075c2..952d65eb15 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageAudioContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageAudioContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContent.kt index 8b5c98d250..df5641a622 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContentWithFormattedBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContentWithFormattedBody.kt index 15609dca3b..aabf6173d7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContentWithFormattedBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageContentWithFormattedBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageDefaultContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageDefaultContent.kt index 2b033755bd..65e89cdfee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageDefaultContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageDefaultContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageEmoteContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageEmoteContent.kt index 36ec85ebf0..77983a031e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageEmoteContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageEmoteContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFileContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFileContent.kt index bbdb2835b1..d93f115322 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFileContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFileContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFormat.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFormat.kt index c32b0586ea..a34b5df126 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFormat.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageFormat.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageContent.kt index 48e30508bc..8255934546 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageInfoContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageInfoContent.kt index e14d531a4f..369a1a1a46 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageInfoContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageImageInfoContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageLocationContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageLocationContent.kt index 3452e291eb..bdb54910dd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageLocationContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageLocationContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageNoticeContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageNoticeContent.kt index 7c2dd2a196..b2fd8cb0c0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageNoticeContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageNoticeContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageOptionsContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageOptionsContent.kt index caaf5151af..7924469884 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageOptionsContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageOptionsContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessagePollResponseContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessagePollResponseContent.kt index a7dd0160cb..d827475277 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessagePollResponseContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessagePollResponseContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageRelationContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageRelationContent.kt index a97c0f86e3..33846b47c0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageRelationContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageRelationContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageStickerContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageStickerContent.kt index fad04941f7..92d9220893 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageStickerContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageStickerContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageTextContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageTextContent.kt index ea8685ae71..e45245a9bf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageTextContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageTextContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageType.kt index 026132b7c5..fa889a3e17 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageType.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationAcceptContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationAcceptContent.kt index d7a8a4a6f8..27619cf0a9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationAcceptContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationAcceptContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationCancelContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationCancelContent.kt index 944599a153..687e5362d8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationCancelContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationCancelContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationDoneContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationDoneContent.kt index 13593b60b8..a7f05009b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationDoneContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationDoneContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationKeyContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationKeyContent.kt index 00d4e2cd0b..1a15e056ab 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationKeyContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationKeyContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationMacContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationMacContent.kt index 9ac43e49d0..3bb3338491 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationMacContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationMacContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationReadyContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationReadyContent.kt index eafdb30ecf..72bf6e6ff7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationReadyContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationReadyContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationRequestContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationRequestContent.kt index b89ff07552..25b5f44815 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationRequestContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationRequestContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationStartContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationStartContent.kt index c6c5cb6208..8f23a9e150 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationStartContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVerificationStartContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVideoContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVideoContent.kt index 02456e6b0f..127ca7f82c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVideoContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageVideoContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageWithAttachmentContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageWithAttachmentContent.kt index af07d37efd..7870db4f65 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageWithAttachmentContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/MessageWithAttachmentContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/OptionItem.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/OptionItem.kt index b6e7979040..625043df87 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/OptionItem.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/OptionItem.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ThumbnailInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ThumbnailInfo.kt index bedbe52641..632914ae96 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ThumbnailInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/ThumbnailInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/VideoInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/VideoInfo.kt index b16c3dd823..8379ee9338 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/VideoInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/message/VideoInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionContent.kt index 8f2b2c7fac..34fb23106e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionInfo.kt index 97577c90d1..5b5c9e6886 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReactionInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationContent.kt index a3822118c0..e2080bb437 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationDefaultContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationDefaultContent.kt index eedc23518f..10b071a601 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationDefaultContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationDefaultContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt index b3d739fc62..49aa95924c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/RelationService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReplyToContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReplyToContent.kt index 57d8adb6d6..251328bea2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReplyToContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/relation/ReplyToContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTag.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTag.kt index f5303773bc..a7d82eeb02 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTag.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTag.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTagContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTagContent.kt index 15b83a4af1..d0044d44ea 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTagContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tag/RoomTagContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/FieldType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/FieldType.kt index 36bc949606..5e0b7e871c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/FieldType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/FieldType.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/RoomDirectoryData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/RoomDirectoryData.kt index e2cdd25b7c..91f429d773 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/RoomDirectoryData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/RoomDirectoryData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocol.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocol.kt index ebc147e69f..4d9e6d9c24 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocol.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocol.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocolInstance.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocolInstance.kt index 04e5481259..0ca0444589 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocolInstance.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/thirdparty/ThirdPartyProtocolInstance.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tombstone/RoomTombstoneContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tombstone/RoomTombstoneContent.kt index 43b56c8b9d..9b607aa712 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tombstone/RoomTombstoneContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/tombstone/RoomTombstoneContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomNotificationState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomNotificationState.kt index 42971e874a..ea59ff4d48 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomNotificationState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomNotificationState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomPushRuleService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomPushRuleService.kt index 79070adea3..32d6033578 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomPushRuleService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/notification/RoomPushRuleService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/PowerLevelsHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/PowerLevelsHelper.kt index 34e3168ce1..47922f6968 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/PowerLevelsHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/PowerLevelsHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt index 5ac479786e..ecfddad0a4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/powerlevels/Role.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt index 3aa9d60e6a..8d78809e02 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/read/ReadService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt index 42a21fab90..0ccdfd1d3c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/reporting/ReportingService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt index 6ef73d6486..116a60e323 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/DraftService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/MatrixItemSpan.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/MatrixItemSpan.kt index a96339a111..1810dd9faf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/MatrixItemSpan.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/MatrixItemSpan.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt index b8e536cb33..36f6e538a9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendState.kt index be8849b20e..2555fd4e5a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/SendState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/UserDraft.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/UserDraft.kt index b5542b7d63..9471b3dbcb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/UserDraft.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/send/UserDraft.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/sender/SenderInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/sender/SenderInfo.kt index b2836ecaae..1b4368e3da 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/sender/SenderInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/sender/SenderInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt index f887a8b854..8c08743972 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/state/StateService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomSummaryConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomSummaryConstants.kt index 2b0132817d..dcaf5f3276 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomSummaryConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/summary/RoomSummaryConstants.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/tags/TagsService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/tags/TagsService.kt index 62f9560315..3278c640de 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/tags/TagsService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/tags/TagsService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt index 8920689d97..18c795bc87 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/Timeline.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt index 1f3c85afe6..73cb94b417 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEvent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEventFilters.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEventFilters.kt index eccc46b5d8..c751632286 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEventFilters.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineEventFilters.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineService.kt index 473e505302..07a2a9742e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineSettings.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineSettings.kt index ab98208eed..25c63d6fbc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineSettings.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/timeline/TimelineSettings.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/typing/TypingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/typing/TypingService.kt index eaa8d5c3df..e69afa4fc8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/typing/TypingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/typing/TypingService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/GetUploadsResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/GetUploadsResult.kt index 09b885e24d..09a69ea983 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/GetUploadsResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/GetUploadsResult.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadEvent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadEvent.kt index 16423cf3c5..d7be9f8744 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadEvent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadEvent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadsService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadsService.kt index 1cabdfc92a..c3cc1eb9ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadsService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/uploads/UploadsService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt index e95d7fab19..c46d8f9b44 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt index a8c9e79ba9..ef2eec433f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/search/SearchService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/EncryptedSecretContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/EncryptedSecretContent.kt index 8c062b4203..42682efb12 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/EncryptedSecretContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/EncryptedSecretContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/IntegrityResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/IntegrityResult.kt index 096f9f34a2..1f4c0eb56f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/IntegrityResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/IntegrityResult.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeyInfoResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeyInfoResult.kt index 287555ae95..512d6f48e3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeyInfoResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeyInfoResult.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeySigner.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeySigner.kt index 2d56fb81f3..c06f87a976 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeySigner.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/KeySigner.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecretStorageKeyContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecretStorageKeyContent.kt index f960a43675..f7725be007 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecretStorageKeyContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecretStorageKeyContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecureStorageService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecureStorageService.kt index 89095268b3..6b75c94cb2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecureStorageService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SecureStorageService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageError.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageError.kt index 79e7fa51fe..59325f9903 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageError.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageError.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt index ffc7e3889d..37ecf99f9a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SharedSecretStorageService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeyCreationInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeyCreationInfo.kt index 17f0366d16..eeb1b31f9c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeyCreationInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeyCreationInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeySpec.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeySpec.kt index 9ae181a44e..f791ea4e86 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeySpec.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/securestorage/SsssKeySpec.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/signout/SignOutService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/signout/SignOutService.kt index d4061c5c7c..ebbbac527a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/signout/SignOutService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/signout/SignOutService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/FilterService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/FilterService.kt index 0389969948..68cc1143dc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/FilterService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/FilterService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/SyncState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/SyncState.kt index 08d8be699a..6fb13e8be1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/SyncState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/sync/SyncState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/GetTermsResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/GetTermsResponse.kt index 685f4ba9c3..e6d33cade6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/GetTermsResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/GetTermsResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/TermsService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/TermsService.kt index 3e2201cb29..2d88125662 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/TermsService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/terms/TermsService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/typing/TypingUsersTracker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/typing/TypingUsersTracker.kt index e51fa45d72..ff1b306389 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/typing/TypingUsersTracker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/typing/TypingUsersTracker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/UserService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/UserService.kt index b5617a206f..2cfc4b731f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/UserService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/UserService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/model/User.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/model/User.kt index bf8551588e..7cd939a5c2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/model/User.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/user/model/User.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetManagementFailure.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetManagementFailure.kt index abbbf040ab..88cf7c0e48 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetManagementFailure.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetManagementFailure.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetPostAPIMediator.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetPostAPIMediator.kt index 4dba2a10e1..d8fd00d9e1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetPostAPIMediator.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetPostAPIMediator.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetService.kt index 444708d992..037cd22b87 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetURLFormatter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetURLFormatter.kt index ad01679ee5..d4720d345a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetURLFormatter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/WidgetURLFormatter.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/Widget.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/Widget.kt index 9da2f224f7..c8465d4d2e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/Widget.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/Widget.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetContent.kt index 1a3d397376..2c4c03b7d4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt index 278a123699..ee098f9bf2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/widgets/model/WidgetType.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Cancelable.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Cancelable.kt index b1976f3921..cf38ff036a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Cancelable.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Cancelable.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/CancelableBag.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/CancelableBag.kt index bc44e08c02..9111973cfb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/CancelableBag.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/CancelableBag.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/ContentUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/ContentUtils.kt index a11be96297..c82a929ee0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/ContentUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/ContentUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixCallbackDelegate.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixCallbackDelegate.kt index c72ae3d051..63d37f409f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixCallbackDelegate.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixCallbackDelegate.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixItem.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixItem.kt index 3e99ae52b4..db229a6453 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixItem.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/MatrixItem.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Optional.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Optional.kt index 159f7149b9..02d2cbd682 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Optional.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Optional.kt @@ -1,20 +1,17 @@ /* - - * Copyright 2019 New Vector Ltd * 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. - + * + * 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.api.util diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Types.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Types.kt index 7344dab8d4..8d08b96943 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Types.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/util/Types.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/SessionManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/SessionManager.kt index 24f5558b26..441232f57f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/SessionManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/SessionManager.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthAPI.kt index d0c02b6027..f92ae7e0ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthModule.kt index 229baac052..c6d610188e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/AuthModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt index 3313a3e86f..3d5a0efcd4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/DefaultAuthenticationService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/PendingSessionStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/PendingSessionStore.kt index 3b1c61e272..06954fa5c2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/PendingSessionStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/PendingSessionStore.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionCreator.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionCreator.kt index a44cda5b57..6743e7336e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionCreator.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionCreator.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionParamsStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionParamsStore.kt index eb038ecffb..0dd67ad6a1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionParamsStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/SessionParamsStore.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/InteractiveAuthenticationFlow.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/InteractiveAuthenticationFlow.kt index 7a631a5677..d66bcfb274 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/InteractiveAuthenticationFlow.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/InteractiveAuthenticationFlow.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginFlowResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginFlowResponse.kt index 9fb7eb5f3a..8acdee3608 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginFlowResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginFlowResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginParams.kt index fc7206779e..ea8578ed8c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/LoginParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/PasswordLoginParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/PasswordLoginParams.kt index 60eebea57d..d4b14f1ca9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/PasswordLoginParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/PasswordLoginParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt index 9fb8963812..e61358a67b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/RiotConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/ThreePidMedium.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/ThreePidMedium.kt index d47eca8c9f..e67a5ffb31 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/ThreePidMedium.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/ThreePidMedium.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/TokenLoginParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/TokenLoginParams.kt index 3d9f58f048..0c6fb45e78 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/TokenLoginParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/data/TokenLoginParams.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmMigration.kt index 88e2804798..bb2667228b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmMigration.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmModule.kt index 282d0df75d..a92384b4ed 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/AuthRealmModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionData.kt index ad51f63ee8..6e13e947f4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionEntity.kt index 2ee342d02c..0798411528 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionMapper.kt index d357221f82..8e4043c11b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/PendingSessionMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmPendingSessionStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmPendingSessionStore.kt index 41851fc2c6..968ae22eda 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmPendingSessionStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmPendingSessionStore.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmSessionParamsStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmSessionParamsStore.kt index 57f1c23e99..edd3e2bed5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmSessionParamsStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/RealmSessionParamsStore.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsEntity.kt index 81202d2f52..ba1ab8147b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsMapper.kt index 78324b6916..147c0e8be0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/db/SessionParamsMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DefaultLoginWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DefaultLoginWizard.kt index 71b8f64069..108d0d4a42 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DefaultLoginWizard.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DefaultLoginWizard.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DirectLoginTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DirectLoginTask.kt index f759dc4235..be6ff38931 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DirectLoginTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/DirectLoginTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordData.kt index a6f621c2db..06fcacd514 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt index c291c78882..49682b2ce5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt @@ -1,7 +1,6 @@ /* * Copyright 2014 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationParams.kt index 3e6e3054b5..f8d17b406a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationResponse.kt index 2d60724e99..c1f9fe16e5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AddThreePidRegistrationResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AuthParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AuthParams.kt index f3136526da..23fdbc613a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AuthParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/AuthParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt index 676f40a918..9c6b942a4f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/DefaultRegistrationWizard.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/LocalizedFlowDataLoginTerms.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/LocalizedFlowDataLoginTerms.kt index 45e2f80fcc..1e18887008 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/LocalizedFlowDataLoginTerms.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/LocalizedFlowDataLoginTerms.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterAddThreePidTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterAddThreePidTask.kt index 3ad15822ca..57c4b72b8a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterAddThreePidTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterAddThreePidTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterTask.kt index 2b3924138e..bf5d899276 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegisterTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationFlowResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationFlowResponse.kt index 267e50eeb9..5b105c4d40 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationFlowResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationFlowResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt index ca475566f1..08d7b48447 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt @@ -1,7 +1,6 @@ /* * Copyright 2014 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/SuccessResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/SuccessResult.kt index bfebc57884..9b158cce90 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/SuccessResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/SuccessResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ThreePidData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ThreePidData.kt index 25a7fa3ab2..43167062d5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ThreePidData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ThreePidData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidateCodeTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidateCodeTask.kt index 470faae710..b297c9849d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidateCodeTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidateCodeTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidationCodeBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidationCodeBody.kt index ad4a3d4609..b6f3e83929 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidationCodeBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/ValidationCodeBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/HomeServerVersion.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/HomeServerVersion.kt index 9a02bc62e9..0a9b8b73cc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/HomeServerVersion.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/HomeServerVersion.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt index 6f0c756127..4e599516ed 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/version/Versions.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CancelGossipRequestWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CancelGossipRequestWorker.kt index 3b5f91a201..c2c81894fb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CancelGossipRequestWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CancelGossipRequestWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoConstants.kt index 3c8b525b96..a7a3734855 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoConstants.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt index e5496a6fd1..a8580bab8e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); 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 c9d09ead5d..c2e8e34166 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 @@ -1,7 +1,6 @@ /* * Copyright 2016 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); 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 bb41edefe1..3590b8072e 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 @@ -1,6 +1,5 @@ /* * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingRequestState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingRequestState.kt index 9c2e498863..56fabbbcf0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingRequestState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingRequestState.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingWorkManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingWorkManager.kt index 50e11e40b8..c9451aa002 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingWorkManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/GossipingWorkManager.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt index 18356ffbb0..8869e73432 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingGossipingRequestManager.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt index 04e18bf7f9..c832ff160d 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt index c376a66f09..d2ee69196c 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingSecretShareRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingShareRequestCommon.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingShareRequestCommon.kt index d57584f49f..86e9610148 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingShareRequestCommon.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingShareRequestCommon.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt index 90b0b318b9..45c8d23219 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt index cfdd050801..fdb0f02f92 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MegolmSessionData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MegolmSessionData.kt index 9991115f28..caff2d76f1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MegolmSessionData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MegolmSessionData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MyDeviceInfoHolder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MyDeviceInfoHolder.kt index 092ab672a6..70846515a7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MyDeviceInfoHolder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MyDeviceInfoHolder.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/NewSessionListener.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/NewSessionListener.kt index 19a8468e9c..301729680c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/NewSessionListener.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/NewSessionListener.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/ObjectSigner.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/ObjectSigner.kt index e59fe10c82..68dd17324b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/ObjectSigner.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/ObjectSigner.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OneTimeKeysUploader.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OneTimeKeysUploader.kt index e37c2df69e..6695234d62 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OneTimeKeysUploader.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OneTimeKeysUploader.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequest.kt index 34661fcc21..8e13daec94 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt index d1aeed7da1..b7f5c33e5d 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt index f27338b712..e043d976a1 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingSecretRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingSecretRequest.kt index 6b51b42b53..def7a1567a 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingSecretRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingSecretRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomDecryptorProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomDecryptorProvider.kt index e574627d39..89fb43ef2e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomDecryptorProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomDecryptorProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomEncryptorsStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomEncryptorsStore.kt index aabe2aedec..ba97d96133 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomEncryptorsStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/RoomEncryptorsStore.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipRequestWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipRequestWorker.kt index 1cbf0dd436..085469e9d9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipRequestWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipRequestWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt index 1c28dc6fbb..f0a3413978 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/SendGossipWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForDevicesAction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForDevicesAction.kt index e69cac5a5e..b05f2cd592 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForDevicesAction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForDevicesAction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForUsersAction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForUsersAction.kt index 270240f912..a276394eaf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForUsersAction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/EnsureOlmSessionsForUsersAction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt index 997a0d7658..0d78f68e5c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MegolmSessionDataImporter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MessageEncrypter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MessageEncrypter.kt index c654622ffb..165f200bac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MessageEncrypter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/MessageEncrypter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/SetDeviceVerificationAction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/SetDeviceVerificationAction.kt index a5c00c3632..40eddc82bd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/SetDeviceVerificationAction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/actions/SetDeviceVerificationAction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt index 76efc4d77f..8ea731e3f0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt @@ -1,6 +1,5 @@ /* * Copyright 2015 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXWithHeldExtension.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXWithHeldExtension.kt index 844cb38858..91f10adf4c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXWithHeldExtension.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXWithHeldExtension.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt index 423c883927..3f1d8e1f5f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryptionFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryptionFactory.kt index b7b2919dbe..95a4342dbf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryptionFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryptionFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index 8c2dfc9e5d..a7de65099b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -1,7 +1,6 @@ /* * Copyright 2015 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt index ca7b9657ae..8f651692fc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryptionFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/SharedWithHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/SharedWithHelper.kt index c018f6e275..921f9b2cdc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/SharedWithHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/SharedWithHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt index a4e3ee950d..d90de0c4ba 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt @@ -1,6 +1,5 @@ /* * Copyright 2015 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryptionFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryptionFactory.kt index 17c743fc08..972176e25b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryptionFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryptionFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt index f253ce005a..f471a67af6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt @@ -1,7 +1,6 @@ /* * Copyright 2015 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryptionFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryptionFactory.kt index d80c344854..68a95e395b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryptionFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryptionFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/EncryptionResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/EncryptionResult.kt index 721ee0639d..ba5baba60d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/EncryptionResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/EncryptionResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MatrixDigestCheckInputStream.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MatrixDigestCheckInputStream.kt index 7ca5158f64..2cbe0e3702 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MatrixDigestCheckInputStream.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MatrixDigestCheckInputStream.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ComputeTrustTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ComputeTrustTask.kt index 3bcbeefa91..ee5aab977b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ComputeTrustTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ComputeTrustTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DefaultCrossSigningService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DefaultCrossSigningService.kt index 8cd4a6b8e8..b5056a0efd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DefaultCrossSigningService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DefaultCrossSigningService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustLevel.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustLevel.kt index c371c84ade..fa0098e4a4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustLevel.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustLevel.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustResult.kt index cabfae1748..6e7c620a03 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/DeviceTrustResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/Extensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/Extensions.kt index 8178a8810d..e494cb5b31 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/Extensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/Extensions.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/SessionToCryptoRoomMembersUpdate.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/SessionToCryptoRoomMembersUpdate.kt index 9b06d79693..271b9e52d3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/SessionToCryptoRoomMembersUpdate.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/SessionToCryptoRoomMembersUpdate.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ShieldTrustUpdater.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ShieldTrustUpdater.kt index e8c1317604..2ac5a25c14 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ShieldTrustUpdater.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/ShieldTrustUpdater.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/UserTrustResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/UserTrustResult.kt index 878cbd0b32..20e7ca09ab 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/UserTrustResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/crosssigning/UserTrustResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt index 949677182c..64579c1b67 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/DefaultKeysBackupService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPassword.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPassword.kt index e796514cf4..24c3942055 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPassword.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupPassword.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupStateManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupStateManager.kt index 19a1f08177..7c0c741a2c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupStateManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/KeysBackupStateManager.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/api/RoomKeysApi.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/api/RoomKeysApi.kt index de59aa8ae7..ed5383d6eb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/api/RoomKeysApi.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/api/RoomKeysApi.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrust.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrust.kt index 871874bc9a..07ca87fe33 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrust.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrust.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrustSignature.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrustSignature.kt index 955bd5e531..5256c78176 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrustSignature.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeyBackupVersionTrustSignature.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrust.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrust.kt index a7d23c42dd..497cb0eb49 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrust.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrust.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrustSignature.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrustSignature.kt index 8382fff6f2..1e3db28882 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrustSignature.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/KeysBackupVersionTrustSignature.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupAuthData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupAuthData.kt index aa5629e6d9..9df5f29294 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupAuthData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupAuthData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupCreationInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupCreationInfo.kt index 25b191e5bd..1414d0e0d7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupCreationInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/MegolmBackupCreationInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/BackupKeysResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/BackupKeysResult.kt index 4903372abd..a84ba7427b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/BackupKeysResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/BackupKeysResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/CreateKeysBackupVersionBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/CreateKeysBackupVersionBody.kt index 1f493571d3..a7831b38f1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/CreateKeysBackupVersionBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/CreateKeysBackupVersionBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeyBackupData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeyBackupData.kt index b03d51894c..46eaa586a7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeyBackupData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeyBackupData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt index 99031ca458..117d4dce70 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysAlgorithmAndData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysBackupData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysBackupData.kt index 34c5d1c531..6b55f20020 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysBackupData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysBackupData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt index 115e7814d6..146c98b017 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersion.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersionResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersionResult.kt index fd5d926871..0844c58d2e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersionResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/KeysVersionResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/RoomKeysBackupData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/RoomKeysBackupData.kt index 7564e54fc0..ce42a3bc35 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/RoomKeysBackupData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/RoomKeysBackupData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/UpdateKeysBackupVersionBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/UpdateKeysBackupVersionBody.kt index 6de374d380..65f0c1a845 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/UpdateKeysBackupVersionBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/model/rest/UpdateKeysBackupVersionBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/CreateKeysBackupVersionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/CreateKeysBackupVersionTask.kt index 3b11e91716..36b667911d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/CreateKeysBackupVersionTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/CreateKeysBackupVersionTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteBackupTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteBackupTask.kt index 25417ef4fe..d174be20a2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteBackupTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteBackupTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionDataTask.kt index 12042f6459..6826596ba4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionsDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionsDataTask.kt index 92e5153d41..5c9aacc1ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionsDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteRoomSessionsDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteSessionsDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteSessionsDataTask.kt index 66e1fa0203..3c9cab3fa0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteSessionsDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/DeleteSessionsDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupLastVersionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupLastVersionTask.kt index afd0e85f59..25f8f85448 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupLastVersionTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupLastVersionTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupVersionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupVersionTask.kt index b454a83b89..dd2dd70e4d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupVersionTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetKeysBackupVersionTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionDataTask.kt index 5c5d3c3afa..8ca03491a1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionsDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionsDataTask.kt index d8b49d49d4..d4c28418b5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionsDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetRoomSessionsDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetSessionsDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetSessionsDataTask.kt index c0a05eaff9..c5df82b5ae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetSessionsDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/GetSessionsDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionDataTask.kt index 31a464dc38..588a861a8a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionsDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionsDataTask.kt index 057198aaf9..b77e31e387 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionsDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreRoomSessionsDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreSessionsDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreSessionsDataTask.kt index 33f6a0862d..3a8198073e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreSessionsDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/StoreSessionsDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/UpdateKeysBackupVersionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/UpdateKeysBackupVersionTask.kt index 68725b1eb1..50726c66ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/UpdateKeysBackupVersionTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/tasks/UpdateKeysBackupVersionTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58.kt index adbcd18d12..def9c1b675 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58.kt @@ -1,6 +1,5 @@ /* * Copyright 2011 Google Inc. - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKey.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKey.kt index 78697ca9ce..44774fd5a6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKey.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKey.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoCrossSigningKey.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoCrossSigningKey.kt index 168258acd2..202aa55624 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoCrossSigningKey.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoCrossSigningKey.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoDeviceInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoDeviceInfo.kt index b4bba72718..7eebbd9b2c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoDeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoDeviceInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfo.kt index 116205dce4..39981e01f7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfoMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfoMapper.kt index ead1dd5457..6cc6f5400f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfoMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/CryptoInfoMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/ImportRoomKeysResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/ImportRoomKeysResult.kt index 0ecda951df..e9d2a1bcd8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/ImportRoomKeysResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/ImportRoomKeysResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt index 1733cc3913..6024795085 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt @@ -1,7 +1,6 @@ /* * Copyright 2016 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXKey.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXKey.kt index 8808c83985..f71c5079b3 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXKey.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXKey.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXUsersDevicesMap.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXUsersDevicesMap.kt index aa0d9a2e6d..9d7f2d9883 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXUsersDevicesMap.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXUsersDevicesMap.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt index 1621db380d..6d2430ce5c 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper2.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper2.kt index 091106c161..803f82a5b5 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper2.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper2.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmSessionWrapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmSessionWrapper.kt index 448043024d..15b92f105a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmSessionWrapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmSessionWrapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyWithHeldContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyWithHeldContent.kt index 5d9a1937af..077a53136c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyWithHeldContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyWithHeldContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/SecretSendEventContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/SecretSendEventContent.kt index 5b7a139488..4dcca04e94 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/SecretSendEventContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/SecretSendEventContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt index 0c6d03613a..3a4abd8cf8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt @@ -1,7 +1,6 @@ /* * Copyright 2014 OpenMarket Ltd * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeys.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeys.kt index efc036c4d8..3a845b1f2a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeys.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeys.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeysWithUnsigned.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeysWithUnsigned.kt index c0f900f6c0..35fce32394 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeysWithUnsigned.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceKeysWithUnsigned.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DummyContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DummyContent.kt index 8464566d7c..53d6e4a80a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DummyContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DummyContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedBodyFileInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedBodyFileInfo.kt index 56156cf749..90f97b65eb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedBodyFileInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedBodyFileInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedMessage.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedMessage.kt index d044815542..f32676a919 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedMessage.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedMessage.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/GossipingToDeviceObject.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/GossipingToDeviceObject.kt index c3b156084d..e2ae9d1d6c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/GossipingToDeviceObject.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/GossipingToDeviceObject.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationAccept.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationAccept.kt index c4e3dd9297..f695425c2a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationAccept.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationAccept.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationCancel.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationCancel.kt index ea2cbf214b..4dfa5984df 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationCancel.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationCancel.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationDone.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationDone.kt index e4d75a0de6..96afba060b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationDone.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationDone.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationKey.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationKey.kt index bf1ded002e..7ded437cea 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationKey.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationKey.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationMac.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationMac.kt index 001cabaa4e..6c055aee2a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationMac.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationMac.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationReady.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationReady.kt index 25d6984560..3562613c2e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationReady.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationReady.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationRequest.kt index 1bf1d1a5c2..c30b2a306f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationStart.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationStart.kt index bc99c71f09..52a66a9db6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationStart.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyVerificationStart.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadBody.kt index 3d9652e328..69b3992374 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RestKeyInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RestKeyInfo.kt index cfdb300f16..0d41e5b648 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RestKeyInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RestKeyInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt index e3a65df5d0..ae82a384e3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt index 299c084819..259f256f50 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SecretShareRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SecretShareRequest.kt index 98a586d136..a4eeb50d8b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SecretShareRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SecretShareRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt index e7df20ee5e..e252abfb04 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceObject.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceObject.kt index a018d62ab4..b3a76b2a7c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceObject.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceObject.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ShareRequestCancellation.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ShareRequestCancellation.kt index b6449fe8ed..820ff69746 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ShareRequestCancellation.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ShareRequestCancellation.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UnsignedDeviceInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UnsignedDeviceInfo.kt index 1fc0d417e8..5f316486b6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UnsignedDeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UnsignedDeviceInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt index dbb2822cdd..1347c2f4b6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSignatureQueryBuilder.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSigningKeysBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSigningKeysBody.kt index a7a61b282f..3418bb327d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSigningKeysBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UploadSigningKeysBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt index 018f707105..e4002b5c52 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/VerificationMethodValues.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/VerificationMethodValues.kt index 99bbebf7eb..c07434f586 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/VerificationMethodValues.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/VerificationMethodValues.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/repository/WarnOnUnknownDeviceRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/repository/WarnOnUnknownDeviceRepository.kt index 20b8ff1840..deec8b1b3c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/repository/WarnOnUnknownDeviceRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/repository/WarnOnUnknownDeviceRepository.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt index 1cae1a4e2b..82b5185fe8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/secrets/DefaultSharedSecretStorageService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt index 491a69a1de..898ffc303c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt @@ -1,6 +1,5 @@ /* * Copyright 2016 OpenMarket Ltd - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/PrivateKeysInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/PrivateKeysInfo.kt index 5c8476ea1f..04793f185a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/PrivateKeysInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/PrivateKeysInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/SavedKeyBackupKeyInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/SavedKeyBackupKeyInfo.kt index 2d0c53a584..689f9c911d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/SavedKeyBackupKeyInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/SavedKeyBackupKeyInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt index 67e06b5455..493e7fbc39 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/Helper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); 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 4f63ddc238..394b93306c 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 @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt index 96125f5d81..c106c82538 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreModule.kt index 1103e69bbc..a453fc3ed0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/SafeObjectInputStream.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/SafeObjectInputStream.kt index 3f811ed7d2..5897869a97 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/SafeObjectInputStream.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/SafeObjectInputStream.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/mapper/CrossSigningKeysMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/mapper/CrossSigningKeysMapper.kt index 4a303de81c..8e6143f301 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/mapper/CrossSigningKeysMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/mapper/CrossSigningKeysMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CrossSigningInfoEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CrossSigningInfoEntity.kt index 94db368e05..fdd3e94754 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CrossSigningInfoEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CrossSigningInfoEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMapper.kt index 3e3c12f20b..37d1441690 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMetadataEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMetadataEntity.kt index eb79af4747..5166f6c31f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMetadataEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoMetadataEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoRoomEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoRoomEntity.kt index e1881e9157..4c19b5eb0e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoRoomEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/CryptoRoomEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/DeviceInfoEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/DeviceInfoEntity.kt index d0f4d49545..571b9bb05f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/DeviceInfoEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/DeviceInfoEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/GossipingEventEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/GossipingEventEntity.kt index c0a4625826..b8675d0823 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/GossipingEventEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/GossipingEventEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/IncomingGossipingRequestEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/IncomingGossipingRequestEntity.kt index d7c1844d53..df45568d18 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/IncomingGossipingRequestEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/IncomingGossipingRequestEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeyInfoEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeyInfoEntity.kt index 125fbd8118..8f2357223e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeyInfoEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeyInfoEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeysBackupDataEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeysBackupDataEntity.kt index 0155ed9cce..99b9e0ccdf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeysBackupDataEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/KeysBackupDataEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/MyDeviceLastSeenInfoEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/MyDeviceLastSeenInfoEntity.kt index 64b04827d6..222711f9ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/MyDeviceLastSeenInfoEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/MyDeviceLastSeenInfoEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmInboundGroupSessionEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmInboundGroupSessionEntity.kt index 7d20b7582d..d0e16bbe11 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmInboundGroupSessionEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmInboundGroupSessionEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmSessionEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmSessionEntity.kt index f804a64182..44e70f7ff8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmSessionEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OlmSessionEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OutgoingGossipingRequestEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OutgoingGossipingRequestEntity.kt index 5b32e9077d..442dda1d71 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OutgoingGossipingRequestEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/OutgoingGossipingRequestEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/SharedSessionEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/SharedSessionEntity.kt index aa647d02c1..c0ed1ac409 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/SharedSessionEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/SharedSessionEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/TrustLevelEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/TrustLevelEntity.kt index cb2933e3c4..5647eb8aa0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/TrustLevelEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/TrustLevelEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/UserEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/UserEntity.kt index 2820f72ef4..52c30a27cc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/UserEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/UserEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/WithHeldSessionEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/WithHeldSessionEntity.kt index 36ffe85183..2864ab768d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/WithHeldSessionEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/model/WithHeldSessionEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CrossSigningInfoEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CrossSigningInfoEntityQueries.kt index 5864455027..eea2f6f31b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CrossSigningInfoEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CrossSigningInfoEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CryptoRoomEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CryptoRoomEntityQueries.kt index f65b1a3c71..5ebf8b1ed5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CryptoRoomEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/CryptoRoomEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/DeviceInfoEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/DeviceInfoEntityQueries.kt index b0e677e078..1d5ca2d3cc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/DeviceInfoEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/DeviceInfoEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/SharedSessionQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/SharedSessionQueries.kt index 885cadb5e5..fa37734fe5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/SharedSessionQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/SharedSessionQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/UserEntitiesQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/UserEntitiesQueries.kt index e64dcb815d..a1f8bd7262 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/UserEntitiesQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/UserEntitiesQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/WithHeldSessionQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/WithHeldSessionQueries.kt index b3a5560dd4..3c6c594a70 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/WithHeldSessionQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/query/WithHeldSessionQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/ClaimOneTimeKeysForUsersDeviceTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/ClaimOneTimeKeysForUsersDeviceTask.kt index f5ee6aa9bf..ae72c7198a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/ClaimOneTimeKeysForUsersDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/ClaimOneTimeKeysForUsersDeviceTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceTask.kt index 1f0d9eaaf9..e5078d5b4e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt index 0f67ec666d..38eee7f932 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DeleteDeviceWithUserPasswordTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DownloadKeysForUsersTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DownloadKeysForUsersTask.kt index f053900598..7268c48113 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DownloadKeysForUsersTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/DownloadKeysForUsersTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt index e0a85d50c0..75f4c1730f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/EncryptEventTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDeviceInfoTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDeviceInfoTask.kt index e1db5e0c98..6bd69c6a07 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDeviceInfoTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDeviceInfoTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDevicesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDevicesTask.kt index ea8be725f0..731e1ca031 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDevicesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetDevicesTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetKeyChangesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetKeyChangesTask.kt index 57a4881a51..289a5226f5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetKeyChangesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/GetKeyChangesTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/InitializeCrossSigningTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/InitializeCrossSigningTask.kt index d2c7e87b67..6c0a76fa7d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/InitializeCrossSigningTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/InitializeCrossSigningTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt index 870980bde2..10b0823c65 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendEventTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendToDeviceTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendToDeviceTask.kt index 20153ef460..37e0bbc887 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendToDeviceTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendToDeviceTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt index 09baf88e59..b48f84ac91 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SendVerificationMessageTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SetDeviceNameTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SetDeviceNameTask.kt index d3900550c5..51b9624554 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SetDeviceNameTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/SetDeviceNameTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadKeysTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadKeysTask.kt index b41dcf6dd0..6216a3a305 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadKeysTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadKeysTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSignaturesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSignaturesTask.kt index 255d06ea7c..a4e10ddbfc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSignaturesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSignaturesTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSigningKeysTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSigningKeysTask.kt index c7844fbfe4..038ef9dbd3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSigningKeysTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tasks/UploadSigningKeysTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/HkdfSha256.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/HkdfSha256.kt index f93dc7126a..6d52e682bc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/HkdfSha256.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/HkdfSha256.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * Copyright (C) 2015 Square, Inc. * diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/Tools.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/Tools.kt index 1bd9e1282f..4c1e896a21 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/Tools.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/tools/Tools.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultIncomingSASDefaultVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultIncomingSASDefaultVerificationTransaction.kt index 009979db49..fde9f70e7b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultIncomingSASDefaultVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultIncomingSASDefaultVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultOutgoingSASDefaultVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultOutgoingSASDefaultVerificationTransaction.kt index 07e98f52b7..b7f4d5ad2f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultOutgoingSASDefaultVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultOutgoingSASDefaultVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationService.kt index e61497fd31..c0f4671046 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationTransaction.kt index e4f559767c..b55b1d1f36 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/DefaultVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SASDefaultVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SASDefaultVerificationTransaction.kt index 17eb33c886..6c23562d88 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SASDefaultVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SASDefaultVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SendVerificationMessageWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SendVerificationMessageWorker.kt index 2200b5c300..fa7cd2e6f9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SendVerificationMessageWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/SendVerificationMessageWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationEmoji.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationEmoji.kt index ae5852452a..eb1819fe6a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationEmoji.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationEmoji.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfo.kt index 2f4c4e9c93..368a9b6b54 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoAccept.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoAccept.kt index 5c6435c1cd..79aabba59d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoAccept.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoAccept.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoCancel.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoCancel.kt index 68282cb925..35c05ac058 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoCancel.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoCancel.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoDone.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoDone.kt index 7dce847e30..dfbe45a64f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoDone.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoDone.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoKey.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoKey.kt index 745309df79..23c117d844 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoKey.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoKey.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoMac.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoMac.kt index 6ffd0556f5..5515acc2f1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoMac.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoMac.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoReady.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoReady.kt index 6617b6b7c2..327c09dabf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoReady.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoReady.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoRequest.kt index 43843d8e29..1cf72308b1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoStart.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoStart.kt index 9ac15a1056..21a6ba41b1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoStart.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationInfoStart.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt index 0c16fd970f..4994325625 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationMessageProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransport.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransport.kt index ffe0709932..b0fab6213e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransport.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransport.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt index 3b2589d995..ba5257f26a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportRoomMessage.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt index 1dbcf31c78..5fd1c5d650 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/VerificationTransportToDevice.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/DefaultQrCodeVerificationTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/DefaultQrCodeVerificationTransaction.kt index f0db2e0fee..829e066bf3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/DefaultQrCodeVerificationTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/DefaultQrCodeVerificationTransaction.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/Extensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/Extensions.kt index 5e799f63cc..6bc3483e65 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/Extensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/Extensions.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeData.kt index 9ae0c136f4..25c04efde7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/QrCodeData.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecret.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecret.kt index edff103820..858c0ab6af 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecret.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/verification/qrcode/SharedSecret.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/AsyncTransaction.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/AsyncTransaction.kt index eec4fa2f88..d5a96f5ba1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/AsyncTransaction.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/AsyncTransaction.kt @@ -1,18 +1,17 @@ /* - * Copyright 2019 New Vector Ltd * 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. + * + * 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.database diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DBConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DBConstants.kt index 0f735eb558..7bd68b607f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DBConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DBConstants.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DatabaseCleaner.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DatabaseCleaner.kt index d12f8628b1..e305c7ea38 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DatabaseCleaner.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/DatabaseCleaner.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/EventInsertLiveObserver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/EventInsertLiveObserver.kt index 1834961ff2..11a877e7c4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/EventInsertLiveObserver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/EventInsertLiveObserver.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmInstanceWrapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmInstanceWrapper.kt index e2ddbcbca8..097fbc9478 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmInstanceWrapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmInstanceWrapper.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmKeysUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmKeysUtils.kt index 453cbae325..f0f9f66cc3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmKeysUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmKeysUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmLiveEntityObserver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmLiveEntityObserver.kt index adf77840ae..3e2160e666 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmLiveEntityObserver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmLiveEntityObserver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmQueryLatch.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmQueryLatch.kt index 712b01a69a..704a3d196f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmQueryLatch.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmQueryLatch.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionProvider.kt index a7f934ffc0..1947cc83e3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionProvider.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt index 26ce38e322..973388da49 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt index d5c259050f..3324520d29 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt index afe228a240..f764c4da4b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/ChunkEntityHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/RoomEntityHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/RoomEntityHelper.kt index 4874a1742b..a4108f0966 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/RoomEntityHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/RoomEntityHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt index 95ae59f80f..6f4dac182c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/helper/TimelineEventEntityHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/AccountDataMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/AccountDataMapper.kt index 9811afab8e..54315a1835 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/AccountDataMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/AccountDataMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ContentMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ContentMapper.kt index 5002a1b225..06658cecfe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ContentMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ContentMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/DraftMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/DraftMapper.kt index bc22c7ed3c..148f727ba7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/DraftMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/DraftMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt index 2f697d53ca..9ed2664068 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventAnnotationsSummaryMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt index d7226a2a0b..66eccdfba0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/EventMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/GroupSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/GroupSummaryMapper.kt index 09c96215b4..13c3a796c4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/GroupSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/GroupSummaryMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/HomeServerCapabilitiesMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/HomeServerCapabilitiesMapper.kt index 4eb9b4b47f..b18c67294f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/HomeServerCapabilitiesMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/HomeServerCapabilitiesMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/IsUselessResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/IsUselessResolver.kt index 5dde01e15c..5d7afc50d6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/IsUselessResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/IsUselessResolver.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PollResponseAggregatedSummaryEntityMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PollResponseAggregatedSummaryEntityMapper.kt index 18c774ac40..b26e7e88e3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PollResponseAggregatedSummaryEntityMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PollResponseAggregatedSummaryEntityMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushConditionMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushConditionMapper.kt index cce780bad8..5c0a2ba902 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushConditionMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushConditionMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushRulesMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushRulesMapper.kt index 3bcc3d2ea7..12eff8efa1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushRulesMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushRulesMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushersMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushersMapper.kt index 9912bcd4f6..2dba2c228b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushersMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/PushersMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt index 6b9c0e7a45..5413dd3d71 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/ReadReceiptsSummaryMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomMemberSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomMemberSummaryMapper.kt index 65ea7fa7c6..2365a39567 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomMemberSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomMemberSummaryMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomSummaryMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomSummaryMapper.kt index bd2aba3e54..2e54a4cd52 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomSummaryMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/RoomSummaryMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/TimelineEventMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/TimelineEventMapper.kt index 71c586cffe..a2b36ce590 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/TimelineEventMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/TimelineEventMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/UserMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/UserMapper.kt index 5f5c541585..0c40ba85b5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/UserMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/mapper/UserMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/BreadcrumbsEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/BreadcrumbsEntity.kt index 94306fadc8..07554d859b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/BreadcrumbsEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/BreadcrumbsEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt index a1f7fda7cf..14a5200857 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ChunkEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/CurrentStateEventEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/CurrentStateEventEntity.kt index bdd86cec7b..251b057722 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/CurrentStateEventEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/CurrentStateEventEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/DraftEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/DraftEntity.kt index 7254e6241d..15a5d37963 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/DraftEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/DraftEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt index 5f98d2218a..604afc1ab1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EditAggregatedSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt index 140058fbaf..3e5e277613 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventAnnotationsSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt index c76e1402ac..fe59f4fceb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertEntity.kt index 16ae051952..f4426207be 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.java b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.java index 41ecad003f..05153c5734 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.java +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/EventInsertType.java @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/FilterEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/FilterEntity.kt index b7a2f90521..96014d29ad 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/FilterEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/FilterEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupEntity.kt index 76ddb31678..25a041e3d0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupSummaryEntity.kt index 00c39d4ee4..8982436ccc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/GroupSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/HomeServerCapabilitiesEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/HomeServerCapabilitiesEntity.kt index a905dc9535..763dcf80a2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/HomeServerCapabilitiesEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/HomeServerCapabilitiesEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/IgnoredUserEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/IgnoredUserEntity.kt index d2b7e0492d..d16bf89da2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/IgnoredUserEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/IgnoredUserEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PendingThreePidEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PendingThreePidEntity.kt index 2f5643d7bc..98c38c8969 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PendingThreePidEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PendingThreePidEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PollResponseAggregatedSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PollResponseAggregatedSummaryEntity.kt index 267675ef8a..0000a558ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PollResponseAggregatedSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PollResponseAggregatedSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushConditionEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushConditionEntity.kt index 2fdcaa250f..7485680c49 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushConditionEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushConditionEntity.kt @@ -1,5 +1,4 @@ /* - * copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * licensed under the apache license, version 2.0 (the "license"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRuleEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRuleEntity.kt index 118d394e06..85375c8064 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRuleEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRuleEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRulesEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRulesEntity.kt index e4a7ef5e0f..21e3510cd2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRulesEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PushRulesEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherDataEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherDataEntity.kt index 9fff183b96..f12cf70db5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherDataEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherDataEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherEntity.kt index 7b299d4f33..f85c01c48a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/PusherEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RawCacheEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RawCacheEntity.kt index 3c0a280476..4f271a9ab7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RawCacheEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RawCacheEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReactionAggregatedSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReactionAggregatedSummaryEntity.kt index 7da933c6e4..ae916ae579 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReactionAggregatedSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReactionAggregatedSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadMarkerEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadMarkerEntity.kt index 739c0b9e88..965665c581 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadMarkerEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadMarkerEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt index f1e3bc4e65..e01d849cc2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptsSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptsSummaryEntity.kt index 8445abdb4c..98b4329076 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptsSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReadReceiptsSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReferencesAggregatedSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReferencesAggregatedSummaryEntity.kt index 327648abbc..979ef4d0d3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReferencesAggregatedSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ReferencesAggregatedSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomEntity.kt index ae1e7865d2..9af1646a4c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomMemberSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomMemberSummaryEntity.kt index f2ea5a5f16..a48b081f02 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomMemberSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomMemberSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomSummaryEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomSummaryEntity.kt index d6859f1d3f..37696c9082 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomSummaryEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomSummaryEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomTagEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomTagEntity.kt index 8fdae3205d..a7fe71f3e4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomTagEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/RoomTagEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ScalarTokenEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ScalarTokenEntity.kt index a8fc454720..9beab4b579 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ScalarTokenEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/ScalarTokenEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt index 2c45cfcdbf..f62312f8fc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SessionRealmModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SyncEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SyncEntity.kt index 5a1bcbc8d0..a097b8eac8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SyncEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/SyncEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt index 36f6041fe6..7bd0dbbb8f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/TimelineEventEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserAccountDataEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserAccountDataEntity.kt index 75aacd8dda..cfdb84d033 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserAccountDataEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserAccountDataEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserDraftsEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserDraftsEntity.kt index f84a7b930f..06a6349350 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserDraftsEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserDraftsEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserEntity.kt index e2150103d9..bd6e73582d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserThreePidEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserThreePidEntity.kt index c7337f6a42..444ba94d2c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserThreePidEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/UserThreePidEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/WellknownIntegrationManagerConfigEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/WellknownIntegrationManagerConfigEntity.kt index fdabed3c23..65d640647e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/WellknownIntegrationManagerConfigEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/model/WellknownIntegrationManagerConfigEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/BreadcrumbsEntityQuery.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/BreadcrumbsEntityQuery.kt index e711e30188..0463d52fff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/BreadcrumbsEntityQuery.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/BreadcrumbsEntityQuery.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt index 79b611115c..6028697054 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ChunkEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/CurrentStateEventEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/CurrentStateEventEntityQueries.kt index ac00f791b8..9a3622e2dc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/CurrentStateEventEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/CurrentStateEventEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt index 9fa710a94b..c51c5aa09f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventAnnotationsSummaryEntityQuery.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventEntityQueries.kt index ee41729e2a..0bf62a19fe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/EventEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/FilterEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/FilterEntityQueries.kt index 33a7bff606..c76e606805 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/FilterEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/FilterEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupEntityQueries.kt index 1097cce463..9a1f2b3782 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupSummaryEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupSummaryEntityQueries.kt index 650558ee2f..fbfd8bd19e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupSummaryEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/GroupSummaryEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/HomeServerCapabilitiesQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/HomeServerCapabilitiesQueries.kt index 1ebe276fbe..b0b4f5a83d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/HomeServerCapabilitiesQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/HomeServerCapabilitiesQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt index cf34bc0cd1..d78bda2317 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/PushersQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RawCacheQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RawCacheQueries.kt index 93753ff24b..ac5e29e1de 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RawCacheQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RawCacheQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadMarkerEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadMarkerEntityQueries.kt index 636fc9ac73..35fb2b068b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadMarkerEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadMarkerEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt index 8ccc12a514..a3c741ad55 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptEntityQueries.kt index 1eb438190a..1a5e8fcf89 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptsSummaryEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptsSummaryEntityQueries.kt index 1d384a1de6..97f8418403 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptsSummaryEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReadReceiptsSummaryEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReferencesAggregatedSummaryEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReferencesAggregatedSummaryEntityQueries.kt index 60f665d460..8b3929cd60 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReferencesAggregatedSummaryEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ReferencesAggregatedSummaryEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomEntityQueries.kt index 35d21f8f5f..27e8d9d8d1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomMemberEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomMemberEntityQueries.kt index ae1d42772d..0747b12665 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomMemberEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomMemberEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomSummaryEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomSummaryEntityQueries.kt index 7eee63c7d5..7430b7822f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomSummaryEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/RoomSummaryEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ScalarTokenQuery.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ScalarTokenQuery.kt index 24387856b6..53fd525092 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ScalarTokenQuery.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/ScalarTokenQuery.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventEntityQueries.kt index d49b64c432..41a13c785d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventFilter.kt index 068ec0eb8e..10a0d1dcec 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/TimelineEventFilter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt index 6c3bc70787..35f317f192 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserDraftsEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserEntityQueries.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserEntityQueries.kt index 5566028d60..6a5528e3db 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserEntityQueries.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/query/UserEntityQueries.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/AuthQualifiers.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/AuthQualifiers.kt index 237eae38ec..fc00d9310c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/AuthQualifiers.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/AuthQualifiers.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/DbQualifiers.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/DbQualifiers.kt index 2380ea68b8..49e155add8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/DbQualifiers.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/DbQualifiers.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/FileQualifiers.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/FileQualifiers.kt index 5d140232df..74dbd647ab 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/FileQualifiers.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/FileQualifiers.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixComponent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixComponent.kt index e51d8f3ad3..d3f08fde36 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixComponent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixComponent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixModule.kt index be3175c22f..71cbd8f1a1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixScope.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixScope.kt index 8cfa48f26c..b027d47144 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixScope.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MatrixScope.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt index 5921e28f59..48fa41b350 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/MoshiProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt index 1c11ef79f9..f4688411ff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NetworkModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NoOpTestModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NoOpTestModule.kt index d74c6055b1..210eadeff7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NoOpTestModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/NoOpTestModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SerializeNulls.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SerializeNulls.kt index a66c7ff713..0d8fdde813 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SerializeNulls.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SerializeNulls.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SessionAssistedInjectModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SessionAssistedInjectModule.kt index b9ea7a0ad8..da3ecfb907 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SessionAssistedInjectModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/SessionAssistedInjectModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/StringQualifiers.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/StringQualifiers.kt index 10a523bbf7..d74a8dce57 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/StringQualifiers.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/StringQualifiers.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/WorkManagerProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/WorkManagerProvider.kt index 737b5335d4..4c9d06f7a2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/WorkManagerProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/di/WorkManagerProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/eventbus/EventBusTimberLogger.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/eventbus/EventBusTimberLogger.kt index b60d60a61b..2cbd7ba7f0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/eventbus/EventBusTimberLogger.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/eventbus/EventBusTimberLogger.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/LiveData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/LiveData.kt index 64fb72e537..718e7869dd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/LiveData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/LiveData.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Primitives.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Primitives.kt index ab45f08e42..855e7edac3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Primitives.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Primitives.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt index ebe9ab7ecb..0718096fd5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/RealmExtensions.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Result.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Result.kt index 0b812736cb..3734c5dc1d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Result.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Result.kt @@ -1,20 +1,17 @@ /* - - * Copyright 2019 New Vector Ltd * 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. - + * + * 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.extensions diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Try.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Try.kt index 1030d6717b..8786321464 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Try.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/extensions/Try.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt index 1741ca4845..e0e2f96fa9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Credentials.java b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Credentials.java index 59ad3be4c5..6844744044 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Credentials.java +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Credentials.java @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Fingerprint.java b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Fingerprint.java index 3975618f39..74a3f1ac55 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Fingerprint.java +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/Fingerprint.java @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/HomeServerConnectionConfig.java b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/HomeServerConnectionConfig.java index 6732a2cd92..b6bbebdd71 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/HomeServerConnectionConfig.java +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/HomeServerConnectionConfig.java @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/LoginStorage.java b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/LoginStorage.java index 672053d4cc..516007524e 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/LoginStorage.java +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/LoginStorage.java @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnown.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnown.kt index 234cd72689..56d372faa5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnown.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnown.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownBaseConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownBaseConfig.kt index e9efccce3c..7bbdda5eaa 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownBaseConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownBaseConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownManagerConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownManagerConfig.kt index f93d90af26..e9ef9e4393 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownManagerConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownManagerConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownPreferredConfig.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownPreferredConfig.kt index 5a918d6f0d..feefdf920d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownPreferredConfig.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/riot/WellKnownPreferredConfig.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/AccessTokenInterceptor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/AccessTokenInterceptor.kt index 6f5b07b229..b11fb6a5ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/AccessTokenInterceptor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/AccessTokenInterceptor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/HttpHeaders.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/HttpHeaders.kt index f15b0353e2..26bdd90507 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/HttpHeaders.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/HttpHeaders.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkCallbackStrategy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkCallbackStrategy.kt index caf5090ad6..8e18d2d850 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkCallbackStrategy.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkCallbackStrategy.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConnectivityChecker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConnectivityChecker.kt index ae55324d53..c149ed2591 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConnectivityChecker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConnectivityChecker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt index eb8ea2dc68..1154d1967c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkInfoReceiver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkInfoReceiver.kt index 85a69c853e..62f4f64a80 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkInfoReceiver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkInfoReceiver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ProgressRequestBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ProgressRequestBody.kt index 83f2d13459..818d7d6af3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ProgressRequestBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ProgressRequestBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/Request.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/Request.kt index 52556e4c2d..e6cec7f7ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/Request.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/Request.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitExtensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitExtensions.kt index b7eacfb4f5..c54af571d8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitExtensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitExtensions.kt @@ -1,6 +1,5 @@ /* * - * * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitFactory.kt index 89a0ce597a..0a797c8bc0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/RetrofitFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/TimeOutInterceptor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/TimeOutInterceptor.kt index 4fb8f513d0..6c604f232f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/TimeOutInterceptor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/TimeOutInterceptor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UnitConverterFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UnitConverterFactory.kt index dfcf041261..a4a9dfe686 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UnitConverterFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UnitConverterFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt index 9a5451bdde..973c120f59 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentHolder.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentInterceptor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentInterceptor.kt index 1099751112..256346a738 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentInterceptor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/UserAgentInterceptor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/httpclient/OkHttpClientUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/httpclient/OkHttpClientUtil.kt index 94d1d95857..b4a2d191e2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/httpclient/OkHttpClientUtil.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/httpclient/OkHttpClientUtil.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CheckNumberType.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CheckNumberType.kt index 40ba02ef6d..14d275e021 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CheckNumberType.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CheckNumberType.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt index ad5821cb0f..3cb11dc45b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/CipherSuiteMoshiAdapter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/ForceToBoolean.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/ForceToBoolean.kt index 42a63e0c56..f3b4cff34c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/ForceToBoolean.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/ForceToBoolean.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/RuntimeJsonAdapterFactory.java b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/RuntimeJsonAdapterFactory.java index a49660523e..c9bf6cc662 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/RuntimeJsonAdapterFactory.java +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/RuntimeJsonAdapterFactory.java @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt index 75301521d5..771dc40134 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/TlsVersionMoshiAdapter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/UriMoshiAdapter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/UriMoshiAdapter.kt index f45c89304b..bdfc3519c6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/UriMoshiAdapter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/parsing/UriMoshiAdapter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/CertUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/CertUtil.kt index 40a8e29829..9d7263f56a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/CertUtil.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/CertUtil.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/Fingerprint.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/Fingerprint.kt index f1280b879b..b096bd6c87 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/Fingerprint.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/Fingerprint.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManager.kt index 289a4ee04f..b1001bd39c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManager.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerApi24.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerApi24.kt index ed5a099ee4..4e58a0f2e5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerApi24.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerApi24.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerProvider.kt index 7dcff0294f..57b97c75c5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/PinnedTrustManagerProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt index 4ebeafd0c3..a5c711a3f0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/UnrecognizedCertificateException.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/UnrecognizedCertificateException.kt index ba68a51344..ca841f0ffb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/UnrecognizedCertificateException.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/UnrecognizedCertificateException.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/AccessTokenProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/AccessTokenProvider.kt index c1e20aaa58..c0e08b5ad8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/AccessTokenProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/AccessTokenProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/HomeserverAccessTokenProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/HomeserverAccessTokenProvider.kt index 1bb0f34222..82cde2399f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/HomeserverAccessTokenProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/token/HomeserverAccessTokenProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryEnumListProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryEnumListProcessor.kt index 6e0cb3e677..5653d7171d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryEnumListProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryEnumListProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt index fadea5ada7..899024458a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/query/QueryStringValueProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultCleanRawCacheTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultCleanRawCacheTask.kt index 7ab6645244..9d7efb7a7a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultCleanRawCacheTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultCleanRawCacheTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultGetUrlTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultGetUrlTask.kt index 1733abccd4..e0fe410096 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultGetUrlTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultGetUrlTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultRawService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultRawService.kt index 792a0b3aa7..be01366efa 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultRawService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/DefaultRawService.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/GlobalRealmModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/GlobalRealmModule.kt index 4df5edae88..e4e4160193 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/GlobalRealmModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/GlobalRealmModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawAPI.kt index f7aa738e90..4b08afd711 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawModule.kt index 95de057f04..aee2a52818 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/raw/RawModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt index ff12030961..861ae7c7ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultFileService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt index ff1f44341b..9918e83fbc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultInitialSyncProgressService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt index d1c0844caa..679a24be0c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/DefaultSession.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/EventInsertLiveProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/EventInsertLiveProcessor.kt index 85d714698f..53b1a73544 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/EventInsertLiveProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/EventInsertLiveProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt index 123b87748f..ffa7c841cf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionComponent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionLifecycleObserver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionLifecycleObserver.kt index 3cc73599ff..d26e9861d0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionLifecycleObserver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionLifecycleObserver.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionListeners.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionListeners.kt index 36242616ff..64f2d249f3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionListeners.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionListeners.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt index 5397b8d9bd..355a152c82 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionScope.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionScope.kt index 1fb950bad4..f897c96717 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionScope.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/SessionScope.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/TestInterceptor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/TestInterceptor.kt index cf8701ab86..fad68afd8a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/TestInterceptor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/TestInterceptor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountAPI.kt index be25c680a5..1db9d121a6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountModule.kt index 50469f99b0..7cf4f53adb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/AccountModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordParams.kt index 347e39ae39..70cdbda399 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordParams.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordTask.kt index 9338f58e6f..869d3f516c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/ChangePasswordTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountParams.kt index a8fa999c98..6c2e8b4a4e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountParams.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountTask.kt index b31a0a4c97..ac5febcdae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DeactivateAccountTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DefaultAccountService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DefaultAccountService.kt index 892d91fe34..31a39d45e5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DefaultAccountService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/account/DefaultAccountService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/CacheModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/CacheModule.kt index b6e2a8d0c4..83c7d2b0b5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/CacheModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/CacheModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/ClearCacheTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/ClearCacheTask.kt index 9b968f3d03..894c3a4723 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/ClearCacheTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/ClearCacheTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/DefaultCacheService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/DefaultCacheService.kt index ab53e87067..19365fce0a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/DefaultCacheService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cache/DefaultCacheService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/ActiveCallHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/ActiveCallHandler.kt index 40f5a56c33..952f115633 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/ActiveCallHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/ActiveCallHandler.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallEventProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallEventProcessor.kt index 5d1d5808e3..f789a64500 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallEventProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallEventProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallModule.kt index 60887db497..efacca229d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/CallModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/DefaultCallSignalingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/DefaultCallSignalingService.kt index a314b5fc3c..519beaf2ac 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/DefaultCallSignalingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/DefaultCallSignalingService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/GetTurnServerTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/GetTurnServerTask.kt index c38a00d1bd..1cedee3374 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/GetTurnServerTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/GetTurnServerTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/VoipApi.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/VoipApi.kt index ea2f55cf67..72c6c58f27 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/VoipApi.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/VoipApi.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/model/MxCallImpl.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/model/MxCallImpl.kt index 1e724706f3..7edb375d8e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/model/MxCallImpl.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/call/model/MxCallImpl.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cleanup/CleanupSession.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cleanup/CleanupSession.kt index 427fb59898..b5c1e6a282 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cleanup/CleanupSession.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/cleanup/CleanupSession.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentModule.kt index ba87d06097..10c1614050 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentUploadResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentUploadResponse.kt index cb0c11d1b8..b5de26b39d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentUploadResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ContentUploadResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUploadStateTracker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUploadStateTracker.kt index 951c24ccb7..754f12bd68 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUploadStateTracker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUploadStateTracker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUrlResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUrlResolver.kt index 80f69f8890..f765056496 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUrlResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/DefaultContentUrlResolver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt index bb62b02112..4fc1d67c05 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/FileUploader.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ImageCompressor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ImageCompressor.kt index a125c0aea4..39b0e60203 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ImageCompressor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ImageCompressor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ThumbnailExtractor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ThumbnailExtractor.kt index 05558fcf4c..8c3aad6a1f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ThumbnailExtractor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/ThumbnailExtractor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt index 0b517e014f..dd630cd3d4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DefaultContentDownloadStateTracker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DefaultContentDownloadStateTracker.kt index a1f305fb06..3a02d00aa4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DefaultContentDownloadStateTracker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DefaultContentDownloadStateTracker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DownloadProgressInterceptor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DownloadProgressInterceptor.kt index d8ef0c3323..e357d4434c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DownloadProgressInterceptor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/DownloadProgressInterceptor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/ProgressResponseBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/ProgressResponseBody.kt index 8bfe74862d..f4cb1a80e5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/ProgressResponseBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/download/ProgressResponseBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterRepository.kt index e07778b536..095c39a485 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterRepository.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterService.kt index d120312a1f..9a16b8fd4a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultFilterService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultSaveFilterTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultSaveFilterTask.kt index b5c214dbaa..69ced92fe5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultSaveFilterTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/DefaultSaveFilterTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/EventFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/EventFilter.kt index fdfda09633..1be62304a1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/EventFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/EventFilter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/Filter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/Filter.kt index 4c4a4d6181..f1414e907e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/Filter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/Filter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterApi.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterApi.kt index 8a45a6d66f..285bd51d38 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterApi.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterApi.kt @@ -1,6 +1,5 @@ /* * Copyright 2018 Matthias Kesler - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterFactory.kt index 12764248ef..2eac0a5059 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterModule.kt index f5052d57ac..8531bed1ff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterRepository.kt index b19478c42f..df61539547 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterRepository.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterResponse.kt index 951b7e8ca2..b2d5429216 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterUtil.kt index 3a030cc470..bd7f0ad402 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterUtil.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/FilterUtil.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomEventFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomEventFilter.kt index cefa9e8ece..d6089f9f5b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomEventFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomEventFilter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomFilter.kt index c0694aee51..fbf22fde51 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/filter/RoomFilter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGetGroupDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGetGroupDataTask.kt index c91bd381a4..dd703a5e93 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGetGroupDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGetGroupDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroup.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroup.kt index 3fbed5d992..01b57767b3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroup.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroup.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroupService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroupService.kt index 25c9d1dff7..425d6a9aca 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroupService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/DefaultGroupService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GetGroupDataWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GetGroupDataWorker.kt index ac72b8ebfb..d6b9363d54 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GetGroupDataWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GetGroupDataWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupAPI.kt index f5156017ea..004112578c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupFactory.kt index d9566fe5f1..31450763d8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupModule.kt index b47bb0a5ad..4dd61aa914 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/GroupModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupProfile.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupProfile.kt index 9990e3d821..30eeb74b2e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupProfile.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupProfile.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRoom.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRoom.kt index c93878a0d4..86e64f6797 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRoom.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRoom.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRooms.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRooms.kt index f7e36ad8bc..9e5d18225b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRooms.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupRooms.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryResponse.kt index a11ba1ecdc..bf287e982c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryRoomsSection.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryRoomsSection.kt index 428caaa209..8f9b29ed0a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryRoomsSection.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryRoomsSection.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUser.kt index f61160fb1a..121ae6fd7d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUser.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUsersSection.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUsersSection.kt index a8ade1ab5e..799aa8a5b1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUsersSection.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupSummaryUsersSection.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUser.kt index d9a9631ef7..a54c66535e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUser.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUsers.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUsers.kt index 1ce283756d..9dd1339157 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUsers.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/group/model/GroupUsers.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/CapabilitiesAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/CapabilitiesAPI.kt index 33ebf3e548..39b6608de3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/CapabilitiesAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/CapabilitiesAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultGetHomeServerCapabilitiesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultGetHomeServerCapabilitiesTask.kt index 7e1ad600e3..8d289dfda5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultGetHomeServerCapabilitiesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultGetHomeServerCapabilitiesTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt index 0989d6c191..27396aac80 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/DefaultHomeServerCapabilitiesService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetCapabilitiesResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetCapabilitiesResult.kt index 54d8cc7839..ab029a0fce 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetCapabilitiesResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetCapabilitiesResult.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetUploadCapabilitiesResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetUploadCapabilitiesResult.kt index 43395aae3e..92903bf96e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetUploadCapabilitiesResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/GetUploadCapabilitiesResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerCapabilitiesModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerCapabilitiesModule.kt index 240839cf7b..2a1573dd98 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerCapabilitiesModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerCapabilitiesModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerPinger.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerPinger.kt index dee73f08f1..522097acbf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerPinger.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/homeserver/HomeServerPinger.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/DefaultIdentityService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/DefaultIdentityService.kt index fc841af2d9..20f8b7f868 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/DefaultIdentityService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/DefaultIdentityService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/EnsureIdentityToken.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/EnsureIdentityToken.kt index 838b9975b7..5e1434403e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/EnsureIdentityToken.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/EnsureIdentityToken.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAPI.kt index f2c889f024..7e2702e70d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAccessTokenProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAccessTokenProvider.kt index cf9ba0ee89..492c3a5d0c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAccessTokenProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAccessTokenProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityApiProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityApiProvider.kt index 09922cb475..b2e1f2d7cb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityApiProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityApiProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAuthAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAuthAPI.kt index 7ebe775ce5..fd6e1163ef 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAuthAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityAuthAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityBulkLookupTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityBulkLookupTask.kt index 45d7d48a18..3b0d514cf3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityBulkLookupTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityBulkLookupTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityDisconnectTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityDisconnectTask.kt index 0e68689ce7..50e24f1245 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityDisconnectTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityDisconnectTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt index 0c35eef642..1bb57b47cd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityPingTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityPingTask.kt index 6994ef1bce..b0d33811bd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityPingTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityPingTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRegisterTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRegisterTask.kt index bba6f99178..19215f353a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRegisterTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRegisterTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRequestTokenForBindingTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRequestTokenForBindingTask.kt index 3155e19943..bd4cd763f0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRequestTokenForBindingTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityRequestTokenForBindingTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentitySubmitTokenForBindingTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentitySubmitTokenForBindingTask.kt index 7b25986ae3..ebc71c715d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentitySubmitTokenForBindingTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentitySubmitTokenForBindingTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityTaskHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityTaskHelper.kt index 52f29c857b..d3aecce381 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityTaskHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityTaskHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityData.kt index 4574d9d598..0f04f2fe1a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityData.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityPendingBinding.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityPendingBinding.kt index 85bf65d741..41988a4ec6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityPendingBinding.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityPendingBinding.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityStore.kt index 61334f188d..3a905833d5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/data/IdentityStore.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntity.kt index 41645bc07b..cc03465cc8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntityQuery.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntityQuery.kt index 1c612d6bf4..062c28ea55 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntityQuery.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityDataEntityQuery.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityMapper.kt index 4b99ba17d3..98207f1b38 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntity.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntity.kt index 94a359f4d1..be68e17a49 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntity.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntity.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntityQuery.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntityQuery.kt index 30de96e557..aa2f4dd5b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntityQuery.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityPendingBindingEntityQuery.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityRealmModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityRealmModule.kt index 85ea903ab6..1f2cfad33c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityRealmModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/IdentityRealmModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStore.kt index 244f09f06a..0352e9b936 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStore.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityAccountResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityAccountResponse.kt index f23c493206..5d01b9b760 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityAccountResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityAccountResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityHashDetailResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityHashDetailResponse.kt index 04ed62bddd..306e423053 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityHashDetailResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityHashDetailResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpParams.kt index f737e4742c..9742506cae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpParams.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpResponse.kt index 0a274ebe44..19c1835d22 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityLookUpResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRegisterResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRegisterResponse.kt index 1769b3654e..ad7b3f655e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRegisterResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRegisterResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestOwnershipParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestOwnershipParams.kt index bd263e1dc6..c6c5513191 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestOwnershipParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestOwnershipParams.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenBody.kt index b93a3f43ae..3c7e997cc6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenResponse.kt index 5f4209cac8..513c5eaa0c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/model/IdentityRequestTokenResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/AllowedWidgetsContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/AllowedWidgetsContent.kt index 5ea6e4d4d7..8d0e8c930d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/AllowedWidgetsContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/AllowedWidgetsContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/DefaultIntegrationManagerService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/DefaultIntegrationManagerService.kt index 4f1185929f..753e865b4a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/DefaultIntegrationManagerService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/DefaultIntegrationManagerService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManager.kt index 0f7b3f85c7..df4e407415 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManager.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerConfigExtractor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerConfigExtractor.kt index 78edc59fca..f7a8b68515 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerConfigExtractor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerConfigExtractor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerModule.kt index fb7f835d9b..eb8418237d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerWidgetData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerWidgetData.kt index c592237a1f..77423d441b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerWidgetData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationManagerWidgetData.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationProvisioningContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationProvisioningContent.kt index e48a6fd84f..9a8b80764d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationProvisioningContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/integrationmanager/IntegrationProvisioningContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/DefaultPushRuleService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/DefaultPushRuleService.kt index ffe11ee04b..217da269f9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/DefaultPushRuleService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/DefaultPushRuleService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt index a0667cc4a3..7763251a01 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/notification/ProcessEventForPushTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/GetOpenIdTokenTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/GetOpenIdTokenTask.kt index 3da6fdca93..5d7cfd1719 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/GetOpenIdTokenTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/GetOpenIdTokenTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdAPI.kt index e56e2e630e..4614d82453 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdModule.kt index 60ee7fb747..a462c29f8a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/OpenIdModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/RequestOpenIdTokenResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/RequestOpenIdTokenResponse.kt index 8103efb895..3bf84bfd8b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/RequestOpenIdTokenResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/openid/RequestOpenIdTokenResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/DefaultPermalinkService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/DefaultPermalinkService.kt index cef1fce05c..7db9d8f68a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/DefaultPermalinkService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/DefaultPermalinkService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/PermalinkFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/PermalinkFactory.kt index 3ec8fe8397..71a6e224bf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/PermalinkFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/permalinks/PermalinkFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AccountThreePidsResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AccountThreePidsResponse.kt index 185294fd3b..0a792397f8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AccountThreePidsResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AccountThreePidsResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailBody.kt index ff81ad6a5c..f6fa705158 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailResponse.kt index 8654d7c5ba..81f5b7c698 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddEmailResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnBody.kt index 64c53f6729..1695e42e82 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnResponse.kt index b4c137b3a1..347522ac12 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddMsisdnResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddThreePidTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddThreePidTask.kt index c844c8ca6f..8942f2fdbe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddThreePidTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/AddThreePidTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidBody.kt index dff246e6f1..fa45ae9940 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidsTask.kt index 52fbcb5185..dbe6bff508 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/BindThreePidsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt index 97212a8687..8d09277295 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DefaultProfileService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidBody.kt index e7d4568f8b..220ef7d2b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidResponse.kt index 3817277a9d..dea3e30268 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidTask.kt index 69ff7d82da..3f43cbe599 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/DeleteThreePidTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddThreePidBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddThreePidBody.kt index 73e9b39cea..4e46dd096d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddThreePidBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddThreePidBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddingThreePidTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddingThreePidTask.kt index 3886b926ba..0b1bf88280 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddingThreePidTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/FinalizeAddingThreePidTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/GetProfileInfoTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/GetProfileInfoTask.kt index 7889dbf240..5f1f621ddb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/GetProfileInfoTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/GetProfileInfoTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePid.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePid.kt index af7e217d47..d309930c3d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePid.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePid.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePidMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePidMapper.kt index b1877027ed..0b1ed4c272 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePidMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/PendingThreePidMapper.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt index 4e2f518c5a..7794f578b0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileModule.kt index ae7ae7a6f3..3dec63f198 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ProfileModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/RefreshUserThreePidsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/RefreshUserThreePidsTask.kt index bf09e52284..5dd092cceb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/RefreshUserThreePidsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/RefreshUserThreePidsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlBody.kt index 25d995fbdf..57d6c72215 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlTask.kt index 1eaedb0220..4b863c2098 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetAvatarUrlTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameBody.kt index 306aca6f44..47b8f23f59 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameTask.kt index 66406a480c..1fa84f98c1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/SetDisplayNameTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ThirdPartyIdentifier.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ThirdPartyIdentifier.kt index b7c756cbb7..80c41d1a07 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ThirdPartyIdentifier.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ThirdPartyIdentifier.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidBody.kt index 1a91245894..f91eb412b4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidResponse.kt index df31efdb6c..1ebaf78314 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidsTask.kt index b08c283765..96b0717edb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/UnbindThreePidsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ValidateSmsCodeTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ValidateSmsCodeTask.kt index b11955b96a..36804e06fe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ValidateSmsCodeTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/profile/ValidateSmsCodeTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddHttpPusherWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddHttpPusherWorker.kt index 62bb2ba7dd..31c5cda5ec 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddHttpPusherWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddHttpPusherWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddPushRuleTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddPushRuleTask.kt index 1c8f11a12d..28ac5db52e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddPushRuleTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/AddPushRuleTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultConditionResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultConditionResolver.kt index 0d3ad340f5..84a05067be 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultConditionResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultConditionResolver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt index 3ef46785b2..8f80ac46e4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushRulesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushRulesTask.kt index de96db01dd..0c532cedbc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushRulesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushRulesTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersResponse.kt index a36705cc57..d8f0ce12d5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersTask.kt index bad507555d..39e970f4a8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/GetPushersTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusher.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusher.kt index 89dae0c7e9..a594675e28 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusher.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusher.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusherData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusherData.kt index d2520a915b..c8d4d77fb1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusherData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/JsonPusherData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushRulesApi.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushRulesApi.kt index 166e8ac3be..cbcb7d2b37 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushRulesApi.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushRulesApi.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersAPI.kt index 6ad70db5e4..ed4fb73e1b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt index 9569574fce..a6042b27a2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePushRuleTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePushRuleTask.kt index cb46c1342d..2fc97cf023 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePushRuleTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePushRuleTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePusherTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePusherTask.kt index cf8cd1e10b..1f10863799 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePusherTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/RemovePusherTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/SavePushRulesTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/SavePushRulesTask.kt index 7761544d48..6ba769a3b7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/SavePushRulesTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/SavePushRulesTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleActionsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleActionsTask.kt index d68888a3f5..c2dca8a9a5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleActionsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleActionsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleEnableStatusTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleEnableStatusTask.kt index 2f9ac3edc0..4100071c90 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleEnableStatusTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/UpdatePushRuleEnableStatusTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt index 0eb64af8a0..1338df6878 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoom.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomDirectoryService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomDirectoryService.kt index 12d9d5bcdc..a091b5f85e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomDirectoryService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomDirectoryService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt index 17c724368d..171e90703c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/DefaultRoomService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt index 4a196193ba..9ff0deec89 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/EventRelationsAggregationProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt index 35c20cf5cb..fc80842f73 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAvatarResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAvatarResolver.kt index 6851780a62..90ee99a919 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAvatarResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomAvatarResolver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomFactory.kt index 28eb17314a..d4fa040d06 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomGetter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomGetter.kt index 985cf80e97..2947518605 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomGetter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomGetter.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt index 700507735b..30e3337a68 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/RoomModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasBody.kt index b5938d592a..1cea75f04c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasTask.kt index 510bd25d9c..695be3f633 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/AddRoomAliasTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/GetRoomIdByAliasTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/GetRoomIdByAliasTask.kt index e1d119c432..8b011980d0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/GetRoomIdByAliasTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/GetRoomIdByAliasTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasDescription.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasDescription.kt index ac0b59c916..ada3839fa0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasDescription.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/alias/RoomAliasDescription.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/call/DefaultRoomCallService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/call/DefaultRoomCallService.kt index 3d764e001c..205a085df6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/call/DefaultRoomCallService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/call/DefaultRoomCallService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBody.kt index e9ae5e7a6b..c30f11b9af 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBodyBuilder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBodyBuilder.kt index 0a814a4c93..7e28200ccd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBodyBuilder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomBodyBuilder.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomResponse.kt index cfc63bcb7e..a29e29dc91 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomTask.kt index 6738c7d881..4f0aaf083d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/CreateRoomTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/RoomCreateEventProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/RoomCreateEventProcessor.kt index e6de3fbd71..95572c203c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/RoomCreateEventProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/create/RoomCreateEventProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetPublicRoomTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetPublicRoomTask.kt index 4d760d1b09..f2bd0c5f69 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetPublicRoomTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetPublicRoomTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetThirdPartyProtocolsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetThirdPartyProtocolsTask.kt index 39f1c60829..5e08284706 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetThirdPartyProtocolsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/directory/GetThirdPartyProtocolsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt index 0426ee13e1..92e16a3501 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DefaultDraftService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt index 5cc6c990d9..c8c52c4b23 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/draft/DraftRepository.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/DefaultMembershipService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/DefaultMembershipService.kt index 91039f4c0f..4fc865304b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/DefaultMembershipService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/DefaultMembershipService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt index e51a4605c8..627f927ad8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/LoadRoomMembersTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomChangeMembershipStateDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomChangeMembershipStateDataSource.kt index 00d54a62e7..b9c547d4fb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomChangeMembershipStateDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomChangeMembershipStateDataSource.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt index 942da9995e..bfedd3afd1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomDisplayNameResolver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEntityFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEntityFactory.kt index f526550918..f78b5d7992 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEntityFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEntityFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEventHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEventHandler.kt index 2821eb2fb9..89fe2901c0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEventHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberEventHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberHelper.kt index 4ef2d973c0..7105a2cc22 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMemberHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMembersResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMembersResponse.kt index d8ac0983eb..018d81929c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMembersResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/RoomMembersResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/MembershipAdminTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/MembershipAdminTask.kt index 948bab39fb..4654a28536 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/MembershipAdminTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/MembershipAdminTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/UserIdAndReason.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/UserIdAndReason.kt index 4589b5e4bc..fe3637636a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/UserIdAndReason.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/admin/UserIdAndReason.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteBody.kt index 6fad0b10b7..06b75709a2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteTask.kt index 4b9935d2fa..854a332679 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/InviteTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/JoinRoomTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/JoinRoomTask.kt index f3e2efcde3..dd1dc5fa8a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/JoinRoomTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/joining/JoinRoomTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/leaving/LeaveRoomTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/leaving/LeaveRoomTask.kt index 2a3e6c0aaa..58e34a15ec 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/leaving/LeaveRoomTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/leaving/LeaveRoomTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/InviteThreePidTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/InviteThreePidTask.kt index 88809fec13..80af00fc78 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/InviteThreePidTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/InviteThreePidTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/ThreePidInviteBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/ThreePidInviteBody.kt index 5b0098dc9b..3141c052c3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/ThreePidInviteBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/membership/threepid/ThreePidInviteBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/DefaultRoomPushRuleService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/DefaultRoomPushRuleService.kt index 93e2881c13..8797b0c764 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/DefaultRoomPushRuleService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/DefaultRoomPushRuleService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRule.kt index a7c7719342..d2c0d13b51 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRuleMapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRuleMapper.kt index 86a9500339..86d2e6c619 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRuleMapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/RoomPushRuleMapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/SetRoomNotificationStateTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/SetRoomNotificationStateTask.kt index 5a1b8d2a65..de049d7538 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/SetRoomNotificationStateTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/notification/SetRoomNotificationStateTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/prune/RedactionEventProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/prune/RedactionEventProcessor.kt index 5ff7ae69bb..95fb6b1495 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/prune/RedactionEventProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/prune/RedactionEventProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt index a5520972b0..62dc001755 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/DefaultReadService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/FullyReadContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/FullyReadContent.kt index d2b216d625..9b4db795ec 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/FullyReadContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/FullyReadContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/MarkAllRoomsReadTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/MarkAllRoomsReadTask.kt index b06b83aac3..ebf034a775 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/MarkAllRoomsReadTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/MarkAllRoomsReadTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt index f750735bbb..a98bb02c83 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/read/SetReadMarkersTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt index 204a7f8aba..a151a16383 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/DefaultRelationService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt index 28cdd9a72b..51eecb8c2a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FetchEditHistoryTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt index 86fe75d9ed..fa6db2ee37 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/FindReactionEventForUndoTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/RelationsResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/RelationsResponse.kt index 24fcf89bde..a65165d457 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/RelationsResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/RelationsResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt index cd828f7b30..25dfe32cbb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/SendRelationWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt index d235cdba3b..1f68a700ad 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/relation/UpdateQuickReactionTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt index 1117ed1c29..384c544ee0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/DefaultReportingService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentBody.kt index bd9f09f4fd..4c40376ab8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentTask.kt index b13c21fa2a..bd11937676 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/reporting/ReportContentTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/CancelSendTracker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/CancelSendTracker.kt index 0b79b93cf6..5f6ebc68c2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/CancelSendTracker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/CancelSendTracker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt index 98b793923c..b357e6905a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/DefaultSendService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/EncryptEventWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/EncryptEventWorker.kt index 8781f75ee8..73b4c48e14 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/EncryptEventWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/EncryptEventWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt index ac92e526a8..aaf2f9fd30 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoEventFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoIdentifiers.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoIdentifiers.kt index 391fa2a3bd..88dfbb90c1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoIdentifiers.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoIdentifiers.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt index 50f5e13980..9e1de291c4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/LocalEchoRepository.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParser.kt index f80285574e..e3ae6e4870 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MarkdownParser.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt index a5b6e3bfb0..ba69a8751b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/MultipleEventSendingDispatcherWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/NoMerger.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/NoMerger.kt index 7b9e1ec9d8..b56b283171 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/NoMerger.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/NoMerger.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RedactEventWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RedactEventWorker.kt index d3b4c1f97d..682865eaee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RedactEventWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RedactEventWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RoomEventSender.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RoomEventSender.kt index 4ac8d87550..8f783d7478 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RoomEventSender.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/RoomEventSender.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendEventWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendEventWorker.kt index 96b33ce74f..0014213b3f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendEventWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendEventWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendResponse.kt index d9ba553ce5..13f0f3c16f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/SendResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/TextContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/TextContent.kt index 33490a4a03..efc0b55abf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/TextContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/TextContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpec.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpec.kt index 18063bbc1e..57c3eacb0c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpec.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpec.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpecComparator.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpecComparator.kt index e6bc19f3ae..3d235ec4d6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpecComparator.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/MentionLinkSpecComparator.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/TextPillsUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/TextPillsUtils.kt index e0fe580cba..faf966edf4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/TextPillsUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/send/pills/TextPillsUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt index 0150acd1e2..d21805f4f3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/DefaultStateService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/SendStateTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/SendStateTask.kt index 52e865c4e2..642f68c15b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/SendStateTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/SendStateTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/StateEventDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/StateEventDataSource.kt index 65d30868d8..d0f6f8050e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/StateEventDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/state/StateEventDataSource.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt index a43241a657..107055b8c3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryDataSource.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryEventsHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryEventsHelper.kt index dd71bff436..a3862b001b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryEventsHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryEventsHelper.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. 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 0aac30654a..f58059d6f2 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 @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/AddTagToRoomTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/AddTagToRoomTask.kt index d78a7f338a..013fc86d5c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/AddTagToRoomTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/AddTagToRoomTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DefaultTagsService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DefaultTagsService.kt index 141adad643..932cb5d67e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DefaultTagsService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DefaultTagsService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DeleteTagFromRoomTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DeleteTagFromRoomTask.kt index 9017338503..b22355d431 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DeleteTagFromRoomTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/DeleteTagFromRoomTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/TagBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/TagBody.kt index 33d39ba4d1..c30ef8e3be 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/TagBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tags/TagBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultGetContextOfEventTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultGetContextOfEventTask.kt index 9d880c0428..7a611dd350 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultGetContextOfEventTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultGetContextOfEventTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultPaginationTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultPaginationTask.kt index 55b8fb6ff4..b663d03bd7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultPaginationTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultPaginationTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt index 3873a43cf5..cf2ff38d90 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimeline.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt index c60a944409..df2d238c05 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/DefaultTimelineService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/EventContextResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/EventContextResponse.kt index 27006c8183..bce03354d7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/EventContextResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/EventContextResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt index 23a32996fa..d1bfa1adcb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/FetchTokenAndPaginateTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/GetEventTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/GetEventTask.kt index 531fac4a57..acac3929ae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/GetEventTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/GetEventTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationDirection.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationDirection.kt index 581f23c403..930d01759e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationDirection.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationDirection.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationResponse.kt index b0f2e693dc..ed384d3b3c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/PaginationResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineEventDecryptor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineEventDecryptor.kt index 0ca0d19b5e..94625704e6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineEventDecryptor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineEventDecryptor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt index f2c520a50f..3dcc5e21b1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineHiddenReadReceipts.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineSendEventWorkCommon.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineSendEventWorkCommon.kt index 3bc6a85cfb..e30d1b5b44 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineSendEventWorkCommon.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TimelineSendEventWorkCommon.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEvent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEvent.kt index 655af7c4e1..08b20f1701 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEvent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEvent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt index 1fefdf9b50..2a532c6bf5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/timeline/TokenChunkEventPersistor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tombstone/RoomTombstoneEventProcessor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tombstone/RoomTombstoneEventProcessor.kt index 8707eb2429..8022d98975 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tombstone/RoomTombstoneEventProcessor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/tombstone/RoomTombstoneEventProcessor.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt index b8db9ce69c..5d88dbca15 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/DefaultTypingService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt index 719fffbb4e..c8cbb08e2c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/SendTypingTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingBody.kt index 8ed77a4829..973870bb47 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingEventContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingEventContent.kt index f616bfefd0..488d38d762 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingEventContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/typing/TypingEventContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/DefaultUploadsService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/DefaultUploadsService.kt index 76fb18b130..824bd23c01 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/DefaultUploadsService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/DefaultUploadsService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/GetUploadsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/GetUploadsTask.kt index be53b8afe1..d0439ce7f9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/GetUploadsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/uploads/GetUploadsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt index 0b380f4d35..2ba1eebe61 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/DefaultSearchService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt index a903cd8cc8..4a74b0a023 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchAPI.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt index 50cf8b8d84..ae808107e8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchModule.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt index c90068e507..4f574e5ead 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/SearchTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt index 7cf86457d6..c8d21dba28 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt index 9d87114237..452cf5aed1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestCategories.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestEventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestEventContext.kt index 9db97295dc..5c5c335c08 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestEventContext.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestEventContext.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestFilter.kt index 196d49346c..8d733968ae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestFilter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt index f0b6f7bc31..1cbcdb7824 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestOrder.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt index c5234b1052..6064381808 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/request/SearchRequestRoomEvents.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt index 8e11ba1468..1afb985f3a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt index 8e46502e27..03a41c0e4f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseCategories.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt index f4d8699b2d..aeeb602635 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseEventContext.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt index 5b0806ce85..2c5f842f11 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseItem.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt index 2aac427232..56e3738a9a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/search/response/SearchResponseRoomEvents.kt @@ -1,5 +1,4 @@ /* - * Copyright 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/DefaultSecureStorageService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/DefaultSecureStorageService.kt index 4ac796791a..ef8133dd15 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/DefaultSecureStorageService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/DefaultSecureStorageService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt index 8eab44366c..c3b2d7f161 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/securestorage/SecretStoringUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/DefaultSignOutService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/DefaultSignOutService.kt index 0fdecc8d21..ea3730b195 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/DefaultSignOutService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/DefaultSignOutService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignInAgainTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignInAgainTask.kt index 6f26fb25cd..3bed0bdbff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignInAgainTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignInAgainTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutAPI.kt index e4b05bfc67..4c92938b77 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutModule.kt index c482200030..cdf13329a1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutTask.kt index ef507477cd..153ea5a6fd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/signout/SignOutTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt index 5c855e190c..da28199f1b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/CryptoSyncHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt index c3dd9fd577..135f711a6c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/GroupSyncHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt index 5fe23e1b69..085a66d37c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/ReadReceiptHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomFullyReadHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomFullyReadHandler.kt index b0c44ef4f0..e8934fdf21 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomFullyReadHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomFullyReadHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt index 64c30825fc..8589889b30 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomSyncHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTagHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTagHandler.kt index 8dbd77f3fd..c18bfc7784 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTagHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTagHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTypingUsersHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTypingUsersHandler.kt index 71a4d33d3f..1655e551f1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTypingUsersHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/RoomTypingUsersHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt index db14c53456..427a8896c9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncModule.kt index 87afe78e70..010c029c97 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt index 764087a7b8..a80b062427 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncResponseHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt index 9924d44764..9393d4703f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTaskSequencer.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTaskSequencer.kt index 4b29a82ad4..17d465114d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTaskSequencer.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTaskSequencer.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTokenStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTokenStore.kt index e001e61149..cf061586b7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTokenStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/SyncTokenStore.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/UserAccountDataSyncHandler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/UserAccountDataSyncHandler.kt index 4ef6a5a3e1..0e549172f3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/UserAccountDataSyncHandler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/UserAccountDataSyncHandler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt index 485eca6f74..ccd7f770fb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncThread.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncThread.kt index 9fd9c313db..4aaca991dd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncThread.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncThread.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt index e64e0b7933..17baa91cec 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/job/SyncWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceInfo.kt index 0e7fbf492f..fdb9916190 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceListResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceListResponse.kt index df79060192..bfa8c342b6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceListResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceListResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceOneTimeKeysCountSyncResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceOneTimeKeysCountSyncResponse.kt index 36fe4acfa1..d5b435ac27 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceOneTimeKeysCountSyncResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DeviceOneTimeKeysCountSyncResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DevicesListResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DevicesListResponse.kt index ec59e8f2c8..3dc71a355d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DevicesListResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/DevicesListResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupSyncProfile.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupSyncProfile.kt index 5a7ed53cae..ee6aabb0a9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupSyncProfile.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupSyncProfile.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupsSyncResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupsSyncResponse.kt index 68557d1d9a..4c2dce3ba8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupsSyncResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/GroupsSyncResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedGroupSync.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedGroupSync.kt index cae6bc36a4..148c2aeab9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedGroupSync.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedGroupSync.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedRoomSync.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedRoomSync.kt index efd1b50b3b..c21a73abc2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedRoomSync.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/InvitedRoomSync.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/PresenceSyncResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/PresenceSyncResponse.kt index 2c6057d152..92d09aa4f5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/PresenceSyncResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/PresenceSyncResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomInviteState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomInviteState.kt index e37d4f58c7..ded9e2a350 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomInviteState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomInviteState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomResponse.kt index df53eabd80..4b5785113a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSync.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSync.kt index 08556e800d..212d319139 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSync.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSync.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncAccountData.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncAccountData.kt index 13ea47a505..1c35d812ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncAccountData.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncAccountData.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncEphemeral.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncEphemeral.kt index 6d0e9e825f..d59dddb3ea 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncEphemeral.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncEphemeral.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncState.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncState.kt index f30e5a082d..5355b7eef1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncState.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncState.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncSummary.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncSummary.kt index a2dddb9e8c..228a71ec28 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncSummary.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncSummary.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncTimeline.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncTimeline.kt index 29e5d2089b..ddf430099a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncTimeline.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncTimeline.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncUnreadNotifications.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncUnreadNotifications.kt index bbcec474e2..f01534b884 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncUnreadNotifications.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomSyncUnreadNotifications.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt index 79000edf40..dd2f96c988 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/RoomsSyncResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/SyncResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/SyncResponse.kt index e57c6cd1f8..f2b2fb7e8f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/SyncResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/SyncResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/ToDeviceSyncResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/ToDeviceSyncResponse.kt index 1bc9f0a3fa..8f3af56cde 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/ToDeviceSyncResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/ToDeviceSyncResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/TokensChunkResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/TokensChunkResponse.kt index 813c300ec9..533ba70b05 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/TokensChunkResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/TokensChunkResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/AcceptedTermsContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/AcceptedTermsContent.kt index 57cd387243..0fd2035449 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/AcceptedTermsContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/AcceptedTermsContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/BreadcrumbsContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/BreadcrumbsContent.kt index 54aa5cb0b9..caba96742b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/BreadcrumbsContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/BreadcrumbsContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/DirectMessagesContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/DirectMessagesContent.kt index fbaccf08c6..c406f3acf1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/DirectMessagesContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/DirectMessagesContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IdentityServerContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IdentityServerContent.kt index 5328525c53..ddda82fbd5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IdentityServerContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IdentityServerContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IgnoredUsersContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IgnoredUsersContent.kt index 1095d2e76d..c660d8f379 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IgnoredUsersContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/IgnoredUsersContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/UserAccountDataSync.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/UserAccountDataSync.kt index 358f090bbd..05b50ab2c5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/UserAccountDataSync.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/model/accountdata/UserAccountDataSync.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/AcceptTermsBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/AcceptTermsBody.kt index 497d30fdca..ee23c9e6bc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/AcceptTermsBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/AcceptTermsBody.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt index f887754b6b..5eb97cee3a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/DefaultTermsService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsAPI.kt index 950c0a151b..4c97f462eb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsModule.kt index 7aa97cd1cc..b7cd7a4a97 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsResponse.kt index 240291c09f..a185e0b80f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/terms/TermsResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/typing/DefaultTypingUsersTracker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/typing/DefaultTypingUsersTracker.kt index 0fa557467c..2b7ff2624a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/typing/DefaultTypingUsersTracker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/typing/DefaultTypingUsersTracker.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/DefaultUserService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/DefaultUserService.kt index e79893e752..d2eb7a14ef 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/DefaultUserService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/DefaultUserService.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/SearchUserAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/SearchUserAPI.kt index 2b9a5f4aa4..c5c546bbed 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/SearchUserAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/SearchUserAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserDataSource.kt index f6cb86c0ed..e83725b10d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserDataSource.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserEntityFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserEntityFactory.kt index 6333a87a0b..9a9458e84b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserEntityFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserEntityFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserModule.kt index 51e4339061..4dfc7586ae 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserStore.kt index ea64cb9a2c..5c8cbd08b1 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/UserStore.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataAPI.kt index 25336cacf7..3de484fab3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataContent.kt index 5384a1ba9c..5f9f0777d8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataContent.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataDataSource.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataDataSource.kt index a9261eddab..d145c008ba 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataDataSource.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataDataSource.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataModule.kt index 291d0bfaf7..3173686a27 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/AccountDataModule.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DefaultAccountDataService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DefaultAccountDataService.kt index 2bf1705855..1f1e987ebf 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DefaultAccountDataService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DefaultAccountDataService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DirectChatsHelper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DirectChatsHelper.kt index 8bec45a203..e297f59b96 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DirectChatsHelper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/DirectChatsHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveBreadcrumbsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveBreadcrumbsTask.kt index 6ef28954e0..d6c95d6b52 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveBreadcrumbsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveBreadcrumbsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveIgnoredUsersTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveIgnoredUsersTask.kt index 9141aabc80..63c0ce645e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveIgnoredUsersTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/SaveIgnoredUsersTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateBreadcrumbsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateBreadcrumbsTask.kt index ab602dd603..874c2741de 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateBreadcrumbsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateBreadcrumbsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateIgnoredUserIdsTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateIgnoredUserIdsTask.kt index b47a25187b..d1393c8b37 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateIgnoredUserIdsTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateIgnoredUserIdsTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateUserAccountDataTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateUserAccountDataTask.kt index a68d76f25b..80ab79b228 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateUserAccountDataTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/accountdata/UpdateUserAccountDataTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUser.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUser.kt index 4299794c16..78981c53be 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUser.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUser.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUserTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUserTask.kt index 5f587d7f8d..cd9be0e7dd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUserTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUserTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersParams.kt index b8e855a004..46285965b4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersResponse.kt index 646d8e63bf..e2a93abde0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/user/model/SearchUsersResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/CreateWidgetTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/CreateWidgetTask.kt index 9f7981a95b..422615af2d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/CreateWidgetTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/CreateWidgetTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetPostAPIMediator.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetPostAPIMediator.kt index 395484433b..566b752df8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetPostAPIMediator.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetPostAPIMediator.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetService.kt index 049b368fe5..3e4e430e3b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetService.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetURLFormatter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetURLFormatter.kt index 28bcf0021c..94dba75205 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetURLFormatter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/DefaultWidgetURLFormatter.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/RegisterWidgetResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/RegisterWidgetResponse.kt index b1d08ab295..9654215f80 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/RegisterWidgetResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/RegisterWidgetResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetManager.kt index b167b5ca0c..22bdd2c6e4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetManager.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetModule.kt index 56b2d94701..98bcd0c01c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetPostMessageAPIProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetPostMessageAPIProvider.kt index 5b26415ce5..3a47c7bdcc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetPostMessageAPIProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetPostMessageAPIProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPI.kt index bfcd27b28a..1fece8b580 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPIProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPIProvider.kt index cbbc11bb93..7f79f44767 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPIProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/WidgetsAPIProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/UserAccountWidgets.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/UserAccountWidgets.kt index f6dafd0553..6f423b38a0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/UserAccountWidgets.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/UserAccountWidgets.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/WidgetFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/WidgetFactory.kt index 992dbf16df..c41f1df0de 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/WidgetFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/helper/WidgetFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/GetScalarTokenTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/GetScalarTokenTask.kt index 58b0c61060..6db79da35f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/GetScalarTokenTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/GetScalarTokenTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/ScalarTokenStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/ScalarTokenStore.kt index a6f8b3c890..896fb44c6b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/ScalarTokenStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/widgets/token/ScalarTokenStore.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/ConfigurableTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/ConfigurableTask.kt index 050f0ba295..97f9a0dd51 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/ConfigurableTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/ConfigurableTask.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineSequencer.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineSequencer.kt index 2fde8478ec..80081e3186 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineSequencer.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineSequencer.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineToCallback.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineToCallback.kt index 233d50c695..ca4b092e07 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineToCallback.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/CoroutineToCallback.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/Task.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/Task.kt index a9e7ab2d73..a6c80a0b1a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/Task.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/Task.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskExecutor.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskExecutor.kt index a3c815bbe8..478a356432 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskExecutor.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskExecutor.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskThread.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskThread.kt index 3b9c69bccb..2ad01add78 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskThread.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/task/TaskThread.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt index 0a15f09719..7cc00d023f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/BackgroundDetectionObserver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Base64.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Base64.kt index 76e24c4e31..aae8bf1967 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Base64.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Base64.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableCoroutine.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableCoroutine.kt index beede69759..860cf66c78 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableCoroutine.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableCoroutine.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableWork.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableWork.kt index fccfda15e5..6b04cea936 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableWork.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CancelableWork.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CompatUtil.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CompatUtil.kt index 6a5cfec095..81d601f6f0 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CompatUtil.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/CompatUtil.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Debouncer.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Debouncer.kt index 46ba75968c..1732ed18c6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Debouncer.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Debouncer.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Exhaustive.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Exhaustive.kt index eaf17b9ae0..097bdaf153 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Exhaustive.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Exhaustive.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt index da524cc1b2..4dc54d3b19 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/FileSaver.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Glob.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Glob.kt index 129bf0dec4..60f9609586 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Glob.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Glob.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Handler.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Handler.kt index 7d103e1031..6529742c55 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Handler.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Handler.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Hash.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Hash.kt index f8c22afb30..3d80ad01d5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Hash.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Hash.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/JsonCanonicalizer.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/JsonCanonicalizer.kt index 4a15f2ff98..7b45bab365 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/JsonCanonicalizer.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/JsonCanonicalizer.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LiveDataUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LiveDataUtils.kt index 9c38729fe4..80c3b83226 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LiveDataUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/LiveDataUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/MatrixCoroutineDispatchers.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/MatrixCoroutineDispatchers.kt index d66a38d346..b44a543c1c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/MatrixCoroutineDispatchers.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/MatrixCoroutineDispatchers.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Monarchy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Monarchy.kt index 91127790ca..afe77d76d5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Monarchy.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/Monarchy.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SecretKeyAndVersion.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SecretKeyAndVersion.kt index d96be91618..40aead5d63 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SecretKeyAndVersion.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SecretKeyAndVersion.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt index 9233b2b807..69d50680a7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringProvider.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringUtils.kt index 681e7e5fed..32997e2064 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/StringUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright 2018 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SuspendMatrixCallback.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SuspendMatrixCallback.kt index 0595d68c3b..145fc92fea 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SuspendMatrixCallback.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/SuspendMatrixCallback.kt @@ -1,20 +1,17 @@ /* - - * Copyright 2019 New Vector Ltd * 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. - + * + * 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.util diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/UrlUtils.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/UrlUtils.kt index da155c8bdd..d13753b5ee 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/UrlUtils.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/util/UrlUtils.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt index 80ede5e884..3f0e27f410 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/GetWellknownTask.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellKnownAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellKnownAPI.kt index 7d88614809..981d013f49 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellKnownAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellKnownAPI.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellknownModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellknownModule.kt index ab42223755..2eaf1ac765 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellknownModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/wellknown/WellknownModule.kt @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/AlwaysSuccessfulWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/AlwaysSuccessfulWorker.kt index d0fc7df098..3506a76f75 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/AlwaysSuccessfulWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/AlwaysSuccessfulWorker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/DelegateWorkerFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/DelegateWorkerFactory.kt index e711b0d686..68e1953eff 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/DelegateWorkerFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/DelegateWorkerFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Extensions.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Extensions.kt index 8f824a76b8..d36e164713 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Extensions.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Extensions.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/MatrixWorkerFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/MatrixWorkerFactory.kt index 509cecf022..c6647f7572 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/MatrixWorkerFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/MatrixWorkerFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionSafeCoroutineWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionSafeCoroutineWorker.kt index dd662f5e6e..d4179e2272 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionSafeCoroutineWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionSafeCoroutineWorker.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionWorkerParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionWorkerParams.kt index 840cda3dec..c6c038d2d2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionWorkerParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/SessionWorkerParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Worker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Worker.kt index 9f40d6aa05..24035355f7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Worker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/Worker.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/WorkerParamsFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/WorkerParamsFactory.kt index 6921a539f1..7aed74d2ca 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/WorkerParamsFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/worker/WorkerParamsFactory.kt @@ -1,5 +1,4 @@ /* - * Copyright 2019 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXDeviceInfo.java b/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXDeviceInfo.java index 3811cf65cd..393c633c6a 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXDeviceInfo.java +++ b/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXDeviceInfo.java @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXOlmInboundGroupSession2.java b/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXOlmInboundGroupSession2.java index 51c1fe2f1e..7277a86e9a 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXOlmInboundGroupSession2.java +++ b/matrix-sdk-android/src/main/java/org/matrix/androidsdk/crypto/data/MXOlmInboundGroupSession2.java @@ -1,5 +1,4 @@ /* - * Copyright (c) 2020 New Vector Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt index c4fed36216..f46e2ca35b 100644 --- a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt +++ b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/CurlLoggingInterceptor.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt index 69b15a1fa5..a815cec353 100644 --- a/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt +++ b/matrix-sdk-android/src/release/java/org/matrix/android/sdk/internal/network/interceptors/FormattedJsonHttpLogger.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt b/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt index 52aa7ea0c7..662656ae5e 100644 --- a/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt +++ b/matrix-sdk-android/src/sharedTest/java/org/matrix/android/sdk/test/shared/TestRules.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt index b0933c7106..f6a7f525db 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/MatrixTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt index 69e2f12eb7..c413d9ccae 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/auth/data/VersionsKtTest.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt index f213e1b1c1..b734444990 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRuleActionsTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt index b2c8d3bda8..c0b869a90e 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/api/pushrules/PushRulesConditionTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt index b2d10968b6..2f01a43a67 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/Base58Test.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt index 6b9d388623..64ffe52acd 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/keysbackup/util/RecoveryKeyTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt index cac2d1cba9..0bcc7983c5 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/crypto/store/db/HelperTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2018 New Vector Ltd + * 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. 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 0f8fe58b7f..a56426688d 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt index 7bef439417..667e0b2471 100644 --- a/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt +++ b/matrix-sdk-android/src/test/java/org/matrix/android/sdk/internal/task/CoroutineSequencersTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2019 New Vector Ltd + * 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. From bc339191eaf3b6d03eeeba079f025464501d11ab Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 15:11:01 +0200 Subject: [PATCH 172/278] Fix Copyright mention --- .../java/org/matrix/android/sdk/common/CommonTestHelper.kt | 1 - .../matrix/android/sdk/api/session/crypto/MXCryptoError.kt | 2 -- .../sdk/api/session/room/model/roomdirectory/PublicRoom.kt | 1 - .../session/room/model/roomdirectory/PublicRoomsFilter.kt | 1 - .../session/room/model/roomdirectory/PublicRoomsParams.kt | 2 -- .../session/room/model/roomdirectory/PublicRoomsResponse.kt | 1 - .../sdk/internal/auth/login/ResetPasswordMailConfirmed.kt | 2 -- .../sdk/internal/auth/registration/RegistrationParams.kt | 2 -- .../android/sdk/internal/crypto/DefaultCryptoService.kt | 2 -- .../matrix/android/sdk/internal/crypto/DeviceListManager.kt | 1 - .../sdk/internal/crypto/IncomingRequestCancellation.kt | 1 - .../android/sdk/internal/crypto/IncomingRoomKeyRequest.kt | 1 - .../android/sdk/internal/crypto/MXCryptoAlgorithms.kt | 1 - .../android/sdk/internal/crypto/MXEventDecryptionResult.kt | 1 - .../android/sdk/internal/crypto/MXMegolmExportEncryption.kt | 1 - .../org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt | 1 - .../sdk/internal/crypto/OutgoingGossipingRequestManager.kt | 1 - .../android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt | 1 - .../android/sdk/internal/crypto/algorithms/IMXDecrypting.kt | 1 - .../android/sdk/internal/crypto/algorithms/IMXEncrypting.kt | 2 -- .../internal/crypto/algorithms/megolm/MXMegolmDecryption.kt | 1 - .../internal/crypto/algorithms/megolm/MXMegolmEncryption.kt | 2 -- .../crypto/algorithms/megolm/MXOutboundSessionInfo.kt | 2 -- .../sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt | 1 - .../sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt | 2 -- .../internal/crypto/algorithms/olm/OlmDecryptionResult.kt | 1 - .../org/matrix/android/sdk/internal/crypto/api/CryptoApi.kt | 2 -- .../sdk/internal/crypto/attachments/ElementToDecrypt.kt | 1 - .../internal/crypto/attachments/MXEncryptedAttachments.kt | 1 - .../android/sdk/internal/crypto/model/MXDeviceInfo.kt | 2 -- .../internal/crypto/model/MXEncryptEventContentResult.kt | 1 - .../android/sdk/internal/crypto/model/MXOlmSessionResult.kt | 1 - .../android/sdk/internal/crypto/model/MXQueuedEncryption.kt | 1 - .../internal/crypto/model/OlmInboundGroupSessionWrapper.kt | 1 - .../internal/crypto/model/event/EncryptedEventContent.kt | 1 - .../internal/crypto/model/event/EncryptionEventContent.kt | 1 - .../sdk/internal/crypto/model/event/NewDeviceContent.kt | 1 - .../sdk/internal/crypto/model/event/OlmEventContent.kt | 1 - .../sdk/internal/crypto/model/event/OlmPayloadContent.kt | 1 - .../sdk/internal/crypto/model/event/RoomKeyContent.kt | 1 - .../sdk/internal/crypto/model/rest/DeleteDeviceParams.kt | 1 - .../android/sdk/internal/crypto/model/rest/DeviceInfo.kt | 2 -- .../sdk/internal/crypto/model/rest/DevicesListResponse.kt | 1 - .../sdk/internal/crypto/model/rest/EncryptedFileInfo.kt | 1 - .../sdk/internal/crypto/model/rest/EncryptedFileKey.kt | 1 - .../internal/crypto/model/rest/ForwardedRoomKeyContent.kt | 1 - .../sdk/internal/crypto/model/rest/KeyChangesResponse.kt | 1 - .../android/sdk/internal/crypto/model/rest/KeysClaimBody.kt | 1 - .../sdk/internal/crypto/model/rest/KeysClaimResponse.kt | 1 - .../android/sdk/internal/crypto/model/rest/KeysQueryBody.kt | 2 -- .../sdk/internal/crypto/model/rest/KeysUploadResponse.kt | 1 - .../sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt | 1 - .../sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt | 1 - .../internal/crypto/model/rest/SignatureUploadResponse.kt | 2 -- .../sdk/internal/crypto/model/rest/UpdateDeviceInfoBody.kt | 1 - .../sdk/internal/crypto/model/rest/UserPasswordAuth.kt | 1 - .../android/sdk/internal/crypto/store/IMXCryptoStore.kt | 1 - tools/check/forbidden_strings_in_code_sdk.txt | 1 - vector/src/fdroid/java/im/vector/app/push/fcm/FcmHelper.kt | 1 - vector/src/gplay/java/im/vector/app/push/fcm/FcmHelper.kt | 2 -- vector/src/main/assets/open_source_licenses.html | 6 ------ .../app/features/crypto/keysrequest/KeyRequestHandler.kt | 3 --- .../java/im/vector/app/features/rageshake/BugReporter.kt | 2 -- .../app/features/rageshake/BugReporterMultipartBody.java | 1 - .../im/vector/app/features/settings/VectorPreferences.kt | 2 -- 65 files changed, 89 deletions(-) diff --git a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt index 9986315c65..1c912b365f 100644 --- a/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt +++ b/matrix-sdk-android/src/androidTest/java/org/matrix/android/sdk/common/CommonTestHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt index d0d36ec953..4956278a10 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/crypto/MXCryptoError.kt @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoom.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoom.kt index 0429eba1b0..01f5d9cde8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoom.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoom.kt @@ -1,5 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsFilter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsFilter.kt index 041b804576..66ebc59464 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsFilter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsFilter.kt @@ -1,5 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsParams.kt index c69cde72b7..3af354a01d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsParams.kt @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsResponse.kt index 39f24d658c..82da8bc49b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/room/model/roomdirectory/PublicRoomsResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt index 49682b2ce5..4e0c000f87 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/login/ResetPasswordMailConfirmed.kt @@ -1,6 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt index 08d7b48447..3d20b6bde3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/auth/registration/RegistrationParams.kt @@ -1,6 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); 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 c2e8e34166..37886a7d77 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 @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); 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 3590b8072e..8e0d7407c6 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 @@ -1,5 +1,4 @@ /* - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRequestCancellation.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRequestCancellation.kt index 04b78fc89f..181bc0c1b1 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRequestCancellation.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRequestCancellation.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt index c832ff160d..babc6008a2 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/IncomingRoomKeyRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt index 45c8d23219..07881c7d79 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXCryptoAlgorithms.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXEventDecryptionResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXEventDecryptionResult.kt index f094b5c656..c66c37574a 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXEventDecryptionResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXEventDecryptionResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXMegolmExportEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXMegolmExportEncryption.kt index 85ecc540cd..5409202b9e 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXMegolmExportEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXMegolmExportEncryption.kt @@ -1,5 +1,4 @@ /* - * Copyright 2017 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt index fdb0f02f92..7a546993b8 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/MXOlmDevice.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt index b7f5c33e5d..69f5838315 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingGossipingRequestManager.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt index e043d976a1..88025952db 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/OutgoingRoomKeyRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt index 8ea731e3f0..680ac7fbb5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXDecrypting.kt @@ -1,5 +1,4 @@ /* - * Copyright 2015 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt index 60a5d7be7a..fc3ea08a21 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/IMXEncrypting.kt @@ -1,6 +1,4 @@ /* - * Copyright 2015 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt index 3f1d8e1f5f..ad0def541f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt index a7de65099b..1185ea7962 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXMegolmEncryption.kt @@ -1,6 +1,4 @@ /* - * Copyright 2015 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXOutboundSessionInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXOutboundSessionInfo.kt index 9bdebdf24f..9244b4d5e7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXOutboundSessionInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/megolm/MXOutboundSessionInfo.kt @@ -1,6 +1,4 @@ /* - * Copyright 2015 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt index d90de0c4ba..541f62de2c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmDecryption.kt @@ -1,5 +1,4 @@ /* - * Copyright 2015 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt index f471a67af6..9acc9bc1b2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/MXOlmEncryption.kt @@ -1,6 +1,4 @@ /* - * Copyright 2015 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/OlmDecryptionResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/OlmDecryptionResult.kt index ba627d4c30..955f57afba 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/OlmDecryptionResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/algorithms/olm/OlmDecryptionResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/api/CryptoApi.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/api/CryptoApi.kt index a12b725efd..5604e97152 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/api/CryptoApi.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/api/CryptoApi.kt @@ -1,6 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/ElementToDecrypt.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/ElementToDecrypt.kt index 21f7c209ef..b77006aa3a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/ElementToDecrypt.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/ElementToDecrypt.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt index 11d5b4796a..5a9852b6db 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/attachments/MXEncryptedAttachments.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt index 6024795085..3c651c27a0 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXDeviceInfo.kt @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXEncryptEventContentResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXEncryptEventContentResult.kt index 0f0b289bc6..524bc80843 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXEncryptEventContentResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXEncryptEventContentResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXOlmSessionResult.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXOlmSessionResult.kt index 30f4a6bba1..b07a08c30f 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXOlmSessionResult.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXOlmSessionResult.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXQueuedEncryption.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXQueuedEncryption.kt index 598f16bdf3..fe6b3a74bb 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXQueuedEncryption.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/MXQueuedEncryption.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt index 6d2430ce5c..086a236a2b 100755 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/OlmInboundGroupSessionWrapper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptedEventContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptedEventContent.kt index 79f86bd28c..93a6377bbb 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptedEventContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptedEventContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptionEventContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptionEventContent.kt index 255e5e8d81..b64cd97ff6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptionEventContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/EncryptionEventContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/NewDeviceContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/NewDeviceContent.kt index 27ccc2d041..2a63b4bee8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/NewDeviceContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/NewDeviceContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmEventContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmEventContent.kt index f9de805962..6fd0627022 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmEventContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmEventContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmPayloadContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmPayloadContent.kt index bf18cad0f4..3ce9d36f90 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmPayloadContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/OlmPayloadContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyContent.kt index eeaf52f0e1..7fa0e83725 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/event/RoomKeyContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeleteDeviceParams.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeleteDeviceParams.kt index 4b1530c9c6..0ce6f1f41c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeleteDeviceParams.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeleteDeviceParams.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt index 3a4abd8cf8..c5cd400342 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DeviceInfo.kt @@ -1,6 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DevicesListResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DevicesListResponse.kt index 934a0cf43c..eb325f332e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DevicesListResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/DevicesListResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileInfo.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileInfo.kt index 65455e9fa3..0ed6c0dac9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileInfo.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileInfo.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileKey.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileKey.kt index 077fd4451f..71f266d7a5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileKey.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/EncryptedFileKey.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ForwardedRoomKeyContent.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ForwardedRoomKeyContent.kt index 927828c4a0..bbc24f0447 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ForwardedRoomKeyContent.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/ForwardedRoomKeyContent.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyChangesResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyChangesResponse.kt index 5c677c7123..f0ed77a1e3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyChangesResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeyChangesResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimBody.kt index f48936a80e..6937d2beb6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimResponse.kt index a1eebcb694..22f4ce5a59 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysClaimResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysQueryBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysQueryBody.kt index 4232225cbe..4f98be9da3 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysQueryBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysQueryBody.kt @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadResponse.kt index 07904969f0..3d0ea8677f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/KeysUploadResponse.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt index ae82a384e3..3eae2585a5 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyRequestBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt index 259f256f50..68fbf0b805 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/RoomKeyShareRequest.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SignatureUploadResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SignatureUploadResponse.kt index e21fd8fbd4..fb92b67fc4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SignatureUploadResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SignatureUploadResponse.kt @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UpdateDeviceInfoBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UpdateDeviceInfoBody.kt index ac691e6e6e..7d11c5730f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UpdateDeviceInfoBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UpdateDeviceInfoBody.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt index e4002b5c52..ba8b34096c 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/UserPasswordAuth.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt index 898ffc303c..0ae1e69124 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/IMXCryptoStore.kt @@ -1,5 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd * Copyright 2020 The Matrix.org Foundation C.I.C. * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/tools/check/forbidden_strings_in_code_sdk.txt b/tools/check/forbidden_strings_in_code_sdk.txt index 9907c68080..270efef459 100644 --- a/tools/check/forbidden_strings_in_code_sdk.txt +++ b/tools/check/forbidden_strings_in_code_sdk.txt @@ -26,4 +26,3 @@ ### "The Matrix.org Foundation C.I.C." copyright is required on this file, and not "New Vector Ltd" New Vector Ltd - diff --git a/vector/src/fdroid/java/im/vector/app/push/fcm/FcmHelper.kt b/vector/src/fdroid/java/im/vector/app/push/fcm/FcmHelper.kt index 5f0ee396ee..7603e738d7 100755 --- a/vector/src/fdroid/java/im/vector/app/push/fcm/FcmHelper.kt +++ b/vector/src/fdroid/java/im/vector/app/push/fcm/FcmHelper.kt @@ -1,5 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd * Copyright 2018 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/vector/src/gplay/java/im/vector/app/push/fcm/FcmHelper.kt b/vector/src/gplay/java/im/vector/app/push/fcm/FcmHelper.kt index d139cad9d3..913eab211d 100755 --- a/vector/src/gplay/java/im/vector/app/push/fcm/FcmHelper.kt +++ b/vector/src/gplay/java/im/vector/app/push/fcm/FcmHelper.kt @@ -1,6 +1,4 @@ /* - * Copyright 2014 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2018 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/vector/src/main/assets/open_source_licenses.html b/vector/src/main/assets/open_source_licenses.html index 376745e6f7..ac80b0d691 100755 --- a/vector/src/main/assets/open_source_licenses.html +++ b/vector/src/main/assets/open_source_licenses.html @@ -239,12 +239,6 @@ SOFTWARE.
  • Matrix SDK
    - Copyright (c) 2016 OpenMarket Ltd -
    - Copyright (c) 2016-2017 Vector Creations Ltd -
    - Copyright (c) 2018-2019 New Vector Ltd -
    Copyright (c) 2019 The Matrix.org Foundation C.I.C
  • diff --git a/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt index 4268317700..8a02b8deac 100644 --- a/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt +++ b/vector/src/main/java/im/vector/app/features/crypto/keysrequest/KeyRequestHandler.kt @@ -1,7 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd - * Copyright 2018 New Vector Ltd * Copyright 2019 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt b/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt index 7bbc001f0a..0d92d170a5 100755 --- a/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReporter.kt @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2018 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/vector/src/main/java/im/vector/app/features/rageshake/BugReporterMultipartBody.java b/vector/src/main/java/im/vector/app/features/rageshake/BugReporterMultipartBody.java index 878b9f7171..7a29bf12e4 100755 --- a/vector/src/main/java/im/vector/app/features/rageshake/BugReporterMultipartBody.java +++ b/vector/src/main/java/im/vector/app/features/rageshake/BugReporterMultipartBody.java @@ -1,5 +1,4 @@ /* - * Copyright 2017 Vector Creations Ltd * Copyright 2018 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt index 5e9d8d1ac0..295bb01265 100755 --- a/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorPreferences.kt @@ -1,6 +1,4 @@ /* - * Copyright 2016 OpenMarket Ltd - * Copyright 2017 Vector Creations Ltd * Copyright 2018 New Vector Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); From 7b89f1bea7f4f4505b2fba3812a1db321c53ce95 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 15:14:22 +0200 Subject: [PATCH 173/278] Add missing Copyright --- .../vector/app/core/ui/list/GenericLoaderItem.kt | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/vector/src/main/java/im/vector/app/core/ui/list/GenericLoaderItem.kt b/vector/src/main/java/im/vector/app/core/ui/list/GenericLoaderItem.kt index 634e58e943..b458f10680 100644 --- a/vector/src/main/java/im/vector/app/core/ui/list/GenericLoaderItem.kt +++ b/vector/src/main/java/im/vector/app/core/ui/list/GenericLoaderItem.kt @@ -1,3 +1,19 @@ +/* + * Copyright 2020 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.core.ui.list import com.airbnb.epoxy.EpoxyModelClass From cb33b9f15847f3d100ccd8e4b965242abeb08e87 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 1 Oct 2020 21:18:18 +0200 Subject: [PATCH 174/278] cleanup --- .../sdk/internal/network/ssl/TLSSocketFactory.kt | 4 ---- .../gplay/push/fcm/VectorFirebaseMessagingService.kt | 12 +++++++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt index a5c711a3f0..c4dbce6240 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/ssl/TLSSocketFactory.kt @@ -113,8 +113,4 @@ constructor(trustPinned: Array, acceptedTlsVersions: List Date: Fri, 2 Oct 2020 11:55:41 +0200 Subject: [PATCH 175/278] Add script to test PUSH token --- tools/tests/test_push.sh | 46 ++++++++++++++++++++++++++++ tools/tests/test_push_unsafe.sh | 53 +++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100755 tools/tests/test_push.sh create mode 100755 tools/tests/test_push_unsafe.sh diff --git a/tools/tests/test_push.sh b/tools/tests/test_push.sh new file mode 100755 index 0000000000..0da02e2d0a --- /dev/null +++ b/tools/tests/test_push.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env bash + +# Some doc +# https://firebase.google.com/docs/cloud-messaging/android/first-message +# http://bulkpush.com/pushnotification/guidedetail/s-4/android-gcm-api-configuration +# http://www.feelzdroid.com/2016/02/android-google-cloud-messaging-push-notifications-gcm-tutorial.html + +# Ask for parameter +read -p "Enter the server API key: " SERVER_KEY + +echo +echo "Check validity of API key, InvalidRegistration error is OK" +# https://developers.google.com/cloud-messaging/http + +curl -H "Authorization: key=$SERVER_KEY" \ + -H Content-Type:"application/json" \ + -d "{\"registration_ids\":[\"ABC\"]}" \ + -s \ + https://fcm.googleapis.com/fcm/send \ + | python -m json.tool + +# should obtain something like this: +# {"multicast_id":5978845027639121780,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]} + +read -p "Enter the FCM token: " FCM_TOKEN + +# content of the notification +DATA="{\"message\":\"Message of PUSH!\"}" + +echo +echo +echo "Send a push, you should see success:1..." + +curl -H "Authorization: key=$SERVER_KEY" \ + -H Content-Type:"application/json" \ + -d "{ \"data\" : $DATA, \"to\":\"$FCM_TOKEN\" }" \ + -s \ + https://fcm.googleapis.com/fcm/send \ + | python -m json.tool + +echo +echo + +# should obtain something like this: +# {"multicast_id":7967233883611790812,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1472636210339069%84ac25d9f9fd7ecd"}]} + diff --git a/tools/tests/test_push_unsafe.sh b/tools/tests/test_push_unsafe.sh new file mode 100755 index 0000000000..62ec3759f4 --- /dev/null +++ b/tools/tests/test_push_unsafe.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# Copy and adaptation of ./test_push.sh, which takes 2 params: server key and fcm token. +# It's unsafe to use it because it takes server key as parameter, that will remain in the terminal history. + +# Some doc +# https://firebase.google.com/docs/cloud-messaging/android/first-message +# http://bulkpush.com/pushnotification/guidedetail/s-4/android-gcm-api-configuration +# http://www.feelzdroid.com/2016/02/android-google-cloud-messaging-push-notifications-gcm-tutorial.html + +if [[ "$#" -ne 2 ]]; then + echo "Usage: $0 SERVER_KEY FCM_TOKEN" >&2 + exit 1 +fi + +# Get the command line parameters +SERVER_KEY=$1 +FCM_TOKEN=$2 + +echo +echo "Check validity of API key, InvalidRegistration error is OK" +# https://developers.google.com/cloud-messaging/http + +curl -H "Authorization: key=$SERVER_KEY" \ + -H Content-Type:"application/json" \ + -d "{\"registration_ids\":[\"ABC\"]}" \ + -s \ + https://fcm.googleapis.com/fcm/send \ + | python -m json.tool + +# should obtain something like this: +# {"multicast_id":5978845027639121780,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]} + +# content of the notification +DATA="{\"message\":\"Message of PUSH!\"}" + +echo +echo +echo "Send a push, you should see success:1..." + +curl -H "Authorization: key=$SERVER_KEY" \ + -H Content-Type:"application/json" \ + -d "{ \"data\" : $DATA, \"to\":\"$FCM_TOKEN\" }" \ + -s \ + https://fcm.googleapis.com/fcm/send \ + | python -m json.tool + +echo +echo + +# should obtain something like this: +# {"multicast_id":7967233883611790812,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:1472636210339069%84ac25d9f9fd7ecd"}]} + From 7d53dfeca45d2ac590c1d0f6739bf89ecf5c4bb4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 12:06:06 +0200 Subject: [PATCH 176/278] Add Sygnal API implementation to test is Push are correctly received --- .idea/dictionaries/bmarty.xml | 1 + CHANGES.md | 1 + .../sdk/api/session/pushers/PushersService.kt | 13 ++++ .../sdk/internal/network/NetworkConstants.kt | 6 +- .../session/pushers/DefaultPushersService.kt | 13 ++++ .../internal/session/pushers/PushersModule.kt | 5 ++ .../session/pushers/sygnal/SygnalAPI.kt | 32 +++++++++ .../session/pushers/sygnal/SygnalDevice.kt | 34 ++++++++++ .../pushers/sygnal/SygnalNotification.kt | 29 +++++++++ .../pushers/sygnal/SygnalNotifyBody.kt | 29 +++++++++ .../pushers/sygnal/SygnalNotifyResponse.kt | 26 ++++++++ .../pushers/sygnal/SygnalNotifyTask.kt | 65 +++++++++++++++++++ .../troubleshoot/TestPushFromSygnal.kt | 52 +++++++++++++++ ...ificationTroubleshootTestManagerFactory.kt | 19 ++++-- .../vector/app/core/pushers/PushersManager.kt | 10 +++ vector/src/main/res/values/strings.xml | 4 ++ 16 files changed, 331 insertions(+), 8 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalAPI.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalDevice.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyBody.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyResponse.kt create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt create mode 100644 vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt diff --git a/.idea/dictionaries/bmarty.xml b/.idea/dictionaries/bmarty.xml index 5c27da044e..d13e40248f 100644 --- a/.idea/dictionaries/bmarty.xml +++ b/.idea/dictionaries/bmarty.xml @@ -29,6 +29,7 @@ signout signup ssss + sygnal threepid unwedging diff --git a/CHANGES.md b/CHANGES.md index 05d189ed12..e365768f86 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 Sygnal API implementation to test is Push are correctly received Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt index 0e33be400c..8284b50332 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt @@ -66,6 +66,19 @@ interface PushersService { append: Boolean, withEventIdOnly: Boolean): UUID + /** + * Directly ask Sygnal to send a push to this device + * @param url the Sygnal url (full path) + * @param appId the application id + * @param pushkey the FCM token + * @param callback callback to know if Sygnal has accepted the request. In this case, the app should receive a Push with the provided data (TODO) + * + */ + fun testPush(url: String, + appId: String, + pushkey: String, + callback: MatrixCallback) + /** * Remove the http pusher */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt index 1154d1967c..0dfdec1804 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt @@ -17,7 +17,7 @@ package org.matrix.android.sdk.internal.network internal object NetworkConstants { - + // Homeserver private const val URI_API_PREFIX_PATH = "_matrix/client" const val URI_API_PREFIX_PATH_ = "$URI_API_PREFIX_PATH/" const val URI_API_PREFIX_PATH_R0 = "$URI_API_PREFIX_PATH/r0/" @@ -31,5 +31,9 @@ internal object NetworkConstants { const val URI_IDENTITY_PREFIX_PATH = "_matrix/identity/v2" const val URI_IDENTITY_PATH_V2 = "$URI_IDENTITY_PREFIX_PATH/" + // Sygnal + const val URI_SYGNAL_PREFIX_PATH = "_matrix/push/v1/" + + // Integration const val URI_INTEGRATION_MANAGER_PATH = "_matrix/integrations/v1/" } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt index 8f80ac46e4..c7d5e1f8b8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt @@ -28,6 +28,7 @@ import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionId import org.matrix.android.sdk.internal.di.WorkManagerProvider +import org.matrix.android.sdk.internal.session.pushers.sygnal.SygnalNotifyTask import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import org.matrix.android.sdk.internal.worker.WorkerParamsFactory @@ -41,10 +42,22 @@ internal class DefaultPushersService @Inject constructor( @SessionDatabase private val monarchy: Monarchy, @SessionId private val sessionId: String, private val getPusherTask: GetPushersTask, + private val sygnalNotifyTask: SygnalNotifyTask, private val removePusherTask: RemovePusherTask, private val taskExecutor: TaskExecutor ) : PushersService { + override fun testPush(url: String, + appId: String, + pushkey: String, + callback: MatrixCallback) { + sygnalNotifyTask + .configureWith(SygnalNotifyTask.Params(url, appId, pushkey)) { + this.callback = callback + } + .executeBy(taskExecutor) + } + override fun refreshPushers() { getPusherTask .configureWith() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt index a6042b27a2..5810f26c85 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt @@ -25,6 +25,8 @@ import org.matrix.android.sdk.api.session.pushers.PushersService import org.matrix.android.sdk.internal.session.notification.DefaultProcessEventForPushTask import org.matrix.android.sdk.internal.session.notification.DefaultPushRuleService import org.matrix.android.sdk.internal.session.notification.ProcessEventForPushTask +import org.matrix.android.sdk.internal.session.pushers.sygnal.DefaultSygnalNotifyTask +import org.matrix.android.sdk.internal.session.pushers.sygnal.SygnalNotifyTask import org.matrix.android.sdk.internal.session.room.notification.DefaultSetRoomNotificationStateTask import org.matrix.android.sdk.internal.session.room.notification.SetRoomNotificationStateTask import retrofit2.Retrofit @@ -86,4 +88,7 @@ internal abstract class PushersModule { @Binds abstract fun bindProcessEventForPushTask(task: DefaultProcessEventForPushTask): ProcessEventForPushTask + + @Binds + abstract fun bindSygnalNotifyTask(task: DefaultSygnalNotifyTask): SygnalNotifyTask } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalAPI.kt new file mode 100644 index 0000000000..7550e14a97 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalAPI.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.pushers.sygnal + +import org.matrix.android.sdk.internal.network.NetworkConstants +import retrofit2.Call +import retrofit2.http.Body +import retrofit2.http.POST + +internal interface SygnalAPI { + /** + * Ask Sygnal to send a push to the current device. + * + * Ref: https://matrix.org/docs/spec/push_gateway/r0.1.1#post-matrix-push-v1-notify + */ + @POST(NetworkConstants.URI_SYGNAL_PREFIX_PATH + "notify") + fun notify(@Body body: SygnalNotifyBody): Call +} + diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalDevice.kt new file mode 100644 index 0000000000..a5cfe389cc --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalDevice.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.pushers.sygnal + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +internal data class SygnalDevice( + /** + * Required. The app_id given when the pusher was created. + */ + @Json(name = "app_id") + val appId: String, + /** + * Required. The pushkey given when the pusher was created. + */ + @Json(name = "pushkey") + val pushKey: String +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt new file mode 100644 index 0000000000..b28449a481 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.pushers.sygnal + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +internal data class SygnalNotification( + /** + * Required. This is an array of devices that the notification should be sent to. + */ + @Json(name = "devices") + val devices: List +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyBody.kt new file mode 100644 index 0000000000..7b13d8ff79 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyBody.kt @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.pushers.sygnal + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +internal data class SygnalNotifyBody( + /** + * Required. Information about the push notification + */ + @Json(name = "notification") + val notification: SygnalNotification +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyResponse.kt new file mode 100644 index 0000000000..73d5aa1e2c --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyResponse.kt @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.pushers.sygnal + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +internal data class SygnalNotifyResponse( + @Json(name = "rejected") + val rejectedPushKey: List +) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt new file mode 100644 index 0000000000..eb3cd433a9 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.internal.session.pushers.sygnal + +import okhttp3.OkHttpClient +import org.matrix.android.sdk.internal.di.Unauthenticated +import org.matrix.android.sdk.internal.network.NetworkConstants +import org.matrix.android.sdk.internal.network.RetrofitFactory +import org.matrix.android.sdk.internal.network.executeRequest +import org.matrix.android.sdk.internal.task.Task +import javax.inject.Inject + +internal interface SygnalNotifyTask : Task { + data class Params( + val url: String, + val appId: String, + val pushKey: String + ) +} + +internal class DefaultSygnalNotifyTask @Inject constructor( + private val retrofitFactory: RetrofitFactory, + @Unauthenticated private val unauthenticatedOkHttpClient: OkHttpClient +) : SygnalNotifyTask { + + override suspend fun execute(params: SygnalNotifyTask.Params) { + val sygnalApi = retrofitFactory.create( + unauthenticatedOkHttpClient, + params.url.substringBefore(NetworkConstants.URI_SYGNAL_PREFIX_PATH) + ) + .create(SygnalAPI::class.java) + + val response = executeRequest(null) { + apiCall = sygnalApi.notify( + SygnalNotifyBody( + SygnalNotification( + devices = listOf( + SygnalDevice( + params.appId, + params.pushKey + ) + ) + ) + ) + ) + } + + if (response.rejectedPushKey.contains(params.pushKey)) { + throw IllegalStateException("Failure") + } + } +} diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt new file mode 100644 index 0000000000..b291b750b4 --- /dev/null +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2020 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.gplay.features.settings.troubleshoot + +import androidx.appcompat.app.AppCompatActivity +import im.vector.app.R +import im.vector.app.core.pushers.PushersManager +import im.vector.app.core.resources.StringProvider +import im.vector.app.features.settings.troubleshoot.TroubleshootTest +import im.vector.app.push.fcm.FcmHelper +import org.matrix.android.sdk.api.MatrixCallback +import javax.inject.Inject + +/** + * Test Push by asking Sygnal to send a Push back + */ +class TestPushFromSygnal @Inject constructor(private val context: AppCompatActivity, + private val stringProvider: StringProvider, + private val pushersManager: PushersManager) + : TroubleshootTest(R.string.settings_troubleshoot_test_push_loop_title) { + + override fun perform() { + val fcmToken = FcmHelper.getFcmToken(context) ?: run { + status = TestStatus.FAILED + return + } + pushersManager.testPush(fcmToken, object : MatrixCallback { + override fun onFailure(failure: Throwable) { + description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_failed) + status = TestStatus.FAILED + } + + override fun onSuccess(data: Unit) { + description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_success) + status = TestStatus.SUCCESS + } + }) + } +} diff --git a/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt b/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt index b2dad09483..06d3283afa 100644 --- a/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt +++ b/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt @@ -23,16 +23,20 @@ import im.vector.app.features.settings.troubleshoot.TestPushRulesSettings import im.vector.app.features.settings.troubleshoot.TestSystemSettings import im.vector.app.gplay.features.settings.troubleshoot.TestFirebaseToken import im.vector.app.gplay.features.settings.troubleshoot.TestPlayServices +import im.vector.app.gplay.features.settings.troubleshoot.TestPushFromSygnal import im.vector.app.gplay.features.settings.troubleshoot.TestTokenRegistration import javax.inject.Inject -class NotificationTroubleshootTestManagerFactory @Inject constructor(private val testSystemSettings: TestSystemSettings, - private val testAccountSettings: TestAccountSettings, - private val testDeviceSettings: TestDeviceSettings, - private val testBingRulesSettings: TestPushRulesSettings, - private val testPlayServices: TestPlayServices, - private val testFirebaseToken: TestFirebaseToken, - private val testTokenRegistration: TestTokenRegistration) { +class NotificationTroubleshootTestManagerFactory @Inject constructor( + private val testSystemSettings: TestSystemSettings, + private val testAccountSettings: TestAccountSettings, + private val testDeviceSettings: TestDeviceSettings, + private val testBingRulesSettings: TestPushRulesSettings, + private val testPlayServices: TestPlayServices, + private val testFirebaseToken: TestFirebaseToken, + private val testTokenRegistration: TestTokenRegistration, + private val testPushFromSygnal: TestPushFromSygnal +) { fun create(fragment: Fragment): NotificationTroubleshootTestManager { val mgr = NotificationTroubleshootTestManager(fragment) @@ -43,6 +47,7 @@ class NotificationTroubleshootTestManagerFactory @Inject constructor(private val mgr.addTest(testPlayServices) mgr.addTest(testFirebaseToken) mgr.addTest(testTokenRegistration) + mgr.addTest(testPushFromSygnal) return mgr } } diff --git a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt index f0d27182e7..e86ff104b7 100644 --- a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt +++ b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt @@ -34,6 +34,16 @@ class PushersManager @Inject constructor( private val stringProvider: StringProvider, private val appNameProvider: AppNameProvider ) { + fun testPush(pushKey: String, callback: MatrixCallback) { + val currentSession = activeSessionHolder.getActiveSession() + + currentSession.testPush( + stringProvider.getString(R.string.pusher_http_url), + stringProvider.getString(R.string.pusher_app_id), + pushKey, + callback + ) + } fun registerPusherWithFcmKey(pushKey: String): UUID { val currentSession = activeSessionHolder.getActiveSession() diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index d48162de29..be83a6dc50 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -749,6 +749,10 @@ FCM token successfully registered to HomeServer. Failed to register FCM token to HomeServer:\n%1$s + Test Push + The application is receiving PUSH, you should see a notification. + Failed to receive push. Solution could be to reinstall the application. + Notifications Service Notifications Service is running. Notifications Service is not running.\nTry to restart the application. From 02f1dab9b2ee71fb17630869ced03c9d62bd93fe Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 15:23:42 +0200 Subject: [PATCH 177/278] Push test: better error handling --- .../sdk/api/session/pushers/PushersService.kt | 6 ++-- .../sdk/api/session/pushers/SygnalFailure.kt | 23 +++++++++++++ .../session/pushers/DefaultPushersService.kt | 3 +- .../pushers/sygnal/SygnalNotification.kt | 3 ++ .../pushers/sygnal/SygnalNotifyTask.kt | 7 ++-- .../troubleshoot/TestPushFromSygnal.kt | 9 +++++- .../fcm/VectorFirebaseMessagingService.kt | 7 ++++ .../vector/app/core/pushers/PushersManager.kt | 5 +++ .../NotificationDrawerManager.kt | 4 +++ .../notifications/NotificationUtils.kt | 32 +++++++++++++++++-- vector/src/main/res/values/strings.xml | 1 + 11 files changed, 92 insertions(+), 8 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/SygnalFailure.kt diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt index 8284b50332..3832bc5af4 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt @@ -71,12 +71,14 @@ interface PushersService { * @param url the Sygnal url (full path) * @param appId the application id * @param pushkey the FCM token - * @param callback callback to know if Sygnal has accepted the request. In this case, the app should receive a Push with the provided data (TODO) - * + * @param eventId the eventId which will be sent in the Push message. Use a fake eventId. + * @param callback callback to know if Sygnal has accepted the request. In this case, the app should receive a Push with the provided eventId. + * In case of error, PusherRejected failure can happen. In this case it means that the pushkey is not valid. */ fun testPush(url: String, appId: String, pushkey: String, + eventId: String, callback: MatrixCallback) /** diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/SygnalFailure.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/SygnalFailure.kt new file mode 100644 index 0000000000..ebedba9d92 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/SygnalFailure.kt @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 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 org.matrix.android.sdk.api.session.pushers + +import org.matrix.android.sdk.api.failure.Failure + +sealed class SygnalFailure : Failure.FeatureFailure() { + object PusherRejected : SygnalFailure() +} diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt index c7d5e1f8b8..02f147f815 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt @@ -50,9 +50,10 @@ internal class DefaultPushersService @Inject constructor( override fun testPush(url: String, appId: String, pushkey: String, + eventId: String, callback: MatrixCallback) { sygnalNotifyTask - .configureWith(SygnalNotifyTask.Params(url, appId, pushkey)) { + .configureWith(SygnalNotifyTask.Params(url, appId, pushkey, eventId)) { this.callback = callback } .executeBy(taskExecutor) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt index b28449a481..a2c016feb8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt @@ -21,6 +21,9 @@ import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) internal data class SygnalNotification( + @Json(name = "event_id") + val eventId: String, + /** * Required. This is an array of devices that the notification should be sent to. */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt index eb3cd433a9..663d0cd3c2 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt @@ -16,6 +16,7 @@ package org.matrix.android.sdk.internal.session.pushers.sygnal import okhttp3.OkHttpClient +import org.matrix.android.sdk.api.session.pushers.SygnalFailure import org.matrix.android.sdk.internal.di.Unauthenticated import org.matrix.android.sdk.internal.network.NetworkConstants import org.matrix.android.sdk.internal.network.RetrofitFactory @@ -27,7 +28,8 @@ internal interface SygnalNotifyTask : Task { data class Params( val url: String, val appId: String, - val pushKey: String + val pushKey: String, + val eventId: String ) } @@ -47,6 +49,7 @@ internal class DefaultSygnalNotifyTask @Inject constructor( apiCall = sygnalApi.notify( SygnalNotifyBody( SygnalNotification( + eventId = params.eventId, devices = listOf( SygnalDevice( params.appId, @@ -59,7 +62,7 @@ internal class DefaultSygnalNotifyTask @Inject constructor( } if (response.rejectedPushKey.contains(params.pushKey)) { - throw IllegalStateException("Failure") + throw SygnalFailure.PusherRejected } } } diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt index b291b750b4..105c54c64f 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt @@ -17,11 +17,13 @@ package im.vector.app.gplay.features.settings.troubleshoot import androidx.appcompat.app.AppCompatActivity import im.vector.app.R +import im.vector.app.core.error.ErrorFormatter import im.vector.app.core.pushers.PushersManager import im.vector.app.core.resources.StringProvider import im.vector.app.features.settings.troubleshoot.TroubleshootTest import im.vector.app.push.fcm.FcmHelper import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.session.pushers.SygnalFailure import javax.inject.Inject /** @@ -29,6 +31,7 @@ import javax.inject.Inject */ class TestPushFromSygnal @Inject constructor(private val context: AppCompatActivity, private val stringProvider: StringProvider, + private val errorFormatter: ErrorFormatter, private val pushersManager: PushersManager) : TroubleshootTest(R.string.settings_troubleshoot_test_push_loop_title) { @@ -39,7 +42,11 @@ class TestPushFromSygnal @Inject constructor(private val context: AppCompatActiv } pushersManager.testPush(fcmToken, object : MatrixCallback { override fun onFailure(failure: Throwable) { - description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_failed) + description = if (failure is SygnalFailure.PusherRejected) { + stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_failed) + } else { + errorFormatter.toHumanReadable(failure) + } status = TestStatus.FAILED } diff --git a/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt b/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt index ba58ef6677..801b85ce0c 100755 --- a/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt @@ -75,6 +75,13 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() { * @param message the message */ override fun onMessageReceived(message: RemoteMessage) { + // Diagnostic Push + if (message.data["event_id"] == PushersManager.TEST_EVENT_ID) { + // Display the notification right now + notificationDrawerManager.displayDiagnosticNotification() + return + } + if (!vectorPreferences.areNotificationEnabledForDevice()) { Timber.i("Notification are disabled for this device") return diff --git a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt index e86ff104b7..cfdc61a045 100644 --- a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt +++ b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt @@ -41,6 +41,7 @@ class PushersManager @Inject constructor( stringProvider.getString(R.string.pusher_http_url), stringProvider.getString(R.string.pusher_app_id), pushKey, + TEST_EVENT_ID, callback ) } @@ -66,4 +67,8 @@ class PushersManager @Inject constructor( val currentSession = activeSessionHolder.getSafeActiveSession() ?: return currentSession.removeHttpPusher(pushKey, stringProvider.getString(R.string.pusher_app_id), callback) } + + companion object { + const val TEST_EVENT_ID = "\$THIS_IS_A_FAKE_EVENT_ID" + } } diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt index 26f00fcef9..7147968d49 100644 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationDrawerManager.kt @@ -590,6 +590,10 @@ class NotificationDrawerManager @Inject constructor(private val context: Context } } + fun displayDiagnosticNotification() { + notificationUtils.displayDiagnosticNotification() + } + companion object { private const val SUMMARY_NOTIFICATION_ID = 0 private const val ROOM_MESSAGES_NOTIFICATION_ID = 1 diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt index 9d89168bb8..7e7fd60b59 100755 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt @@ -27,8 +27,10 @@ import android.app.PendingIntent import android.content.Context import android.content.Intent import android.graphics.Bitmap +import android.graphics.Canvas import android.net.Uri import android.os.Build +import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat @@ -36,6 +38,7 @@ import androidx.core.app.RemoteInput import androidx.core.app.TaskStackBuilder import androidx.core.content.ContextCompat import androidx.core.content.getSystemService +import androidx.core.content.res.ResourcesCompat import androidx.core.graphics.drawable.IconCompat import androidx.fragment.app.Fragment import im.vector.app.BuildConfig @@ -47,7 +50,6 @@ import im.vector.app.features.call.service.CallHeadsUpActionReceiver import im.vector.app.features.home.HomeActivity import im.vector.app.features.home.room.detail.RoomDetailActivity import im.vector.app.features.home.room.detail.RoomDetailArgs -import im.vector.app.features.pin.PinLocker import im.vector.app.features.settings.VectorPreferences import timber.log.Timber import javax.inject.Inject @@ -61,7 +63,6 @@ import kotlin.random.Random @Singleton class NotificationUtils @Inject constructor(private val context: Context, private val stringProvider: StringProvider, - private val pinLocker: PinLocker, private val vectorPreferences: VectorPreferences) { companion object { @@ -845,6 +846,33 @@ class NotificationUtils @Inject constructor(private val context: Context, } } + fun displayDiagnosticNotification() { + notificationManager.notify( + "DIAGNOSTIC", + 888, + NotificationCompat.Builder(context, NOISY_NOTIFICATION_CHANNEL_ID) + .setContentTitle(stringProvider.getString(R.string.app_name)) + .setContentText(stringProvider.getString(R.string.settings_troubleshoot_test_push_notification_content)) + .setSmallIcon(R.drawable.ic_status_bar) + .setLargeIcon(getBitmap(context, R.drawable.element_logo_green)) + .setColor(ContextCompat.getColor(context, R.color.notification_accent_color)) + .setPriority(NotificationCompat.PRIORITY_MAX) + .setCategory(NotificationCompat.CATEGORY_STATUS) + .setAutoCancel(true) + .build() + ) + } + + private fun getBitmap(context: Context, @DrawableRes drawableRes: Int): Bitmap? { + val drawable = ResourcesCompat.getDrawable(context.resources, drawableRes, null) ?: return null + val canvas = Canvas() + val bitmap = Bitmap.createBitmap(drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888) + canvas.setBitmap(bitmap) + drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight) + drawable.draw(canvas) + return bitmap + } + /** * Return true it the user has enabled the do not disturb mode */ diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index be83a6dc50..d5e590375c 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -752,6 +752,7 @@ Test Push The application is receiving PUSH, you should see a notification. Failed to receive push. Solution could be to reinstall the application. + You are receiving PUSH! Notifications Service Notifications Service is running. From e926326fcafd1bfeaf09a01dd491b7078e25e536 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 15:32:29 +0200 Subject: [PATCH 178/278] Better handling of network error. Entering a wrong homeserver URL is now a specific error. --- .../java/im/vector/app/core/error/ErrorFormatter.kt | 5 +---- .../app/features/login/LoginServerUrlFormFragment.kt | 10 +++++++++- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt b/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt index 43395b97f7..790f19a133 100644 --- a/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt +++ b/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt @@ -45,15 +45,12 @@ class DefaultErrorFormatter @Inject constructor( when (throwable.ioException) { is SocketTimeoutException -> stringProvider.getString(R.string.error_network_timeout) - is UnknownHostException -> - // Invalid homeserver? - // TODO Check network state, airplane mode, etc. - stringProvider.getString(R.string.login_error_unknown_host) is SSLPeerUnverifiedException -> stringProvider.getString(R.string.login_error_ssl_peer_unverified) is SSLException -> stringProvider.getString(R.string.login_error_ssl_other) else -> + // TODO Check network state, airplane mode, etc. stringProvider.getString(R.string.error_no_network) } } diff --git a/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt b/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt index 4b9f528254..af959fecd4 100644 --- a/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt +++ b/vector/src/main/java/im/vector/app/features/login/LoginServerUrlFormFragment.kt @@ -28,6 +28,8 @@ import im.vector.app.core.extensions.hideKeyboard import im.vector.app.core.utils.ensureProtocol import im.vector.app.core.utils.openUrlInChromeCustomTab import kotlinx.android.synthetic.main.fragment_login_server_url_form.* +import org.matrix.android.sdk.api.failure.Failure +import java.net.UnknownHostException import javax.inject.Inject /** @@ -115,7 +117,13 @@ class LoginServerUrlFormFragment @Inject constructor() : AbstractLoginFragment() } override fun onError(throwable: Throwable) { - loginServerUrlFormHomeServerUrlTil.error = errorFormatter.toHumanReadable(throwable) + loginServerUrlFormHomeServerUrlTil.error = if (throwable is Failure.NetworkConnection + && throwable.ioException is UnknownHostException) { + // Invalid homeserver? + getString(R.string.login_error_homeserver_not_found) + } else { + errorFormatter.toHumanReadable(throwable) + } } override fun updateWithState(state: LoginViewState) { From d1fb1614a3c523fc226a5896be7e936a06d2b330 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 16:13:14 +0200 Subject: [PATCH 179/278] Make the app react to test push --- tools/tests/test_push.sh | 2 +- tools/tests/test_push_unsafe.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/tests/test_push.sh b/tools/tests/test_push.sh index 0da02e2d0a..08348497ae 100755 --- a/tools/tests/test_push.sh +++ b/tools/tests/test_push.sh @@ -25,7 +25,7 @@ curl -H "Authorization: key=$SERVER_KEY" \ read -p "Enter the FCM token: " FCM_TOKEN # content of the notification -DATA="{\"message\":\"Message of PUSH!\"}" +DATA='{"event_id":"$THIS_IS_A_FAKE_EVENT_ID"}' echo echo diff --git a/tools/tests/test_push_unsafe.sh b/tools/tests/test_push_unsafe.sh index 62ec3759f4..77c198197f 100755 --- a/tools/tests/test_push_unsafe.sh +++ b/tools/tests/test_push_unsafe.sh @@ -32,7 +32,7 @@ curl -H "Authorization: key=$SERVER_KEY" \ # {"multicast_id":5978845027639121780,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"InvalidRegistration"}]} # content of the notification -DATA="{\"message\":\"Message of PUSH!\"}" +DATA='{"event_id":"$THIS_IS_A_FAKE_EVENT_ID"}' echo echo From 48ca1384f8af1affa113b1c6249d256a269c5731 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 2 Oct 2020 16:46:40 +0200 Subject: [PATCH 180/278] Do some renaming, Sygnal is an implementation of a PushGateway. --- CHANGES.md | 1 + ...SygnalFailure.kt => PushGatewayFailure.kt} | 4 +-- .../sdk/api/session/pushers/PushersService.kt | 6 ++-- .../sdk/internal/network/NetworkConstants.kt | 4 +-- .../session/pushers/DefaultPushersService.kt | 8 +++--- .../internal/session/pushers/PushersModule.kt | 6 ++-- .../PushGatewayAPI.kt} | 10 +++---- .../PushGatewayDevice.kt} | 4 +-- .../PushGatewayNotification.kt} | 6 ++-- .../PushGatewayNotifyBody.kt} | 6 ++-- .../PushGatewayNotifyResponse.kt} | 6 ++-- .../PushGatewayNotifyTask.kt} | 28 +++++++++---------- ...omSygnal.kt => TestPushFromPushGateway.kt} | 14 +++++----- ...ificationTroubleshootTestManagerFactory.kt | 6 ++-- 14 files changed, 55 insertions(+), 54 deletions(-) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/{SygnalFailure.kt => PushGatewayFailure.kt} (86%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/{sygnal/SygnalAPI.kt => gateway/PushGatewayAPI.kt} (73%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/{sygnal/SygnalDevice.kt => gateway/PushGatewayDevice.kt} (90%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/{sygnal/SygnalNotification.kt => gateway/PushGatewayNotification.kt} (85%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/{sygnal/SygnalNotifyBody.kt => gateway/PushGatewayNotifyBody.kt} (84%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/{sygnal/SygnalNotifyResponse.kt => gateway/PushGatewayNotifyResponse.kt} (82%) rename matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/{sygnal/SygnalNotifyTask.kt => gateway/PushGatewayNotifyTask.kt} (69%) rename vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/{TestPushFromSygnal.kt => TestPushFromPushGateway.kt} (76%) diff --git a/CHANGES.md b/CHANGES.md index e365768f86..6c6a0d6dd8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -17,6 +17,7 @@ Improvements 🙌: - Filter room member (and banned users) by name (#2184) - 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 Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/SygnalFailure.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushGatewayFailure.kt similarity index 86% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/SygnalFailure.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushGatewayFailure.kt index ebedba9d92..f5b9d7ea8d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/SygnalFailure.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushGatewayFailure.kt @@ -18,6 +18,6 @@ package org.matrix.android.sdk.api.session.pushers import org.matrix.android.sdk.api.failure.Failure -sealed class SygnalFailure : Failure.FeatureFailure() { - object PusherRejected : SygnalFailure() +sealed class PushGatewayFailure : Failure.FeatureFailure() { + object PusherRejected : PushGatewayFailure() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt index 3832bc5af4..09cbe5a89b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt @@ -67,12 +67,12 @@ interface PushersService { withEventIdOnly: Boolean): UUID /** - * Directly ask Sygnal to send a push to this device - * @param url the Sygnal url (full path) + * Directly ask the push gateway to send a push to this device + * @param url the push gateway url (full path) * @param appId the application id * @param pushkey the FCM token * @param eventId the eventId which will be sent in the Push message. Use a fake eventId. - * @param callback callback to know if Sygnal has accepted the request. In this case, the app should receive a Push with the provided eventId. + * @param callback callback to know if the push gateway has accepted the request. In this case, the app should receive a Push with the provided eventId. * In case of error, PusherRejected failure can happen. In this case it means that the pushkey is not valid. */ fun testPush(url: String, diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt index 0dfdec1804..a14c86efb6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/network/NetworkConstants.kt @@ -31,8 +31,8 @@ internal object NetworkConstants { const val URI_IDENTITY_PREFIX_PATH = "_matrix/identity/v2" const val URI_IDENTITY_PATH_V2 = "$URI_IDENTITY_PREFIX_PATH/" - // Sygnal - const val URI_SYGNAL_PREFIX_PATH = "_matrix/push/v1/" + // Push Gateway + const val URI_PUSH_GATEWAY_PREFIX_PATH = "_matrix/push/v1/" // Integration const val URI_INTEGRATION_MANAGER_PATH = "_matrix/integrations/v1/" diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt index 02f147f815..1ded11de8f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt @@ -28,7 +28,7 @@ import org.matrix.android.sdk.internal.database.query.where import org.matrix.android.sdk.internal.di.SessionDatabase import org.matrix.android.sdk.internal.di.SessionId import org.matrix.android.sdk.internal.di.WorkManagerProvider -import org.matrix.android.sdk.internal.session.pushers.sygnal.SygnalNotifyTask +import org.matrix.android.sdk.internal.session.pushers.gateway.PushGatewayNotifyTask import org.matrix.android.sdk.internal.task.TaskExecutor import org.matrix.android.sdk.internal.task.configureWith import org.matrix.android.sdk.internal.worker.WorkerParamsFactory @@ -42,7 +42,7 @@ internal class DefaultPushersService @Inject constructor( @SessionDatabase private val monarchy: Monarchy, @SessionId private val sessionId: String, private val getPusherTask: GetPushersTask, - private val sygnalNotifyTask: SygnalNotifyTask, + private val pushGatewayNotifyTask: PushGatewayNotifyTask, private val removePusherTask: RemovePusherTask, private val taskExecutor: TaskExecutor ) : PushersService { @@ -52,8 +52,8 @@ internal class DefaultPushersService @Inject constructor( pushkey: String, eventId: String, callback: MatrixCallback) { - sygnalNotifyTask - .configureWith(SygnalNotifyTask.Params(url, appId, pushkey, eventId)) { + pushGatewayNotifyTask + .configureWith(PushGatewayNotifyTask.Params(url, appId, pushkey, eventId)) { this.callback = callback } .executeBy(taskExecutor) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt index 5810f26c85..4030c63514 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/PushersModule.kt @@ -25,8 +25,8 @@ import org.matrix.android.sdk.api.session.pushers.PushersService import org.matrix.android.sdk.internal.session.notification.DefaultProcessEventForPushTask import org.matrix.android.sdk.internal.session.notification.DefaultPushRuleService import org.matrix.android.sdk.internal.session.notification.ProcessEventForPushTask -import org.matrix.android.sdk.internal.session.pushers.sygnal.DefaultSygnalNotifyTask -import org.matrix.android.sdk.internal.session.pushers.sygnal.SygnalNotifyTask +import org.matrix.android.sdk.internal.session.pushers.gateway.DefaultPushGatewayNotifyTask +import org.matrix.android.sdk.internal.session.pushers.gateway.PushGatewayNotifyTask import org.matrix.android.sdk.internal.session.room.notification.DefaultSetRoomNotificationStateTask import org.matrix.android.sdk.internal.session.room.notification.SetRoomNotificationStateTask import retrofit2.Retrofit @@ -90,5 +90,5 @@ internal abstract class PushersModule { abstract fun bindProcessEventForPushTask(task: DefaultProcessEventForPushTask): ProcessEventForPushTask @Binds - abstract fun bindSygnalNotifyTask(task: DefaultSygnalNotifyTask): SygnalNotifyTask + abstract fun bindPushGatewayNotifyTask(task: DefaultPushGatewayNotifyTask): PushGatewayNotifyTask } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt similarity index 73% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalAPI.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt index 7550e14a97..75946780f6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt @@ -13,20 +13,20 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.matrix.android.sdk.internal.session.pushers.sygnal +package org.matrix.android.sdk.internal.session.pushers.gateway import org.matrix.android.sdk.internal.network.NetworkConstants import retrofit2.Call import retrofit2.http.Body import retrofit2.http.POST -internal interface SygnalAPI { +internal interface PushGatewayAPI { /** - * Ask Sygnal to send a push to the current device. + * Ask the Push Gateway to send a push to the current device. * * Ref: https://matrix.org/docs/spec/push_gateway/r0.1.1#post-matrix-push-v1-notify */ - @POST(NetworkConstants.URI_SYGNAL_PREFIX_PATH + "notify") - fun notify(@Body body: SygnalNotifyBody): Call + @POST(NetworkConstants.URI_PUSH_GATEWAY_PREFIX_PATH + "notify") + fun notify(@Body body: PushGatewayNotifyBody): Call } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayDevice.kt similarity index 90% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalDevice.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayDevice.kt index a5cfe389cc..a513448014 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalDevice.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayDevice.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.pushers.sygnal +package org.matrix.android.sdk.internal.session.pushers.gateway import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -internal data class SygnalDevice( +internal data class PushGatewayDevice( /** * Required. The app_id given when the pusher was created. */ diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotification.kt similarity index 85% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotification.kt index a2c016feb8..aa6519e216 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotification.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotification.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.pushers.sygnal +package org.matrix.android.sdk.internal.session.pushers.gateway import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -internal data class SygnalNotification( +internal data class PushGatewayNotification( @Json(name = "event_id") val eventId: String, @@ -28,5 +28,5 @@ internal data class SygnalNotification( * Required. This is an array of devices that the notification should be sent to. */ @Json(name = "devices") - val devices: List + val devices: List ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyBody.kt similarity index 84% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyBody.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyBody.kt index 7b13d8ff79..112267aeba 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyBody.kt @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.pushers.sygnal +package org.matrix.android.sdk.internal.session.pushers.gateway import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -internal data class SygnalNotifyBody( +internal data class PushGatewayNotifyBody( /** * Required. Information about the push notification */ @Json(name = "notification") - val notification: SygnalNotification + val notification: PushGatewayNotification ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyResponse.kt similarity index 82% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyResponse.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyResponse.kt index 73d5aa1e2c..bad1c08465 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyResponse.kt @@ -14,13 +14,13 @@ * limitations under the License. */ -package org.matrix.android.sdk.internal.session.pushers.sygnal +package org.matrix.android.sdk.internal.session.pushers.gateway import com.squareup.moshi.Json import com.squareup.moshi.JsonClass @JsonClass(generateAdapter = true) -internal data class SygnalNotifyResponse( +internal data class PushGatewayNotifyResponse( @Json(name = "rejected") - val rejectedPushKey: List + val rejectedPushKeys: List ) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyTask.kt similarity index 69% rename from matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt rename to matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyTask.kt index 663d0cd3c2..fba3a881d8 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/sygnal/SygnalNotifyTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyTask.kt @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.matrix.android.sdk.internal.session.pushers.sygnal +package org.matrix.android.sdk.internal.session.pushers.gateway import okhttp3.OkHttpClient -import org.matrix.android.sdk.api.session.pushers.SygnalFailure +import org.matrix.android.sdk.api.session.pushers.PushGatewayFailure import org.matrix.android.sdk.internal.di.Unauthenticated import org.matrix.android.sdk.internal.network.NetworkConstants import org.matrix.android.sdk.internal.network.RetrofitFactory @@ -24,7 +24,7 @@ import org.matrix.android.sdk.internal.network.executeRequest import org.matrix.android.sdk.internal.task.Task import javax.inject.Inject -internal interface SygnalNotifyTask : Task { +internal interface PushGatewayNotifyTask : Task { data class Params( val url: String, val appId: String, @@ -33,25 +33,25 @@ internal interface SygnalNotifyTask : Task { ) } -internal class DefaultSygnalNotifyTask @Inject constructor( +internal class DefaultPushGatewayNotifyTask @Inject constructor( private val retrofitFactory: RetrofitFactory, @Unauthenticated private val unauthenticatedOkHttpClient: OkHttpClient -) : SygnalNotifyTask { +) : PushGatewayNotifyTask { - override suspend fun execute(params: SygnalNotifyTask.Params) { + override suspend fun execute(params: PushGatewayNotifyTask.Params) { val sygnalApi = retrofitFactory.create( unauthenticatedOkHttpClient, - params.url.substringBefore(NetworkConstants.URI_SYGNAL_PREFIX_PATH) + params.url.substringBefore(NetworkConstants.URI_PUSH_GATEWAY_PREFIX_PATH) ) - .create(SygnalAPI::class.java) + .create(PushGatewayAPI::class.java) - val response = executeRequest(null) { + val response = executeRequest(null) { apiCall = sygnalApi.notify( - SygnalNotifyBody( - SygnalNotification( + PushGatewayNotifyBody( + PushGatewayNotification( eventId = params.eventId, devices = listOf( - SygnalDevice( + PushGatewayDevice( params.appId, params.pushKey ) @@ -61,8 +61,8 @@ internal class DefaultSygnalNotifyTask @Inject constructor( ) } - if (response.rejectedPushKey.contains(params.pushKey)) { - throw SygnalFailure.PusherRejected + if (response.rejectedPushKeys.contains(params.pushKey)) { + throw PushGatewayFailure.PusherRejected } } } diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt similarity index 76% rename from vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt rename to vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt index 105c54c64f..21bbc96f08 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromSygnal.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt @@ -23,16 +23,16 @@ import im.vector.app.core.resources.StringProvider import im.vector.app.features.settings.troubleshoot.TroubleshootTest import im.vector.app.push.fcm.FcmHelper import org.matrix.android.sdk.api.MatrixCallback -import org.matrix.android.sdk.api.session.pushers.SygnalFailure +import org.matrix.android.sdk.api.session.pushers.PushGatewayFailure import javax.inject.Inject /** - * Test Push by asking Sygnal to send a Push back + * Test Push by asking the Push Gateway to send a Push back */ -class TestPushFromSygnal @Inject constructor(private val context: AppCompatActivity, - private val stringProvider: StringProvider, - private val errorFormatter: ErrorFormatter, - private val pushersManager: PushersManager) +class TestPushFromPushGateway @Inject constructor(private val context: AppCompatActivity, + private val stringProvider: StringProvider, + private val errorFormatter: ErrorFormatter, + private val pushersManager: PushersManager) : TroubleshootTest(R.string.settings_troubleshoot_test_push_loop_title) { override fun perform() { @@ -42,7 +42,7 @@ class TestPushFromSygnal @Inject constructor(private val context: AppCompatActiv } pushersManager.testPush(fcmToken, object : MatrixCallback { override fun onFailure(failure: Throwable) { - description = if (failure is SygnalFailure.PusherRejected) { + description = if (failure is PushGatewayFailure.PusherRejected) { stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_failed) } else { errorFormatter.toHumanReadable(failure) diff --git a/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt b/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt index 06d3283afa..46c78a9872 100644 --- a/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt +++ b/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt @@ -23,7 +23,7 @@ import im.vector.app.features.settings.troubleshoot.TestPushRulesSettings import im.vector.app.features.settings.troubleshoot.TestSystemSettings import im.vector.app.gplay.features.settings.troubleshoot.TestFirebaseToken import im.vector.app.gplay.features.settings.troubleshoot.TestPlayServices -import im.vector.app.gplay.features.settings.troubleshoot.TestPushFromSygnal +import im.vector.app.gplay.features.settings.troubleshoot.TestPushFromPushGateway import im.vector.app.gplay.features.settings.troubleshoot.TestTokenRegistration import javax.inject.Inject @@ -35,7 +35,7 @@ class NotificationTroubleshootTestManagerFactory @Inject constructor( private val testPlayServices: TestPlayServices, private val testFirebaseToken: TestFirebaseToken, private val testTokenRegistration: TestTokenRegistration, - private val testPushFromSygnal: TestPushFromSygnal + private val testPushFromPushGateway: TestPushFromPushGateway ) { fun create(fragment: Fragment): NotificationTroubleshootTestManager { @@ -47,7 +47,7 @@ class NotificationTroubleshootTestManagerFactory @Inject constructor( mgr.addTest(testPlayServices) mgr.addTest(testFirebaseToken) mgr.addTest(testTokenRegistration) - mgr.addTest(testPushFromSygnal) + mgr.addTest(testPushFromPushGateway) return mgr } } From 5397700ab4fcf4ab15ef9451b3d0a183cf6c4156 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 5 Oct 2020 15:54:42 +0200 Subject: [PATCH 181/278] cleanup --- .../sdk/internal/session/pushers/gateway/PushGatewayAPI.kt | 1 - vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt index 75946780f6..a031a8a307 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt @@ -29,4 +29,3 @@ internal interface PushGatewayAPI { @POST(NetworkConstants.URI_PUSH_GATEWAY_PREFIX_PATH + "notify") fun notify(@Body body: PushGatewayNotifyBody): Call } - diff --git a/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt b/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt index 790f19a133..1e7d662793 100644 --- a/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt +++ b/vector/src/main/java/im/vector/app/core/error/ErrorFormatter.kt @@ -24,7 +24,6 @@ import org.matrix.android.sdk.api.failure.isInvalidPassword import org.matrix.android.sdk.api.session.identity.IdentityServiceError import java.net.HttpURLConnection import java.net.SocketTimeoutException -import java.net.UnknownHostException import javax.inject.Inject import javax.net.ssl.SSLException import javax.net.ssl.SSLPeerUnverifiedException From f860cfd8a3111fab584ea9e7b6220349b83c0794 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 14:08:35 +0200 Subject: [PATCH 182/278] Fix compilation issue after rebase --- .../features/settings/troubleshoot/TestPushFromPushGateway.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt index 21bbc96f08..d52f41dacf 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt @@ -15,6 +15,8 @@ */ package im.vector.app.gplay.features.settings.troubleshoot +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher import androidx.appcompat.app.AppCompatActivity import im.vector.app.R import im.vector.app.core.error.ErrorFormatter @@ -35,7 +37,7 @@ class TestPushFromPushGateway @Inject constructor(private val context: AppCompat private val pushersManager: PushersManager) : TroubleshootTest(R.string.settings_troubleshoot_test_push_loop_title) { - override fun perform() { + override fun perform(activityResultLauncher: ActivityResultLauncher) { val fcmToken = FcmHelper.getFcmToken(context) ?: run { status = TestStatus.FAILED return From be62d65c98170afc898107d66074fe52075cf4ed Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 14:09:19 +0200 Subject: [PATCH 183/278] Some cleanup on the layout --- vector/src/main/res/layout/activity_jitsi.xml | 6 +- .../main/res/layout/view_avatar_selector.xml | 68 ------------------- 2 files changed, 4 insertions(+), 70 deletions(-) delete mode 100644 vector/src/main/res/layout/view_avatar_selector.xml diff --git a/vector/src/main/res/layout/activity_jitsi.xml b/vector/src/main/res/layout/activity_jitsi.xml index e0359d220d..de0c0271bc 100644 --- a/vector/src/main/res/layout/activity_jitsi.xml +++ b/vector/src/main/res/layout/activity_jitsi.xml @@ -1,11 +1,12 @@ - + + android:orientation="vertical" + tools:ignore="UselessParent"> - - - - - - - - - - - - - - - - - - - - - - - - - - From 5e45f5c3eacf71c7e071830795506f082f4a6ef3 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 15:22:02 +0200 Subject: [PATCH 184/278] Copyright for SDK --- .../android/sdk/api/session/pushers/PushGatewayFailure.kt | 2 +- .../sdk/internal/session/pushers/gateway/PushGatewayAPI.kt | 2 +- .../sdk/internal/session/pushers/gateway/PushGatewayDevice.kt | 2 +- .../internal/session/pushers/gateway/PushGatewayNotification.kt | 2 +- .../internal/session/pushers/gateway/PushGatewayNotifyBody.kt | 2 +- .../session/pushers/gateway/PushGatewayNotifyResponse.kt | 2 +- .../internal/session/pushers/gateway/PushGatewayNotifyTask.kt | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushGatewayFailure.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushGatewayFailure.kt index f5b9d7ea8d..b15147161f 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushGatewayFailure.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushGatewayFailure.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt index a031a8a307..d95587fc22 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayAPI.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayDevice.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayDevice.kt index a513448014..5490fed7a7 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayDevice.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayDevice.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotification.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotification.kt index aa6519e216..b9c8a35afc 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotification.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotification.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyBody.kt index 112267aeba..751414d2fe 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyBody.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyResponse.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyResponse.kt index bad1c08465..50401ef6e9 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyResponse.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyResponse.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyTask.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyTask.kt index fba3a881d8..df6f46fa81 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyTask.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/gateway/PushGatewayNotifyTask.kt @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 New Vector Ltd + * 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. From dbb77d9dc12e42e69f0133a3c2f358346f1d6e29 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 17:46:21 +0200 Subject: [PATCH 185/278] Push test: success if user click on the notification --- .../troubleshoot/TestPushFromPushGateway.kt | 8 ++++- vector/src/main/AndroidManifest.xml | 4 +++ .../notifications/NotificationUtils.kt | 12 ++++++++ ...ttingsNotificationsTroubleshootFragment.kt | 30 +++++++++++++++++++ .../NotificationTroubleshootTestManager.kt | 6 ++++ .../troubleshoot/TestNotificationReceiver.kt | 30 +++++++++++++++++++ .../settings/troubleshoot/TroubleshootTest.kt | 3 ++ vector/src/main/res/values/strings.xml | 5 ++-- 8 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotificationReceiver.kt diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt index d52f41dacf..19a4e3a841 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt @@ -53,9 +53,15 @@ class TestPushFromPushGateway @Inject constructor(private val context: AppCompat } override fun onSuccess(data: Unit) { + // Wait for user to click on the notification description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_success) - status = TestStatus.SUCCESS + status = TestStatus.RUNNING } }) } + + override fun onNotificationClicked() { + description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_notification_clicked) + status = TestStatus.SUCCESS + } } diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 3f178a3d20..d8ae90a33c 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -252,6 +252,10 @@ android:name=".features.call.service.CallHeadsUpActionReceiver" android:exported="false" /> + + { // check if there are quick fixes + // TODO Rewrite using firstOrNull var hasQuickFix = false testManager?.testList?.let { for (test in it) { @@ -161,6 +172,25 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( override fun onResume() { super.onResume() (activity as? VectorBaseActivity)?.supportActionBar?.setTitle(R.string.settings_notification_troubleshoot) + + tryOrNull("Unable to register the receiver") { + LocalBroadcastManager.getInstance(requireContext()) + .registerReceiver(broadcastReceiver, IntentFilter(NotificationUtils.DIAGNOSTIC_ACTION)) + } + } + + override fun onPause() { + super.onPause() + tryOrNull { + LocalBroadcastManager.getInstance(requireContext()) + .unregisterReceiver(broadcastReceiver) + } + } + + private val broadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + testManager?.onDiagnosticNotificationClicked() + } } override fun onAttach(context: Context) { diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt index e977dc5963..0c77caf635 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt @@ -94,4 +94,10 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { test.cancel() } } + + fun onDiagnosticNotificationClicked() { + testList.forEach { + it.onNotificationClicked() + } + } } diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotificationReceiver.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotificationReceiver.kt new file mode 100644 index 0000000000..7dec870d3d --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotificationReceiver.kt @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 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.settings.troubleshoot + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import androidx.localbroadcastmanager.content.LocalBroadcastManager + +class TestNotificationReceiver : BroadcastReceiver() { + + override fun onReceive(context: Context, intent: Intent) { + // Internal broadcast to any one interested + LocalBroadcastManager.getInstance(context).sendBroadcast(intent) + } +} diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt index f894fcc0ef..aedca5e356 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt @@ -51,4 +51,7 @@ abstract class TroubleshootTest(@StringRes val titleResId: Int) { open fun cancel() { } + + open fun onNotificationClicked() { + } } diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index d5e590375c..004da5e15e 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -750,9 +750,10 @@ Failed to register FCM token to HomeServer:\n%1$s Test Push - The application is receiving PUSH, you should see a notification. + The application is receiving PUSH, please click on the test notification you just receive. + The notification has been clicked! Failed to receive push. Solution could be to reinstall the application. - You are receiving PUSH! + You are receiving PUSH! Click me! Notifications Service Notifications Service is running. From ab9bbe9a4862b8450ec90803325ee76341056b02 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 21:40:53 +0200 Subject: [PATCH 186/278] Cleanup and cancel request properly --- .../sdk/api/session/pushers/PushersService.kt | 2 +- .../session/pushers/DefaultPushersService.kt | 4 +-- .../troubleshoot/TestPushFromPushGateway.kt | 9 ++++- .../vector/app/core/pushers/PushersManager.kt | 5 +-- ...ttingsNotificationsTroubleshootFragment.kt | 20 +++-------- .../NotificationTroubleshootTestManager.kt | 35 ++++++++++++------- 6 files changed, 41 insertions(+), 34 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt index 09cbe5a89b..3993422b1d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/pushers/PushersService.kt @@ -79,7 +79,7 @@ interface PushersService { appId: String, pushkey: String, eventId: String, - callback: MatrixCallback) + callback: MatrixCallback): Cancelable /** * Remove the http pusher diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt index 1ded11de8f..e239182b4a 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/pushers/DefaultPushersService.kt @@ -51,8 +51,8 @@ internal class DefaultPushersService @Inject constructor( appId: String, pushkey: String, eventId: String, - callback: MatrixCallback) { - pushGatewayNotifyTask + callback: MatrixCallback): Cancelable { + return pushGatewayNotifyTask .configureWith(PushGatewayNotifyTask.Params(url, appId, pushkey, eventId)) { this.callback = callback } diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt index 19a4e3a841..bbe3f35fb5 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt @@ -26,6 +26,7 @@ import im.vector.app.features.settings.troubleshoot.TroubleshootTest import im.vector.app.push.fcm.FcmHelper import org.matrix.android.sdk.api.MatrixCallback import org.matrix.android.sdk.api.session.pushers.PushGatewayFailure +import org.matrix.android.sdk.api.util.Cancelable import javax.inject.Inject /** @@ -37,12 +38,14 @@ class TestPushFromPushGateway @Inject constructor(private val context: AppCompat private val pushersManager: PushersManager) : TroubleshootTest(R.string.settings_troubleshoot_test_push_loop_title) { + private var action: Cancelable? = null + override fun perform(activityResultLauncher: ActivityResultLauncher) { val fcmToken = FcmHelper.getFcmToken(context) ?: run { status = TestStatus.FAILED return } - pushersManager.testPush(fcmToken, object : MatrixCallback { + action = pushersManager.testPush(fcmToken, object : MatrixCallback { override fun onFailure(failure: Throwable) { description = if (failure is PushGatewayFailure.PusherRejected) { stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_failed) @@ -64,4 +67,8 @@ class TestPushFromPushGateway @Inject constructor(private val context: AppCompat description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_notification_clicked) status = TestStatus.SUCCESS } + + override fun cancel() { + action?.cancel() + } } diff --git a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt index cfdc61a045..5fe30141d9 100644 --- a/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt +++ b/vector/src/main/java/im/vector/app/core/pushers/PushersManager.kt @@ -22,6 +22,7 @@ import im.vector.app.core.resources.AppNameProvider import im.vector.app.core.resources.LocaleProvider import im.vector.app.core.resources.StringProvider import org.matrix.android.sdk.api.MatrixCallback +import org.matrix.android.sdk.api.util.Cancelable import java.util.UUID import javax.inject.Inject import kotlin.math.abs @@ -34,10 +35,10 @@ class PushersManager @Inject constructor( private val stringProvider: StringProvider, private val appNameProvider: AppNameProvider ) { - fun testPush(pushKey: String, callback: MatrixCallback) { + fun testPush(pushKey: String, callback: MatrixCallback): Cancelable { val currentSession = activeSessionHolder.getActiveSession() - currentSession.testPush( + return currentSession.testPush( stringProvider.getString(R.string.pusher_http_url), stringProvider.getString(R.string.pusher_app_id), pushKey, diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt index 2adc6ccdcf..ea9e73f160 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt @@ -41,6 +41,7 @@ import im.vector.app.features.rageshake.BugReporter import im.vector.app.features.settings.troubleshoot.NotificationTroubleshootTestManager import im.vector.app.features.settings.troubleshoot.TroubleshootTest import im.vector.app.push.fcm.NotificationTroubleshootTestManagerFactory +import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.extensions.tryOrNull import javax.inject.Inject @@ -92,8 +93,7 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( } private fun startUI() { - mSummaryDescription.text = getString(R.string.settings_troubleshoot_diagnostic_running_status, - 0, 0) + mSummaryDescription.text = getString(R.string.settings_troubleshoot_diagnostic_running_status, 0, 0) testManager = testManagerFactory.create(this) testManager?.statusListener = { troubleshootTestManager -> if (isAdded) { @@ -105,9 +105,8 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( mRunButton.visibility = View.VISIBLE } TroubleshootTest.TestStatus.RUNNING -> { - // Forces int type because it's breaking lint - val size: Int = troubleshootTestManager.testList.size - val currentTestIndex: Int = troubleshootTestManager.currentTestIndex + val size = troubleshootTestManager.testListSize + val currentTestIndex = troubleshootTestManager.currentTestIndex mSummaryDescription.text = getString( R.string.settings_troubleshoot_diagnostic_running_status, currentTestIndex, @@ -118,16 +117,7 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( } TroubleshootTest.TestStatus.FAILED -> { // check if there are quick fixes - // TODO Rewrite using firstOrNull - var hasQuickFix = false - testManager?.testList?.let { - for (test in it) { - if (test.status == TroubleshootTest.TestStatus.FAILED && test.quickFix != null) { - hasQuickFix = true - break - } - } - } + val hasQuickFix = testManager?.hasQuickFix().orFalse() if (hasQuickFix) { mSummaryDescription.text = getString(R.string.settings_troubleshoot_diagnostic_failure_status_with_quickfix) } else { diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt index 0c77caf635..566cb6d846 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt @@ -23,13 +23,19 @@ import androidx.fragment.app.Fragment import kotlin.properties.Delegates class NotificationTroubleshootTestManager(val fragment: Fragment) { + private val testList = ArrayList() + + val testListSize: Int + get() = testList.size - val testList = ArrayList() var isCancelled = false + private set var currentTestIndex by Delegates.observable(0) { _, _, _ -> statusListener?.invoke(this) } + private set + val adapter = NotificationTroubleshootRecyclerViewAdapter(testList) var statusListener: ((NotificationTroubleshootTestManager) -> Unit)? = null @@ -37,6 +43,7 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { var diagStatus: TroubleshootTest.TestStatus by Delegates.observable(TroubleshootTest.TestStatus.NOT_STARTED) { _, _, _ -> statusListener?.invoke(this) } + private set fun addTest(test: TroubleshootTest) { testList.add(test) @@ -79,25 +86,27 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { } fun retry(activityResultLauncher: ActivityResultLauncher) { - for (test in testList) { - test.cancel() - test.description = null - test.quickFix = null - test.status = TroubleshootTest.TestStatus.NOT_STARTED + testList.forEach { + it.cancel() + it.description = null + it.quickFix = null + it.status = TroubleshootTest.TestStatus.NOT_STARTED } runDiagnostic(activityResultLauncher) } - fun cancel() { - isCancelled = true - for (test in testList) { - test.cancel() + fun hasQuickFix(): Boolean { + return testList.any { test -> + test.status == TroubleshootTest.TestStatus.FAILED && test.quickFix != null } } + fun cancel() { + isCancelled = true + testList.forEach { it.cancel() } + } + fun onDiagnosticNotificationClicked() { - testList.forEach { - it.onNotificationClicked() - } + testList.forEach { it.onNotificationClicked() } } } From 3714e4e7874f0f68e9225c5ef3ca99c92ad11200 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 8 Oct 2020 21:55:16 +0200 Subject: [PATCH 187/278] Add a Waiting for user state --- .../settings/troubleshoot/TestPushFromPushGateway.kt | 2 +- .../VectorSettingsNotificationsTroubleshootFragment.kt | 3 ++- .../NotificationTroubleshootRecyclerViewAdapter.kt | 10 ++++++++++ .../features/settings/troubleshoot/TroubleshootTest.kt | 1 + vector/src/main/res/values/strings.xml | 2 +- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt index bbe3f35fb5..ce94244ee6 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt @@ -58,7 +58,7 @@ class TestPushFromPushGateway @Inject constructor(private val context: AppCompat override fun onSuccess(data: Unit) { // Wait for user to click on the notification description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_success) - status = TestStatus.RUNNING + status = TestStatus.WAITING_FOR_USER } }) } diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt index ea9e73f160..4843c1446a 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt @@ -104,7 +104,8 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( mSummaryButton.visibility = View.GONE mRunButton.visibility = View.VISIBLE } - TroubleshootTest.TestStatus.RUNNING -> { + TroubleshootTest.TestStatus.RUNNING, + TroubleshootTest.TestStatus.WAITING_FOR_USER -> { val size = troubleshootTestManager.testListSize val currentTestIndex = troubleshootTestManager.currentTestIndex mSummaryDescription.text = getString( diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootRecyclerViewAdapter.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootRecyclerViewAdapter.kt index 1ccd7b6735..633d9d05fe 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootRecyclerViewAdapter.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootRecyclerViewAdapter.kt @@ -77,6 +77,16 @@ class NotificationTroubleshootRecyclerViewAdapter(val tests: ArrayList { + progressBar.visibility = View.INVISIBLE + statusIconImage.visibility = View.VISIBLE + val infoColor = ContextCompat.getColor(context, R.color.vector_info_color) + val drawable = ContextCompat.getDrawable(itemView.context, R.drawable.ic_notification_privacy_warning)?.apply { + ThemeUtils.tintDrawableWithColor(this, infoColor) + } + statusIconImage.setImageDrawable(drawable) + descriptionText.setTextColor(infoColor) + } TroubleshootTest.TestStatus.RUNNING -> { progressBar.visibility = View.VISIBLE statusIconImage.visibility = View.INVISIBLE diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt index aedca5e356..c775c8c827 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt @@ -25,6 +25,7 @@ abstract class TroubleshootTest(@StringRes val titleResId: Int) { enum class TestStatus { NOT_STARTED, RUNNING, + WAITING_FOR_USER, FAILED, SUCCESS } diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 004da5e15e..ef6b63aeb0 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -750,7 +750,7 @@ Failed to register FCM token to HomeServer:\n%1$s Test Push - The application is receiving PUSH, please click on the test notification you just receive. + The application is receiving PUSH, please click on the test notification you just received. The notification has been clicked! Failed to receive push. Solution could be to reinstall the application. You are receiving PUSH! Click me! From 4f92db76511a0b63d2555bc85d7abc8a9c141aa7 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Fri, 9 Oct 2020 14:45:36 +0300 Subject: [PATCH 188/278] Make long topic expandable. --- .../app/core/epoxy/ExpandableTextItem.kt | 86 +++++++++++++++++++ .../roomprofile/RoomProfileController.kt | 15 ++++ .../roomprofile/RoomProfileFragment.kt | 2 - .../src/main/res/drawable/ic_expand_less.xml | 9 ++ .../src/main/res/drawable/ic_expand_more.xml | 9 ++ .../res/layout/item_expandable_textview.xml | 33 +++++++ .../layout/view_stub_room_profile_header.xml | 18 ---- vector/src/main/res/values/strings.xml | 1 + 8 files changed, 153 insertions(+), 20 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt create mode 100644 vector/src/main/res/drawable/ic_expand_less.xml create mode 100644 vector/src/main/res/drawable/ic_expand_more.xml create mode 100644 vector/src/main/res/layout/item_expandable_textview.xml diff --git a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt new file mode 100644 index 0000000000..b55861571b --- /dev/null +++ b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020 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.core.epoxy + +import android.animation.ObjectAnimator +import android.widget.ImageView +import android.widget.TextView +import androidx.core.view.doOnPreDraw +import androidx.core.view.isVisible +import com.airbnb.epoxy.EpoxyAttribute +import com.airbnb.epoxy.EpoxyModelClass +import im.vector.app.R +import im.vector.app.core.extensions.copyOnLongClick + +@EpoxyModelClass(layout = R.layout.item_expandable_textview) +abstract class ExpandableTextItem : VectorEpoxyModel() { + + @EpoxyAttribute + lateinit var content: String + + @EpoxyAttribute + var maxLines: Int = 3 + + private var isExpanded = false + private var expandedLines = 0 + + override fun bind(holder: Holder) { + super.bind(holder) + holder.content.text = content + holder.content.copyOnLongClick() + + holder.content.doOnPreDraw { + if (holder.content.lineCount > maxLines) { + expandedLines = holder.content.lineCount + holder.content.maxLines = maxLines + + holder.view.setOnClickListener { + if (isExpanded) { + collapse(holder) + } else { + expand(holder) + } + } + } else { + holder.arrow.isVisible = false + } + } + } + + private fun expand(holder: Holder) { + ObjectAnimator.ofInt(holder.content, "maxLines", expandedLines) + .apply { duration = 500 } + .also { it.start() } + + holder.arrow.setImageResource(R.drawable.ic_expand_less) + isExpanded = true + } + + private fun collapse(holder: Holder) { + ObjectAnimator.ofInt(holder.content, "maxLines", maxLines) + .apply { duration = 500 } + .also { it.start() } + + holder.arrow.setImageResource(R.drawable.ic_expand_more) + isExpanded = false + } + + class Holder : VectorEpoxyHolder() { + val content by bind(R.id.expandableContent) + val arrow by bind(R.id.expandableArrow) + } +} diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index 160ebd56be..ad774fbeef 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -19,6 +19,7 @@ package im.vector.app.features.roomprofile import com.airbnb.epoxy.TypedEpoxyController import im.vector.app.R +import im.vector.app.core.epoxy.expandableTextItem import im.vector.app.core.epoxy.profiles.buildProfileAction import im.vector.app.core.epoxy.profiles.buildProfileSection import im.vector.app.core.resources.ColorProvider @@ -57,6 +58,20 @@ class RoomProfileController @Inject constructor( return } val roomSummary = data.roomSummary() ?: return + + // Topic + roomSummary + .topic + .takeIf { it.isNotBlank() } + ?.let { + buildProfileSection(stringProvider.getString(R.string.room_profile_section_topic)) + expandableTextItem { + id("topic") + content(roomSummary.topic) + maxLines(2) + } + } + // Security buildProfileSection(stringProvider.getString(R.string.room_profile_section_security)) val learnMoreSubtitle = if (roomSummary.isEncrypted) { diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt index 399c1ecf32..c2f25c08d3 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileFragment.kt @@ -129,7 +129,6 @@ class RoomProfileFragment @Inject constructor( private fun setupLongClicks() { roomProfileNameView.copyOnLongClick() roomProfileAliasView.copyOnLongClick() - roomProfileTopicView.copyOnLongClick() } override fun onOptionsItemSelected(item: MenuItem): Boolean { @@ -187,7 +186,6 @@ class RoomProfileFragment @Inject constructor( roomProfileNameView.text = it.displayName matrixProfileToolbarTitleView.text = it.displayName roomProfileAliasView.setTextOrHide(it.canonicalAlias) - roomProfileTopicView.setTextOrHide(it.topic) val matrixItem = it.toMatrixItem() avatarRenderer.render(matrixItem, roomProfileAvatarView) avatarRenderer.render(matrixItem, matrixProfileToolbarAvatarImageView) diff --git a/vector/src/main/res/drawable/ic_expand_less.xml b/vector/src/main/res/drawable/ic_expand_less.xml new file mode 100644 index 0000000000..92bc86da08 --- /dev/null +++ b/vector/src/main/res/drawable/ic_expand_less.xml @@ -0,0 +1,9 @@ + + + diff --git a/vector/src/main/res/drawable/ic_expand_more.xml b/vector/src/main/res/drawable/ic_expand_more.xml new file mode 100644 index 0000000000..22c401f0c3 --- /dev/null +++ b/vector/src/main/res/drawable/ic_expand_more.xml @@ -0,0 +1,9 @@ + + + diff --git a/vector/src/main/res/layout/item_expandable_textview.xml b/vector/src/main/res/layout/item_expandable_textview.xml new file mode 100644 index 0000000000..34fbaf7ec0 --- /dev/null +++ b/vector/src/main/res/layout/item_expandable_textview.xml @@ -0,0 +1,33 @@ + + + + + + + + \ No newline at end of file diff --git a/vector/src/main/res/layout/view_stub_room_profile_header.xml b/vector/src/main/res/layout/view_stub_room_profile_header.xml index f7ae1c77a5..ecb7174f0e 100644 --- a/vector/src/main/res/layout/view_stub_room_profile_header.xml +++ b/vector/src/main/res/layout/view_stub_room_profile_header.xml @@ -54,27 +54,9 @@ android:textAppearance="@style/Vector.Toolbar.Title" android:textSize="14sp" android:textStyle="bold" - app:layout_constraintBottom_toTopOf="@+id/roomProfileTopicView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/roomProfileNameView" tools:text="@sample/matrix.json/data/roomAlias" /> - - diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index d48162de29..709bf4f4a1 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2124,6 +2124,7 @@ Messages here are not end-to-end encrypted. Messages in this room are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. Messages here are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. + Topic Security Learn more More From c3a423fdbe1c5e388174d76ee19be60559760972 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Fri, 9 Oct 2020 14:53:02 +0300 Subject: [PATCH 189/278] Changelog added. --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index ec853d96ef..0762a207ce 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -20,6 +20,7 @@ Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) - Fix Splash layout on small screens - Simplifies draft management and should fix bunch of draft issues (#952, #683) + - Very long topic cannot be fully visible (#1957) Translations đŸ—Ŗ: - From beeb84043620fb39a876f582e44cca2996395884 Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Fri, 9 Oct 2020 15:06:54 +0300 Subject: [PATCH 190/278] Do not ellipsize content while expanding. --- .../java/im/vector/app/core/epoxy/ExpandableTextItem.kt | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt index b55861571b..7e1114660f 100644 --- a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt +++ b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt @@ -17,6 +17,7 @@ package im.vector.app.core.epoxy import android.animation.ObjectAnimator +import android.text.TextUtils import android.widget.ImageView import android.widget.TextView import androidx.core.view.doOnPreDraw @@ -63,19 +64,21 @@ abstract class ExpandableTextItem : VectorEpoxyModel( private fun expand(holder: Holder) { ObjectAnimator.ofInt(holder.content, "maxLines", expandedLines) - .apply { duration = 500 } + .apply { duration = 200 } .also { it.start() } + holder.content.ellipsize = null holder.arrow.setImageResource(R.drawable.ic_expand_less) isExpanded = true } private fun collapse(holder: Holder) { ObjectAnimator.ofInt(holder.content, "maxLines", maxLines) - .apply { duration = 500 } + .apply { duration = 200 } .also { it.start() } - holder.arrow.setImageResource(R.drawable.ic_expand_more) + holder.content.ellipsize = TextUtils.TruncateAt.END + holder.arrow.setImageResource(R.drawable.ic_expand_more) isExpanded = false } From b12c4f854c63180a57944be3dd2223877e4e5c4e Mon Sep 17 00:00:00 2001 From: Valere Date: Fri, 9 Oct 2020 15:40:30 +0200 Subject: [PATCH 191/278] Fix / Moshi Cannot serialize kotlin --- .../android/sdk/internal/crypto/DefaultCryptoService.kt | 4 ++-- .../sdk/internal/crypto/model/rest/SendToDeviceBody.kt | 3 +++ 2 files changed, 5 insertions(+), 2 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 37886a7d77..c77ac70124 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 @@ -50,7 +50,7 @@ import org.matrix.android.sdk.api.session.events.model.toModel import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibility import org.matrix.android.sdk.api.session.room.model.RoomHistoryVisibilityContent -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.internal.crypto.actions.EnsureOlmSessionsForDevicesAction import org.matrix.android.sdk.internal.crypto.actions.MegolmSessionDataImporter import org.matrix.android.sdk.internal.crypto.actions.MessageEncrypter @@ -953,7 +953,7 @@ internal class DefaultCryptoService @Inject constructor( roomEncryptorsStore.get(roomId) ?: /* No encrypting in this room */ return event.stateKey?.let { userId -> - val roomMember: RoomMemberSummary? = event.content.toModel() + val roomMember: RoomMemberContent? = event.content.toModel() val membership = roomMember?.membership if (membership == Membership.JOIN) { // make sure we are tracking the deviceList for this user. diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt index e252abfb04..868f7aa943 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/model/rest/SendToDeviceBody.kt @@ -16,6 +16,9 @@ package org.matrix.android.sdk.internal.crypto.model.rest +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) internal data class SendToDeviceBody( /** * `Any` should implement [SendToDeviceObject], but we cannot use interface here because of Json serialization From cb1addd5e3d77e1c9bcef19a7290e1c6a2956f62 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 9 Oct 2020 18:33:32 +0200 Subject: [PATCH 192/278] Push test now does not display notification anymore. Add a dedicated test to do it --- ...ificationTroubleshootTestManagerFactory.kt | 19 ++++--- .../troubleshoot/TestPushFromPushGateway.kt | 10 ++-- .../fcm/VectorFirebaseMessagingService.kt | 7 ++- ...ificationTroubleshootTestManagerFactory.kt | 5 +- .../im/vector/app/core/utils/SystemUtils.kt | 8 +-- .../notifications/NotificationUtils.kt | 1 + ...ttingsNotificationsTroubleshootFragment.kt | 20 +++++-- .../NotificationTroubleshootTestManager.kt | 4 ++ .../settings/troubleshoot/TestNotification.kt | 54 +++++++++++++++++++ .../troubleshoot/TestSystemSettings.kt | 4 +- .../settings/troubleshoot/TroubleshootTest.kt | 3 ++ vector/src/main/res/values/strings.xml | 9 ++-- 12 files changed, 117 insertions(+), 27 deletions(-) create mode 100644 vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotification.kt diff --git a/vector/src/fdroid/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt b/vector/src/fdroid/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt index 65b8609446..6236aad65c 100644 --- a/vector/src/fdroid/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt +++ b/vector/src/fdroid/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt @@ -22,17 +22,21 @@ import im.vector.app.fdroid.features.settings.troubleshoot.TestBatteryOptimizati import im.vector.app.features.settings.troubleshoot.NotificationTroubleshootTestManager import im.vector.app.features.settings.troubleshoot.TestAccountSettings import im.vector.app.features.settings.troubleshoot.TestDeviceSettings +import im.vector.app.features.settings.troubleshoot.TestNotification import im.vector.app.features.settings.troubleshoot.TestPushRulesSettings import im.vector.app.features.settings.troubleshoot.TestSystemSettings import javax.inject.Inject -class NotificationTroubleshootTestManagerFactory @Inject constructor(private val testSystemSettings: TestSystemSettings, - private val testAccountSettings: TestAccountSettings, - private val testDeviceSettings: TestDeviceSettings, - private val testPushRulesSettings: TestPushRulesSettings, - private val testAutoStartBoot: TestAutoStartBoot, - private val testBackgroundRestrictions: TestBackgroundRestrictions, - private val testBatteryOptimization: TestBatteryOptimization) { +class NotificationTroubleshootTestManagerFactory @Inject constructor( + private val testSystemSettings: TestSystemSettings, + private val testAccountSettings: TestAccountSettings, + private val testDeviceSettings: TestDeviceSettings, + private val testPushRulesSettings: TestPushRulesSettings, + private val testAutoStartBoot: TestAutoStartBoot, + private val testBackgroundRestrictions: TestBackgroundRestrictions, + private val testBatteryOptimization: TestBatteryOptimization, + private val testNotification: TestNotification +) { fun create(fragment: Fragment): NotificationTroubleshootTestManager { val mgr = NotificationTroubleshootTestManager(fragment) @@ -43,6 +47,7 @@ class NotificationTroubleshootTestManagerFactory @Inject constructor(private val mgr.addTest(testAutoStartBoot) mgr.addTest(testBackgroundRestrictions) mgr.addTest(testBatteryOptimization) + mgr.addTest(testNotification) return mgr } } diff --git a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt index ce94244ee6..da93d54075 100644 --- a/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/features/settings/troubleshoot/TestPushFromPushGateway.kt @@ -56,15 +56,15 @@ class TestPushFromPushGateway @Inject constructor(private val context: AppCompat } override fun onSuccess(data: Unit) { - // Wait for user to click on the notification - description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_success) - status = TestStatus.WAITING_FOR_USER + // Wait for the push to be received + description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_waiting_for_push) + status = TestStatus.RUNNING } }) } - override fun onNotificationClicked() { - description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_notification_clicked) + override fun onPushReceived() { + description = stringProvider.getString(R.string.settings_troubleshoot_test_push_loop_success) status = TestStatus.SUCCESS } diff --git a/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt b/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt index 801b85ce0c..cfd241d4f9 100755 --- a/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt +++ b/vector/src/gplay/java/im/vector/app/gplay/push/fcm/VectorFirebaseMessagingService.kt @@ -19,10 +19,12 @@ package im.vector.app.gplay.push.fcm +import android.content.Intent import android.os.Handler import android.os.Looper import androidx.lifecycle.Lifecycle import androidx.lifecycle.ProcessLifecycleOwner +import androidx.localbroadcastmanager.content.LocalBroadcastManager import com.google.firebase.messaging.FirebaseMessagingService import com.google.firebase.messaging.RemoteMessage import im.vector.app.BuildConfig @@ -34,6 +36,7 @@ import im.vector.app.features.badge.BadgeProxy import im.vector.app.features.notifications.NotifiableEventResolver import im.vector.app.features.notifications.NotifiableMessageEvent import im.vector.app.features.notifications.NotificationDrawerManager +import im.vector.app.features.notifications.NotificationUtils import im.vector.app.features.notifications.SimpleNotifiableEvent import im.vector.app.features.settings.VectorPreferences import im.vector.app.push.fcm.FcmHelper @@ -77,8 +80,8 @@ class VectorFirebaseMessagingService : FirebaseMessagingService() { override fun onMessageReceived(message: RemoteMessage) { // Diagnostic Push if (message.data["event_id"] == PushersManager.TEST_EVENT_ID) { - // Display the notification right now - notificationDrawerManager.displayDiagnosticNotification() + val intent = Intent(NotificationUtils.PUSH_ACTION) + LocalBroadcastManager.getInstance(this).sendBroadcast(intent) return } diff --git a/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt b/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt index 46c78a9872..e96c603e60 100644 --- a/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt +++ b/vector/src/gplay/java/im/vector/app/push/fcm/NotificationTroubleshootTestManagerFactory.kt @@ -19,6 +19,7 @@ import androidx.fragment.app.Fragment import im.vector.app.features.settings.troubleshoot.NotificationTroubleshootTestManager import im.vector.app.features.settings.troubleshoot.TestAccountSettings import im.vector.app.features.settings.troubleshoot.TestDeviceSettings +import im.vector.app.features.settings.troubleshoot.TestNotification import im.vector.app.features.settings.troubleshoot.TestPushRulesSettings import im.vector.app.features.settings.troubleshoot.TestSystemSettings import im.vector.app.gplay.features.settings.troubleshoot.TestFirebaseToken @@ -35,7 +36,8 @@ class NotificationTroubleshootTestManagerFactory @Inject constructor( private val testPlayServices: TestPlayServices, private val testFirebaseToken: TestFirebaseToken, private val testTokenRegistration: TestTokenRegistration, - private val testPushFromPushGateway: TestPushFromPushGateway + private val testPushFromPushGateway: TestPushFromPushGateway, + private val testNotification: TestNotification ) { fun create(fragment: Fragment): NotificationTroubleshootTestManager { @@ -48,6 +50,7 @@ class NotificationTroubleshootTestManagerFactory @Inject constructor( mgr.addTest(testFirebaseToken) mgr.addTest(testTokenRegistration) mgr.addTest(testPushFromPushGateway) + mgr.addTest(testNotification) return mgr } } diff --git a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt index 5e722ae209..2b8df67012 100644 --- a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt +++ b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt @@ -97,15 +97,15 @@ fun copyToClipboard(context: Context, text: CharSequence, showToast: Boolean = t * Shows notification settings for the current app. * In android O will directly opens the notification settings, in lower version it will show the App settings */ -fun startNotificationSettingsIntent(activity: AppCompatActivity, activityResultLauncher: ActivityResultLauncher) { +fun startNotificationSettingsIntent(context: Context, activityResultLauncher: ActivityResultLauncher) { val intent = Intent() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS - intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity.packageName) + intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.packageName) } else { intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS - intent.putExtra("app_package", activity.packageName) - intent.putExtra("app_uid", activity.applicationInfo?.uid) + intent.putExtra("app_package", context.packageName) + intent.putExtra("app_uid", context.applicationInfo?.uid) } activityResultLauncher.launch(intent) } diff --git a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt index a30d4302f2..44eb278c64 100755 --- a/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt +++ b/vector/src/main/java/im/vector/app/features/notifications/NotificationUtils.kt @@ -92,6 +92,7 @@ class NotificationUtils @Inject constructor(private val context: Context, const val DISMISS_ROOM_NOTIF_ACTION = "${BuildConfig.APPLICATION_ID}.NotificationActions.DISMISS_ROOM_NOTIF_ACTION" private const val TAP_TO_VIEW_ACTION = "${BuildConfig.APPLICATION_ID}.NotificationActions.TAP_TO_VIEW_ACTION" const val DIAGNOSTIC_ACTION = "${BuildConfig.APPLICATION_ID}.NotificationActions.DIAGNOSTIC" + const val PUSH_ACTION = "${BuildConfig.APPLICATION_ID}.PUSH" /* ========================================================================================== * IDs for channels diff --git a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt index 4843c1446a..9dc6dc1751 100644 --- a/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt +++ b/vector/src/main/java/im/vector/app/features/settings/VectorSettingsNotificationsTroubleshootFragment.kt @@ -166,7 +166,11 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( tryOrNull("Unable to register the receiver") { LocalBroadcastManager.getInstance(requireContext()) - .registerReceiver(broadcastReceiver, IntentFilter(NotificationUtils.DIAGNOSTIC_ACTION)) + .registerReceiver(broadcastReceiverPush, IntentFilter(NotificationUtils.PUSH_ACTION)) + } + tryOrNull("Unable to register the receiver") { + LocalBroadcastManager.getInstance(requireContext()) + .registerReceiver(broadcastReceiverNotification, IntentFilter(NotificationUtils.DIAGNOSTIC_ACTION)) } } @@ -174,11 +178,21 @@ class VectorSettingsNotificationsTroubleshootFragment @Inject constructor( super.onPause() tryOrNull { LocalBroadcastManager.getInstance(requireContext()) - .unregisterReceiver(broadcastReceiver) + .unregisterReceiver(broadcastReceiverPush) + } + tryOrNull { + LocalBroadcastManager.getInstance(requireContext()) + .unregisterReceiver(broadcastReceiverNotification) } } - private val broadcastReceiver = object : BroadcastReceiver() { + private val broadcastReceiverPush = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + testManager?.onDiagnosticPushReceived() + } + } + + private val broadcastReceiverNotification = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { testManager?.onDiagnosticNotificationClicked() } diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt index 566cb6d846..7e7ca57243 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/NotificationTroubleshootTestManager.kt @@ -106,6 +106,10 @@ class NotificationTroubleshootTestManager(val fragment: Fragment) { testList.forEach { it.cancel() } } + fun onDiagnosticPushReceived() { + testList.forEach { it.onPushReceived() } + } + fun onDiagnosticNotificationClicked() { testList.forEach { it.onNotificationClicked() } } diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotification.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotification.kt new file mode 100644 index 0000000000..6f25ecfe39 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestNotification.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2018 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.settings.troubleshoot + +import android.content.Context +import android.content.Intent +import androidx.activity.result.ActivityResultLauncher +import im.vector.app.R +import im.vector.app.core.resources.StringProvider +import im.vector.app.core.utils.startNotificationSettingsIntent +import im.vector.app.features.notifications.NotificationUtils +import javax.inject.Inject + +/** + * Checks if notifications can be displayed and clicked by the user + */ +class TestNotification @Inject constructor(private val context: Context, + private val notificationUtils: NotificationUtils, + private val stringProvider: StringProvider) + : TroubleshootTest(R.string.settings_troubleshoot_test_notification_title) { + + override fun perform(activityResultLauncher: ActivityResultLauncher) { + // Display the notification right now + notificationUtils.displayDiagnosticNotification() + description = stringProvider.getString(R.string.settings_troubleshoot_test_notification_notice) + + quickFix = object : TroubleshootQuickFix(R.string.open_settings) { + override fun doFix() { + startNotificationSettingsIntent(context, activityResultLauncher) + } + } + + status = TestStatus.WAITING_FOR_USER + } + + override fun onNotificationClicked() { + description = stringProvider.getString(R.string.settings_troubleshoot_test_notification_notification_clicked) + quickFix = null + status = TestStatus.SUCCESS + } +} diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt index 8e64514e7f..ee652288be 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TestSystemSettings.kt @@ -15,9 +15,9 @@ */ package im.vector.app.features.settings.troubleshoot +import android.content.Context import android.content.Intent import androidx.activity.result.ActivityResultLauncher -import androidx.appcompat.app.AppCompatActivity import androidx.core.app.NotificationManagerCompat import im.vector.app.R import im.vector.app.core.resources.StringProvider @@ -27,7 +27,7 @@ import javax.inject.Inject /** * Checks if notifications are enable in the system settings for this app. */ -class TestSystemSettings @Inject constructor(private val context: AppCompatActivity, +class TestSystemSettings @Inject constructor(private val context: Context, private val stringProvider: StringProvider) : TroubleshootTest(R.string.settings_troubleshoot_test_system_settings_title) { diff --git a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt index c775c8c827..76ba2378a0 100644 --- a/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt +++ b/vector/src/main/java/im/vector/app/features/settings/troubleshoot/TroubleshootTest.kt @@ -53,6 +53,9 @@ abstract class TroubleshootTest(@StringRes val titleResId: Int) { open fun cancel() { } + open fun onPushReceived() { + } + open fun onNotificationClicked() { } } diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index ef6b63aeb0..e400f7fe64 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -750,10 +750,13 @@ Failed to register FCM token to HomeServer:\n%1$s Test Push - The application is receiving PUSH, please click on the test notification you just received. - The notification has been clicked! + The application is waiting for the PUSH + The application is receiving PUSH Failed to receive push. Solution could be to reinstall the application. - You are receiving PUSH! Click me! + You are viewing the notification! Click me! + Notification Display + Please click on the notification. If you do not see the notification, please check the system settings. + The notification has been clicked! Notifications Service Notifications Service is running. From b00fa6958522a2a5f31550ae31986deeaaf32cac Mon Sep 17 00:00:00 2001 From: Constantin Wartenburger Date: Sun, 11 Oct 2020 20:09:35 +0200 Subject: [PATCH 193/278] Ability to share text --- .../core/utils/ExternalApplicationsUtil.kt | 25 +++++++++++---- .../home/room/detail/RoomDetailFragment.kt | 31 +++++++++++-------- .../timeline/action/EventSharedAction.kt | 3 +- .../action/MessageActionsViewModel.kt | 8 +++-- 4 files changed, 45 insertions(+), 22 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt index d28f6749a6..f962c6dda2 100644 --- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt @@ -40,13 +40,13 @@ import androidx.fragment.app.Fragment import im.vector.app.BuildConfig import im.vector.app.R import im.vector.app.features.notifications.NotificationUtils -import org.matrix.android.sdk.api.extensions.tryOrNull import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import okio.buffer import okio.sink import okio.source +import org.matrix.android.sdk.api.extensions.tryOrNull import timber.log.Timber import java.io.File import java.io.FileInputStream @@ -300,11 +300,24 @@ fun shareMedia(context: Context, file: File, mediaMimeType: String?) { sendIntent.type = mediaMimeType sendIntent.putExtra(Intent.EXTRA_STREAM, mediaUri) - try { - context.startActivity(sendIntent) - } catch (activityNotFoundException: ActivityNotFoundException) { - context.toast(R.string.error_no_external_application_found) - } + sendShareIntent(context, sendIntent) + } +} + +fun shareText(context: Context, text: String) { + val sendIntent = Intent() + sendIntent.action = Intent.ACTION_SEND + sendIntent.type = "text/plain" + sendIntent.putExtra(Intent.EXTRA_TEXT, text) + + sendShareIntent(context, sendIntent) +} + +private fun sendShareIntent(context: Context, intent: Intent) { + try { + context.startActivity(Intent.createChooser(intent, context.getString(R.string.share))) + } catch (activityNotFoundException: ActivityNotFoundException) { + context.toast(R.string.error_no_external_application_found) } } diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt index 51aeda2aab..0a16191dd1 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/RoomDetailFragment.kt @@ -106,6 +106,7 @@ import im.vector.app.core.utils.onPermissionResultVideoIpCall import im.vector.app.core.utils.openUrlInExternalBrowser import im.vector.app.core.utils.saveMedia import im.vector.app.core.utils.shareMedia +import im.vector.app.core.utils.shareText import im.vector.app.core.utils.toast import im.vector.app.features.attachments.AttachmentTypeSelectorView import im.vector.app.features.attachments.AttachmentsHelper @@ -1556,21 +1557,25 @@ class RoomDetailFragment @Inject constructor( } private fun onShareActionClicked(action: EventSharedAction.Share) { - session.fileService().downloadFile( - downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE, - id = action.eventId, - fileName = action.messageContent.body, - mimeType = action.messageContent.mimeType, - url = action.messageContent.getFileUrl(), - elementToDecrypt = action.messageContent.encryptedFileInfo?.toElementToDecrypt(), - callback = object : MatrixCallback { - override fun onSuccess(data: File) { - if (isAdded) { - shareMedia(requireContext(), data, getMimeTypeFromUri(requireContext(), data.toUri())) + if (action.messageContent is MessageTextContent) { + shareText(requireContext(), action.messageContent.body) + } else if (action.messageContent is MessageWithAttachmentContent) { + session.fileService().downloadFile( + downloadMode = FileService.DownloadMode.FOR_EXTERNAL_SHARE, + id = action.eventId, + fileName = action.messageContent.body, + mimeType = action.messageContent.mimeType, + url = action.messageContent.getFileUrl(), + elementToDecrypt = action.messageContent.encryptedFileInfo?.toElementToDecrypt(), + callback = object : MatrixCallback { + override fun onSuccess(data: File) { + if (isAdded) { + shareMedia(requireContext(), data, getMimeTypeFromUri(requireContext(), data.toUri())) + } } } - } - ) + ) + } } private fun onSaveActionClicked(action: EventSharedAction.Save) { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/EventSharedAction.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/EventSharedAction.kt index 7693d97c35..c21d552409 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/EventSharedAction.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/EventSharedAction.kt @@ -21,6 +21,7 @@ import androidx.annotation.StringRes import im.vector.app.R import im.vector.app.core.platform.VectorSharedAction import im.vector.app.features.home.room.detail.timeline.item.MessageInformationData +import org.matrix.android.sdk.api.session.room.model.message.MessageContent import org.matrix.android.sdk.api.session.room.model.message.MessageWithAttachmentContent sealed class EventSharedAction(@StringRes val titleRes: Int, @@ -47,7 +48,7 @@ sealed class EventSharedAction(@StringRes val titleRes: Int, data class Reply(val eventId: String) : EventSharedAction(R.string.reply, R.drawable.ic_reply) - data class Share(val eventId: String, val messageContent: MessageWithAttachmentContent) : + data class Share(val eventId: String, val messageContent: MessageContent) : EventSharedAction(R.string.share, R.drawable.ic_share) data class Save(val eventId: String, val messageContent: MessageWithAttachmentContent) : diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt index 8a25e5fc93..0d1e2261cd 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/action/MessageActionsViewModel.kt @@ -275,8 +275,8 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted add(EventSharedAction.ViewEditHistory(informationData)) } - if (canShare(msgType) && messageContent is MessageWithAttachmentContent) { - add(EventSharedAction.Share(timelineEvent.eventId, messageContent)) + if (canShare(msgType)) { + add(EventSharedAction.Share(timelineEvent.eventId, messageContent!!)) } if (canSave(msgType) && messageContent is MessageWithAttachmentContent) { @@ -409,6 +409,10 @@ class MessageActionsViewModel @AssistedInject constructor(@Assisted private fun canShare(msgType: String?): Boolean { return when (msgType) { + MessageType.MSGTYPE_TEXT, + MessageType.MSGTYPE_NOTICE, + MessageType.MSGTYPE_EMOTE, + MessageType.MSGTYPE_LOCATION, MessageType.MSGTYPE_IMAGE, MessageType.MSGTYPE_AUDIO, MessageType.MSGTYPE_VIDEO, From 0ae7242e17c780d8af35f8acc55c4468b2bc4ce8 Mon Sep 17 00:00:00 2001 From: Constantin Wartenburger Date: Sun, 11 Oct 2020 21:09:36 +0200 Subject: [PATCH 194/278] Added direct share --- CHANGES.md | 1 + vector/src/main/AndroidManifest.xml | 4 +++ .../app/features/home/ShortcutCreator.kt | 5 ++++ .../app/features/share/IncomingShareAction.kt | 3 ++- .../features/share/IncomingShareFragment.kt | 25 +++++++++++++------ .../features/share/IncomingShareViewModel.kt | 16 ++++++++---- vector/src/main/res/xml/shortcuts.xml | 7 ++++++ 7 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 vector/src/main/res/xml/shortcuts.xml diff --git a/CHANGES.md b/CHANGES.md index 05d189ed12..d064cc5f39 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 + - Direct share (#2029) Bugfix 🐛: - Improve support for image/audio/video/file selection with intent changes (#1376) diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 3f178a3d20..723bf2f0e2 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -74,6 +74,10 @@ + + diff --git a/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt index 171cc7b3d9..1edfbff64f 100644 --- a/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt +++ b/vector/src/main/java/im/vector/app/features/home/ShortcutCreator.kt @@ -33,6 +33,7 @@ import javax.inject.Inject private val useAdaptiveIcon = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O private const val adaptiveIconSizeDp = 108 private const val adaptiveIconOuterSidesDp = 18 +private const val directShareCategory = "im.vector.app.SHORTCUT_SHARE" class ShortcutCreator @Inject constructor( private val context: Context, @@ -65,6 +66,10 @@ class ShortcutCreator @Inject constructor( .setShortLabel(roomSummary.displayName) .setIcon(bitmap?.toProfileImageIcon()) .setIntent(intent) + + // Make it show up in the direct share menu + .setCategories(setOf(directShareCategory)) + .build() } diff --git a/vector/src/main/java/im/vector/app/features/share/IncomingShareAction.kt b/vector/src/main/java/im/vector/app/features/share/IncomingShareAction.kt index eef4e32dff..4e9f024b15 100644 --- a/vector/src/main/java/im/vector/app/features/share/IncomingShareAction.kt +++ b/vector/src/main/java/im/vector/app/features/share/IncomingShareAction.kt @@ -16,12 +16,13 @@ package im.vector.app.features.share -import org.matrix.android.sdk.api.session.room.model.RoomSummary import im.vector.app.core.platform.VectorViewModelAction +import org.matrix.android.sdk.api.session.room.model.RoomSummary sealed class IncomingShareAction : VectorViewModelAction { data class SelectRoom(val roomSummary: RoomSummary, val enableMultiSelect: Boolean) : IncomingShareAction() object ShareToSelectedRooms : IncomingShareAction() + data class ShareToRoom(val roomSummary: RoomSummary) : IncomingShareAction() data class ShareMedia(val keepOriginalSize: Boolean) : IncomingShareAction() data class FilterWith(val filter: String) : IncomingShareAction() data class UpdateSharedData(val sharedData: SharedData) : IncomingShareAction() diff --git a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt index 5e776fb17a..c9a8ec51c2 100644 --- a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt +++ b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt @@ -19,6 +19,7 @@ package im.vector.app.features.share import android.app.Activity import android.content.ClipDescription import android.content.Intent +import android.os.Build import android.os.Bundle import android.view.View import android.widget.Toast @@ -71,13 +72,28 @@ class IncomingShareFragment @Inject constructor( setupToolbar(incomingShareToolbar) attachmentsHelper = AttachmentsHelper(requireContext(), this).register() + viewModel.observeViewEvents { + when (it) { + is IncomingShareViewEvents.ShareToRoom -> handleShareToRoom(it) + is IncomingShareViewEvents.EditMediaBeforeSending -> handleEditMediaBeforeSending(it) + is IncomingShareViewEvents.MultipleRoomsShareDone -> handleMultipleRoomsShareDone(it) + }.exhaustive + } + val intent = vectorBaseActivity.intent val isShareManaged = when (intent?.action) { - Intent.ACTION_SEND -> { + Intent.ACTION_SEND -> { var isShareManaged = attachmentsHelper.handleShareIntent(requireContext(), intent) if (!isShareManaged) { isShareManaged = handleTextShare(intent) } + + // Direct share + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && intent.hasExtra(Intent.EXTRA_SHORTCUT_ID)) { + val roomId = intent.getStringExtra(Intent.EXTRA_SHORTCUT_ID)!! + sessionHolder.getSafeActiveSession()?.getRoomSummary(roomId)?.let { viewModel.handle(IncomingShareAction.ShareToRoom(it)) } + } + isShareManaged } Intent.ACTION_SEND_MULTIPLE -> attachmentsHelper.handleShareIntent(requireContext(), intent) @@ -101,13 +117,6 @@ class IncomingShareFragment @Inject constructor( sendShareButton.setOnClickListener { _ -> handleSendShare() } - viewModel.observeViewEvents { - when (it) { - is IncomingShareViewEvents.ShareToRoom -> handleShareToRoom(it) - is IncomingShareViewEvents.EditMediaBeforeSending -> handleEditMediaBeforeSending(it) - is IncomingShareViewEvents.MultipleRoomsShareDone -> handleMultipleRoomsShareDone(it) - }.exhaustive - } } private fun handleMultipleRoomsShareDone(viewEvent: IncomingShareViewEvents.MultipleRoomsShareDone) { diff --git a/vector/src/main/java/im/vector/app/features/share/IncomingShareViewModel.kt b/vector/src/main/java/im/vector/app/features/share/IncomingShareViewModel.kt index aa4d8ad03e..9014565e08 100644 --- a/vector/src/main/java/im/vector/app/features/share/IncomingShareViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/share/IncomingShareViewModel.kt @@ -22,17 +22,17 @@ import com.airbnb.mvrx.ViewModelContext import com.jakewharton.rxrelay2.BehaviorRelay import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject -import org.matrix.android.sdk.api.query.QueryStringValue -import org.matrix.android.sdk.api.session.Session -import org.matrix.android.sdk.api.session.content.ContentAttachmentData -import org.matrix.android.sdk.api.session.room.model.Membership -import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import im.vector.app.core.extensions.exhaustive import im.vector.app.core.extensions.toggle import im.vector.app.core.platform.VectorViewModel import im.vector.app.features.attachments.isPreviewable import im.vector.app.features.attachments.toGroupedContentAttachmentData import im.vector.app.features.home.room.list.BreadcrumbsRoomComparator +import org.matrix.android.sdk.api.query.QueryStringValue +import org.matrix.android.sdk.api.session.Session +import org.matrix.android.sdk.api.session.content.ContentAttachmentData +import org.matrix.android.sdk.api.session.room.model.Membership +import org.matrix.android.sdk.api.session.room.roomSummaryQueryParams import org.matrix.android.sdk.rx.rx import java.util.concurrent.TimeUnit @@ -96,6 +96,7 @@ class IncomingShareViewModel @AssistedInject constructor( when (action) { is IncomingShareAction.SelectRoom -> handleSelectRoom(action) is IncomingShareAction.ShareToSelectedRooms -> handleShareToSelectedRooms() + is IncomingShareAction.ShareToRoom -> handleShareToRoom(action) is IncomingShareAction.ShareMedia -> handleShareMediaToSelectedRooms(action) is IncomingShareAction.FilterWith -> handleFilter(action) is IncomingShareAction.UpdateSharedData -> handleUpdateSharedData(action) @@ -134,6 +135,11 @@ class IncomingShareViewModel @AssistedInject constructor( } } + private fun handleShareToRoom(action: IncomingShareAction.ShareToRoom) = withState { state -> + val sharedData = state.sharedData ?: return@withState + _viewEvents.post(IncomingShareViewEvents.ShareToRoom(action.roomSummary, sharedData, showAlert = false)) + } + private fun handleShareMediaToSelectedRooms(action: IncomingShareAction.ShareMedia) = withState { state -> (state.sharedData as? SharedData.Attachments)?.let { shareAttachments(it.attachmentData, state.selectedRoomIds, proposeMediaEdition = false, compressMediaBeforeSending = !action.keepOriginalSize) diff --git a/vector/src/main/res/xml/shortcuts.xml b/vector/src/main/res/xml/shortcuts.xml new file mode 100644 index 0000000000..a005de24a2 --- /dev/null +++ b/vector/src/main/res/xml/shortcuts.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file From 7e5ee8f951e098e1baad16308afad83ea86bdb72 Mon Sep 17 00:00:00 2001 From: Constantin Wartenburger Date: Sun, 11 Oct 2020 22:09:19 +0200 Subject: [PATCH 195/278] Made it backwards compatible --- vector/build.gradle | 1 + vector/src/main/AndroidManifest.xml | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/vector/build.gradle b/vector/build.gradle index 3b43aa12e1..00f3f26545 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -315,6 +315,7 @@ dependencies { implementation "androidx.fragment:fragment-ktx:$fragment_version" // Keep at 2.0.0-beta4 at the moment, as updating is breaking some UI implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' + implementation "androidx.sharetarget:sharetarget:1.0.0" implementation 'androidx.core:core-ktx:1.3.2' implementation "org.threeten:threetenbp:1.4.0:no-tzdb" diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 723bf2f0e2..7810d4861e 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -176,6 +176,10 @@ + + From f82aee608920d5a9b1bf4f2eebca01bdcc37640d Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 12 Oct 2020 13:35:34 +0300 Subject: [PATCH 196/278] 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 f8f091fa280926b394e34089d1f5117f741bef8c Mon Sep 17 00:00:00 2001 From: Onuray Sahin Date: Mon, 12 Oct 2020 14:26:06 +0300 Subject: [PATCH 197/278] Benoit code review fixes. --- .../app/core/epoxy/ExpandableTextItem.kt | 19 ++++++++++++------- .../roomprofile/RoomProfileController.kt | 6 +++--- .../res/layout/item_expandable_textview.xml | 5 +++++ vector/src/main/res/values/strings.xml | 1 - 4 files changed, 20 insertions(+), 11 deletions(-) diff --git a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt index 7e1114660f..3dceec48ef 100644 --- a/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt +++ b/vector/src/main/java/im/vector/app/core/epoxy/ExpandableTextItem.kt @@ -56,6 +56,7 @@ abstract class ExpandableTextItem : VectorEpoxyModel( expand(holder) } } + holder.arrow.isVisible = true } else { holder.arrow.isVisible = false } @@ -63,22 +64,26 @@ abstract class ExpandableTextItem : VectorEpoxyModel( } private fun expand(holder: Holder) { - ObjectAnimator.ofInt(holder.content, "maxLines", expandedLines) - .apply { duration = 200 } - .also { it.start() } + ObjectAnimator + .ofInt(holder.content, "maxLines", expandedLines) + .setDuration(200) + .start() holder.content.ellipsize = null holder.arrow.setImageResource(R.drawable.ic_expand_less) + holder.arrow.contentDescription = holder.view.context.getString(R.string.merged_events_collapse) isExpanded = true } private fun collapse(holder: Holder) { - ObjectAnimator.ofInt(holder.content, "maxLines", maxLines) - .apply { duration = 200 } - .also { it.start() } + ObjectAnimator + .ofInt(holder.content, "maxLines", maxLines) + .setDuration(200) + .start() holder.content.ellipsize = TextUtils.TruncateAt.END - holder.arrow.setImageResource(R.drawable.ic_expand_more) + holder.arrow.setImageResource(R.drawable.ic_expand_more) + holder.arrow.contentDescription = holder.view.context.getString(R.string.merged_events_expand) isExpanded = false } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt index ad774fbeef..7dc744da31 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/RoomProfileController.kt @@ -62,12 +62,12 @@ class RoomProfileController @Inject constructor( // Topic roomSummary .topic - .takeIf { it.isNotBlank() } + .takeIf { it.isNotEmpty() } ?.let { - buildProfileSection(stringProvider.getString(R.string.room_profile_section_topic)) + buildProfileSection(stringProvider.getString(R.string.room_settings_topic)) expandableTextItem { id("topic") - content(roomSummary.topic) + content(it) maxLines(2) } } diff --git a/vector/src/main/res/layout/item_expandable_textview.xml b/vector/src/main/res/layout/item_expandable_textview.xml index 34fbaf7ec0..b0c232d77e 100644 --- a/vector/src/main/res/layout/item_expandable_textview.xml +++ b/vector/src/main/res/layout/item_expandable_textview.xml @@ -23,7 +23,12 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" 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" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/expandableContent" diff --git a/vector/src/main/res/values/strings.xml b/vector/src/main/res/values/strings.xml index 709bf4f4a1..d48162de29 100644 --- a/vector/src/main/res/values/strings.xml +++ b/vector/src/main/res/values/strings.xml @@ -2124,7 +2124,6 @@ Messages here are not end-to-end encrypted. Messages in this room are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. Messages here are end-to-end encrypted.\n\nYour messages are secured with locks and only you and the recipient have the unique keys to unlock them. - Topic Security Learn more More From 17f0c2926409fee6ce33530d30f23bea6f553d34 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Mon, 12 Oct 2020 14:12:44 +0200 Subject: [PATCH 198/278] Fix lint false positive --- vector/src/main/AndroidManifest.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 3f178a3d20..bc5577b467 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -94,9 +94,11 @@ + + android:theme="@style/AppTheme.Transparent" + tools:ignore="Instantiatable" /> Date: Mon, 12 Oct 2020 14:49:04 +0200 Subject: [PATCH 199/278] ktlint --- vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt index 2b8df67012..d228adab12 100644 --- a/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt +++ b/vector/src/main/java/im/vector/app/core/utils/SystemUtils.kt @@ -30,7 +30,6 @@ import android.provider.Settings import android.widget.Toast import androidx.activity.result.ActivityResultLauncher import androidx.annotation.StringRes -import androidx.appcompat.app.AppCompatActivity import androidx.core.content.getSystemService import androidx.fragment.app.Fragment import im.vector.app.R From 69e624df4151a9dc66f0a474e093c4b37b2fa519 Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 12 Oct 2020 17:10:22 +0200 Subject: [PATCH 200/278] 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 201/278] 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 202/278] 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 203/278] 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 c0a540268465bc1e318977baea81b80b613369b0 Mon Sep 17 00:00:00 2001 From: Constantin Wartenburger Date: Mon, 12 Oct 2020 17:54:02 +0200 Subject: [PATCH 204/278] Removed version check --- .../java/im/vector/app/features/share/IncomingShareFragment.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt index c9a8ec51c2..92e383f8d1 100644 --- a/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt +++ b/vector/src/main/java/im/vector/app/features/share/IncomingShareFragment.kt @@ -19,7 +19,6 @@ package im.vector.app.features.share import android.app.Activity import android.content.ClipDescription import android.content.Intent -import android.os.Build import android.os.Bundle import android.view.View import android.widget.Toast @@ -89,7 +88,7 @@ class IncomingShareFragment @Inject constructor( } // Direct share - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && intent.hasExtra(Intent.EXTRA_SHORTCUT_ID)) { + if (intent.hasExtra(Intent.EXTRA_SHORTCUT_ID)) { val roomId = intent.getStringExtra(Intent.EXTRA_SHORTCUT_ID)!! sessionHolder.getSafeActiveSession()?.getRoomSummary(roomId)?.let { viewModel.handle(IncomingShareAction.ShareToRoom(it)) } } From 5ad46d251daa6b0c8e68802921866295c75a951b Mon Sep 17 00:00:00 2001 From: ganfra Date: Mon, 12 Oct 2020 17:57:09 +0200 Subject: [PATCH 205/278] 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 206/278] 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 207/278] 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 208/278] 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 209/278] 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 210/278] 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 211/278] 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 212/278] 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 213/278] 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 214/278] 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 215/278] 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 216/278] 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 217/278] 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 218/278] 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 219/278] 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 220/278] 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 221/278] 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 222/278] 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 223/278] 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 224/278] 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 225/278] 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 226/278] 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 227/278] 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 228/278] 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 229/278] 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 230/278] 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 @@ - Urheberrechtserklärung Datenschutzerklärung - - Profilbild Anzeigename E-Mail-Adresse @@ -432,22 +379,18 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.Telefonnummer hinzufÃŧgen Zeige App-Infos in den Systemeinstellungen. App-Info - Benachrichtigungen fÃŧr diesen Account aktivieren Benachrichtigungen fÃŧr diese Sitzung aktivieren Bildschirm fÃŧr 3 Sekunden aktivieren - Nachrichten in direkten Chats Nachrichten in Gruppen-Chats Wenn ich in einen Raum eingeladen werde Anrufe Nachrichten von Bots - Hintergrundsynchronisierung Hintergrundsynchronisierung aktivieren Timeout fÃŧr Synchronisierungsanfragen VerzÃļgerung zwischen jeder Synchronisierung - Version OLM Version Nutzungsbedingungen @@ -456,8 +399,6 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.Datenschutzerklärung Cache leeren - - Nutzereinstellungen Benachrichtigungen Ignorierte Benutzer @@ -483,19 +424,15 @@ Um fortzufahren, gib dein Passwort ein. Authentifizierung Passwort: Absenden - Angemeldet als Home-Server Identitätsserver - Verifizierung ausstehend Bitte prÃŧfe deinen E-Mail-Posteingang und klicke auf den in der E-Mail enthaltenen Link. Klicke anschließend auf Fortsetzen. Verifizieren der E-Mail-Adresse nicht mÃļglich. Bitte prÃŧfe deine E-Mails und klicke auf den enthaltenen Link. Anschließend klicke auf Fortsetzen. - Diese E-Mail-Adresse wird bereits verwendet. Diese E-Mail-Adresse wurde nicht gefunden. Diese Telefonnummer wird bereits verwendet. - Passwort ändern Aktuelles Passwort Neues Passwort @@ -505,13 +442,9 @@ Um fortzufahren, gib dein Passwort ein. Alle Nachrichten von %s anzeigen? Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen. - Bist du sicher, dass du dieses Benachrichtigungsziel entfernen mÃļchtest? - Bist du sicher, dass du %1$s %2$s entfernen mÃļchtest? - Wähle ein Land - Land Bitte wähle ein Land Mobilfunknummer @@ -522,19 +455,16 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.Fehler beim Verifizieren der Telefonnummer Code - Raumbild Raumname Thema Raum-Markierung Markiert als: - Favorit Niedrige Priorität Keine - Zugriff und Sichtbarkeit Diesen Raum im Raum-Verzeichnis anzeigen @@ -542,22 +472,18 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.Lesbarkeit des Chatverlaufs Wer kann den Chatverlauf lesen? Wer kann auf diesen Raum zugreifen? - Jeder Nur Mitglieder (ab dem Zeitpunkt, an dem diese Option ausgewählt wurde) Nur Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden) Nur Mitglieder (ab dem Zeitpunkt, an dem sie beigetreten sind) - Um einen Link zu einem Raum erstellen zu kÃļnnen, muss dieser eine Adresse haben. Nur eingeladene Personen Alle, die den Raum-Link kennen (ausgenommen Gäste) Alle, die den Raum-Link kennen (auch Gäste) - Verbannte Benutzer - Erweitert Interne ID dieses Raumes @@ -569,34 +495,26 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.Du musst dich abmelden, um die VerschlÃŧsselung aktivieren zu kÃļnnen. Nur fÃŧr verifizierte Sitzungen verschlÃŧsseln Niemals verschlÃŧsselte Nachrichten an unverifizierte Sitzungen in diesem Raum von dieser Sitzung senden. - Dieser Raum hat keine lokalen Adressen Neue Adresse (z. B. #foo:matrix.org) - UngÃŧltiges Adressformat \'%s\' entspricht nicht dem Format von Adressen Du wirst keine Hauptadresse mehr angegeben haben. Hauptadressen-Warnung - Als Hauptadresse setzen Als Hauptadresse aufheben Raum-ID kopieren Raumadresse kopieren - VerschlÃŧsselung ist in diesem Raum aktiviert. VerschlÃŧsselung ist in diesem Raum deaktiviert. VerschlÃŧsselung aktivieren \n(Warnung: Kann nicht wieder deaktiviert werden!) - Verzeichnis - %s versuchte einen bestimmten Punkt in diesem Chatverlauf zu laden, konnte ihn aber nicht finden. - Ende-zu-Ende-VerschlÃŧsselungs-Informationen - Ereignisinformation Nutzer-ID Curve25519-IdentitätsschlÃŧssel @@ -604,7 +522,6 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.Algorithmus Sitzungs-ID EntschlÃŧsselungsfehler - Informationen der Absendersitzung Öffentlicher Name Öffentlicher Name @@ -612,7 +529,6 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.SitzungsschlÃŧssel Verifizierungsstatus Ed25519-Fingerabdruck - Ende-zu-Ende-VerschlÃŧsselungs-RaumschlÃŧssel exportieren RaumschlÃŧssel exportieren SchlÃŧssel in lokale Datei exportieren @@ -622,31 +538,25 @@ Beachte: Diese Aktion wird die App neu starten und einige Zeit brauchen.Die Ende-zu-Ende-RaumschlÃŧssel wurden in \'%s\' gespeichert. Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. - Ende-zu-Ende-RaumschlÃŧssel importieren RaumschlÃŧssel importieren SchlÃŧssel aus lokaler Datei importieren Importieren Nur zu verifizierten Sitzungen verschlÃŧsseln Von dieser Sitzung aus keine verschlÃŧsselten Nachrichten an nicht-verifizierte Sitzungen senden. - Nicht verifiziert Verifiziert Auf der Blockierliste - unbekannte Sitzung Nichts - Bestätigen Verifiz. widerrufen Sperren Zulassen - Sitzung verifizieren Vergleiche die folgenden Zeichen mit den Einstellungen in der Sitzung des/der anderen Nutzer!n und bestätige: Falls sie nicht Ãŧbereinstimmen, wurde die Kommunikation vielleicht kompromittiert. Ich bestätige, dass die SchlÃŧssel Ãŧbereinstimmen - Raum enthält unbekannte Sitzungen Dieser Raum enthält unbekannte Sitzungen, die noch nicht verifiziert wurden. @@ -654,7 +564,6 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. \nWir empfehlen, den Verifizierungsprozess fÃŧr jedes Gerät zu durchlaufen, bevor du fortfährst. Du kannst die Nachricht aber auch ohne Verifizierung senden, wenn du das vorziehst. \n \nUnbekannte Sitzungen: - Raum-Verzeichnis auswählen Der Server kann nicht verfÃŧgbar oder Ãŧberlastet sein @@ -662,31 +571,23 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Home-Server-URL Alle Räume auf dem %s-Server Alle nativen %s-Räume - Suche nach historischen - Nutzer-Oberfläche Sprache Wähle Sprache - Starte beim Systemstart Medien-Cache leeren Medien behalten - FÃŧr alle Nachrichten Zeitstempel anzeigen - 3 Tage 1 Woche 1 Monat Unbegrenzt - Offline - Nutzer-Verzeichnis BENUTZER-VERZEICHNIS (%s) Datensparsamer Modus - SchriftgrÃļße Klein Normal @@ -696,14 +597,11 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Sehr klein Riesig Design - Zeige Zeitstempel im 12-Stunden-Format - Um Widgets in diesem Raum zu verwalten, ist eine Berechtigung erforderlich Widget konnte nicht erstellt werden Konferenzgespräche mit jitsi durchfÃŧhren Soll das Widget wirklich aus diesem Raum gelÃļscht werden? - Widget konnte nicht erstellt werden. Berechtigungslevel muss eine positive ganze Zahl sein. @@ -718,10 +616,8 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Helles Design Dunkles Design Schwarzes Design - Synchronisiereâ€Ļ Auf Ereignisse lauschen - Nachrichten, die meinen Anzeigenamen enthalten Nachrichten, die meinen Benutzernamen enthalten Du hast die neue Sitzung \'%s\' hinzugefÃŧgt, die jetzt VerschlÃŧsselungs-SchlÃŧssel anfordert. @@ -730,99 +626,72 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Anruf Laute Benachrichtigungen Lautlose Benachrichtigungen - Foto aufnehmen Video aufnehmen - Systemeigene Kamera verwenden - Ohne Verifizierung teilen Anfrage ignorieren - Anonymisierte Analysedaten Fehlerbericht - Warnung! Konferenzgespräche werden noch entwickelt und sind vielleicht nicht zuverlässig. - Befehlsfehler Unbekanntes Kommando: %s - Aus Laut - VerschlÃŧsselte Nachricht - Community-Details - Lädtâ€Ļ - Schließen Communities - Community-Namen filtern - Einladen Communities Keine Gruppen - Sicher, dass du einen neuen Chat mit %s starten mÃļchtest\? Sicher, dass du einen Sprachanruf starten mÃļchtest\? Sicher, dass du einen Videoanruf starten mÃļchtest\? - Gruppenliste - Ein Bann fÃŧhrt zu einem Ausschluss eines Nutzers von diesem Raum und verhindert einen erneuten Beitritt. - Alle Nachrichten (laut) Alle Nachrichten Nur Erwähnungen Stumm URL-Vorschau im Chat Vibriere beim Erwähnen eines Nutzers - Benachrichtigungen Dieser Raum zeigt fÃŧr keine Community Avatare an Neue Community-ID (z.B. +foo:matrix.org) UngÃŧltige Community-ID \'%s\' ist keine valide Community-ID - - Erstellen Community erstellen Community-Name Beispiel Community-ID Beispiel - Startseite Personen Räume Keine Benutzer - Räume Beigetreten Eingeladen Filter Gruppen-Mitglieder Filter Gruppen-Räume - Der Community-Administrator hat keine lange Beschreibung fÃŧr diese Community zur VerfÃŧgung gestellt. - Du wurdest von %2$s aus %1$s gekickt Du wurdest von %2$s aus %1$s verbannt Grund: %1$s Erneut beitreten Raum vergessen Startbildschirm-VerknÃŧpfung hinzufÃŧgen - Community Avatare - SchÃŧtteln, um einen Fehler zu melden - Aktionen Mitglieder auflisten Synchronisiereâ€Ļ @@ -838,7 +707,6 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. 1 neue Nachricht %d neue Nachrichten - 1 Raum %d Räume @@ -863,17 +731,13 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. 1 aktives Widget %d aktive Widgets - Profilbild - 1 Mitgliederänderung %d Mitgliederänderungen - %1$s in %2$s - Öffne Header Profilbild fÃŧr Lesebestätigungen Profilbild fÃŧr Bemerkungen @@ -886,32 +750,25 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. â€ĸ Der Nachrichteninhalt der Benachrichtigung wird sicher vom Matrix-Home-Server abgerufen â€ĸ Benachrichtigungen enthalten Metadaten und Nachrichteninhalte â€ĸ Benachrichtigungen werden den Nachrichteninhalt nicht anzeigen - Benachrichtungs-Datenschutz Element kann im Hintergrund laufen um deine Benachrichtigungen sicher und privat zu verwalten. Dies kann den Energieverbrauch beeinflussen. Berechtigung gewähren Wähle eine andere Option - Sende einen Sticker - Sende Sticker Du hast aktuell keine Stickerpakete aktiviert. \n \nMÃļchtest du welche hinzufÃŧgen\? - Account deaktivieren Deaktiviere meinen Account - Sende Analysedaten Element sammelt anonyme Analysedaten um uns zu helfen, die App zu verbessern. Bitte aktive Analysedaten um uns zu helfen Element zu verbessern. Ja, ich mÃļchte helfen! - Ein benÃļtigter Parameter fehlt. Ein Parameter ist nicht valide. Um %1$s weiter zu verwenden, musst die Geschäftsbedingungen begutachten und ihnen zustimmen. Jetzt prÃŧfen - Account deaktiveren Dies wir dein Konto permanent unbenutzbar machen. Du wirst dich nicht anmelden kÃļnnen und keiner wird denselben Nutzernamen erneut registrieren kÃļnnen. Dies wird dein Konto aus allen Räumen austreten lassen, an denen es teilnimmt und es wird deine Kontoangaben vom Identitätsserver lÃļschen. Diese Aktion ist unumkehrbar. \n @@ -921,37 +778,25 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Bitte alle Nachrichten, die ich gesendet habe, lÃļschen, wenn mein Account deaktiviert wird (Warnung: Unterhaltungen werden fÃŧr zukÃŧnftige Nutzer unvollständig erscheinen) Um fortzufahren, bitte Passwort eingeben: Account deaktivieren - Drittanbieter-Lizenzen - Download Sprechen Leeren VerschlÃŧsselungsschlÃŧssel von deinen anderen Sitzungen erneut anfragen. - SchlÃŧsselanfrage gesendet. - Anfrage gesendet Bitte Ãļffne Element auf einem anderen Gerät, das die Nachricht entschlÃŧsseln kann, damit es die SchlÃŧssel an diese Sitzung senden kann. - Hier tippenâ€Ļ - Sprachnachricht senden - fortfahren mitâ€Ļ Es wurde keine externe Anwendung gefunden, um diese Aktion auszufÃŧhren. - Sende Sprachnachrichten - Bitte gib dein Passwort ein. - Schreibe bitte auf Englisch, wenn mÃļglich. Sende verschlÃŧsselte Antwortâ€Ļ Sende unverschlÃŧsselte Antwortâ€Ļ Zeige Medien vor dem Senden - Du bist aktuell kein Mitglied einer Community. - Benutze die Enter-Taste der Tastatur zum Senden Zeigt Aktionen Bannt Benutzer mit angegebener ID @@ -966,12 +811,10 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Ändert deinen Anzeigenamen (De-)Aktiviert Markdown Um das Matrix-App-Management zu reparieren - Dieser Raum wurde ersetzt und ist nicht länger aktiv Die Konversation wird hier fortgesetzt Dieser Raum ist die Fortsetzung einer anderen Konversation Klicke hier um die älteren Nachrichten zu sehen - Nicht berechtigt, diese Aktion durchzufÃŧhren. 1s @@ -989,14 +832,11 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. 1T %dT - Jetzt %1$s %1$s seit %2$s - "%1$s, " %1$s und %2$s %1$s %2$s - 1 ausgewählt %d ausgewählt @@ -1005,58 +845,43 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. 1 Mitglied %d Mitglieder - 1 Raum %d Räume Systembenachrichtigungen - Ressourcen-Limit Kontaktiere Administrator - kontaktiere deinen Service-Administrator - Dieser Home-Server hat einen seiner Ressourcen-Limits erreicht, sodass einige Nutzer sich nicht anmelden kÃļnnen. Dieser Home-Server hat einen seiner Ressourcen-Limits Ãŧberschritten. - Dieser Home-Server hat sein Limit an monatlich aktiven Nutzern erreicht, sodass einige Nutzer sich nicht anmelden kÃļnnen. Dieser Home-Server hat sein Limit an monatlich aktiven Nutzern erreicht. - Bitte %s um dieses Limit anheben zu lassen. Bitte %s um diesen Dienst weiter zu nutzen. - Fehler - Raummitglieder bei Bedarf nachladen Verbessere Performanz, indem Raum-Mitglieder erst beim ersten Ansehen geladen werden. Dein Home-Server unterstÃŧtzt noch nicht das Nachladen von Raummitgliedern. Versuche es später. - Entschuldige, ein Fehler trat auf - Version %s Status.im-Design - Bitte eine Passphrase erstellen um exportierte SchlÃŧssel zu verschlÃŧsseln. Du musst dieselbe Passphrase eingeben um die SchlÃŧssel importieren zu kÃļnnen. Erzeuge Passphrase Passphrasen stimmen nicht Ãŧberein aufklappen Zusammenklappen - Zeige Infobereich Immer FÃŧr Nachrichten und Fehler Nur fÃŧr Fehler - %1$s: %1$s: %2$s +%d %d+ - Trotzdem anrufen Entfernen Grund - Linkvorschau im Chat aktivieren, falls dein Home-Server diese Funktion unterstÃŧtzt. Sende Schreibbenachrichtigungen Lasse andere Benutzer wissen, dass du tippst. @@ -1068,11 +893,9 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Passwort Starte die System-Kamera anstelle der angepassten Kamera. Diese Option erfordert eine externe Anwendung um Sprachnachrichten aufzuzeichnen. - Das Kommando \"%s\" braucht mehr Parameter oder einige Parameter sind inkorrekt. Markdown wurde aktiviert. Markdown wurde deaktiviert. - Zeige Betreten- und Verlassen-Ereignisse Zeige Konto-Ereignisse Enthält Änderungen des Profilbilds und des Anzeigenamens. @@ -1080,62 +903,49 @@ Achtung: Diese Datei wird vielleicht gelÃļscht, wenn die App deinstalliert wird. Nutze den Standard-Klingelton von Element fÃŧr eingehende Anrufe Klingelton fÃŧr eingehende Anrufe Wähle Klingelton fÃŧr Anrufe: - Akzeptieren - Bitte prÃŧfe und akzeptiere die Richtlinien dieses Home-Servers: - Tests ausfÃŧhren Läuftâ€Ļ (%1$d von %2$d) Einer oder mehrere Tests sind fehlgeschlagen. Versuche vorgeschlagene LÃļsung(en). Einer oder mehrere Tests sind fehlgeschlagen. Bitte sende einen Fehlerbericht, damit dies untersucht werden kann. - Systemeinstellungen. Benachrichtigungen sind in den Systemeinstellungen aktiviert. Notifications sind in den Systemeinstellungen deaktiviert. Bitte ÃŧberprÃŧfe die Systemeinstellungen. Öffne Einstellungen - Kontoeinstellungen. Benachrichtigungen sind fÃŧr dein Konto eingeschaltet. Notifications sind fÃŧr dein Konto deaktiviert. Bitte ÃŧberprÃŧfe die Kontoeinstellungen. Aktiviere - Sitzungseinstellungen. Benachrichtigungen sind fÃŧr diese Sitzung aktiviert. Benachrichtigungen sind fÃŧr diese Sitzung nicht aktiviert. \nBitte ÃŧberprÃŧfe die Einstellungen fÃŧr Element. Aktiviere - Element benutzt Google Play Dienste um Push-Nachrichten zu Ãŧbermitteln, doch scheinen sie nicht korrekt konfiguriert zu sein: %1$s Repariere Play-Dienste - Firebase-Token FCM-Token erfolgreich abgefragt: \n%1$s Abfragen des FCM-Tokens fehlgeschlagen: \n%1$s - FCM-Token erfolgreich beim Home-Sserver registriert. FCM-Token konnte nicht beim Home-Server registriert werden: %1$s - Benachrichtigungsdienst Benachrichtigungsdienst läuft. Benachrichtigungsdienst läuft nicht. Versuche die Anwendung neuzustarten. Starte Dienst - Automatischer Neustart des Benachrichtigungsdienstes Dienst wurde automatisch gestoppt und erneut gestartet. Dienst konnte nicht neugestartet werden - Starte beim Hochfahren Dienst wird starten, wenn das Gerät neu gestartet wird. Dieser Dienst wird nicht starten, wenn das Gerät neu gestartet wird. Du wirst keine Benachrichtigungen bekommen bis Element einmal geÃļffnet wurde. Aktiviere das Starten beim Hochfahren - ÜberprÃŧfe Hintergrund-Einschränkungen Hintergrund-Einschränkungen sind fÃŧr Element deaktiviert. Dieser Test sollte Ãŧber mobile Daten ausgefÃŧhrt werden (kein WLAN). %1$s @@ -1143,7 +953,6 @@ Versuche die Anwendung neuzustarten. \nDie App wird aggressiv eingeschränkt, während sie im Hintergrund arbeiten mÃļchte. Dies kÃļnnte Benachrichtigungen beeinflussen. \n%1$s Einschränkungen deaktivieren - Batterieoptimierung Element wird nicht von Batterieoptimierungen beeinflusst. Fehler bei Benachrichtigungen finden @@ -1154,50 +963,36 @@ Versuche die Anwendung neuzustarten. Token-Registrierung Wenn ein Benutzer ein abgestecktes Gerät mit ausgeschaltetem Bildschirm eine Weile nicht bewegt, wechselt es in den Doze-Modus. Dies hindert Apps daran, auf das Netzwerk zuzugreifen und verzÃļgert die AusfÃŧhrung von Aufgaben, Synchronisierungen und Standard-Alarmen. Ignoriere Optimierungen - Hintergrundverbindung "Element muss eine Hintergrundverbindung (nur geringe Belastung) aufrechterhalten, um verlässliche Benachrichtigungen zu erhalten. \nAuf dem nächsten Bildschirm wirst Du gefragt, ob Du Element erlauben mÃļchtest im Hintergrund zu laufen. Bitte akzeptieren." Berechtigung gewähren - Beim Verifizieren deiner E-Mail-Adresse trat ein Fehler auf. - Beim Verifizieren deiner Telefonnummer trat ein Fehler auf. Weitere Information: %s - Keine validen Google-Play-Dienste gefunden. Benachrichtigungen kÃļnnten nicht richtig funktionieren. - Videogespräch aktivâ€Ļ - SchlÃŧssel-Sicherung SchlÃŧssel-Sicherung verwenden SchlÃŧsselsicherung ist nicht abgeschlossen. Bitte wartenâ€Ļ - Überspringen Fertig - Erweiterte Benachrichtigungseinstellungen Angepasste Einstellungen. Beachte, dass einige Nachrichtentypen leise sind (erzeugen eine Benachrichtigung aber keinen Ton). Einige Benachrichtigungen sind in deinen erweiterten Einstellungen deaktiviert. Konnte angepasste Regeln nicht laden. Bitte erneut versuchen. Einstellungen ÃŧberprÃŧfen - Konto hinzufÃŧgen - Laute Benachrichtigungen einstellen Anrufbenachrichtigung einstellen Lautlose Benachrichtigungen einstellen Wähle LED-Farbe, Vibration, Tonâ€Ļ - - Stumm Bitte eine Passphrase eingeben Passphrase ist zu schwach - Bitte lÃļsche die Passphrase, wenn Element einen Wiederherstellungs-SchlÃŧssel erzeugen soll. Keine Matrix-Sitzung verfÃŧgbar - Verliere nie wieder verschlÃŧsselte Nachrichten Setze Passphrase Erledigt @@ -1210,21 +1005,15 @@ Versuche die Anwendung neuzustarten. Sicherung gestartet Bist du sicher\? WiederherstellungsschlÃŧssel eingeben - Nachrichtenwiederherstellung - Stelle Backup wieder her: Historie entschlÃŧsseln Von Sicherung wiederherstellen Sicherung lÃļschen - LÃļsche Sicherungâ€Ļ Konnte Sicherung nicht lÃļschen (%s) - LÃļsche Sicherung - Präferenz der Benachrichtigungen nach Ereignis - [%1$s] Dieser Fehler ist außerhalb von Element passiert. Google sagt, dass dieses Gerät zu viele Apps registriert hat um FCM zu nutzen. Der Fehler taucht nur auf, wenn sehr viele Apps installiert sind. Er sollte also den Durchschnittsnutzer nicht betreffen. [%1$s] @@ -1233,33 +1022,25 @@ Dieser Fehler ist außerhalb von Element passiert. Google sagt, dass dieses Ger Dieser Fehler ist außerhalb von Element passiert. Es gibt kein Google-Konto auf dem Gerät. Bitte fÃŧge ein Google-Konto hinzu. Verwaltung der Krypto-SchlÃŧssel SchlÃŧssel-Sicherung verwalten - Nachrichten in verschlÃŧsselten Räumen sind mit Ende-zu-Ende-VerschlÃŧsselung gesichert. Nur du und der/die Empfänger!nnen haben die SchlÃŧssel um diese Nachrichten zu lesen. \n \nSichere deine SchlÃŧssel, um sie nicht zu verlieren. Der WiederherstellungsschlÃŧssel wurde nach \'%s\' gespeichert. \n \nWarnung: Diese Datei wird gelÃļscht, wenn die Anwendung deinstalliert wird. - WiederherstellungsschlÃŧssel aus Passphrase generieren. Dies kann mehrere Sekunden brauchen. Deine VerschlÃŧsselungsschlÃŧssel werden nun im Hintergrund auf deinem Home-Server gesichert. Die initiale Sicherung kann mehrere Minuten dauern. - - Du verlierst mÃļglicherweise den Zugang zu deinen Nachrichten, wenn du dich abmeldest oder das Gerät verlierst. - Rufe Backup-Version abâ€Ļ Nutze deine Wiederherstellungspassphrase, um deinen verschlÃŧsselten Chatverlauf lesen zu kÃļnnen nutze deinen WiederherstellungsschlÃŧssel Wenn du deine Wiederherstellungspassphrase nicht weist, kannst du %s. - Nutze deinen WiederherstellungsschlÃŧssel, um deinen verschlÃŧsselten Chatverlauf lesen zu kÃļnnen Hast du deinen WiederherstellungsschlÃŧssel verloren\? Du kannst einen neuen in den Einstellungen einrichten. Sicherung konnte mit dieser Passphrase nicht entschlÃŧsselt werden. Bitte stelle sicher, dass du die korrekte Wiederherstellungspassphrase eingegeben hast. Netzwerkfehler: Bitte ÃŧberprÃŧfe die Verbindung und versuche es erneut. - Gib deinen WiederherstellungsschlÃŧssel ein Sicherung konnte mit diesem WiederherstellungsschlÃŧssel nicht entschlÃŧsselt werden. Bitte stelle sicher, dass du den korrekten WiederherstellungsschlÃŧssel eingegeben hast. - Sicherung wiederhergestellt %s ! Backup mit %d SchlÃŧssel wiederhergestellt. @@ -1269,16 +1050,11 @@ Dieser Fehler ist außerhalb von Element passiert. Es gibt kein Google-Konto auf %d neuer SchlÃŧssel wurde dieser Sitzung hinzugefÃŧgt. %d neue SchlÃŧssel wurden dieser Sitzung hinzugefÃŧgt. - Konnte letzte Version der WiederherstellungsschlÃŧssel nicht laden (%s). SitzungsverschlÃŧsselung ist nicht aktiviert - - Die SchlÃŧsselsicherung wurde fÃŧr diese Sitzung korrekt eingerichtet. Die SchlÃŧsselsicherung ist in dieser Sitzung nicht aktiv. Deine SchlÃŧssel werden von dieser Sitzung nicht gesichert. - - Sicherung hat eine Signatur von einer unbekannten Sitzung mit der ID %s. Sicherung hat eine valide Sicherung von dieser Sitzung. Die Sicherung hat eine gÃŧltige Signatur von der verifizierten Sitzung %s. @@ -1286,10 +1062,8 @@ Dieser Fehler ist außerhalb von Element passiert. Es gibt kein Google-Konto auf Die Sicherung hat eine ungÃŧltige Signatur von der verifizierten Sitzung %s Die Sicherung hat eine ungÃŧltige Signatur von der nicht verifizierten Sitzung %s Abfrage der Vertrauensinformationen fÃŧr die Sicherung fehlgeschlagen (%s). - Um die SchlÃŧsselsicherung fÃŧr diese Sitzung zu verwenden, stelle sie jetzt mit deiner Passphrase oder deinem WiederherstellungsschlÃŧssel wieder her. Deine gesicherten VerschlÃŧsselungsschlÃŧssel vom Server lÃļschen\? Du wirst deinen WiederherstellungsschlÃŧssel nicht mehr nutzen kÃļnnen, um deinen verschlÃŧsselten Chatverlauf zu lesen. - Beim Ausloggen gehen deine verschlÃŧsselten Nachrichten verloren SchlÃŧssel-Sicherung wird durchgefÃŧhrt. Wenn du dich jetzt ausloggst, gehen deine verschlÃŧsselten Nachrichten verloren. SchlÃŧssel-Sicherung sollte bei allen Sitzungen aktiviert sein, um den Verlust verschlÃŧsselter Nachrichten zu verhindern. @@ -1299,20 +1073,15 @@ Dieser Fehler ist außerhalb von Element passiert. Es gibt kein Google-Konto auf Sicher\? Sicherung Alle verschlÃŧsselten Nachrichten gehen verloren, wenn Du dich ausloggst ohne eine Sicherung der SchlÃŧssel gemacht zu haben. - Bleiben Abbrechen - Sicher, dass du dich ausloggen mÃļchtest\? - Wiederherstellung verschlÃŧsselter Nachrichten Bitte gib einen Benutzernamen ein. Der datensparsame Modus sorgt dafÃŧr, dass die Präsenz- und Tipp-Benachrichtigungen ausgefiltert werden. - Richte SchlÃŧsselsicherung ein (Erweitert) SchlÃŧssel manuell exportieren - SchÃŧtze deine Sicherung mit einer Passphrase. Eine verschlÃŧsselte Kopie deiner SchlÃŧssel wird auf deinem Home-Server gespeichert. SchÃŧtze deine Sicherung mit einer Passphrase. FÃŧr maximale Sicherheit sollte diese *nicht* dein Konto-Passwort sein. Erstelle Sicherung @@ -1332,46 +1101,36 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Ich war es Verliere nie mehr verschlÃŧsselte Nachrichten Richte die SchlÃŧsselsicherung ein - Verliere nie wieder verschlÃŧsselte Nachrichten Benutze SchlÃŧsselsicherung - Neue sichere SchlÃŧssel fÃŧr Nachrichten Verwalte SchlÃŧsselsicherung - Sichere SchlÃŧsselâ€Ļ - Alle SchlÃŧssel sind gesichert Sichere %d SchlÃŧsselâ€Ļ Sichere %d SchlÃŧsselâ€Ļ - Version Algorithmus Signatur - Berechne WiederherstellungsschlÃŧsselâ€Ļ Lade SchlÃŧssel herunterâ€Ļ Importiere SchlÃŧsselâ€Ļ Ignorieren - Mit Single-Sign-On anmelden Diese URL ist nicht erreichbar, bitte prÃŧfen Dein Gerät nutzt eine veraltetes TLS-Sicherheitsprotokoll, das anfällig fÃŧr Angriffe ist. Zu deiner Sicherheit wirst du nicht in der Lage sein, dich zu verbinden Schicke Nachricht mit Eingabetaste Eingabetaste der Bildschirmtastatur schickt die Nachricht ab, statt einen Zeilenumbruch zu erzeugen - Passwort aktualisieren Das Passwort ist ungÃŧltig PasswÃļrter stimmen nicht Ãŧberein - UngÃŧltige Antwort beim Entdecken des Home-Servers Serveroptionen vervollständigen Element hat eine benutzerdefinierte Serverkonfiguration fÃŧr die Domäne deines Benutzernamens gefunden \"%1$s\": \n%2$s Nutze Konfiguration - Initialisiere Dienst Medien Standard-Komprimierung @@ -1379,7 +1138,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Standard-Medienquelle Wählen AuslÃļseton abspielen - Als gelesen markieren Die App braucht sich nicht im Hintergrund mit dem Home-Server verbinden, dies sollte die Akkunutzung reduzieren @@ -1390,18 +1148,14 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine %d Nachricht %d Nachrichten - Neues Ereignis Raum Neue Nachrichten Neue Einladung Ich ** Fehler beim Senden - bitte Raum Ãļffnen - Entschuldigung, Konferenzanrufe mit Jitsi werden auf älteren Geräten (mit älteren Android-Versionen als 5.0) nicht unterstÃŧtzt - Sitzung verifizieren - Unbekannte IP-Adresse Eine neue Sitzung fordert VerschlÃŧsselungsschlÃŧssel an. \nSitzungsname: %1$s @@ -1411,86 +1165,67 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine \nSitzungsname: %1$s \nZuletzt gesehen: %2$s \nWenn du nicht eine andere Sitzung angemeldet hast, ignoriere diese Anfrage. - Verifizieren Teilen Ignorieren - Auf deinem Home-Server existiert bereits eine Sicherung Ersetzen Stopp - ÜberprÃŧfe Sicherungsstatus Du wurdest abgemeldet, da deine Anmeldedaten falsch oder abgelaufen sind. - Verifizieren durch Vergleichen eines kurzen Textes. Starte Verifizierung Eingehende Verifizierungsanfrage Du hast eine eingehende Verifizierungsanfrage erhalten. Anfrage ansehen Warte auf Bestätigung des/r anderen Nutzer*inâ€Ļ - Verifiziert! Du hast diese Sitzung erfolgreich verifiziert. Sichere Nachrichten mit diesem Benutzer sind Ende-zu-Ende verschlÃŧsselt und kÃļnnen nicht von Dritten mitgelesen werden. Verstanden - SchlÃŧssel-Verifizierung Anfrage abgebrochen Die Verifizierung wird abgebrochen. \nGrund: %s - Interaktive Sitzungs-Verifizierung Verifizierungsanfrage %s mÃļchte deine Sitzung verifizieren - Der Benutzer hat die Verifizierung abgebrochen Der Verifizierungsprozess ist abgelaufen Die Sitzung hat eine unerwartete Nachricht erhalten Eine ungÃŧltige Nachricht wurde empfangen Unbekannter Fehler - - Bearbeiten Antworten - Wiederholen Trete einem Raum bei um die App zu benutzen. Hat dir eine Einladung gesendet Eingeladen von %s - Du bist auf dem neuesten Stand! Du hast keine weiteren, ungelesenen Nachrichten Willkommen zu Hause! Unterhaltungen Räume Deine Räume werden hier angezeigt - Reaktionen Zustimmen Mag ich Reaktion hinzufÃŧgen Reaktionen ansehen Reaktionen - Ereignis von Benutzer gelÃļscht Ereignis moderiert durch Raum-Administrator Zuletzt bearbeitet von %1$s am %2$s - - Neuen Raum erstellen Kein Netzwerk. Bitte ÃŧberprÃŧfe deine Internetverbindung. Ändern Netzwerk wechseln Bitte wartenâ€Ļ Alle Communities - FÃŧr diesen Raum kann keine Vorschau angezeigt werden Die Vorschau von Ãļffentlichen Räumen wird von Element noch nicht unterstÃŧtzt - Räume Direktnachrichten - Neuer Raum ERSTELLEN Raumname @@ -1498,22 +1233,17 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Jeder wird diesem Raum beitreten kÃļnnen Raumverzeichnis VerÃļffentliche diesen Raum ins Raumverzeichnis - Integrationsmanager - Kein Integrationsmanager konfiguriert. SchlÃŧsselaustausch anfragen Es sieht so aus, als hättest du bereits ein Setup-SchlÃŧssel-Backup von einer anderen Sitzung. MÃļchtest du es durch das, was du gerade erstellt hast, ersetzen\? FÃŧr maximale Sicherheit empfehlen wir, dies persÃļnlich zu tun, oder ein anderes vertrautes Kommunikationsmedium zu nutzen. ÜberprÃŧfe diese Sitzung, um sie als vertrauenswÃŧrdig zu markieren. Sitzungen von anderen Nutzer*innen zu vertrauen gibt dir zusätzliche Sicherheit bei der Verwendung von Ende-zu-Ende verschlÃŧsselten Nachrichten. Durch Verifizieren dieser Sitzung wird sie bei dir und deinem GegenÃŧber als vertrauenswÃŧrdig markiert. - Verifiziere diese Sitzung, indem du bestätigst, dass das folgende Emoji auf dem Bildschirm deines GegenÃŧbers angezeigt wird Verifiziere diese Sitzung, indem du bestätigst, dass die folgenden Zahlen auf dem Bildschirm deines GegenÃŧbers angezeigt werden - Es ist nichts aufgetaucht\? Noch nicht alle Clients unterstÃŧtzen die interaktive Verifikation. Nutze die alte Verifikation.. Verwende die alte Verifizierungsmethode. - Die Sitzung kennt diese Transaktion nicht Die Hash-Verpflichtung stimmte nicht Ãŧberein Die SAS stimmte nicht Ãŧberein @@ -1524,13 +1254,10 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Fehlerhaftes Ereignis, kann nicht angezeigt werden Beim Abrufen der Vertrauensinformationen ist ein Fehler aufgetreten Beim Abrufen der SchlÃŧsselsicherungsdaten ist ein Fehler aufgetreten - Matrix SDK Version Sonstige Hinweise Dritter Du siehst diesen Raum bereits! - Schnelle Reaktionen - Allgemein Einstellungen Sicherheit & Privatsphäre @@ -1538,79 +1265,55 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Push-Regeln Keine Push-Regeln definiert Keine registrierten Push-Gateways - Sprache & Video Hilfe & Über - - Token registrieren - Mache einen Vorschlag Bitte schreibe unten deine Anmerkungen. Beschreibe hier deine Anmerkung Versteckte Ereignisse in der Zeitleiste anzeigen - Direkte Nachrichten - Wartenâ€Ļ Miniaturbild wird verschlÃŧsseltâ€Ļ Datei wird verschlÃŧsseltâ€Ļ (bearbeitet) - Nachrichtenbearbeitung Keine Änderungen gefunden - Gespräche filternâ€Ļ Sende eine neue Direktnachricht Das Raumverzeichnis anzeigen - Link in die Zwischenablage kopiert - Mit Matrix-ID hinzufÃŧgen Raum erstellenâ€Ļ Bearbeitungsverlauf anzeigen - Die andere Partei hat die ÜberprÃŧfung abgebrochen. \n%s Die Sitzung kann sich nicht auf eine SchlÃŧsselvereinbarung, eine Hash-, eine MAC- oder eine SAS-Methode einigen - E2E-SchlÃŧssel aus der Datei \"%1$s\" importieren. - Vielen Dank, der Vorschlag wurde erfolgreich gesendet Der Vorschlag konnte nicht gesendet werden (%s) - Miniaturbild wird gesendet (%1$s / %2$s) Datei wird gesendet (%1$s / %2$s) - Datei %1$s wird heruntergeladen â€Ļ Die Datei %1$s wurde heruntergeladen! - - Kannst du nicht finden, wonach du suchst\? Erstelle einen neuen Raum Name oder ID (#beispiel:matrix.org) - Aktiviere Wischen, um in der Zeitleiste zu antworten - Kein Ergebnis gefunden. Verwende \'Mit Matrix-ID hinzufÃŧgen\', um auf dem Server zu suchen. Beginne mit der Eingabe, um Ergebnisse zu erhalten Filtern nach Benutzername oder IDâ€Ļ - Raum betretenâ€Ļ - Ablehnen - App-ID: ÜberprÃŧfung Keine Widerrufen Trennen Kein Integrationsserver konfiguriert. - Anruf aufgrund eines falsch konfigurierten Servers fehlgeschlagen Versuche es mit %s Nicht erneut fragen - Richte eine E-Mail fÃŧr die Kontowiederherstellung ein. Optional, kannst du später einrichten, dass Personen dich Ãŧber diese Adresse finden. Richte eine Telefonnummer ein. Später kannst du einrichten, dass Personen dich Ãŧber diese finden. Lege eine E-Mail-Adresse fÃŧr die Kontowiederherstellung fest. Später kann optional eine E-Mail-Adresse oder eine Telefonnummer dazu verwendet werden, um von anderen Personen gefunden zu werden. @@ -1620,19 +1323,14 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Optimiert fÃŧr die Echtzeit Keine Hintergrundsynchronisation Fehler beim Aktualisieren der Einstellungen. - - Bevorzugtes Synchronisationsintervall Auffindbarkeit Öffentlicher Name (sichtbar fÃŧr Personen, mit denen du kommunizierst) Der Ãļffentliche Name der Sitzung ist fÃŧr Personen sichtbar, mit denen du kommunizierst Um fortzufahren, musst du die Nutzungsbedingungen akzeptieren. - Du verwendest keinen Identitätsserver Es ist kein Identitätsserver konfiguriert. Du musst dein Kennwort zurÃŧcksetzen. - Du versuchst anscheinend, eine Verbindung zu einem anderen Home-Server herzustellen. MÃļchtest du dich abmelden\? - Push-Key: App-Anzeigename: Url: @@ -1640,10 +1338,7 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Nutzungsbedingungen ÃŧberprÃŧfen FÃŧr andere auffindbar sein Verwende Bots, Bridges, Widgets und Sticker-Pakete - Gelesen von - - Identitätsserver Verbindung zum Identitätsserver trennen Identitätsserver konfigurieren @@ -1651,11 +1346,9 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Auffindbare E-Mail-Adressen Erkennungsoptionen werden angezeigt, sobald du eine E-Mail hinzugefÃŧgt hast. ausstehend - Gib einen neuen Identitätsserver ein Konnte keine Verbindung zum Home-Server herstellen Latn - Bitte frage den/die Administrator/in deines Home-Servers (%1$s) nach der Einrichtung eines TURN-Servers, damit Anrufe zuverlässig funktionieren. \n \nAlternativ kann ein Ãļffentlicher Server auf %2$s genutzt werden. Dies wird jedoch weniger zuverlässig sein und deine IP-Adresse wird gegenÃŧber diesem Server preisgegeben. Du kannst den Server auch in den Einstellungen anpassen. @@ -1666,8 +1359,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Passwort bestätigen Du kannst dies nicht auf einem mobilen Element tun Authentifizierung benÃļtigt - - Hintergrund-Synchronisierungsmodus Element wird sich im Hintergrund auf eine Art synchronisieren die Ressourcen des Geräts (Akku) schont. \nAbhängig vom Ressourcen-Status deines Geräts kann dein System die Synchronisierung verschieben. @@ -1692,22 +1383,17 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Dein Design Widget-ID Raum-ID - - Dieses Widget mÃļchte folgende Ressourcen benutzen: Erlauben Alle blockieren Kamera benutzen Mikrofon benutzen Lese DRM-geschÃŧtzte Medien - Du wirst nicht Ãŧber eingehende Nachrichten benachrichtigt, wenn die App im Hintergrund ist. Verwalte deine Erkennungseinstellungen. Zugriff fÃŧr mich zurÃŧckziehen - Sitzungsname: Format: - Du nutzt aktuell %1$s um vorhandene Kontakte zu finden und um von dir bekannten Kontakten gefunden zu werden. Du benutzt aktuell keinen Identitätsserver. Um zu entdecken und um von dir bekannten Kontakten entdeckt zu werden, richte unten einen ein. Auffindbare Telefonnummern @@ -1715,21 +1401,15 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Identitätsserver hat keine Nutzungsbedingungen Der Identitätsserver den du ausgewählt hast, hat keine Nutzungsbedingungen. Fahre nur fort, wenn du dem/r Besitzer!n des Dienstes vertraust Eine Textnachricht wurde an %s gesendet. Bitte gib den Verifizierungscode ein, den sie enthält. - Aktiviere ausfÃŧhrliche Logs. AusfÃŧhrliche Logs werden der Entwicklung der App dadurch helfen, dass mehr Informationen Ãŧbertragen werden, wenn du einen Fehlerbericht sendest. Auch wenn dies aktiviert ist, werden keine Nachrichteninhalte oder andere privaten Daten aufgezeichnet. - - Bitte erneut versuchen, nachdem du die Nutzungsbedingungen deines Home-Servers akzeptiert hast. - Bei Benutzung kÃļnnten Cookies gesetzt werden und es kÃļnnten Daten mit %s geteilt werden: Bei Benutzung kÃļnnten Daten mit %s geteilt werden: Optionen zum Finden werden erscheinen, sobald du eine Telefonnummer hinzugefÃŧgt hast. Wir haben dir eine Bestätigungsmail an %s gesendet. PrÃŧfe dein Postfach und klicke auf den Bestätigungslink Es sieht aus, als wÃŧrde der Server zu viel Zeit benÃļtigen, um zu antworten. Der Grund kann eine schlechte Verbindung oder ein Fehler mit dem Server sein. Bitte versuche es später erneut. - Anhang senden - NavigationsmenÃŧ Ãļffnen RaumerstellungsmenÃŧ Ãļffnen Schließe das RaumerstellungsmenÃŧâ€Ļ @@ -1739,7 +1419,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Passwort anzeigen Passwort verstecken Zum Ende springen - gelesen von %1$s, %2$s und %3$s gelesen von %1$s und %2$s gelesen von %s @@ -1747,9 +1426,7 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine gelesen von einem Nutzer gelesen von %d Nutzern - Die Datei \'%1$s\' (%2$s) ist zu groß, um sie hochzuladen. Das Limit ist %3$s. - Beim Abrufen des Anhangs ist ein Fehler aufgetreten. Datei Kontakt @@ -1764,7 +1441,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Meldegrund MELDEN NUTZER IGNORIEREN - Inhalt gemeldet Dieser Inhalt wurde gemeldet. \n @@ -1777,15 +1453,11 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Dieser Inhalt wurde als unangebracht gemeldet \n \nWenn du keine weiteren Inhalte dieses Nutzers mehr sehen mÃļchtest, kannst du ihn blockieren, um seine Nachrichten auszublenden - Element benÃļtigt Berechtigungen, um deine E2E SchlÃŧssel zu speichern. \n \nBitte erlaube den Zugriff im nächsten Pop-Up sodass du deine SchlÃŧssel manuell exportieren kannst. - Aktuell besteht keine Netzwerkverbindung - Nutzer ignorieren - Alle Nachrichten (laut) Alle Nachrichten Nur Erwähnungen @@ -1795,17 +1467,12 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine %1$s hat keine Änderungen gemacht Sendet die Nachricht als Spoiler Du ignorierst keine Nutzer - Halte auf einem Raum um mehr Optionen anzuzeigen - - %1$s hat den Raum fÃŧr jeden, der den Link hat, Ãļffentlich gemacht. Ungelesene Nachrichten - Privat oder in Gruppen mit Leuten chatten Halte Gespräche mittels VerschlÃŧsselung privat Beginne - Wähle einen Server Genau wie bei E-Mails haben Accounts ein Zuhause, auch wenn du mit jedem kommunizieren kannst Folge Millionen anderen kostenlos auf dem grÃļßten Ãļffentlichen Server @@ -1813,14 +1480,11 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Mehr erfahren Andere Benutzerdefinierte & erweiterte Einstellungen - Fortfahren Eine Trennung von deinem Identitätsserver wÃŧrde bedeuten, dass du weder von anderen Nutzern gefunden werden, noch diese per E-Mail oder Telefonnummer einladen kannst. Du teilst deine Email Adressen oder Telefonnummern momentan auf dem Identitätsserver %1$s. Du wirst dich erneut mit %2$s verbinden mÃŧssen, um mit dem Teilen aufzuhÃļren. Stimme den Nutzungsbedingungen des Identitätsservers (%s) zu, um zu erlauben per E-Mail oder Telefonnummer gefunden zu werden. - Zu teilende Daten nicht verarbeitbar - Erweitere & individualisiere dein Benutzererlebnis Verbinde mit %1$s Mit Element Matrix Services verbinden @@ -1829,7 +1493,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Registrieren Anmelden Mit einmaligem Anmelden fortfahren - Element Matrix Services Adresse Adresse Ein Fehler beim Laden der Seite %1$s (%2$d) ist aufgetreten @@ -1837,32 +1500,24 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Die Anwendung kann kein neues Benutzerkonto auf diesem Server erstellen. \n \nMÃļchtest du dich Ãŧber eine Web-Anwendung anmelden\? - Diese E-Mail-Adresse ist mit keinem Benutzerkonto verknÃŧpft. - Passwort auf %1$s zurÃŧcksetzen E-Mail Neues Passwort - Achtung! Eine Änderung deines Passworts wird alle Ende-zu-Ende-VerschlÃŧsselungsschlÃŧssel zurÃŧcksetzen. Dein verschlÃŧsselter Chatverlauf wird dadurch unlesbar. Richte eine SchlÃŧsselsicherung ein oder exportiere deine RaumschlÃŧssel von einer anderen Sitzung bevor du dein Passwort zurÃŧcksetzt. Fortfahren - Diese E-Mail-Adresse ist mit keinem Benutzerkonto verknÃŧpft - PrÃŧfe deinen Posteingang Eine Bestätigungsemail wurde an %1$s versendet. Klicke auf den Link um dein neues Passwort zu bestätigen. Sobald du dem enthaltenen Link gefolgt bist, klicke unten. Ich habe meine E-Mail-Adresse bestätigt - Erfolgreich! Dein Passwort wurde zurÃŧckgesetzt. ZurÃŧck zur Anmeldung - Dein Passwort wurde noch nicht geändert. \n \nMÃļchtest du die Passwortänderung stoppen\? - E-Mail-Adresse angeben E-Mail E-Mail (optional) @@ -1878,24 +1533,20 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Dein Benutzerkonto ist noch nicht erstellt. \n \nMÃļchtest du die Registrierung stoppen\? - matrix.org auswählen modular auswählen Benutzerdefinierten Server auswählen Bedingungen akzeptieren um fortzufahren - Bitte ÃŧberprÃŧfe deine E-Mails Wir haben dir eine E-Mail an %1$s gesendet. \nBitte Ãļffne den darin enthaltenen Link, um mit der Benutzerkontoerstellung fortzufahren. Der eingegebene Code ist nicht korrekt. Bitte ÃŧberprÃŧfe deine Eingabe. Beginne zu Tippen um eine Reaktion zu finden. - %1$s hat den Raum auf \"nur-einladen\" gestellt. Es ist deine Konversation. Mache sie dir zu eigen. Premium-Hosting fÃŧr Organisationen Gib die Adresse des Modular Element oder Servers ein, den du verwenden mÃļchtest Gibt die Adresse eines Servers oder eines Element ein, zu dem du dich verbinden mÃļchtest - Die Anwendung kann sich nicht bei diesem Home-Server anmelden. Der Home-Server unterstÃŧtzt die folgenden Anmeldetypen: %1$s. \n \nMÃļchtest du dich mit einem Webclient anmelden\? @@ -1905,17 +1556,13 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Warnung Lege eine E-Mail-Adresse fest, um dein Konto wiederherzustellen. Später kannst du optional zulassen, dass Personen dich anhand dieser E-Mail-Adresse entdecken. Weiter - Lege Telefonnummer fest Lege eine Telefonnummer fest, damit Personen dich anhand dieser entdecken kÃļnnen. Bitte verwende das internationale Format. Weiter - Weiter - Internationale Telefonnummern mÃŧssen mit \'+\' beginnen Die Telefonnummer scheint ungÃŧltig zu sein. Bitte prÃŧfen - Anmelden bei %1$s Benutzername Weiter @@ -1923,14 +1570,11 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Bitte lÃļse das Captcha Veralteter Home-Server Auf diesem Home-Server läuft eine zu alte Version, um eine Verbindung herzustellen. Bitten deine Home-Server-Administration um ein Upgrade. - Es wurden zu viele Anfragen gesendet. Versuche es erneut in %1$d Sekundeâ€Ļ Es wurden zu viele Anfragen gesendet. Versuche es erneut in %1$d Sekundenâ€Ļ - Gesehen von - Du bist abgemeldet Dies kann verschiedene GrÃŧnde haben: \n @@ -1940,7 +1584,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine \n \nâ€ĸ Die Administration deines Servers hat deinen Zugriff aus SicherheitsgrÃŧnden ungÃŧltig gemacht. Melde dich erneut an - Du bist abgemeldet Anmelden Deine Home-Server-Administration (%1$s) hat dich von deinem Konto %2$s (%3$s) abgemeldet. @@ -1952,7 +1595,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine \n \nDeaktiviere diese Option, wenn dieses Gerät nicht mehr verwendet wird oder sich bei einem anderen Konto angemeldet werden soll. Alle Daten lÃļschen - Daten lÃļschen Alle aktuell auf diesem Gerät gespeicherten Daten lÃļschen\? \nMelde dich erneut an, um auf deine Kontodaten und Nachrichten zuzugreifen. @@ -1960,12 +1602,9 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Daten lÃļschen Die aktuelle Sitzung gehÃļrt dem/der Benutzer!n%1$s. Die angegebenen Anmeldeinformationen sind von Benutzer!n %2$s. Dies wird nicht von Element unterstÃŧtzt. \nBitte zuerst die Daten lÃļschen und dann erneut anmelden. - matrix.to-Link fehlerhaft Die Beschreibung ist zu kurz - Initiale Synchronisierungâ€Ļ - Alle meine Sitzungen anzeigen Erweiterte Einstellungen Entwicklungsmodus @@ -1977,26 +1616,19 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Einstellungen Aktuelle Sitzung Andere Sitzungen - Zeigt nur die ersten Ergebnisse, gib mehr Buchstaben einâ€Ļ - Ausfallsicher Element kann häufiger abstÃŧrzen, wenn ein unerwarteter Fehler auftritt - Stellt einer Klartextnachricht ¯\\_(ツ)_/¯ voran - Aktiviere VerschlÃŧsselung Nach der Aktivierung kann die VerschlÃŧsselung nicht deaktiviert werden. - Deine E-Mail-Domain ist nicht berechtigt, sich auf diesem Server zu registrieren - Nicht vertrauenswÃŧrdige Anmeldung Sie stimmen Ãŧberein Sie stimmen nicht Ãŧberein Verifiziere diese/n Benutzer!n, indem du bestätigst, dass diese einzigartigen Emoji in derselben Reihenfolge auf dem Bildschirm deines GegenÃŧbers angezeigt werden. FÃŧr ultimative Sicherheit verwende ein anderes vertrauenswÃŧrdiges Kommunikationsmittel oder mache es persÃļnlich. Suche nach dem grÃŧnen Schild, um sicherzustellen, dass ein/e Benutzer!n vertrauenswÃŧrdig ist. Vertraue allen Benutzer!nnen in einem Raum, um sicherzustellen, dass der Raum sicher ist. - Nicht sicher Eine der folgenden MÃļglichkeiten kann beeinträchtigt sein: \n @@ -2004,12 +1636,10 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine \n - Der Home-Server mit dem dein GegenÃŧber verbunden ist \n - Deine oder die Internetverbindung des GegenÃŧber \n - Dein Gerät oder das Gerät des GegenÃŧber - Video. Bild. Audio Datei - Wartenâ€Ļ %s brach ab Du hast abgebrochen @@ -2017,25 +1647,17 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Du hast akzeptiert Verifizierung gesendet Verifizierung angefragt - - Verifiziere diese Sitzung Manuelle Verifizierung - Ich - Scanne den Code mit dem Gerät des GegenÃŧber fÃŧr eine gegenseitige ÜberprÃŧfung Scanne ihren/seinen Code Kann nicht scannen Wenn ihr nicht am selben Ort seid, vergleicht Emoji stattdessen - Verifizieren via Emoji-Vergleich - Mit Emoji verifizieren Wenn du den obigen Code nicht scannen kannst, verifiziert, indem ihr eine kurze, eindeutige Auswahl an Emoji vergleicht. - QR-Code-Bild - %s verifizieren %s verifiziert Warte auf %sâ€Ļ @@ -2058,52 +1680,37 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Uploads Raum verlassen Verlasse den Raumâ€Ļ - Administratoren Moderierende benutzerdefiniert Eingeladen Nutzer!n - Admin in %1$s Moderation in %1$s Springen & als gelesen markieren - Element kann keine Ereignisse vom Typ \'%1$s\' Element beherrscht keine Nachrichten vom Typ \'%1$s\' Element ist beim verarbeiten des Ereignisinhalts mit der ID \'%1$s\' auf ein Problem gestoßen - Nicht ignorieren - Diese Sitzung kann diese Verifizierung nicht mit deinen anderen Sitzungen teilen. \nDie ÜberprÃŧfung wird lokal gespeichert und in einer zukÃŧnftigen Version der App freigegeben. - Neueste Räume Andere Räume - Sendet die angegebene Nachricht in Regenbogenfarben Sendet das angegebene Emote in Regenbogenfarben - Zeitleiste - Nachrichteneditor - Aktivieren Ende-zu-Ende-VerschlÃŧsselung Einmal aktiviert kann die VerschlÃŧsselung nicht rÃŧckgängig gemacht werden. - VerschlÃŧsselung aktivieren\? Nach der Aktivierung kann die VerschlÃŧsselung fÃŧr einen Raum nicht deaktiviert werden. In einem verschlÃŧsselten Raum gesendete Nachrichten kÃļnnen vom Server nicht gesehen werden, nur von den Teilnehmenden des Raums. Durch die VerschlÃŧsselung funktionieren viele Bots und Bridges mÃļglicherweise nicht ordnungsgemäß. VerschlÃŧsselung aktivieren - Um sicher zu gehen, verifiziere %s, indem ein einmaligen Code ÃŧberprÃŧft wird. Um sicher zu sein, tut dies persÃļnlich oder verwendet einen anderen Kommunikationsweg. - Vergleiche die einzigartigen Emoji und stell sicher, dass sie in derselben Reihenfolge angezeigt werden. Vergleiche den Code mit dem Code auf dem Bildschirm deines GegenÃŧbers. Nachrichten mit diesem GegenÃŧber sind Ende-zu-Ende verschlÃŧsselt und kÃļnnen nicht von Dritten gelesen werden. Deine neue Sitzung ist jetzt verifiziert. Sie hat Zugriff auf deine verschlÃŧsselten Nachrichten, und andere Benutzer!nnen sehen sie als vertrauenswÃŧrdig an. - - Cross-Signing Cross-Signing ist aktiviert \nPrivate SchlÃŧssel auf dem Gerät. @@ -2113,55 +1720,38 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Cross-Signing ist aktiviert \nSchlÃŧssel sind nicht vertrauenswÃŧrdig Cross-Signing ist nicht aktiviert - - Aktive Sitzungen Zeige alle Sitzungen Sitzungen verwalten Diese Sitzung abmelden - Keine kryptografischen Informationen verfÃŧgbar - Diese Sitzung ist fÃŧr sichere NachrichtenÃŧbertragung vertrauenswÃŧrdig, da du sie ÃŧberprÃŧft hast: Verifiziere diese Sitzung, um sie als vertrauenswÃŧrdig zu markieren, und gewähren ihr Zugriff auf verschlÃŧsselte Nachrichten. Wenn du dich nicht bei dieser Sitzung angemeldet hast, ist dein Konto mÃļglicherweise gefährdet: - Eine aktive Sitzung %d aktive Sitzungen - Verifiziere diese Sitzung Andere Benutzer!nnen vertrauen ihr mÃļglicherweise nicht Vollständige Sicherheit - Nutze eine vorhandene Sitzung um diese Sitzung zu verifizieren und ihr Zugriff auf verschlÃŧsselte Nachrichten zu gewähren. - - Verifizieren Verifiziert Warnung - Sitzungen konnten nicht abgerufen werden Sitzungen Vertraut Nicht vertraut - Diese Sitzung ist fÃŧr sichere NachrichtenÃŧbertragung vertrauenswÃŧrdig, weil %1$s (%2$s) sie verifiziert hat: %1$s (%2$s) hat sich in einer neuen Sitzung angemeldet: Bis diese/r Benutzer!n dieser Sitzung vertraut, werden an und von ihr/ihm gesendete Nachrichten mit Warnungen gekennzeichnet. Alternativ kannst du dies manuell ÃŧberprÃŧfen. - - Initialisiere Cross-Signing SchlÃŧssel zurÃŧcksetzen - QR-Code - Fast geschaft! Zeigt %s dasselbe Schild an\? Ja Nein - Verbindung zum Server wurde unterbrochen - Entwicklungswerkzeuge Kontodaten @@ -2176,52 +1766,38 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Erstellt eine einfache Umfrage Nutze eine Wiederherstellungsmethode Wenn du auf keine existierende Sitzung zugreifen kannst - Neue Anmeldung - Kann keine Geheimnisse im Speicher finden Gib die geheime Speicherpassphrase ein Warnung: Du solltest nur von einem vertrauenswÃŧrdigen Gerät auf den geheimen Speicher zugreifen - Entfernenâ€Ļ MÃļchtest du diesen Anhang an %1$s senden\? Sende Bild in OriginalgrÃļße Sende Bilder in OriginalgrÃļße - Entfernen bestätigen MÃļchtest du dieses Ereignis wirklich entfernen (lÃļschen)\? Beachte, dass beim LÃļschen eines Raumnamens oder einer Themenänderung die Änderung rÃŧckgängig gemacht werden kann. Grund hinzufÃŧgen Grund fÃŧr das Editieren - Ereignis gelÃļscht von Benutzer!n, Grund: %1$s Ereignis vom Raumadministration moderiert, Grund: %1$s - SchlÃŧssel sind bereits aktuell! - Spoiler Benutzerdefiniert (%1$d) in %2$s - Element Android - SchlÃŧsselanforderungen - Schalte den verschlÃŧsselten Nachrichtenverlauf frei - Neu laden - Neue Anmeldung. Warst du das\? Tippe fÃŧr eine ÜberprÃŧfung & Verifikation Benutze diese Sitzung um deine neue zu verfizieren, damit sie auf verschlÃŧsselte Nachrichten zugreifen kann. Das war ich nicht Dein Account ist mÃļglicherweise komprimittiert - Wenn du abbrichst, wirst du auf diesem Gerät keine verschlÃŧsselten Nachrichten lesen kÃļnnen, und andere Benutzer werden ihm nicht vertrauen Wenn du abbrichst, wirst du auf deinem neuen Gerät keine verschlÃŧsselten Nachrichten lesen kÃļnnen, und andere Benutzer werden ihm nicht vertrauen Du wirst %1$s (%2$s) nicht verifizieren, wenn du jetzt abbrichst. Beginne in deren Nutzerprofil erneut. - Eines der folgenden kÃļnnte kom­pro­mit­tie­rt sein: \n \n- Dein Passwort @@ -2230,29 +1806,20 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine \n- Die Internetverbindung, die von den Geräten genutzt wird \n \nWir empfehlen dir dein Passwort & WiederherstellungsschlÃŧssel in den Einstellungen sofort zu ändern. - Verifiziere deine Geräte in den Einstellungen. Verifizierung abgebrochen - Generiere einen NachrichtenschlÃŧssel - Bestätige %s - Gibe dein %s ein um fortzufahren. - Gib deine %s fÃŧr eine Bestätigung erneut ein. Benutze dein Accountpasswort nicht mehrfach. - - Dies kÃļnnte einige Sekunden dauern, gedulde dich bitte. Wiederherstellung einrichten. Dein WiederherstellungsschlÃŧssel Geschafft! Bewahre ihn sicher auf Abschließen - Benutze diesen %1$s als Sicherheit fÃŧr den Fall, dass du deine %2$s vergisst. - VerÃļffentliche erstellte IdentitätsschlÃŧssel Generiere sicheren SchlÃŧssel von der Passphrase Definiere SSSS StandardschlÃŧssel @@ -2260,65 +1827,46 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Synchronisiere BenutzerschlÃŧssel Synchronisiere selbstsignierenden SchlÃŧssel Richte SchlÃŧsselbackup ein - - Deine %2$s & %1$s sind nun eingerichtet. \n \nBewahre sie sicher auf! Du wirst sie benÃļtigen, um verschlÃŧsselte Nachrichten und sichere Informationen freizuschalten, wenn du alle deine aktive Sitzungen verlierst. - Speichere ihn auf einem USB-Stick oder auf einem Sicherungslaufwerk Import der SchlÃŧssel fehlgeschlagen - Benachrichtigungskonfiguration Nachrichten, die @raum enthalten VerschlÃŧsselte Nachrichten in Gruppenchats Setze die Benachrichtigungspräferenz abhängig vom Ereignistyp - Sendet eine Nachricht als einfachen Text, ohne sie als Markdown zu interpretieren - Inkorrekter Benutzername und/oder Passwort. Das eingegebene Passwort beginnt oder endet mit Leerzeichen, bitte kontrolliere es. - NachrichtenschlÃŧssel Kontopasswort - Wiederherstellungs-Passphrase Druck es aus und speichere es an einem sicheren Ort Kopier es in deinen persÃļnlichen Cloud-Speicher - VerschlÃŧsselung ist nicht aktiviert Dies kann nicht von einem mobilen Gerät erfolgen - Wenn Räume verbessert werden VerschlÃŧsselung aktiviert Nachrichten in diesem Raum sind Ende-zu-Ende verschlÃŧsselt. Erfahre mehr & verifiziere Benutzer in deren Profil. Die VerschlÃŧsselung in diesem Raum wird nicht unterstÃŧtzt - Warte auf %sâ€Ļ - %s setzen Fehlerbehebung %s hat den Raum erstellt und konfiguriert. - Fast geschafft! Zeigt das andere Gerät das gleiche Schild an\? Fast geschafft! Warte auf Bestätigungâ€Ļ VerschlÃŧsselte Nachrichten in 1:1 Chats Nachrichtâ€Ļ - Verifiziere dich & andere, um eure Chats zu schÃŧtzen - Gib zum Fortfahren deinen %s ein Datei benutzen - Dies ist kein gÃŧltiger WiederherstellungsschlÃŧssel Bitte gib deinen WiederherstellungsschlÃŧssel ein - VerschlÃŧsselte Nachrichten und Verifizierungen mit einer %s absichern und entsperren. Das setzen eines Wiederherstellungspassworts ermÃļglicht das sichern & entsperren von verschlÃŧsselten Nachrichten und Verifizierungen. \n \nWenn du kein Nachrichtenpasswort setzen willst, erzeuge stattdessen einen NachrichtenschlÃŧssel. Das setzen eines Wiederherstellungspassworts ermÃļglicht das sichern & entsperren von verschlÃŧsselten Nachrichten und Verifizierungen. - - VerschlÃŧsselungsupgrade verfÃŧgbar %s eingeben Wiederherstellungspasswort @@ -2330,19 +1878,15 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Generiere SSSS SchlÃŧssel aus dem WiederherstellungsschlÃŧssel Speichere SchlÃŧsselbackup SchlÃŧssel in SSSS %1$s (%2$s) - Gib dein Passwort fÃŧr das SchlÃŧsselbackup ein, um fortzufahren. nutze deinen SchlÃŧsselbackup WiederherstellungsschlÃŧssel Wenn du dein SchlÃŧsselbackup Passwort nicht weißt, kannst du %s. SchlÃŧsselbackup WiederherstellungsschlÃŧssel - Verhindere Screenshots innerhalb der Anwendung Das Aktivieren dieser Einstellung setzt das FLAG_SECURE in allen Aktivitäten. Starte die Anwendung neu, damit die Änderung wirksam wird. - Datei wurde der Galerie hinzugefÃŧgt Datei konnte nicht zur Galerie hinzugefÃŧgt werden Neues Benutzerpasswort festlegenâ€Ļ - Nutze die neueste Version von Element auf deinen anderen Geräten, Element Web, Element Desktop, Element iOS, Element fÃŧr Android oder einen anderen cross-signing fähigen Matrix client Element Web \nElement Desktop @@ -2357,30 +1901,25 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Wähle deinen WiederherstellungsschÃŧssel, gib ihn ein oder fÃŧge ihn aus der Zwischenablage ein Sicherung konnte mit diesem WiederherstellungsschlÃŧssel nicht entschlÃŧsselt werden. Bitte stelle sicher, dass du den korrekten WiederherstellungsschlÃŧssel eingegeben hast. Konnte nicht auf gesicherten Speicher zugreifen - UnverschlÃŧsselt VerschlÃŧsselt von einem unbekannten Gerät ÜberprÃŧfe, wo du angemeldet bist Verifiziere alle deine Sitzungen, um sicherzustellen, dass dein Konto & deine Nachrichten sicher sind Bestätige neue Anmeldung zu deinem Konto: %1$s - Verifiziere manuell mit einem Text Verifiziere Anmeldung Verifiziere interaktiv mit Emojis Bestätige deine Identität, indem du diesen Login von einer deiner anderen Sitzungen verifizierst, um Zugriff auf deine verschlÃŧsselten Nachrichten zu erhalten. Als vertraut markieren - Bitte wähle einen Benutzernamen. Bitte wähle ein Passwort. ÜberprÃŧfe diesen Link genau Dieser Link %1$s bringt dich zu einer anderen Seite: %2$s. \n \nWillst du wirklich fortfahren\? - Konnte Direktnachricht nicht erzeugen. PrÃŧfe die Nutzer, die du einladen willst und versuche es erneut. %1$s: %2$s %1$s: %2$s %3$s - Nutzer!n hinzufÃŧgen EINLADEN Benutzer werden eingeladenâ€Ļ @@ -2392,20 +1931,15 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Einladungen gesendet an %1$s und %2$d weitere Benutzer Wir konnten den Benutzer nicht einladen. Bitte ÃŧberprÃŧfe den Benutzernamen, welchen du einladen mÃļchtest und versuche es erneut. - Pause Kopieren Benachrichtigungen Element-Anruf fehlgeschlagen Abspielen Ablehnen - - Erfolg - Echtzeitverbindung konnte nicht hergestellt werden. \nBitte den/die Administrator/in deines Home-Servers, einen TURN-Server so zu konfigurieren, dass Anrufe zuverlässig funktionieren. - Wähle Audiogerät aus Telefonie Lautsprecher @@ -2416,18 +1950,14 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Hintere Kamera Deaktiviere HD-Qualität Aktiviere HD-Qualität - SSL-Fehler: Die Identität des GegenÃŧber ist noch nicht verifiziert. SSL Fehler. Aktiver Anruf (%s) Zum Anruf zurÃŧckkehren - Einladung zurÃŧckziehen MÃļchtest du dich zurÃŧckstufen\? Du kannst die ZurÃŧckstufung nicht rÃŧckgängig machen und du wirst die Rechte nur mit einem anderen berechtigten Benutzer im Raum zurÃŧckerlangen kÃļnnen. ZurÃŧckstufen - - Benutzer ignorieren Durch das Ignorieren werden fÃŧr dich alle Nachrichten des Nutzers ausgeblendet. \nDu kannst die Aktion jederzeit in den allgemeinen Einstellungen rÃŧckgängig machen. @@ -2443,7 +1973,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Grund fÃŧr den Bann Bann des Benutzers aufheben Das Aufheben des Bannes wird dem Benutzer erlauben dem Raum wieder beizutreten. - Sicheres Backup Verwalten Backup einrichten @@ -2452,49 +1981,36 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Absicherung um den Zugriffsverlust auf verschlÃŧsselte Nachrichten & Daten zu verhindern, indem die SchlÃŧssel fÃŧr die EntschlÃŧsselung auf dem Server gesichert werden. Generiere einen neuen SicherheitsschlÃŧssel oder setze eine neue Sicherheitspassphrase fÃŧr dein existierendes Backup. Dieses wird deinen aktuellen SchlÃŧssel oder deine aktuelle Phrase ersetzen. - Integrationen sind deaktiviert Aktiviere \'Erlaube Integrationen\' in den Einstellungen um dies zu machen. - %d gebannter Benutzer %d gebannte Benutzer - SchlÃŧssel erfolgreich exportiert - ANSICHT Aktive Widgets - - Der SicherheitsschlÃŧssel ist gespeichert worden. - Backup Absicherung gegen den Zugriffsverlust auf verschlÃŧsselte Nachrichten & Daten - Richte Backup ein - Nachricht gelÃļscht Zeige gelÃļschte Nachrichten Zeige einen Platzhalter fÃŧr gelÃļschte Nachrichten Dedizierten Tab fÃŧr ungelesene Nachrichten zur Hauptansicht hinzufÃŧgen - Wir haben dir eine Bestätigungsmail an %s gesendet. Bitte prÃŧfe deine E-Mails und klicke auf den Bestätigungslink Der Verifizierungscode ist nicht korrekt. - MEDIEN Es gibt in diesem Raum keine Medien DATEIEN %1$s um %2$s Es gibt in diesem Raum keine Dateien - FÃŧge zu Favoriten hinzu Entferne von Favoriten Du hast keine Änderungen gemacht Du hast den Raum fÃŧr alle, die den Link kennen, zugänglich gemacht. Du hast den Raumbeitritt auf Einladungen beschränkt. Gib die Adresse des Servers ein, den du benutzen mÃļchtest - Wenn du deine Matrixkennung und dein Passwort weißt, kannst du alternativ diese Methode nutzen: Einloggen mit Matrix-ID Einloggen mit Matrix-ID @@ -2503,30 +2019,22 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Wenn du dein Passwort nicht weißt, gehe zurÃŧck um es zurÃŧcksetzen zu lassen. Dies ist keine gÃŧltige Benutzerkennung. Erwartetes Format: \'@benutzer:homeserver.org\' Es konnte kein gÃŧltiger Home-Server gefunden werden. Bitte prÃŧfe deine Kennung - Sticker - Administrative Aktionen Standard in %1$s Dein Serveradministrator hat in privaten Räumen & Direktnachrichten Ende-zu-Ende VerschlÃŧsselung standardmäßig deaktiviert. Flugzeugmodus ist aktiv - Gib eine Sicherheitsphrase ein, die nur du kennst. Diese wird benutzt um deine Daten auf dem Server geheim zu halten. - Wenn du jetzt abbrichst und den Zugriff zu deinen Sitzungen verlierst, kannst du verschlÃŧsselte Nachrichten & Daten verlieren. \n \nDu kannst auch ein Backup einrichten & deine SchlÃŧssel in den Einstellungen verwalten. - Du hast den Raum erstellt und konfiguriert. - Dieser Account ist deaktiviert worden. - Aktiviere Cross Signing Konnte Mediendatei nicht speichern Aktuelle Sprache Andere verfÃŧgbare Sprachen Lade verfÃŧgbare Sprachenâ€Ļ - Öffne AGBs von %s Trenne Verbingung zu Identitätsserver %s\? Dieser Identitätsserver ist veraltet. Element unterstÃŧtzt nur API V2. @@ -2536,7 +2044,6 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Deiner Privatssphäre wegen unterstÃŧtzt Element nur das Senden gehashter Emailaddressen und Telefonnummern. Die Assoziierung ist fehlgeschlagen. FÃŧr diese Kennung gibt es aktuell keine Assoziierung. - Dein Homeserver (%1$s) schlägt %2$s als Identitätsserver vor Benutze %1$s Alternativ kannst du die URL eines beliebigen anderen Identitätsservers angeben @@ -2549,31 +2056,24 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Aktiviere Mikrophon Stoppe Kamera Starte Kamera - Richte Backup ein - Backup Absicherung um den Zugriffsverlust auf verschlÃŧsselte Nachrichten & Daten zu verhindern, indem die SchlÃŧssel fÃŧr die EntschlÃŧsselung auf dem Server gesichert werden. Benutze einen SicherheitsschlÃŧssel Generiere einen SicherheitsschlÃŧssel, welcher z.B. in einem Passwortmanager oder in einem Tresor sicher aufbewahrt werden sollte. Benutze Sicherheitsphrase Gib eine geheime Phrase ein, die nur du kennst und generiere einen SchlÃŧssel als Backup. - Speichere deinen SicherheitsschlÃŧssel Bewahre deinen SicherheitsschlÃŧssel irgendwo sicher auf, wie z.B. in einem Passwortmanager oder in einem Tresor. - Setze Sicherheitsphrase Gib eine Sicherheitsphrase ein, welche nur du kennst und deine Daten auf dem Server geheim halten soll. Sicherheitsphrase Gib deine Sicherheitsphrase zur Bestätigung erneut ein. - Speichere deinen SicherheitsschlÃŧssel Bewahre deinen SicherheitsschlÃŧssel irgendwo sicher auf, wie z.B. in einem Passwortmanager oder in einem Tresor. - Raumname Thema Du hast die Raumeinstellungen erfolgreich geändert - Du kannst auf diese Nachricht nicht zugreifen Warte auf diese Nachricht. Das kÃļnnte eine Weile dauern Kann nicht entschlÃŧsselt werden @@ -2582,17 +2082,12 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Du kannst auf diese Nachricht nicht zugreifen, weil der Sender deiner Sitzung nicht vertraut Du kannst auf diese Nachricht nicht zugreifen, weil der Sender absichtlich die SchlÃŧssel nicht gesendet hat Warte auf VerschlÃŧsselungshistorie - Riot heißt nun Element! Wir sind begeistert unsere Namensänderung mitteilen zu kÃļnnen! Deine App ist auf dem neusten Stand und du bist mit deinem Account angemeldet. VERSTANDEN MEHR ERFAHREN - element - - Speichere WiederherstellungsschlÃŧssel in - FÃŧge Ãŧber Kontaktliste hinzu Deine Kontaktliste ist leer Kontaktliste @@ -2600,13 +2095,10 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Ermittle deine Kontakteâ€Ļ Deine Kontaktliste ist leer Kontaktliste - Einladung zurÃŧcknehmen Einladung zu %1$s zurÃŧcknehmen\? - Gebannt von %1$s Aufheben des Banns fehlgeschlagen - Push-Benachrichtigungen sind deaktiviert Gehe zu deinen Einstellungen um Push-Benachrichtigungen zu aktivieren Nutze eine PIN fÃŧr mehr Sicherheit @@ -2636,13 +2128,11 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine %1$d/%2$d SchlÃŧssel erfolgreich importiert. %1$d/%2$d SchlÃŧssel erfolgreich importiert. - Verwalte Integrationen Keine aktiven Widgets Der Raum wurde erstellt, aber manche Einladungen wurden aus folgendem Grund nicht versendet: \n \n%s - Von %1$s, %2$s und %3$d anderem gelesen Von %1$s, %2$s und %3$d anderen gelesen @@ -2660,22 +2150,18 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Telefonnummern %s entfernen\? Stelle sicher, dass du auf den Link in der E-Mail geklickt hast, die wir dir gesendet haben. - E-Mail-Adressen und Telefonnummern Verwalte E-Mails und Telefonnummern, die mit deinem Matrix-Konto verknÃŧpft sind - Code Verwende das internationale Format (Telefonnummer muss mit \'+\' beginnen) Bestätige deine Identität, indem du dieses Login verifizierst, um Zugriff auf verschlÃŧsselte Nachrichten zu erhalten. Leider ist dieser Vorgang fÃŧr Konten, die Ãŧber Single Sign-On verbunden sind, noch nicht mÃļglich. - Raum, indem du gebannt wurdest, kann nicht geÃļffnet werden. Raum kann nicht gefunden werden. Stelle sicher, dass er existiert. %d Sekunde %d Sekunden - Zeige Status-Ereignisse der Raum-Mitglieder Bezieht Einladungs-/Beitritts-/Verlassen-/Entfernen-/Verbannen-Ereignisse und Avatar-/Anzeigenamen-Wechsel mit ein. Umfrage @@ -2684,9 +2170,7 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine 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. - - + \ No newline at end of file From c1ea4bc1a73301f932cfdc742498be9ec9765722 Mon Sep 17 00:00:00 2001 From: ginnyTheCat Date: Wed, 14 Oct 2020 09:03:22 +0000 Subject: [PATCH 251/278] Translated using Weblate (German) Currently translated at 96.5% (1852 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/de/ --- vector/src/main/res/values-de/strings.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index fe624cb8c9..1615b5f9d4 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2173,4 +2173,5 @@ Verwahre deinen WiederherstellungsschlÃŧssel an einem sehr sicheren Ort wie eine Kontodaten vom Typ %1$s lÃļschen\? \n \nVorsicht! Es kann zu unerwartetem Verhalten fÃŧhren. + ZurÃŧcksetzen \ No newline at end of file From 284babfeaaace6fd39e6f69d12d176c724292df6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Wed, 14 Oct 2020 21:01:25 +0000 Subject: [PATCH 252/278] Translated using Weblate (Estonian) Currently translated at 66.6% (2 of 3 strings) Translation: Element Android/Element Android Store Translate-URL: https://translate.element.io/projects/element-android/element-store/et/ --- fastlane/metadata/android/et/short_description.txt | 1 + fastlane/metadata/android/et/title.txt | 1 + 2 files changed, 2 insertions(+) create mode 100644 fastlane/metadata/android/et/short_description.txt create mode 100644 fastlane/metadata/android/et/title.txt diff --git a/fastlane/metadata/android/et/short_description.txt b/fastlane/metadata/android/et/short_description.txt new file mode 100644 index 0000000000..4075c1f7cf --- /dev/null +++ b/fastlane/metadata/android/et/short_description.txt @@ -0,0 +1 @@ +Turvalised ning hajutatud vestlused ja VoIP-kÃĩned. Sinu suhtlus on Ãŧliturvaline. diff --git a/fastlane/metadata/android/et/title.txt b/fastlane/metadata/android/et/title.txt new file mode 100644 index 0000000000..f74f9ff18f --- /dev/null +++ b/fastlane/metadata/android/et/title.txt @@ -0,0 +1 @@ +Element (varem Riot.im) From e7a86793831613036ff0ebf6aed624a34f19ba84 Mon Sep 17 00:00:00 2001 From: random Date: Thu, 15 Oct 2020 08:18:39 +0000 Subject: [PATCH 253/278] Translated using Weblate (Italian) Currently translated at 100.0% (190 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/it/ --- .../src/main/res/values-it/strings.xml | 66 +++++++------------ 1 file changed, 24 insertions(+), 42 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-it/strings.xml b/matrix-sdk-android/src/main/res/values-it/strings.xml index cf081752a2..7aa2169b1f 100644 --- a/matrix-sdk-android/src/main/res/values-it/strings.xml +++ b/matrix-sdk-android/src/main/res/values-it/strings.xml @@ -1,8 +1,7 @@ - + %1$s: %2$s %1$s ha inviato un\'immagine. - Invito di %s %1$s ha invitato %2$s %1$s ti ha invitato @@ -30,55 +29,40 @@ chiunque. sconosciuto (%s). %1$s ha attivato la crittografia end-to-end (%2$s) - %1$s ha richiesto una conferenza VoIP Conferenza VoIP iniziata Conferenza VoIP terminata - (anche l\'avatar è cambiato) %1$s ha rimosso il nome della stanza %1$s ha rimosso l\'argomento della stanza %1$s ha aggiornato il profilo %2$s %1$s ha mandato un invito a %2$s per unirsi alla stanza %1$s ha accettato l\'invito per %2$s - ** Impossibile decriptare: %s ** Il dispositivo del mittente non ci ha inviato le chiavi per questo messaggio. - Impossibile revisionare Impossibile inviare il messaggio - Invio dell\'immagine fallito - Errore di rete Errore di Matrix - Al momento non è possibile rientrare in una stanza vuota. - Messaggio criptato - Indirizzo email Numero di telefono - %1$s ha inviato un adesivo. - Invito da %s Invito nella stanza %1$s e %2$s Stanza vuota - %1$s e 1 altro %1$s e %2$d altri - - Messaggio rimosso Messaggio rimosso da %1$s Messaggio rimosso [motivo: %1$s] Messaggio rimosso da %1$s [motivo: %2$s] - Sync iniziale: \nImportazione accountâ€Ļ Sync iniziale: @@ -95,12 +79,9 @@ \nImportazione comunità Sync iniziale: \nImportazione dati account - %s ha aggiornato questa stanza. - Invio messaggio in corso â€Ļ Cancella la coda di invio - %1$s ha revocato l\'invito a %2$s di unirsi alla stanza Invito di %1$s. Motivo: %2$s %1$s ha invitato %2$s. Motivo: %3$s @@ -115,34 +96,25 @@ %1$s ha revocato l\'invito a %2$s di unirsi alla stanza. Motivo: %3$s %1$s ha accettato l\'invito per %2$s. Motivo: %3$s %1$s ha rifiutato l\'invito di %2$s. Motivo: %3$s - %1$s ha aggiunto %2$s come indirizzo per questa stanza. %1$s ha aggiunto %2$s come indirizzi per questa stanza. - %1$s ha rimosso %2$s come indirizzo per questa stanza. %1$s ha rimosso %3$s come indirizzi per questa stanza. - %1$s ha aggiunto %2$s e rimosso %3$s come indirizzi per questa stanza. - %1$s ha impostato l\'indirizzo principale per questa stanza a %2$s. %1$s ha rimosso l\'indirizzo principale per questa stanza. - %1$s ha permesso l\'accesso alla stanza per gli ospiti. %1$s ha impedito l\'accesso alla stanza per gli ospiti. - %1$s ha attivato la cifratura end-to-end. %1$s ha attivato la cifratura end-to-end (algoritmo %2$s non riconosciuto). - %s sta chiedendo di verificare la tua chiave, ma il tuo client non supporta la verifica in-chat. Dovrai usare il metodo di verifica obsoleto per verificare le chiavi. - %1$s ha creato la stanza Hai inviato un\'immagine. Hai inviato un adesivo. - Il tuo invito Hai creato la stanza Hai invitato %1$s @@ -170,7 +142,6 @@ Hai reso visibile la futura cronologia della stanza a %1$s Hai attivato la crittografia end-to-end (%1$s) Hai aggiornato questa stanza. - Hai richiesto una conferenza VoIP Hai rimosso il nome della stanza Hai rimosso l\'argomento della stanza @@ -180,24 +151,20 @@ Hai mandato un invito a %1$s a unirsi alla stanza Hai revocato l\'invito per %1$s a unirsi alla stanza Hai accettato l\'invito per %1$s - %1$s ha aggiunto il widget %2$s Hai aggiunto il widget %1$s %1$s ha rimosso il widget %2$s Hai rimosso il widget %1$s %1$s ha modificato il widget %2$s Hai modificato il widget %1$s - Amministratore Moderatore Predefinito Personalizzato (%1$d) Personalizzato - Hai cambiato il livello di potere di %1$s. %1$s ha cambiato il livello di potere di %2$s. %1$s da %2$s a %3$s - Il tuo invito. Motivo: %1$s Hai invitato %1$s. Motivo: %2$s Sei entrato nella stanza. Motivo: %1$s @@ -210,26 +177,41 @@ Hai revocato l\'invito a %1$s a unirsi alla stanza. Motivo: %2$s Hai accettato l\'invito per %1$s. Motivo: %2$s Hai ritirato l\'invito di %2$s. Motivo: %2$s - Hai aggiunto %1$s come indirizzo per questa stanza. Hai aggiunto %1$s come indirizzi per questa stanza. - Hai rimosso %1$s come indirizzo per questa stanza. Hai rimosso %2$s come indirizzi per questa stanza. - Hai aggiunto %1$s e rimosso %2$s come indirizzi per questa stanza. - Hai impostato l\'indirizzo principale per questa stanza a %1$s. Hai rimosso l\'indirizzo principale per questa stanza. - Hai permesso l\'accesso alla stanza per gli ospiti. Hai impedito l\'accesso alla stanza per gli ospiti. - Hai attivato la crittografia end-to-end. Hai attivato la crittografia end-to-end (algoritmo %1$s sconosciuto). - - + Hai impedito l\'accesso alla stanza agli ospiti. + %1$s ha impedito l\'accesso alla stanza agli ospiti. + Hai permesso l\'accesso agli ospiti. + %1$s ha permesso l\'accesso agli ospiti. + Sei entrato. Motivo: %1$s + Sei uscito. Motivo: %1$s + %1$s è uscito. Motivo: %2$s + %1$s è entrato. Motivo: %2$s + Hai revocato l\'invito per %1$s + %1$s ha revocato l\'invito per %2$s + Hai invitato %1$s + %1$s ha invitato %2$s + Hai aggiornato la stanza. + %s ha aggiornato la stanza. + Hai reso visibili i messaggi futuri a %1$s + %1$s ha reso visibili i messaggi futuri a %2$s + Sei uscito dalla stanza + %1$s è uscito dalla stanza + Sei entrato + %1$s è entrato + Hai creato la discussione + %1$s ha creato la discussione + \ No newline at end of file From c1f08e8f225693c969282987b1f3f3b505245b79 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Tue, 13 Oct 2020 22:50:29 +0000 Subject: [PATCH 254/278] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (190 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/pt_BR/ --- .../src/main/res/values-pt-rBR/strings.xml | 64 +++++++------------ 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml index 52b935c097..4e62a21c0e 100644 --- a/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml +++ b/matrix-sdk-android/src/main/res/values-pt-rBR/strings.xml @@ -1,9 +1,7 @@ - + - %1$s: %2$s %1$s enviou uma foto. - convite de %s %1$s convidou %2$s %1$s convidou vocÃĒ @@ -31,64 +29,45 @@ qualquer pessoa. desconhecido (%s). %1$s ativou a criptografia de ponta a ponta (%2$s) - %1$s deseja iniciar uma chamada em grupo Chamada em grupo iniciada Chamada em grupo encerrada - (a foto de perfil tambÊm foi alterada) %1$s removeu o nome da sala %1$s removeu a descriçÃŖo da sala %1$s atualizou o perfil %2$s %1$s enviou um convite para %2$s entrar na sala %1$s aceitou o convite para %2$s - ** NÃŖo foi possível descriptografar: %s ** O aparelho do remetente nÃŖo nos enviou as chaves para esta mensagem. - NÃŖo foi possível redigir NÃŖo foi possível enviar a mensagem - O envio da imagem falhou - Erro de conexÃŖo à internet Erro no servidor Matrix - - - - Atualmente, nÃŖo Ê possível entrar novamente em uma sala vazia. - Mensagem criptografada - Endereço de e-mail NÃēmero de telefone - - %1$s enviou uma figurinha. - Convite de %s Convite para sala %1$s e %2$s Sala vazia - %1$s e 1 outro %1$s e %2$d outros - - VocÃĒ enviou uma foto. VocÃĒ enviou uma figurinha. - Seu convite %1$s criou a sala VocÃĒ criou a sala @@ -118,7 +97,6 @@ VocÃĒ ativou a criptografia de ponta a ponta (%1$s) %s atualizou esta sala. VocÃĒ atualizou esta sala. - VocÃĒ solicitou uma chamada em grupo VocÃĒ removeu o nome da sala VocÃĒ removeu a descriçÃŖo da sala @@ -133,24 +111,20 @@ %1$s cancelou o convite a %2$s para entrar na sala VocÃĒ cancelou o convite a %1$s para entrar na sala VocÃĒ aceitou o convite para %1$s - %1$s adicionou o widget %2$s VocÃĒ adicionou o widget %1$s %1$s removeu o widget %2$s VocÃĒ removeu o widget %1$s %1$s editou o widget %2$s VocÃĒ editou o widget %1$s - Administrador Moderador PadrÃŖo Personalizado (%1$d) Personalizado - VocÃĒ alterou o nível de permissÃŖo de %1$s. %1$s alterou o nível de permissÃŖo de %2$s. %1$s de %2$s para %3$s - Primeira sincronizaçÃŖo: \nImportando a contaâ€Ļ Primeira sincronizaçÃŖo: @@ -167,10 +141,8 @@ \nImportando as comunidades Primeira sincronizaçÃŖo: \nImportando os dados da conta - Enviando mensagemâ€Ļ Limpar a fila de envio - Convite de %1$s. Motivo: %2$s O seu convite. Motivo: %1$s %1$s convidou %2$s. Motivo: %3$s @@ -196,45 +168,57 @@ VocÃĒ aceitou o convite para %1$s. Motivo: %2$s %1$s desfez o convite de %2$s. Motivo: %3$s VocÃĒ desfez o convite de %1$s. Motivo: %2$s - %1$s adicionou %2$s como um endereço desta sala. %1$s adicionou %2$s como endereços desta sala. - VocÃĒ adicionou %1$s como um endereço desta sala. VocÃĒ adicionou %1$s como endereços desta sala. - %1$s removeu %2$s como um endereço desta sala. %1$s removeu %3$s como endereços desta sala. - VocÃĒ removeu %1$s como um endereço desta sala. VocÃĒ removeu %2$s como endereços desta sala. - %1$s adicionou %2$s e removeu %3$s como endereços desta sala. VocÃĒ adicionou %1$s e removeu %2$s como endereços desta sala. - %1$s definiu o endereço principal desta sala como %2$s. VocÃĒ definiu o endereço principal desta sala como %1$s. %1$s removeu o endereço principal desta sala. VocÃĒ removeu o endereço principal desta sala. - %1$s permitiu que convidados entrem na sala. VocÃĒ permitiu que convidados entrem na sala. %1$s impediu que convidados entrassem na sala. VocÃĒ impediu que convidados entrassem na sala. - %1$s ativou a criptografia de ponta a ponta. VocÃĒ ativou a criptografia de ponta a ponta. %1$s ativou a criptografia de ponta a ponta (algoritmo nÃŖo reconhecido %2$s). VocÃĒ ativou a criptografia de ponta a ponta (algoritmo nÃŖo reconhecido %1$s). - %s deseja confirmar a sua chave, mas o seu aplicativo nÃŖo suporta a confirmaçÃŖo da chave da conversa. VocÃĒ precisarÃĄ usar a confirmaçÃŖo tradicional de chaves para confirmar chaves. - - + VocÃĒ impediu que desconhecidos entrem na sala. + %1$s impediu que desconhecidos entrem na sala. + VocÃĒ permitiu que desconhecidos entrem aqui. + %1$s permitiu que desconhecidos entrem aqui. + VocÃĒ saiu. Motivo: %1$s + %1$s saiu. Motivo: %2$s + VocÃĒ entrou. Motivo: %1$s + %1$s entrou. Motivo: %2$s + VocÃĒ cancelou o convite para %1$s + %1$s cancelou o convite para %2$s + VocÃĒ convidou %1$s + %1$s convidou %2$s + VocÃĒ atualizou esta sala. + %s atualizou esta sala. + VocÃĒ definiu que as mensagens enviadas a partir do presente momento estarÃŖo disponíveis para %1$s + %1$s definiu que as mensagens enviadas a partir do presente momento estarÃŖo disponíveis para %2$s + VocÃĒ saiu da sala + %1$s saiu da sala + VocÃĒ entrou + %1$s entrou + VocÃĒ criou a sala + %1$s criou a sala + \ No newline at end of file From 98086f1b6bdfb8e8e72d0a565a4f7b9d4d883681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Tue, 13 Oct 2020 04:52:47 +0000 Subject: [PATCH 255/278] Translated using Weblate (Estonian) Currently translated at 100.0% (1918 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/et/ --- vector/src/main/res/values-et/strings.xml | 553 ++++------------------ 1 file changed, 84 insertions(+), 469 deletions(-) diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index 4a7f5ddbed..24acbc8dbc 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -1,20 +1,17 @@ - + et EE Latn - Hele teema Tume teema Must teema Status.im teema - Käivitan teenuse SÃŧnkroniseerinâ€Ļ Kuulan, kas leidub sÃŧndmusi Lärmakad teavitused Vaiksed teavitused - SÃĩnumid Jututuba Seadistused @@ -26,10 +23,8 @@ VÃĩtmete varundus Kasuta vÃĩtmete varundust Verifitseeri sessioon - VÃĩtmete varundus pole veel valmis, oota natukeâ€Ļ KrÃŧptitud sÃĩnum - Kui sa logid nÃŧÃŧd välja, siis sa kaotad ligipääsu kÃĩikidele krÃŧptitud sÃĩnumitele Parasjagu varundan vÃĩtmeid. Kui sa logid nÃŧÃŧd välja, siis sa kaotad ligipääsu kÃĩikidele oma krÃŧptitud sÃĩnumitele. Turvaline vÃĩtmete varundus peaks olema aktiivne kÃĩikides sinu sessioonides, sest see hoiab ära krÃŧptitud sÃĩnumitele ligipääsu kadumise. @@ -39,11 +34,8 @@ Kas sa oled kindel\? Varunda Kui sa enne väljalogimist ei varunda oma vÃĩtmeid, siis sa kaotad ligipääsu oma krÃŧptitud sÃĩnumitele. - Kolmandate osapoolte litsentsid - Laemeâ€Ļ - Sobib TÃŧhista Salvesta @@ -92,7 +84,6 @@ Eira Vaata Ãŧle Keeldu - Välju Tegevused Logi välja @@ -108,27 +99,22 @@ Sulge Kopeeritud lÃĩikelauale LÃŧlita välja - Kinnitus Hoiatus Viga - Kodu Lemmikud Inimesed Jututoad Kogukonnad - Filtreeri jututubasid Filtreeri lemmikuid Filtreeri inimesi Filtreeri jututubasid Filtreeri kogukondasid - Kutsed Vähetähtis SÃŧsteemi hoiatused - Vestlused Kohalik aadressiraamat Kasutajate kataloog @@ -137,20 +123,17 @@ Sa pole Element\'ile andnud ligipääsu kohalikele kontaktidele Tulemusi ei ole Isikutuvastusserver ei ole seadistatud. - Jututoad Jututubade loend Jututube ei leidu Avalikke jututube ei leidu - 1 kasutaja + %d kasutaja %d kasutajat - Kutse Kogukonnad Gruppe ei leidu - Saada logikirjed Saada kokkujooksmise logikirjed Saada ekraanipilt @@ -162,14 +145,11 @@ Ma märkan, et pahameelega raputad oma telefoni. Kas sa tahaksid saata veateate\? See rakendus jooksis viimati kokku. Kas sa tahaksid saata selle kohta veateate\? Veateate saatmiseks raputa väga kÃĩvasti - Veateate saatmine Ãĩnnestus Veateate saatmine ei Ãĩnnestunud (%s) Saatmise kulg (%s%%) - Saada Loetud - Liitu jututoaga Kasutajanimi Loo konto @@ -178,13 +158,10 @@ Koduserveri aadress Isikutuvastusserveri aadress Otsi - Alusta uut vestlust Algata häälkÃĩne Algata videokÃĩne - Edasta häält - Kas oled kindel, et soovid alustada vestlust kasutajaga %s\? Kas oled kindel, et soovid algatada häälkÃĩnet\? Kas oled kindel, et soovid algatada videokÃĩnet\? @@ -194,20 +171,16 @@ \nAlternatiivina vÃĩid sa kasutada avalikku TURN serverit %2$s, kuid see ei pruugi olla sama tÃļÃļkindel ning sa jagad oma IP-aadressi selle serveriga. TURN-serveri kasutamist vÃĩid sa määrata ka seadistustes. Proovi kasutada serverit %s Ära kÃŧsi minult uuesti - Saada faile Saada kleepse Tee foto vÃĩi video Tee foto Tee video - Sul ei ole hetkel Ãŧhtegi kleepsupakki kasutusel. \n \nKas lisame nÃŧÃŧd mÃĩne\? - kasuta rakendustâ€Ļ Vabandust, aga selle tegevuse jaoks ei leidu Ãŧhtegi välist rakendust. - Logi sisse Loo konto Saada @@ -260,7 +233,6 @@ \n \nSa oled välja logitud kÃĩikidest oma seni kasutusel olnud sessioonidest ega saa enam teateid ega sÃĩnumeid. Nende uuesti lugemiseks palun logi igas seadmes tagasi Matrix\'i vÃĩrku. Palun loe läbi ja nÃĩustu koduserveri kasutusjuhendiga: - Serveri aadressi alguses peab olema kas https:// vÃĩi http:// Sisselogimine ei Ãĩnnestu: vÃĩrguÃŧhenduse viga Ei Ãĩnnestu sisse logida @@ -272,7 +244,6 @@ See ei ole toimiv Matrix\'i serveri aadress Sellel aadressil ei leidu koduserverit, palun kontrolli aadressi Ãĩigsust Sinu seade kasutab aegunud versiooni TLS-protokollist ning seal leiduvate turvanÃĩrkuste tÃĩttu ja sinu turvalisuse tagamiseks Ãŧhendust serveriga ei algatata - Vigane kasutajanimi vÃĩi salasÃĩna Vigane JSON Ei sisaldanud korrektset JSON\'it @@ -281,16 +252,12 @@ Esita Peata Loobu - - Kopeeri Õnnestus - Teavitused KÃĩne ebaÃĩnnestus Reaalajas Ãŧhenduse loomine ei Ãĩnnestunud. \nPalu oma koduserveri %@ haldajat, et ta seadistaks kÃĩnede kindlamaks toimimiseks TURN serveri. - Vali heliseade Telefon KÃĩlar @@ -301,51 +268,38 @@ Tagakaamera LÃŧlita kÃĩrglahutusega video välja LÃŧlita kÃĩrglahutusega video sisse - Logi sisse Ãŧhekordse sisselogimise abil SSL-Ãŧhenduse viga. Sisestatud tunnusluba ei ole Ãĩige E-posti teel saadetud linki pole veel klÃĩpsitud - KÃŧsi oma muudest sessioonidest krÃŧptimisvÃĩtmed uuesti. - VÃĩtmete jagamise päring on saadetud. - Päring on saadetud Palun käivita Element mÃĩnes muus seadmes, mis suudab neid sÃĩnumeid dekrÃŧptoda ja seega saata krÃŧptovÃĩtmeid siia sessiooni. - Lugemisteatiste loend - Gruppide loend - - 1 liikmelisuse muutus + %d liikmelisuse muutus %d liikmelisuse muutust - Saada pilt Algses suuruses Suurena Keskmisena Väikesena - Kas katkestame allalaadimise\? Kas katkestame Ãŧleslaadimise\? %d sekundit %1$d min %2$d sek - Eile Täna - Jututoa nimi Jututoa teema - KÃĩned Kasuta saabuvate kÃĩnede jaoks Element\'i vaikimisi helinat Kasuta kÃĩnehÃĩlbustusserverit Saabuva kÃĩne helin Vali helin kÃĩnede jaoks: - KÃĩne VastuvÃĩetud kÃĩne KÃĩne Ãŧhendus on loomiselâ€Ļ @@ -358,14 +312,11 @@ VideokÃĩne on pooleliâ€Ļ Käsilolev kÃĩne (%s) PÃļÃļrdu tagasi kÃĩne juurde - Teine osapool ei vÃĩtnud kÃĩnet vastu. Kaamerat ei Ãĩnnestu kasutusele vÃĩtta kÃĩnele vastati muust seadmest - Tee foto vÃĩi video Video salvestamine ei Ãĩnnestu - Lisateave Ãĩiguste kohta Element vajab Ãĩigusi sinu foto- ja videokataloogide lugemiseks ning manuste salvestamiseks. \n @@ -382,21 +333,17 @@ \n \nKÃĩnede tegemiseks palun anna järgmisel lehel vajalikud Ãĩigused. Vabandust. Kuna vastavaid Ãĩigusi ei olnud, siis toimingut ei saanud teha - Salvestatud Kas salvestame allalaetud failide kausta\? JAH EI Jätka - Eemalda Liitu Eelvaade HÃŧlga - SÃŧnkroniseerinâ€Ļ Mine esimese lugemata sÃĩnumi juurde. - Sa oled kutsutud siia jututuppa %s poolt Kutse saadeti %s e-posti aadressile, aga see ei ole seotud antud kasutajakontoga. \nSa kas peaksid logima sisse teise kontoga vÃĩi lisama selle e-posti aadressi oma kasutajakontole. @@ -409,23 +356,20 @@ VÃĩrreldes selle sertifikaadiga, mida sinu nutiseade seni usaldas, on praegune sertifikaat muutunud. See on VÄGA EBATAVALINE. Me soovitame, et ÄRA NÕUSTU selle uue sertifikaadiga. Senise usaldusväärse sertifikaadi asemel kasutab server nÃŧÃŧd mitteusaldusväärset sertifikaati. See vÃĩib tähendada et haldaja on seda serveris muutnud. Et vÃĩrrelda viimase kehtiva sertifikaadi sÃĩrmejälge, palun vÃĩta haldajaga Ãŧhendust. NÕUSTU sertifikaadiga vaid siis, kui serveri haldaja antud sÃĩrmejälg klapib sellega, mida sa hetkel siin näed. - Jututoa Ãŧksikasjad Inimesed Failid Seadistused - 1 valitud + %d valitud %d valitud Vigane kasutajatunnus. Peaksid kasutama kas e-posti aadressi vÃĩi Ãĩiget Matrix\'i kasutajatunnust vormingus \'@toreinimene:domeen.ee\' KUTSUTUD LIITUNUD - Sellest sisust teatamise pÃĩhjus Katkesta Ãŧleslaadimine Katkesta allalaadimine - Otsi Filtreeri jututoa liikmeid Tulemusi pole @@ -433,7 +377,6 @@ SÕNUMID INIMESED FAILID - LIITU LEMMIKUD JUTUTOAD @@ -444,7 +387,6 @@ Liitu jututoaga Liitu jututoaga Sisesta jututoa tunnus, nimi vÃĩi alias - Sirvi kataloogi Otsevestlus VAATA @@ -457,23 +399,17 @@ Kirjelda oma ettepanekut siin Tänud, ettepaneku saatmine Ãĩnnestus Ettepaneku saatmine ei Ãĩnnestunud (%s) - SÃĩelu vestlustestâ€Ļ Kas sa ei leia seda, mida otsisid\? Loo uus jututuba Saada uus otsesÃĩnum Vaata jututubade loendit - SÃĩelu kasutajanime vÃĩi kasutajatunnuse aluselâ€Ļ - Näita muudatuste ajalugu - Algata uus otsevestlus Loo uus jututuba Kirjeldus on liiga lÃŧhike - Teen andmete esmast sÃŧnkroonimistâ€Ļ - Näita kÃĩiki minu sessioone Lisaseadistused TÃĩuketeavituste kasutuselevÃĩtuks vaata Ãŧle seadistused @@ -490,34 +426,26 @@ PIN-koodi kasutuselt eemaldamiseks korda PIN-koodi Kasuta krÃŧptimist vaid verifitseeritud sessioonides Ära iialgi saada sellest sessioonist krÃŧptitud sÃĩnumeid verifitseerimata sessioonidesse selles jututoas. - Sellel jututoal puuduvad kohalikud aadressid Uus aadress (näiteks #seltskond:matrix.org) - Sellele jututoale ei ole jagatud Ãŧhtegi kogukonna rinnasilti Uus kogukonna tunnus (näiteks +meieseltsing:matrix.org) Vigane kogukonna tunnus \'%s\' ei ole korrektne kogukonna tunnus - - Vigane aliase vorming \'%s\' ei ole lubatud aliase vorming Sel jututoal ei saa olema pÃĩhiaadressi. PÃĩhiaadressi hoiatus - Määra pÃĩhiaadressiks Eemalda pÃĩhiaadressiks määramine Kopeeri jututoa tunnus Kopeeri jututoa aadress - KrÃŧptimine on selles jututoas kasutusel. KrÃŧptimine ei ole selles jututoas kasutusel. VÃĩta krÃŧptimine kasutusele \n(hoiatus: seda ei saa hiljem enam välja lÃŧlitada!) - Kaust Teema - Fontide suurus Pisike Väike @@ -526,18 +454,15 @@ Suurem Veel suurem Hiidsuur - Sul on vaja Ãĩigusi, et selles jututoas hallata vidinaid Vidina loomine ei Ãĩnnestunud Algata rÃŧhmakÃĩnesid jitsi vahendusel Kas oled kindel, et soovid siit jututoast selle vidina kustutada\? - Kasutusel on Ãŧks vidin + Kasutusel on %d vidin Kasutusel on %d vidinat Kasutusel vidinad - - Vidin Lae vidin Selle vidina lisaja: @@ -548,23 +473,18 @@ Lae vidin uuesti Ava veebibrauseris Eemalda minu ligipääsuÃĩigused - Sinu kuvatav nimi Sinu avatari aadress Sinu kasutajatunnus Sinu teema Vidina tunnus Jututoa tunnus - - %2$s seadis sulle ligipääsukeelu %1$s jututuppa PÃĩhjus: %1$s Liitu uuesti Unusta jututuba ära - (Lisaseadistused) Ekspordi vÃĩtmed käsitsi - KrÃŧpti oma varukoopia paroolifraasiga. Me salvestame krÃŧptitud varukoopia sinu krÃŧptovÃĩtmetest meie serveris. Tagamaks, et keegi ei saa seda kasutada, krÃŧpti varukoopia paroolifraasiga. \n @@ -587,60 +507,47 @@ Palun sisesta taastevÃĩti Verifitseeri see sessioon tehes kindlaks et järgnev emoji kuvatakse partneri ekraanil Verifitseeri see sessioon tehes kindlaks, et järgnevad numbrid kuvatakse partneri ekraanil - Sa vÃĩtsid vastu saabuva verifitseerimispalve. Ootan teise osapoole kinnitustâ€Ļ - Verifitseeritud! Sa oled edukalt verifitseerinud selle sessiooni. Turvalised sÃĩnumid selle kasutajaga on läbivalt krÃŧptitud ning kolmandad osapooled ei saa neid lugeda. Selge lugu - Mitte midagi huvitavat ei paista\? KÃĩik kliendid ei toeta veel interaktiivset verifitseerimist. Selle asemel kasuta vana kooli verifitseerimist. Kasuta vana kooli verifitseerimist. - KrÃŧptovÃĩtmete verifitseerimine Päring on tÃŧhistatud Teine osapool tÃŧhistas verifitseerimise. \n%s Verifitseerimine on tÃŧhistatud. \nPÃĩhjus %s - Vastastikune sessioonide verifitseerimine Verifitseerimispäring %s soovib verifitseerida sinu sessiooni - Kasutaja tÃŧhistas verifitseerimise Verifitseerimisprotsess aegus Sinu jututoad kuvatakse siin - Reageerimised NÃĩus Meeldib Lisa reaktsioon Reageerimised - SÃĩnum on kustutatud Näita kustutatud sÃĩnumeid Näita kustutatud sÃĩnumite asemel kohatäidet Kasutaja kustutas sÃŧndmuse Jututoa haldur on sÃŧndmust modereerinud Viimati muudetud %1$s poolt, muutmise aeg %2$s - - Vigaselt vormindatud sÃŧndmus ja kuvamine pole seetÃĩttu vÃĩimalik VÃĩrguÃŧhendus puudub. Palun kontrolli oma internetiÃŧhendust. Muuda Vaheta vÃĩrku Palun ootaâ€Ļ KÃĩik kogukonnad - Sellel jututoal puudub eelvaade Element ei toeta veel kÃĩigile nähtavate jututubade eelvaadet - Jututoad Isiklikud sÃĩnumid - Uus jututuba LOO Jututoa nimi @@ -648,14 +555,11 @@ KÃĩik vÃĩivad selle jututoaga liituda Jututubade loend Avalda see jututuba jututubade loendis - Saada manus - Selles jututoas pole meediafaile FAILID Lisaja %1$s, lisamise aeg %2$s Selles jututoas pole faile - Tegemist on spämmiga See on ebasobilik Kohandatud pÃĩhjusâ€Ļ @@ -665,15 +569,12 @@ Sinu salasÃĩna on muudetud. Sa oled kÃĩikidest sessioonidest välja logitud ning enam ei saa tÃĩuketeavitusi. Nende taaskuvamiseks logi sisse kÃĩikides oma seadmetes. Tagasi sisselogimise lehele - Hoiatus "Turvalisuse mÃĩttes on oluline, et teed seda nii, et kas olete Ãŧheskoos vÃĩi kasutate suhtluskanalit, mida mÃĩlemad usaldate." - VÃĩrdle unikaalset emoji\'de kombinatsiooni ja vaata, et nad oleksid samas järjekorras. VÃĩrdle koodi sellega, mida kuvatakse teise kasutaja ekraanil. SÃĩnumid selle kasutajaga on läbivalt krÃŧptitud ning kolmandad osapooled ei saa neid lugeda. Sinu uus sessioon on nÃŧÃŧd verifitseeritud. Selles sessioonis saad lugeda oma krÃŧptitud sÃĩnumeid ja teiste kasutajate jaoks on ta usaldusväärne. - Risttunnustamine Risttunnustamine on kasutusel \nPrivaatvÃĩtmed asuvad seadmes. @@ -683,20 +584,17 @@ Risttunnustamine on kasutusel \nVÃĩtmed ei ole usaldusväärsed Risttunnustamine ei ole kasutusel - Sinu serveri haldur on lÃŧlitanud läbiva krÃŧptimise omavahelistes jututubades ja otsesÃĩnumites välja. Aktiivsed sessioonid Näita kÃĩiki sessioone Halda sessioone Logi sellest sessioonist välja - Teave krÃŧptograafia kohta puudub - Kuna sina oled selle sessiooni verifitseerinud, siis see sessioon on krÃŧptitud sÃĩnumite saatmiseks usaldusväärne: See isikutuvastusserver kasutab vana API\'t. Element toetab aga vaid API versiooni 2. See tegevus ei ole vÃĩimalik. Koduserveri versioon on liiga vana. - 1 jututuba + %d jututuba %d jututuba @@ -704,7 +602,6 @@ OtsingusÃĩnaga %2$s leidsin %1$s jututuba Otsin kataaloogistâ€Ļ - KÃĩik sÃĩnumid (lärmakas) KÃĩik sÃĩnumid Ainult mainimised @@ -713,8 +610,7 @@ Vähetähtis Lahku vestlusest Unusta - Lisa otsetee avalehele - + Lisa avalehele SÃĩnumid Seadistused Versioon @@ -723,7 +619,6 @@ Kolmandate osapoolte litsentsid AutoriÃĩigused Privaatsuspoliitika - Profiilipilt Kuvatav nimi E-posti aadress @@ -735,11 +630,8 @@ Kinnitage oma salasÃĩna Seda tegevust ei saa teha Element\'i nutirakendusest Autentimine on nÃĩutav - - Teavituste lisaseadistused Teavituse olulisus sÃŧndmuse alusel - Teavituste privaatsus SÃŧsteemiseadistused. Kasutajakonto seadistused. @@ -747,13 +639,11 @@ Sinu kontol ei ole teavitusi kasutusel. \nSeda saad muuta konto seadistuses. VÃĩta kasutusele - Sessiooni seadistused. Selles sessioonis on teavitused kasutusel. Selles sessioonis ei ole teavitusi kasutusel. \nSeda saad muuta Element\'i seadistuses. VÃĩta kasutusele - Kohandatud seadistused. Näita ajatempleid 12-tunnises vormingus Näita lugemisteatiseid @@ -766,32 +656,26 @@ Kood Sinu telefoninumbri kontrollimisel tekkis viga. Lisateave: %s - Meedia Vaikimisi pakkimine Vali Vaikimisi meediaallikas Vali Tee katiku klÃĩpsu - Kogukonna rinnasilt Sa ei ole hetkel ainsamagi kogukonna liige. - 3 päeva 1 nädal 1 kuu Igavesti - Jututoa foto Jututoa nimi Jututoa teema Jututoa silt Sildistatud kui: - Lemmik Vähetähtis Ei midagi - Ligipääs ja nähtavus Näita seda jututuba jututubade kataloogis Teavitused @@ -799,23 +683,19 @@ Jututoa ajaloo loetavus Kes vÃĩivad lugeda ajalugu\? Kes pääsevad ligi siia jututuppa\? - KÃĩik kasutajad Ainult liikmetele (alates selle seadistuse kasutuselevÃĩtmisest) Ainult liikmetele (alates nende kutsumise ajast) Ainult liikmetele (alates liitumisest) - Sellele jututoale viitamiseks peab tal olema aadress. Vaid kutsutud kasutajad KÃĩik, kes teavad jututoa viidet, välja arvatud kÃŧlalised KÃĩik, kes teavad jututoa viidet, kaasa arvatud kÃŧlalised - Suhtluskeelu saanud kasutajad %d suhtluskeelu saanud kasutaja %d suhtluskeelu saanud kasutajat - Lisaseadistused Selle jututoa sisemine tunnus Aadressid @@ -825,9 +705,7 @@ Läbiv krÃŧptimine on kasutusel Läbiva krÃŧptimise kasutuselevÃĩtuks pead korraks välja logima. %s Ãŧritas laadida teatud hetke selle jututoa ajajoonelt, kuid ei suutnud seda leida. - Läbiva krÃŧptimise teave - SÃŧndmuse teave Kasutajatunnus Curve25519 identiteedi vÃĩti @@ -835,7 +713,6 @@ Algoritm Sessiooni tunnus DekrÃŧptimise viga - Saatja sessiooni teave Avalik nimi Avalik nimi (nähtav neile, kellega sa suhtled) @@ -845,18 +722,15 @@ Sessiooni vÃĩti Verifitseerimine Ed25519 sÃĩrmejälg - Ekspordi jututubade läbiva krÃŧptimise vÃĩtmed Ekspordi jututoa vÃĩtmed Ekspordi vÃĩtmed kohalikku faili Ekspordi Sina määrasid, et jututuppa pääseb vaid kutsega. Lugemata sÃĩnumid - KrÃŧptimise abil hoiad vestlused privaatsena Laienda ja kohanda oma kasutuskogemust Alusta - Vali server Nii nagu e-posti puhul, siis kasutajakonto asub Ãŧhes serveris, kuid saab suhelda kasutajatega Ãŧle ilma Liitu tasuta miljonite teistega suurimas tasuta Matrix\'i serveris @@ -864,7 +738,6 @@ Lisateave Muud serverid Kohandatud seadistused - Jätka Ühenda koduserveriga %1$s Ühenda teenusepakkujaga Element Matrix Services @@ -873,14 +746,12 @@ Registreeru Logi sisse Jätka kasutades SSO\'d ehk Ãŧhekordset autentimist - Element Matrix Services teenuse aadress Aadress Tasuline Matrix\'i majutusteenus organisatsioonidele Sisesta Modular Element teenuse vÃĩi muu serveri aadress, mida sa soovid kasutada Sisesta serveri vÃĩi Element\'i aadress, mida sa soovid kasutada Sisesta serveri aadress, mida sa soovid kasutada - Lehe laadimisel tekkis viga %1$s (%2$d) See rakendus ei saa sisse logida antud koduserverisse. See koduserver toetab järgmisi sisselogimise tÃŧÃŧp(e): %1$s. \n @@ -889,21 +760,16 @@ See rakendus ei saa antud koduserveris uut kasutajakontot. \n \nKas sa soovid registreerida kasutades veebibrauseri pÃĩhist klienti\? - See e-posti aadress ei ole seotud Ãŧhegi kasutajakontoga. - Loo uus salasÃĩna koduserveris %1$s Kontrollimaks, et just sina sina ise sisestasid uue salasÃĩna, siis saadame sulle kinnituskirja. Järgmine E-posti aadress Uus salasÃĩna - Hoiatus! SalasÃĩna muutmine tÃŧhistab kÃĩik läbiva krÃŧptimise vÃĩtmed sinu kÃĩikides sessioonides ning seega muutub kogu sinu vestluste ajalugu loetamatuks. Palun kindlasti kas sea Ãŧles vÃĩtmete varundamine vÃĩi ekspordi mÃĩnest muust sessioonist jututubade vÃĩtmed enne senise salasÃĩna tÃŧhistamist. Jätka - See e-posti aadress ei ole seotud Ãŧhegi kasutajakontoga - Vaata oma saabuvate e-kirjade postkasti Verifitseerimise jaoks saatsime e-kirja aadressile %1$s. Logi sisse @@ -913,7 +779,6 @@ \n \nEemalda nad, kui oled lÃĩpetanud selle seadme kasutamise vÃĩi soovid sisse logida muu kasutajakontoga. Eemalda kÃĩik andmed - Eemalda andmed Kas sa oled kindel, et soovid kustutada kÃĩik andmed, mis on hetkel siin seadmes salvestatud\? \nOma sÃĩnumite ja kontoandmete nägemiseks logi uuesti sisse. @@ -928,47 +793,42 @@ Uus vestlus Lisa osaleja - 1 aktiivne osaleja + %d aktiivne osaleja %d aktiivset osalejat - 1 osaleja + %d osaleja %d osalejat 1 osaleja - - 1 sekund + %d sekund %d sekundit - 1 minut + %d minut %d minutit - 1 tund + %d tund %d tundi - 1 päev + %d päev %d päeva - Lahku jututoast Kas oled kindel, et soovid lahkuda jututoast\? Kas sa oled kindel, et soovid eemaldada %s sellest vestlusest\? Loo - VÃĩrgus VÃĩrgust väljas JÃĩude NÃŧÃŧd %1$s Oli %1$s %2$s tagasi - HALDUSTARVIKUD KÕNED SESSIOONID - Kutsu TÃŧhista kutse Lahku sellest jututoast @@ -986,14 +846,11 @@ \n \nHoiatus: rakenduse eemaldamisel ka see fail ilmselt kustutatakse. TaastevÃĩti on salvestatud. - Varukoopia on juba olemas sinu koduserveris Asenda Peata - Palun tee koopia Ootel - Sisesta uue isikutuvastusserveri aadress Ei saanud Ãŧhendust isikutuvastusserveriga Palun sisesta isikutuvastusserveri aadress @@ -1001,67 +858,48 @@ Sinu valitud isikutuvastusserveril pole kasutustingimusi. Jätka vaid siis, kui sa usaldad serveri omanikku ja haldajat Saatsime tekstisÃĩnumi numbrile %s. Palun sisesta seal kuvatud kontrollkood. Kontrollkood ei ole Ãĩige. - Muud jututoad - Saadab selle sÃĩnumi vikerkaarevärvilisena Saadab antud emote vikerkaarevärvides - Ajajoon - SÃĩnumite kirjutamine - VÃĩta läbiv krÃŧptimine kasutusele "Kui krÃŧptimine on juba kasutusele vÃĩetud, siis ei saa seda enam eemaldada." - Kas vÃĩtame krÃŧptimise kasutusele\? Kui kord juba kasutusele vÃĩetud, siis krÃŧptimist enam hiljem ära lÃĩpetada ei saa. KrÃŧptitud sÃĩnumeid ei saa lugeda ei vaheapealses veebiliikluses ega serveris ja vaid jututoa liikmed saavad neid lugeda. KrÃŧptimise kasutusele vÃĩtmine vÃĩib takistada nii robotite kui sÃĩnumisildade tÃļÃļd. VÃĩta jututoas krÃŧptimine kasutusele - Lisaturvalisus mÃĩttes verifitseeri %s vÃĩrreldes selleks Ãŧheks korraks loodud koodi mÃĩlemas seadmes. Verifitseeri see sessioon selleks, et teda vÃĩiks lugeda usaldusväärseks ja saaks ligipääsu krÃŧptitud sÃĩnumitele. Kui sina pole sellesse sessiooni sisse loginud, siis sinu kasutajakonto vÃĩib olla sattunud vÃĩÃĩraste kontrolli alla: - %d aktiivne sessioon %d aktiivset sessiooni - Verifitseeri see sisselogimissessioon Teised kasutajad ei pruugi seda usaldada Vormista turvaseadistused lÃĩpuni - Kasuta olemasolevat sessiooni selle sessiooni verifitseerimiseks, andes sellega ligipääsu krÃŧptitud sÃĩnumitele. - - Verifitseeri Verifitseeritud Hoiatus - Sessionide loendi laadimine ei Ãĩnnestunud Sessioonid Usaldusväärne Ei ole usaldusväärne - Kuna %1$s (%2$s) on selle sessiooni verifitseerinud, siis see sessioon on krÃŧptitud sÃĩnumite saatmiseks usaldusväärne: %1$s (%2$s) logis sisse uues sessioonis: Sa ei saa seda muudatust hiljem tagasi pÃļÃļrata, sest annad teisele kasutajale samad Ãĩigused, mis sinul on. \nKas sa oled ikka kindel\? - Kas vähendad enda Ãĩigusi\? Kuna sa vähendad enda Ãĩigusi, siis sul ei pruugi hiljem olla vÃĩimalik seda muutust tagasi pÃļÃļrata. Kui sa juhtumisi oled viimane haldusÃĩigustega kasutaja jututoas, siis hiljem on vÃĩimatu samu Ãĩigusi tagasi saada. Vähenda enda Ãĩigusi - - Eira kasutajat Selle kasutaja eiramine eemaldab teie jagatud jututoast tema sÃĩnumid. \n \nÜldistest seadistustest saad seda alati muuta. Eira selle kasutaja sÃĩnumeid - LÃĩpeta selle kasutaja eiramine Selle kasutaja eiramise lÃĩpetamine teeb tema sÃĩnumid uuesti nähtavaks. LÃĩpeta eiramine - TÃŧhista kutse Kas oled kindel et sa soovid tÃŧhistada kutse sellele kasutajale\? MÃŧksa kasutaja välja @@ -1074,23 +912,18 @@ Taasta selle kasutaja ligipääs Sellele kasutajale suhtluskeelu seadmine tÃĩstab ta jututoast välja ning ei vÃĩimalda uuesti liitumist. Suhtluskeelu eemaldamine vÃĩimaldab jututoaga uuesti liituda. - PÃĩhjus - Kas sa oled kindel, et soovid kutsuda %s vestlusele\? "%1$s, " %1$s ja %2$s %1$s %2$s - Kutsu tunnuse alusel KONTAKTID SIIN SEADMES (%d) KASUTAJATE LOEND (%s) Vaid Matrix\'i kasutajad - Kutsu kasutajat tunnuse alusel Palun sisesta Ãŧks vÃĩi enam e-posti aadressi vÃĩi Matrix\'i kasutajatunnust E-posti aadress vÃĩi Matrix\'i kasutajatunnus - Otsi %s kirjutabâ€Ļ %1$s & %2$s kirjutavadâ€Ļ @@ -1109,10 +942,9 @@ Faili ei leidunud Sul ei ole Ãĩigusi siia jututuppa kirjutamiseks - 1 uus sÃĩnum + %d uus sÃĩnum %d uut sÃĩnumit - Usalda Ära usalda Logi välja @@ -1127,23 +959,19 @@ Esmasel vaatlusel vigu ei leidu. Kui sa jätkuvalt ei saa teavitusi, siis palun saada edaspidise uurimise jaoks meile veateade. Üks vÃĩi enam testi andis tulemuseks vea, palun proovi pakutud lahendusi. Üks vÃĩi enam testi andis tulemuseks vea, palun saada edaspidise uurimise jaoks meile veateade. - SÃŧsteemi seadistustes on teavitused kasutusel. SÃŧsteemi seadistustes ei ole teavitusi kasutusel. \nPalun vaata need Ãŧle. Ava seadistused - Pane tähele, et mÃĩned teavitused on seadistatud vaiksetena (teavitus kuvatakse ilma helilise märguandeta). MÃĩned teavitused on sinu kohandatud seadistustes kinni keeratud. Kohandatud reeglite laadimine ei Ãĩnnestunud. Palun proovi uuesti. Palun kontrolli seadistusi - Goolge Play teenuste kontrollimine Google Play Services APK on kättesaadav ja uuendatud. Element kasutab Google Play teenuseid tÃĩuketeavituste edastamiseks, kui see ei tundu olema korrektselt seadistatud: \n%1$s Paranda Google Play teenused - Firebase tunnusluba FCM tunnusloa laadimine Ãĩnnestus: \n%1$s @@ -1156,42 +984,35 @@ [%1$s] \nSee viga on väljaspool Element\'i kontrolli. Telefoni ei ole seadistatud Google\'i kontot. Palun ava seadistustes kontohaldur ning lisa Ãŧks Google\'i konto. Lisa Google\'i konto - Tunnusloa registreerimine FCM tunnusloa registreerimine koduserveris Ãĩnnestus. FCM tunnusloa registreerimine koduserveris ei Ãĩnnestunud: \n%1$s - Teavituste teenus Teavituste teenus tÃļÃļtab. Teavituste teenus ei tÃļÃļta. \nProovi, kas Element\'i uuesti käivitamine aitab. Käivita teenus - Teavituste teenuse automaatne taaskäivitamine Teenus suleti ja käivitati automaatselt uuesti. Teenuse uuesti käivitamine ei Ãĩnnestunud - Käivita teenus seadme käivitamisel Teenus käivitatakse nutiseadme käivitamisel. Seda teenust ei käivitatata nutiseadme käivitamisel. Sa ei saa teavitusi enne, kui Element on vähemalt korra avatud. Käivita teenus nutiseadme käivitamisel - Kontrolli taustapiiranguid - 1 jututuba + %d jututuba %d jututuba - - %1$s: 1 sÃĩnum + %1$s: %d sÃĩnum %1$s: %2$d sÃĩnumit %d teavitus %d teavitust - %1$s -> %2$s Uus sÃŧndmus Jututuba @@ -1201,9 +1022,7 @@ ** Saatmine ei Ãĩnenstunud - palun ava jututoa vaade %1$s: %2$s %1$s: %2$s %3$s - Otsi ajaloost - Vabandust, aga rÃŧhmakÃĩned Jitsi vahendusel ei ole vanades seadmetes toetatud (Androidi versioon alla 5.0) See vidin soovib kasutada järgmisi andmeid: Luba @@ -1211,7 +1030,6 @@ Luba kaamera kasutamine Luba mikrofoni kasutamine Luba DRM\'iga kaitstud meedia avamine - Vidina loomine ei Ãĩnnestunud. Päringu saatmine ei Ãĩnnestunud. Õiguste tase peab olema positiivne täisarv. @@ -1232,7 +1050,6 @@ Element saab kontrollida teie aadressiraamatut, et leida teisi Matrixi kasutajaid nende e-posti aadresside ja telefoninumbrite pÃĩhjal. \n \nKas sa oled nÃĩus oma aadressiraamatut sel eesmärgil jagama\? - Kas sa soovid peita selle kasutaja kÃĩik sÃĩnumid\? \n \nPane tähele, et antud toiming taaskäivitab rakenduse ja see vÃĩib vÃĩtta veidi aega. @@ -1242,12 +1059,10 @@ \nTÃļÃļ, mida rakendus proovib teha, on agressiivselt piiratud, kui see on taustal ja see vÃĩib mÃĩjutada teavituste kättesaamist. \n%1$s Keela piirangud - Aku optimeerimine Aku optimeerimine ei mÃĩjuta Elementi. Kui kasutaja jätab seadme mÃĩneks ajaks vooluvÃĩrgust välja ja Ãŧhele kohale paigale ning ekraan on välja lÃŧlitatud, lÃŧlitub seade Doze reÅžiimi. See takistab rakendustel juurdepääsu vÃĩrgule ja lÃŧkkab edasi nende tÃļÃļ, sÃŧnkroonimise ja tavalised teated. Eira optimeerimist - Tavaline Vähendatud privaatsus See rakendus vajab taustal toimimiseks Ãĩigusi @@ -1257,7 +1072,6 @@ â€ĸ teavitusega märgitud sÃĩnumi sisu laetakse turvaliselt ja otse sinu Matrix\'i koduserverist â€ĸ teavitused sisaldavad nii metainfot kui sÃĩnumi sisu â€ĸ teavitused ei näita sÃĩnumi sisu - Teavituste heli VÃĩta teavitused sellel kontol kasutusele VÃĩta teavitused selles sessioonis kasutusele @@ -1266,8 +1080,6 @@ Seadista kÃĩneteavitused Seadista vaiksed teavitused Vali LED-tule värv, värin ning heliâ€Ļ - - SÃĩnumid, mis sisaldavad minu kuvatavat nime SÃĩnumid, mis sisaldavad minu kasutajatunnust Kahepoolsete vestluste sÃĩnumid @@ -1275,7 +1087,6 @@ Kui mind kutsutakse jututuppa Saabuvad kÃĩned Robotite saadetud sÃĩnumid - Andmete sÃŧnkroniseerimine taustal Andmete taustal sÃŧnkroniseerimise reÅžiim Optimeeritud akukestust silmas pidades @@ -1287,8 +1098,6 @@ TaustasÃŧnkroonimine puudub Kui rakendus tÃļÃļtab taustal, siis sa ei saa saabunud sÃĩnumite kohta teavitusi. Seadistuste uuendamine ei Ãĩnnestunud. - - Käivita teenus seadme käivitamisel Kasuta taustasÃŧnkroonimist SÃŧnkroniseerimispäring aegus @@ -1296,7 +1105,6 @@ %s \nSÃŧnkroniseerimine vÃĩib jääda vahele, kui aku täituvus on madal vÃĩi seade energiasäästureÅžiimil. Viivitus sÃŧnkroonimiste vahel - Versioon olm-teegi versioon Kasutustingimused @@ -1306,7 +1114,6 @@ Säilita meedia TÃŧhjenda puhver TÃŧhjenda meedia puhver - Kasutaja seadistused Teavitused Eiratud kasutajad @@ -1341,7 +1148,6 @@ Enne meedia saatmist näita eelvaadet Saada sÃĩnum reavahetusklahvi vajutamisel Tarkvaralise klaviatuuri reavahetusklahvi vajutus saadab sÃĩnumi ning ei tee reavahetust - Turvaline varundus Halda VÃĩta kasutusele turvaline varundus @@ -1350,7 +1156,6 @@ Tagamaks, et sa ei kaota ligipääsu krÃŧptitud sÃĩnumitele ja andmetele, varunda krÃŧptimisvÃĩtmed oma serveris. Loo uus turvavÃĩti vÃĩi seadista olemaoleva varukoopia jaoks uus turvafraas. Sellega asendad olemasoleva turvavÃĩtme vÃĩi turvafraasi. - Deaktiveeri kasutajakonto Eemalda minu konto kasutusest Leia kasutajaid @@ -1359,21 +1164,17 @@ Element vÃĩib taustal tÃļÃļtamise ajal hallata sinu teavitusi turvaliselt ja privaatselt. Aga see vÃĩib mÃĩjutada akukasutust. Anna Ãĩigused Tee muu valik - TaustaÃŧhendus Selleks et teavitused toimiksid korralikult peab Element kasutama vähese kÃĩrvalmÃĩjuga taustaÃŧhendust. \nKui järgmisel lehel sinult kÃŧsitakse kas lubada, et Element tÃļÃļtab kogu aeg taustal, siis palun nÃĩustu. Anna Ãĩigused - AnalÃŧÃŧtika Saada arendajatele analÃŧÃŧtikat VÃĩimaldamaks meil rakendust parandada kogub Element anonÃŧÃŧmset teavet rakenduse kasutuse kohta. Selleks, et saaksime Element\'i paremaks teha, palun luba analÃŧÃŧtika. Jah, ma soovin aidata! - VÃĩrguliikluse mahu säästmise reÅžiim VÃĩrguliikluse andmemahu säästmiseks kasutatakse filtrit, mille puhul kasutajate olekuid ei uuendata ja sÃĩnumite kirjutamise teavitusi ei laeta. - Sessiooniteave Seadme tunnus Avalik nimi @@ -1385,20 +1186,16 @@ Autentimine SalasÃĩna: Saada - Sisselogitud kui Koduserver Isikutuvastusserver Luba lÃĩimingud LÃĩiminguhaldur - LÃĩimingud ei ole kasutusel Selle tegevuse kasutuselevÃĩetuks lÃŧlita seadetes sisse „Luba lÃĩiminguid“ valik. - Kasutajaliides Keel Vali keel - Verifikatsioon on ootel Palun vaata oma e-kirju ning klÃĩpsi meie saadetud kirjas leiduvat linki. Kui see on tehtud, siis vajuta Jätka-nuppu. E-posti aadressi Ãĩigsust pole veel Ãĩnnestunud kontrollida. Palun vaata oma e-kirju ning klÃĩpsi meie saadetud kirjas leiduvat linki. Kui see on tehtud, siis vajuta Jätka-nuppu. @@ -1406,7 +1203,6 @@ Seda e-posti aadressi ei leidunud. See telefoninumber on juba kasutusel. Sinu e-posti aadressi kontrollimisel tekkis viga. - SalasÃĩna Muuda salasÃĩna Praegune salasÃĩna @@ -1420,13 +1216,9 @@ \n \nPane tähele, et antud toiming taaskäivitab rakenduse ja see vÃĩib vÃĩtta veidi aega. SalasÃĩnad ei klapi omavahel - Kas sa oled kindel et soovid eemaldada antud teavituse liigi\? - Kas sa oled kindel, et soovid eemaldada %1$s %2$s\? - Vali riik - Riik Palun vali riik Eksporditavate vÃĩtmete krÃŧptimiseks palun sisesta paroolifraas. VÃĩtmete importimisel pead kasutama sama paroolifraasi. @@ -1434,62 +1226,51 @@ \n \nHoiatus: rakenduse eemaldamisel ka see fail ilmselt kustutatakse. VÃĩtmete eksportimine Ãĩnnestus - KrÃŧptitud sÃĩnumite taastamine Halda vÃĩtmete varundust - Impordi E2E läbiva krÃŧptimise vÃĩtmed jututubade jaoks Impordi jututoa krÃŧptovÃĩtmed Impordi vÃĩtmed kohalikust failist Impordi Kasuta krÃŧptimist vaid verifitseeritud sessioonides Ära iialgi saada sellest sessioonist krÃŧptitud sÃĩnumeid verifitseerimata sessioonidesse. - Ei ole verifitseeritud Verifitseeritud Mustas nimekirjas - tundmatu sessioon tundmatu ip-aadress ei midagi - Verifitseeri Eemalda verifitseerimine Lisa musta nimekirja Eemalda mustast nimekirjast - Verifitseeri sessioon Kinnita seda vÃĩrreldes järgnevaid andmeid oma teise sessiooni kasutajaseadetes: Kui nad omavahel ei klapi, siis teie suhtluse turvalisus vÃĩib olla ohus. Kinnitan, et vÃĩtmed klapivad omavahel - Jututoas leidub tundmatuid sessioone Siin jututoas leidub tundmatuid ja verifitseerimata sessioone. \nSee tähendab, et pole mitte mingit kindlust selles osas, et teised kasutajad on ka tegelikult need, keda nad väidavad end olevat. \nKui sa tÃĩesti soovid, siis sa vÃĩid saata sÃĩnumi ka verifitseerimata kasutajatele, kuid meie soovitame, et sa esmalt läbid verifitseerimise kÃĩikide nende sessioonidega. \n \nTundmatud sessioonid: - Vali jututubade loend Server kas pole kättesaadav vÃĩi on Ãŧlekoormatud Sisesta koduserveri nimi, mille avalike jututubade loendit soovid näha Koduserveri aadress KÃĩik jututoad %s serveris KÃĩik %s jututoad - Kirjuta siiaâ€Ļ - - 1 lugemata teavitatud sÃĩnum + %d lugemata teavitatud sÃĩnum %d lugemata teavitatud sÃĩnumit - 1 lugemata teavitatud sÃĩnum + %d lugemata teavitatud sÃĩnum %s lugemata teavitatud sÃĩnumit Selle valiku kasutamine eeldab kolmanda osapoole rakendust sÃĩnumite salvestamiseks. Jätkamaks pead nÃĩustuma kasutustingimustega. - Sa oled lisanud uue sessiooni \'%s\', mis soovib saada krÃŧptimisvÃĩtmeid. Uus sessioon soovib krÃŧptovÃĩtmeid. \nSessiooni nimi: %1$s @@ -1500,7 +1281,6 @@ \nSessiooni nimi: %1$s \nViimati nähtud: %2$s \nKui sa pole mÃĩnes muus seadmes sisse loginud, siis ära pane seda teadet tähele. - Alusta verifitseerimist Verifitseeri Jaga ilma verifitseerimata @@ -1508,10 +1288,8 @@ KrÃŧptovÃĩtmete jagamise päring Eira päringut Eira - Hoiatus! RÃŧhmakÃĩnede funktsionaalsus on veel arendamisel ja ei pruugi hetkel olla tÃļÃļkindel. - Käsu viga Tundmatu käsk: %s Käsk „%s“ eeldab rohkem parameetreid vÃĩi mÃĩni neist on vigane. @@ -1528,51 +1306,41 @@ Muudab sinu kuvatavat nime LÃŧlita markdown-vormingu kasutamine sisse vÃĩi välja Paranda Matrix\'i rakenduse haldust - Markdown-vormindus on kasutusel. Markdown-vormindus ei ole kasutusel. - Välja lÃŧlitatud Vaikne Jutukas - Loo Loo kogukond Kogukonna nimi Näiteks Kogukonna tunnus näiteks - Avaleht Inimesed Jututoad Kasutajaid ei ole - Jututoad Liikmed Kutsutud Filtreeri kogukonna liikmeid Filtreeri kogukonna jututubasid - - 1 liige + %d liige %d liiget - - 1 jututuba + %d jututuba %d jututuba Kogukonna haldur ei ole kogukonna pikka kirjeldust koostanud. - %2$s mÃŧksas sind välja %1$s jututoast Lugemisteatise tunnuspilt Teavituse tunnuspilt Tunnuspilt - Selleks et jätkata koduserveri %1$s kasutamist sa pead Ãŧle vaatama ja nÃĩustuma meie kasutustingimustega. Vaata Ãŧle - Deaktiveeri konto See muudab sinu konto jäädavalt mittekasutatavaks. Sina ei saa enam sisse logida ja keegi teine ei saa seda kasutajatunnust uuesti pruukida. Samuti logitakse sind välja kÃĩikidest jututubadest, kus sa osaled ning eemaldatakse kÃĩik sinu andmed sinu isikutuvastusserverist. Seda tegevust ei saa tagasi pÃļÃļrata. \n @@ -1581,58 +1349,44 @@ \nMatrix\'i sÃĩnumite nähtavus on sarnane e-posti kirjadega. SÃĩnumite unustamine tegelikult tähendab seda, et sinu varemsaadetud sÃĩnumeid ei jagata uute vÃĩi veel registreerumata kasutajatega, kuid registeerunud kasutajad, kes juba on need sÃĩnumid saanud, vÃĩivad neid ka jätkuvalt lugeda. Jätkamiseks palun sisesta oma salasÃĩna: Deaktiveeri konto - Palun sisesta kasutajanimi. Palun sisesta oma salasÃĩna. See jututuba on asendatud teise jututoaga ning ei ole enam kasutusel Vestlus jätkub siin See jututuba on järg varasemale vestlusele Vanemate sÃĩnumite nägemiseks klÃĩpsi siin - Ressursipiir on Ãŧletatud VÃĩta Ãŧhendust teenuse haldajaga - palun vÃĩta Ãŧhendust oma teenuse haldajaga - See koduserver Ãŧletanud Ãŧhe oma ressursipiirangutest, seega mÃĩned kasutajad ei saa sisse logida. See koduserver Ãŧletanud Ãŧhe oma ressursipiirangutest. - See koduserver on saavutanud igakuise aktiivsete kasutajate piiri, seega mÃĩned kasutajad ei saa sisse logida. See koduserver on saavutanud igakuise aktiivsete kasutajate piiri. - Selle piiri suurendamiseks palun %s. Jätkamaks selle teenuse kasutamist palun %s. - Lae jututoa kasutajad aeglaselt Paranda jÃĩudlust ja lae jututoa liikmed alles selle esimese vaatamise ajal. Sinu koduserver ei vÃĩimalda jututoa kasutajate aeglast laadimist. Proovi hiljem uuesti. - Vabandust, aga tekkis viga - laienda ahenda - Näita teabevälja Alati SÃĩnumite ja vigade puhul Ainult vigade puhul - %1$s: %1$s: %2$s +%d %d+ Ühtegi Google Play teenuste rakendusefaili ei leidunud. Teavitused ei pruugi korralikult toimida. - Loo paroolifraas Sisesta paroolifraas veel Ãŧks kord Sisesta paroolifraas Paroolifraasid ei klappi mitte Palun sisesta paroolifraas Paroolifraas on liiga nÃĩrk - "Kui sa soovid, et Element looks taastevÃĩtme, siis palun kustuta paroolifraas." Matrix\'i sessioone ei leidu - Ära kunagi kaota krÃŧptitud sÃĩnumeid SÃĩnumid krÃŧptitud jututubades kasutavad läbivat krÃŧptimist. Ainult sinul ja saaja(te)l on vÃĩtmed selliste sÃĩnumite lugemiseks. \n @@ -1645,31 +1399,23 @@ Ootamatu viga Alustasin varukoopia tegemist Teen taustal sinu krÃŧptovÃĩtmetest varukoopia sinu koduserverisse. Esimese varukoopia tegemine vÃĩib vÃĩtta paar minutit. - - Kas sa oled kindel\? Kui sa logid välja vÃĩi kaotad seadme, siis sa ei saa enam lugeda oma krÃŧptitud sÃĩnumeid. - Laen varukoopia versiooniâ€Ļ Selleks, et krÃŧptitud sÃĩnumite ajalugu lukust lahti vÃĩtta, kasuta oma taastamiseks mÃĩeldud paroolifraasi kasuta oma taastevÃĩtit Kas sa ei tea oma taastamiseks mÃĩeldud paroolifraasi\? Siis sa vÃĩid %s. - Selleks, et krÃŧptitud sÃĩnumite ajalugu lukust lahti vÃĩtta, kasuta oma taastevÃĩtit Sisesta taastevÃĩti - SÃĩnumite taastamine - Kas sa kaotasid oma taastevÃĩtme\? Sa vÃĩid seadistustes määrata uue. Selle paroolifraasiga ei Ãĩnnestunud varundust dekrÃŧptida: palun kontrolli, kas sa kasutad Ãĩiget taastamiseks mÃĩeldud paroolifraasi. VÃĩrguÃŧhenduse viga: palun kontrolli, kas vÃĩrguÃŧhendus on olemas ja proovi uuesti. - Taastan vÃĩtmed varundusest: Arvutan taastevÃĩtitâ€Ļ Laen alla krÃŧptovÃĩtmeidâ€Ļ Impordin krÃŧptovÃĩtmeidâ€Ļ Selle taastevÃĩtmega ei Ãĩnnestunud varundust dekrÃŧptida: palun kontrolli, kas sa kasutad Ãĩiget taastevÃĩtit. - Varukoopiast taastatud %s! Taastasin varukoopiast Ãŧhe vÃĩtmega. @@ -1679,18 +1425,13 @@ Üks uus vÃĩti on lisatud siia sessiooni. %d uut vÃĩtit on lisatud siia sessiooni. - Ei Ãĩnnestunud laadida taastevÃĩtmete versiooni (%s). Sessioonis pole krÃŧptograafia kasutusel - - Taasta varundusest Kustuta varukoopia - VÃĩtmete varundus on selles sesioonis korrektselt Ãŧles seatud. KrÃŧptovÃĩtmete varundamine ei ole selles sessioonis kasutusel. Sinu selle sessiooni krÃŧptovÃĩtmeid ei varundata. - Varukoopial on allkiri tundmatult sessioonilt tunnusega %s. Varukoopial on selle sessiooni kehtiv allkiri. Varukoopial on kehtiv allkiri verifitseeritud sessioonilt tunnusega %s. @@ -1698,63 +1439,47 @@ Varukoopial on vigane allkiri verifitseeritud sessioonilt tunnusega %s Varukoopial on vigane allkiri verifitseerimata sessioonilt tunnusega %s Ei Ãĩnnestunud laadida teavet varukoopia usaldamiseks (%s). - Selleks, et saaksid selles sessioonis kasutada krÃŧptovÃĩtmete varundamist, pead esmalt vÃĩtmed taastama oma paroolifraasi vÃĩi taastevÃĩtme abil. Kustutan varukoopiaâ€Ļ Varukoopia kustutamine ei Ãĩnnestunud (%s) - Kontrollin varukoopia olekut Kustuta varukoopia Kas kustutame krÃŧptovÃĩtmete varukoopia serverist\? Sellisel juhul sa ei saa kasutada ka taastevÃĩtit krÃŧptitud sÃĩnumite ajaloo loetavaks muutmseks. - Uus vÃĩtmete varukoopia Tuvastasin uue krÃŧptovÃĩtmete varukoopia. \n \nKui sa ei ole ise uusi taastamise meetodeid lisanud, siis vÃĩib olla tegemist rÃŧndega sinu konto vastu. Palun vaheta koheselt oma kasutajakonto salasÃĩna ning määra seadistustes uus taastemeetod. See olin mina - Ära kunagi kaota krÃŧptitud sÃĩnumeid VÃĩta kasutusele krÃŧptovÃĩtmete varundamine - Turvaline varundus Hoia ära, et kaotad ligipääsu krÃŧptitud sÃĩnumitele ja andmetele - Ära kunagi kaota krÃŧptitud sÃĩnumeid Kasuta varundatud vÃĩtmeid - Uued sÃĩnumite krÃŧptovÃĩtmed Halda vÃĩtmete varunduses - Varundan sinu krÃŧptovÃĩtmeid. Selleks vÃĩib kuluda mitu minutitâ€Ļ - - VÃĩta kasutusele turvaline varundus - KÃĩik krÃŧptovÃĩtmed on varundatud Varundan Ãŧht krÃŧptovÃĩtitâ€Ļ Varundan %d krÃŧptovÃĩtitâ€Ļ - Versioon Algoritm Allkiri - Vigane vastus koduserveri tuvastamise päringule Serveriseadistuste automaatne sÃĩnalÃĩpetus Element tuvastas kohandatud serveriseadistused sinu kasutajanime domeenis „%1$s“: \n%2$s Kasuta seadistusi - Oled kehtetu vÃĩi aegunud kasutajanime vÃĩi salasÃĩna tÃĩttu välja logitud. - Verifitseeri lÃŧhikese sÃĩne vÃĩrdlemise teel. "Parima turvalisuse mÃĩttes on oluline, et teed seda nii, et kas olete Ãŧheskoos vÃĩi kasutate muud suhtluskanalit, mida mÃĩlemad usaldate." Alusta verifitseerimist Saabuv verifitseerimispalve Selle sessiooni usaldamiseks peaksid ta verifitseerima. Kui sa pruugid läbivalt krÃŧptitud sÃĩnumeid, siis partnerite sessioonide verifitseerimine tagab sulle täiendava meelerahu. Selle sessiooni verifitseerimisel loetakse ta usaldusväärseks ning samuti märgitakse sinu sessioon tema jaoks usaldusväärseks. - See sessioon ei tea midagi antud toimingust Sessioon ei suuda kokku leppida vÃĩtmete, räsi, MAC\'i vÃĩi SAS\'i meetodi osas Räsid ei klapi @@ -1764,20 +1489,15 @@ KrÃŧptovÃĩtmed ei klapi Kasutajad ei klapi Teadmata viga - Sa ei kasuta Ãŧhtegi isikutuvastusserverit Ühtegi isikutuvastusserverit pole seadistatud, aga salasÃĩna muutmiseks on see oluline. - Tundub, et sa Ãŧritad luua Ãŧhendust teise koduserveriga. Kas sa soovid välja logida\? - Muuda Vasta - Proovi uuesti Selleks, et asuda rakendust kasutama, liitu mÃĩne jututoaga. Saatis sulle kutse %s kutsus - Ei teaâ€Ļ kÃĩik vist on nÃŧÃŧd tehtud! Sul ei ole rohkem lugemata sÃĩnumeid Tere tulemast koju! @@ -1787,15 +1507,11 @@ Jututoad Usaldamiseks vajaliku teabe laadimisel tekkis viga KrÃŧptovÃĩtmete varukoopia andmete laadimisel tekkis viga - Impordi läbiva krÃŧptimise vÃĩtmed failist „%1$s“. - Matrix\'i SDK versioon Muud kolmandate osapoolte litsentsid Sa juba vaatad seda jututuba! - Reageeri lennult - Üldist Eelistused Turvalisus ja privaatsus @@ -1803,57 +1519,40 @@ TÃĩuketeavituste reeglid TÃĩuketeavituste reegleid pole kirjeldatud TÃĩuketeavituste vÃĩrguväravaid pole registreeritud - app_id: push_key: app_display_name: session_name: URL: Vorming: - Heli ja video Abiteave ning info meie kohta - - Registreeri tunnusluba - Näita peidetud sÃŧndmusi ajajoonel - Isiklikud sÃĩnumid - Ootanâ€Ļ KrÃŧptin pisipiltiâ€Ļ Saadan pisipilti (%1$s / %2$s) KrÃŧptin failiâ€Ļ Saadan faili (%1$s / %2$s) - Laen alla faili %1$sâ€Ļ %1$s on alla laetud! - (muudetud) - SÃĩnumite muutmised Muutmisi ei leidunud - Nimi vÃĩi kasutajatunnus (#example:matrix.org) - Luba vastamine ajajoonel viipamisega Link on kopeeritud lÃĩikelauale - Lisa Matrix\'i tunnuse alusel Loon jututubaâ€Ļ Tulemusi ei leidunud. Otsinguks serverist kasuta „Lisa Matrix\'i tunnuse alusel“. Otsingutulemuste jaoks kirjuta midagi Liitun jututoaga â€Ļ - Kasutustingimused Vaata kasutustingimused Ãŧle Ole teiste poolt leitav Kasuta roboteid, vÃĩrgusildu, vidinaid vÃĩi kleepsupakke - Loe aadressil - - Isikutuvastusserver Katkesta Ãŧhendus isikutuvastusserveriga Seadista isikutuvastusserverit @@ -1866,50 +1565,39 @@ Isikutuvastusserveri kasutamise lÃĩpetamine tähendab, et sa ei ole leitav teiste kasutajate poolt ega sulle ei saa telefoninumbri vÃĩi e-posti aadressi alusel kutset saata. KÃŧll aga saab kutset saata Matrix\'i kasutajatunnuse alusel. Leitavad telefoninumbrid Lisa avaekraanile eraldi sakk lugemata teavituste jaoks. - Saatsime kinnituskirja e-posti aadressile %s. Palun vaata oma kirju ja klÃĩpsi selles kirjas leiduvat linki Saatsime kinnituskirja e-posti aadressile %s. Esmalt palun vaata oma kirju ja klÃĩpsi selles kirjas leiduvat linki Selleks, et sind vÃĩiks leida e-posti aadressi vÃĩi telefoninumbri alusel, nÃĩustu isikutuvastusserveri (%s) kasutustingimustega. - LÃŧlita sisse detailsete logide salvestamine. Sa parasjagu ei eira Ãŧhtegi kasutajat - Lisavalikute nägemiseks vajuta jututoa nimel kaua - - %1$s muutis selle jututoa avalikuks kÃĩigile, kes teavad tema aadressi. Sina muutsid selle jututoa avalikuks kÃĩigile, kes teavad tema aadressi. %1$s määras, et jututuppa pääseb vaid kutsega. Vestle kahekaupa vÃĩi rÃŧhmiti Ma olen verifitseerinud oma e-posti aadressi - Õnnestus! Sinu salasÃĩna ei ole veel muutunud. \n \nKas katkestame muutmise\? - Määra e-posti aadress Seadista e-posti aadress, mis vÃĩimaldaks sul vajadusel taastada ligipääsu oma kontole. Lisaks vÃĩid kasutada e-posti aadressi vÃĩi telefoninumbrit, et need inimesed, kes sind tunnevad, saaks sind leida. E-posti aadress E-posti aadress (kui soovid) Järgmine - Lisa telefoninumber Salvesta oma telefoninumber selleks, et teised kasutajad saaks sind leida. Palun kasuta rahvusvahelist numbrivormingut. Telefoninumber Telefoninumber (kui soovid) Järgmine - Kinnita telefoninumbri lisamine Me just saatsime tuvastuskoodi telefoninumbrile %1$s. Kinnitamaks, et see on sinu number, palun sisesta ta alljärgnevalt. Sisesta tuvastuskood Saada uuesti Järgmine - Rahvusvahelise telefoninumbri alguses peaks olema „+“ Telefoninumber ei tundu olema Ãĩige. Palun kontrolli seda veel Ãŧks kord - Logi sisse koduserverisse %1$s Kasutajanimi vÃĩi e-posti aadress Kasutajanimi @@ -1920,28 +1608,23 @@ Sinu kasutajakonto pole veel loodud. \n \nKas katkestame konto registreerimise\? - Vali matrix.org Vali teenusepakkujaks Element Matrix Services Vali mÃĩni muu koduserver Palun tee läbi robotilÃĩksu katse Jätkamiseks nÃĩustu kasutustingimustega - Palun kontrolli oma e-kirju Saatsime e-kirja %1$s aadressile. \nKonto loomisega jätkamiseks palun klÃĩpsi selles kirjas leiduvat linki. Sisestatud kood ei ole Ãĩige. Palun kontrolli seda. Iganenud koduserver Selle koduserveri versioon on Ãŧhenduse loomiseks liiga vana. Palu oma koduserveri haldajal seda uuendada. - Liiga palju samaaegseid päringuid. Proovi uuesti Ãŧhe sekundi pärastâ€Ļ Liiga palju samaaegseid päringuid. Proovi uuesti %1$d sekundi pärastâ€Ļ - See ei ole Ãĩige kasutajatunnus. Õige vorming on: \'@torekasutaja:koduserver.ee\' Ei leia toimivat koduserverit. Palun vaata, et kasutajatunnus oleks Ãĩige - Logi sisse "Sinu koduserveri (%1$s) haldur on sind sinu kontolt %2$s (%3$s) välja loginud." Selleks, et laadida vaid siin seadmes kasutatud krÃŧptovÃĩtmeid, palun logi sisse. Sa vajad neid vÃĩtmeid selleks, et lugeda kÃĩiki oma krÃŧptitud sÃĩnumeid kÃĩikides oma seadmetes. @@ -1957,29 +1640,21 @@ Seadistused Praegune sessioon Muud sessioonid - Kuvan vaid esimesi tulemusi, kirjuta natuke pikemaltâ€Ļ - Kiire lÃĩppmäng Teadmata vigade puhul vÃĩib Element sagedamini kokku joosta - Lisa ¯\\_(ツ)_/¯ smaili vormindamata teksti algusesse - VÃĩta jututoas krÃŧptimine kasutusele "Kui krÃŧptimine on juba kasutusele vÃĩetud, siis ei saa seda enam eemaldada." - Sinu e-posti domeeni ei saa kasutada selles serveris registreerimisel - Sisselogimine ei ole usaldusväärne Nad klapivad Nad ei klapi Verifitseeri see sessioon tehes kindlaks et järgnev emoji kuvatakse samas järjekorras partneri ekraanil. Parima turvalisuse nimel palun kasuta mÃĩnda muud usaldusväärset suhtlusvahendit vÃĩi kohtu silmast silma. Roheline kilp näitab, et kasutaja on usaldusväärne. Tagamaks, et kogu jututuba on usaldusväärne, siis peaks kÃĩikidel selle liikmetel olema roheline kilp. - Ei ole turvaline Kleeps - Ootanâ€Ļ %s tÃŧhistas Sa tÃŧhistasid @@ -1989,54 +1664,42 @@ Verifitseerimispäring Verifitseeri see sessioon Verifitseeri käsitsi - Sina - Selleks, et Ãŧksteist turvaliselt verifitseerida, skaneeri see QR-koodi teise kasutaja seadmest Skaneeri teise osapoole QR-koodi Kas sa ei saa skaneerida Kui te pole Ãŧheskoos, siis vÃĩrrelge selle asemel pilte - Verifitseeri vÃĩrreldes emoji\'sid - Verifitseeri emoji\'de abil Kui sa ei saa skaneerida eespool kuvatud koodi, siis verifitseeri unikaalsete emoji\'de kombinatsiooni vÃĩrdlemise teel. - QR-kood - Verifitseeri %s %s on verifitseeritud Ootan vastust kasutajalt %sâ€Ļ Kasuta seda sessiooni uute sessioonide verifitseerimiseks, andes sellega ligipääsu krÃŧptitud sÃĩnumitele. See ei olnud mina Sinu kasutajakonto vÃĩib olla sattunud valedesse kätesse - Kasuta taastevÃĩtit Vali oma taastevÃĩti, sisesta ta käsitsi vÃĩi aseta lÃĩikelaualt Selle taastevÃĩtmega ei Ãĩnnestunud varundust dekrÃŧptida: palun kontrolli, kas sa kasutad Ãĩiget taastevÃĩtit. Turvahoidla kasutamine ei Ãĩnnestu - KrÃŧptimata KrÃŧptitud verifitseerimata seadme poolt Vaata Ãŧle, kust sa oled Matrix\'i vÃĩrku loginud Selleks et sinu konto ja sÃĩnumid oleks turvatud, verifitseeri kÃĩik oma sessioonid Verifitseeri uus kasutajasessioon, mis pruugib sinu kontot: %1$s - "Verifitseeri käsitsi etteantud teksti abil" Verifitseeri sisselogimissessioon Verifitseeri interaktiivselt Emoji abil Kinnita oma isikusamasust verifitseerides seda sisselogimissessiooni mÃĩnest oma muust sessioonist. Sellega tagad ka ligipääsu krÃŧptitud sÃĩnumitele. Märgi usaldusväärseks - Palun vali kasutajanimi. Palun vali salasÃĩna. Kontrolli seda linki veel Ãŧks kord See %1$s link viib sind teise veebisaiti: %2$s. \n \nKas sa kindlasti soovid jätkata\? - Otsevestluse loomine ei Ãĩnnestunud. Palun kontrolli, et kasutajanimed oleks Ãĩiged ja proovi uuesti. - Lisa liikmeid KUTSU Kutsun kasutajaidâ€Ļ @@ -2048,11 +1711,9 @@ Kutsed saadetud kasutajatele %1$s ja veel %2$d\'le kasutajale Meil ei Ãĩnnestunud neile kasutajatele kutset saata. Palun kontrolli, keda soovid kutsuda ning proovi uuesti. - Hetkel kasutatav keel Muud saadaval olevad keeled Laen saadaval olevaid keeliâ€Ļ - Ava %s kasutustingimused Kas katkestame Ãŧhenduse isikutuvastusserveriga %s\? Palun esmalt seadista isikutuvastusserver. @@ -2060,7 +1721,6 @@ Sinu privaatsuse nimel saadab Element e-posti aadressid ja telefoninumbrid serverisse vaid räsituna. Seoste loomine ei Ãĩnnestunud. Selle tunnusega ei ole hetkel Ãŧhtegi seost. - Sinu koduserver (%1$s) soovitab kasutada sinu isikutuvastusserverina %2$s teenust Kasuta %1$s teenust Alternatiivina vÃĩi sa sisestada Ãŧkspuha missuguse isikutuvastusserveri aadressi @@ -2073,9 +1733,7 @@ Eemalda mikrofoni summutamine LÃĩpeta kaamera kasutamine VÃĩta kaamera kasutusele - VÃĩta kasutusele turvaline varundus - Turvaline varundus Tagamaks, et sa ei kaota ligipääsu krÃŧptitud sÃĩnumitele ja andmetele, varunda krÃŧptimisvÃĩtmed oma serveris. VÃĩta kasutusele @@ -2083,22 +1741,17 @@ Loome turvavÃĩtme, mida sa peaksid hoidma turvalises kohas, nagu näiteks arvutis salasÃĩnade halduris vÃĩi vana kooli seifis. Kasuta turvafraasi Sisesta turvafraas, mida vaid sina tead ning loo vÃĩti varukoopia jaoks. - Salvesta oma turvavÃĩti Salvesta turvavÃĩti turvalisesse kohta, nagu näiteks arvutis salasÃĩnade haldur vÃĩi vana kooli seif. - Määra turvafraas Andmete kaitsmiseks sinu koduserveris sisesta turvafraas, mida vaid sina tead. Turvafraas Kinnituseks sisesta turvafraas uuesti. - Salvesta oma turvavÃĩti Salvesta oma turvavÃĩti turvalisesse kohta, nagu näiteks arvutis salasÃĩnade haldur vÃĩi vana kooli seif. - Jututoa nimi Jututoa teema Jututoa seadistuste muutmine Ãĩnnestus - Sa ei saa seda sÃĩnumit lugeda Ootan kuni sÃĩnumite dekrÃŧptimine lÃĩppeb ja selleks vÃĩib kuluda aega DekrÃŧptimine ei ole vÃĩimalik @@ -2107,17 +1760,12 @@ Sa ei saa seda sÃĩnumit lugeda, kuna saatja ei usalda sinu sessiooni Sa ei saa seda sÃĩnumit lugeda, kuna saatja teadlikult ei saatnud vajalikke vÃĩtmeid Ootan krÃŧptimise ajalugu - Riot\'i uus nimi on Element! Meil on hea meel teatada, et oleme muutnud nime! Sinu rakendus on uuendatud ning sa oled oma kontole sisse logitud. Selge lugu Vaata lisateavet - element - - Salvesta taastevÃĩti järgnevalt - Lisa telefoniraamatust Sinu telefoniraamat on tÃŧhi Telefoniraamat @@ -2125,31 +1773,23 @@ Laen sinu kontaktide loenditâ€Ļ Sinu kontaktide loend on tÃŧhi Sinu kontaktide loend - TÃŧhista kutse Kas tÃŧhistame kasutaja %1$s kutse\? - Suhtluskeeld on seatud kasutaja %1$s poolt Kasutaja ligipääsu taastamine ei Ãĩnnestunud - TÃĩuketeavitused on välja lÃŧlitatud Jätkamaks sisesta oma %s. - %s abil krÃŧpti ja loe oma sÃĩnumeid ning taga usaldusseosed. Kinnituseks sisesta %s uuesti. Palun ära kasuta selleks oma tavalist konto salasÃĩna. - Andmete kaitsmiseks sinu koduserveris sisesta turvafraas, mida vaid sina tead. - Selleks vÃĩib kuluda mitu sekundit. Alustame taastamist. Sinu taastevÃĩti Valmis! Hoia seda turvaliselt LÃĩpeta - Kasuta seda %1$s turvavÃĩrguna olukorras, kus unustad oma %2$s. - Avaldan justloodud IdentiteedivÃĩtmed Loon paroolifraasi pÃĩhjal turvavÃĩtme Määratlen vaikimisi kasutatava SSSS-vÃĩtme @@ -2157,14 +1797,10 @@ SÃŧnkroniseerin kasutaja vÃĩtit SÃŧnkroniseerin allkirjavÃĩtit Teeme vÃĩtmetest varukoopia - - TrÃŧki ta välja ja hoia turvalises kohas Salvesta ta mälupulgale vÃĩi varunduskettale Kopeeri ta isiklikku andmehoidlasse mis asub pilves - Seda tegevust ei saa teha nutiseadmest - Paroolifraasi kasutusele vÃĩtmine vÃĩimaldab sul krÃŧptida ja lugeda oma sÃĩnumeid ning tagada usaldusseoseid. \n \nKui sa ei soovi selleks kasutada sÃĩnumite salasÃĩna, siis vÃĩid genereerida ka sÃĩnumivÃĩtme. @@ -2172,21 +1808,16 @@ Kui sa tÃŧhistad nÃŧÃŧd, siis sa vÃĩid peale viimasest seadmest välja logimist kaotada ligipääsu oma krÃŧptitud sÃĩnumitele ja andmetele. \n \nAga sa vÃĩid seadistustes vÃĩtta kasutusele turvalise varunduse ning hallata oma krÃŧptovÃĩtmeid. - KrÃŧptimine on kasutusel SÃĩnumid selles jututoas on läbivalt krÃŧptitud. Uuri lisaks ja verifitseeri kasutajad nende kasutajaprofiilides. KrÃŧptimine ei ole kasutusel Selles jututoas kasutatud krÃŧptimine ei ole toetatud - %s lÃĩi ja seadistas jututoa. Sina lÃĩid ja seadistasid jututoa. - Peaaegu valmis! Kas teises seadmes kuvatakse sama kilpi\? Peaaegu valmis! Ootan kinnitustâ€Ļ Ootan vastust kasutajalt %sâ€Ļ - VÃĩtmete importimine ei Ãĩnnestunud - Teavituste seadistused SÃĩnumid, mis sisaldavad sÃĩna @room Kahepoolsete vestluste krÃŧptitud sÃĩnumid @@ -2194,9 +1825,7 @@ Kui jututubasid uuendatakse Leia lahendus vigadele Seadista teavituse olulisus sÃŧndmuse alusel - Saadab sÃĩnumi vormindamata tekstina ega tÃĩlgenda seda markdown-vormindusena - Sul ei ole Ãĩigusi siin jututoas rÃŧhmakÃĩne algatamiseks RÃŧhmakÃĩne on hetkel käimas! Alusta videokoosolekut @@ -2210,21 +1839,15 @@ %1$d/%2$d vÃĩtme importimine Ãĩnnestus. %1$d/%2$d vÃĩtme importimine Ãĩnnestus. - Halda lÃĩiminguid Aktiivseid vidinaid ei leidu Jututuba on loodud, kuid mÃĩned kutsed on saatmata järgmistel pÃĩhjustel: \n \n%s - 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. - - Kui sa oled nÃĩustunud koduserveri kasutustingimustega, siis palun proovi uuesti. - Tundub, et server ei suuda päringule mÃĩistliku ajaga vastata ning see vÃĩib olla seotud kas vigase Ãŧhendusega vÃĩi serveri veaga. Palun proovi mÃĩne aja pärast uuesti. - Ava navigatsioonivalik Ava menÃŧÃŧvalik jututoa loomiseks Sulge menÃŧÃŧvalik jututoa loomiseksâ€Ļ @@ -2232,7 +1855,6 @@ Näita salasÃĩna Peida salasÃĩna Mine lÃĩppu - %1$s, %2$s ja %3$d muu loevad %1$s, %2$s ja %3$d muud loevad @@ -2241,12 +1863,10 @@ %1$s ja %2$s lugesid %s luges - 1 kasutaja luges + %d kasutaja luges %d kasutajat lugesid - See fail „%1$s“ (%2$s) on Ãŧleslaadimiseks liiga suur. Failisuuruse Ãŧlempiir on %3$s. - Manuse laadimisel tekkis viga. Fail Kontakt @@ -2255,31 +1875,25 @@ Meediagalerii Kleeps Jagatud andmete tÃļÃļtlemine ei Ãĩnnestunud - MEEDIA EIRA KASUTAJAT - Teatasin sisust - Selle sisu kohta on nÃŧÃŧd teade saadetud. -\n -\nKui sa ei soovi enam näha selle kasutaja sisu, siis sa vÃĩid tema sÃĩnumite peitmiseks kasutaja blokeerida + Selle sisu kohta on nÃŧÃŧd teade saadetud. +\n +\nKui sa ei soovi enam näha selle kasutaja sisu, siis sa vÃĩid tema sÃĩnumite peitmiseks kasutajat eirata. See on rämpssÃĩnum - Haldaja sai nÃŧÃŧd teate, et see sisu on rämpssÃĩnum. -\n -\nKui sa ei soovi enam näha selle kasutaja sisu, siis sa vÃĩid tema sÃĩnumite peitmiseks kasutaja blokeerida + Haldaja sai nÃŧÃŧd teate, et see sisu on rämpssÃĩnum. +\n +\nKui sa ei soovi enam näha selle kasutaja sisu, siis sa vÃĩid tema sÃĩnumite peitmiseks kasutajat eirata. See sÃĩnum ei ole sobilik - Haldaja sai nÃŧÃŧd teate, et see sisu ei ole sobilik. -\n -\nKui sa ei soovi enam näha selle kasutaja sisu, siis sa vÃĩid tema sÃĩnumite peitmiseks kasutaja blokeerida - + Haldaja sai nÃŧÃŧd teate, et see sisu ei ole sobilik. +\n +\nKui sa ei soovi enam näha selle kasutaja sisu, siis sa vÃĩid tema sÃĩnumite peitmiseks kasutajat eirata. Läbiva krÃŧptograafia jaoks vajalike vÃĩtmete salvestamiseks kohalikule andmekandjale vaajab Element sinu luba. \n \nSelleks et saaksid vÃĩtmed käsitsi eksportida, siis palun anna selleks järgmises vaates luba. - Hetkel puudub vÃĩrguÃŧhendus - Eira kasutajat - KÃĩik sÃĩnumid (lärmakas) KÃĩik sÃĩnumid Ainult mainimised @@ -2293,7 +1907,6 @@ Saadab selle sÃĩnumi rÃĩÃĩmurikkujana RÃĩÃĩmurikkuja Reageerimiste leidmiseks sisesta otsingusÃĩnad. - See on sinu vestlus, mida sa ka tegelikult kontrollid. SalasÃĩna kinnitamiseks klÃĩpsi kirjas olnud linki. Kui oled avanud selles kirjas leidunud lingi, siis palun vajuta järgnevat nuppu. Kui sul juba on kasutajakonto ning sa tead oma Matrix\'i kasutajatunnust ja salasÃĩna, siis alternatiivina sa vÃĩid kasutada seda meetodit: @@ -2303,7 +1916,6 @@ Matrix\'i kasutajatunnus Kui sa ei tea oma salasᚍna, siis mine tagasi ja loo uus salasÃĩna. Nähtud kasutaja poolt - Sa oled loginud välja See vÃĩib juhtuda eri pÃĩhjustel: \n @@ -2313,18 +1925,15 @@ \n \nâ€ĸ Sinu koduserveri haldaja on turvakaalutlustel keelanud sinu ligipääsu. Logi uuesti sisse - Sa oled loginud välja Praegune sessioon kuulub kasutajale %1$s, kuid sina Ãŧritad siseneda kasutaajaga %2$s. Sellist vÃĩimalust Element hetkel ei toeta. \nPalun eemalda kÃĩik andmed ning siis logi sisse muu kontoga. - MÃĩni järgnevatest vÃĩib olla sattunud valedesse kätesse: \n \n - Sinu koduserver \n - Selle osapoole koduserver, keda sa Ãŧritad verifitseerida \n - Sinu vÃĩi teise osapoole internetiÃŧhendus \n - Sinu vÃĩi teise osapoole seade - Video. Pilt. Helifail @@ -2346,49 +1955,35 @@ Üleslaetud failid Lahku jututoast Lahkun jututoastâ€Ļ - Haldajad Moderaatorid Kohandatud Ãĩigused Kutsed Kasutajad - Peakasutaja jututoas %1$s Moderaator jututoas %1$s Vaikimisi Ãĩigused jututoas %1$s Kohandatud Ãĩigused (%1$d) jututoas %2$s - HÃŧppa lugemisteatise juurde - Element ei oska käsitleda %1$s-tÃŧÃŧpi sÃŧndmusi Element ei oska käsitleda %1$s-tÃŧÃŧpi sÃŧnumeid Tekkis viga, kui Element Ãŧritas tÃļÃļdelda sÃĩnumi %1$s sisu - VÃĩta vastu Keeldu LÃĩpeta kÃĩne - LÃĩpeta eiramine - See sessioon ei oska jagada verifitseerimisteavet sinu teiste sessioonidega. \nSeni salvestatakse verifitseerimisteave kohalikus seadmes ja jagatakse rakenduse tulevases versioonis. - Hiljutised jututoad Kuni antud kasutaja seda sessiooni ei usalda, on ta märgitud hoiatussildiga. Alternatiivina on sul vÃĩimalus verifiseerimist ka käsitsi teha. - - Käivita risttunnustamine Lähtesta krÃŧptovÃĩtmed - QR-kood - Peaaegu valmis! Kas %s kuvab sama kilpi\? Jah Ei - Ühendus sinu serveriga on katkenud LennureÅžiim on kasutusel - Arendaja tÃļÃļvahendid Kasutajakonto andmed @@ -2403,45 +1998,33 @@ Loob lihtsa hääletuse Kasuta taastamiseks mÃĩeldud paroolifraasi vÃĩi vÃĩtit Kui sa ei pääse ligi olemasolevale sessioonile - Uus sisselogimine - Ei leia turvahoidlast vajalikke andmeid Sisesta turvahoidla paroolifraas Hoiatus: Sa peaksid turvahoidlat kasutama vaid usaldusväärsest seadmest - Eemaldaâ€Ļ Kas sa soovid seda manust saata kasutajale %1$s\? Saada pilt algupärases suuruses Saada pildid algupärases suuruses - Kinnita eemaldamine Kas sa oled kindel et soovid eemaldada (kustutada) seda sÃŧndmust\? Pane tähele, et see muutus vÃĩib tagasi pÃļÃļrduda, kui muudad hiljem jututoa nime vÃĩi teema nime. Lisa pÃĩhjus Kustutamise pÃĩhjus - Kasutaja kustutas sÃŧndmuse, pÃĩhjusena %1$s Jututoa haldur on sÃŧndmust modereerinud, pÃĩhjusena %1$s - KrÃŧptovÃĩtmed on juba uuendatud! - Element Android - Päringud vÃĩtmete laadimiseks - VÃĩta krÃŧptitud sÃĩnumite ajalugu lukust lahti - Värskenda - Uus sisselogimine. Kas see olid sina\? Kontrollimiseks ja verifitseerimiseks klÃĩpsi Kui sa katkestad, siis sa ei saa selles seadmes lugeda krÃŧptitud sÃĩnumeid ning muud kasutajad ei usalda seda Kui sa katkestad, siis sa ei saa oma uues seadmes lugeda krÃŧptitud sÃĩnumeid ning muud kasutajad ei usalda seda Kui sa nÃŧÃŧd katkestad, siis sa ei verifitseeri seadet %1$s (%2$s). Alusta uuesti sealsest profiilist. - MÃĩni järgnevatest vÃĩib olla sattunud valedesse kätesse: \n \n - Sinu salasÃĩna @@ -2450,40 +2033,29 @@ \n - Sinu vÃĩi teise osapoole internetiÃŧhendus \n \nPalun vaheta seadistuste lehelt koheselt oma kasutajakonto salasÃĩna ja taastevÃĩti. - Seadistuste lehelt verifitseeri oma seade. Verifitseerimine on tÃŧhistatud - Taastamiseks mÃĩeldud paroolifraas SÃĩnumite krÃŧptovÃĩti Kasutajakonto salasÃĩna - Seadista %s Loo sÃĩnumite krÃŧptovÃĩti - Kinnita %s - Sinu %2$s ja %1$s on seadistatud. \n \nHoia neid turvaliselt! Kui sa oled oma rakendustes kÃĩik sessioonid sulgenud, siis sa vajad neid ligipääsu taastamiseks oma krÃŧptitud sÃĩnumitele ja turvalistele andmetele. - Vigane salasÃĩna ja/vÃĩi kasutajanimi. Palun vaata, kas mitte sisestatud salasÃĩna ei alga vÃĩi lÃĩppe tÃŧhikutega. See kasutajakonto on deaktiveeritud. - SÃĩnumâ€Ļ - KrÃŧptimise uuendus on saadaval VÃĩta risttunnustamine kasutusele Selleks et sinu vestlused oleks turvatud, verifitseeri end ja teisi - Jätkamaks sisesta oma %s Kasuta faili - Sisesta %s Taastamiseks mÃĩeldud paroolifraas See ei ole sobilik taastevÃĩti Palun sisesta taastevÃĩti - Kontrollin varukoopia vÃĩtmeid Kontrollin varukoopia vÃĩtit (%s) Arvutan elliptilise joone vÃĩtit @@ -2492,20 +2064,16 @@ Loon taastevÃĩtme alusel SSSS\'i Salvestan vÃĩtmete varunduse andmed SSSS\'is %1$s (%2$s) - Jätkamiseks sisesta oma vÃĩtmete varunduse paroolifraas. vÃĩi kasuta oma vÃĩtmete varukoopia taastevÃĩtit Kui sa ei tea oma vÃĩtmete varunduse paroolifraasi, siis sa vÃĩid %s. VÃĩtmete varukoopia taastevÃĩti - Ära luba sel rakendusel teha ekraanitÃĩmmiseid Selle seadistusega määratakse FLAG_SECURE märge kÃĩikidele tegevustele. Muutuse jÃĩustamiseks vajab rakendus uuesti käivitamist. - Lisasime meediafaili galeriisse Meediafaili galeriisse lisamine ei Ãĩnnestunud Meediafaili salvestamine ei Ãĩnnestunud Määra kontole uus salasÃĩnaâ€Ļ - Kasuta kÃĩige uuemat Element\'i versioon mÃĩnes muus seadmes, nagu näiteks Element Web, Element Desktop, Element iOS, Element Android. Samuti sobib mÃĩni muu Matrix\'i klient, mis oskab risttunnustamist Element Web \nElement Desktop @@ -2529,10 +2097,8 @@ Telefoninumbrid Kas eemaldan %s\? Palun vaata Ãŧle, et kindlasti oleksid klÃĩpsinud linki, mille me sulle e-kirjaga saatsime. - E-posti aadressid ja telefoninumbrid Halda on Matrix\'i kontoga seotud e-posti aadresse ja telefoninumbreid - Kood Palun kasuta rahvusvahelist vormingut (telefoninumbri alguses peaks olema „+“) Lisaturvalisus mÃĩttes verifitseeri %s vÃĩrreldes selleks Ãŧheks korraks loodud koodi teie mÃĩlemas seadmes. @@ -2540,25 +2106,74 @@ \nParima turvalisuse nimel kohtuge silmast silma. Kinnita oma isikusamasust verifitseerides seda sisselogimissessiooni. Sellega tagad ligipääsu krÃŧptitud sÃĩnumitele. Vabandust, selline tegevus pole veel vÃĩimalik kasutajakontode puhul, kus kasutatakse Ãŧhekordset sisselogimist. - Ei ole vÃĩimalik avada sellise jututoa vaadet, kus sulle on seatud suhtluskeeld. Ei leia sellist jututuba. Palun kontrolli, et ta ikka olemas on. %d sekund %d sekundit - Näita jututoa liikmete olekusÃŧndmusi Sealhulgas kutsumisi, liitumisi, lahkumisi, mÃŧksamisi, keelamisi ning tunnuspildi ja kuvatava nime muutusi. KÃŧsitlus Robotinupud Reageeris: %s 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. - - + PIN-kood on nÃĩutav alati, kui sa Element\'i avad. + PIN-kood on nÃĩutav, kui sa kahe minuti jooksul pole Element\'i kasutanud. + Kahe minuti mÃļÃļdumisel kÃŧsi uuesti PIN-koodi + Näita vaid napi teavitusena lugemata sÃĩnumite arvu. + Näita täpsemat teavet nagu jututoa nimi ja sÃĩnumi sisu. + Näita teavitustes sisu + PIN-kood on ainus vÃĩimalus, kuidas sa saad Element\'i lukust lahti. + Kasuta selles seadmes leiduvaid biomeetrilise tuvastuse vÃĩimalusi nagu sÃĩrmejälgede lugejat vÃĩi näotuvastust. + Kasuta biomeetrilist tuvastust + Seadista + Turva ligipääsu kasutades PIN-koodi vÃĩi biomeetrilist tuvastust. + Turva oma ligipääsu + + Näita seda seadet, millega saaksid praegu verifitseerimist alustada + Näita %d seadet, millega saaksid praegu verifitseerimist alustada + + Siis alustad nii, et kadunud on ajalugu, sÃĩnumid ning usaldatud seadmed ja kasutajad + Kui sa alustad kÃĩigega algusest + Jätka vaid siis, kui sul pole Ãŧhtegi muud seadet, millega seda seadet saaks verifitseerida. + Alusta kÃĩigega algusest + Kas sa unustasid vÃĩi kaotasid kÃĩik vÃĩimalused taastada ligipääsu oma kontole\? Lähtesta kÃĩik seadistused + Sina liitusid. + %s liitus. + See jututuba on läbivalt krÃŧptitud. + Lahku + Seadistused + SÃĩnumid siin jututoas kasutavad läbivat krÃŧptimist. +\n +\nSinu sÃĩnumid on turvatud ning ainult sinul ja saaja(te)l on unikaalsed vÃĩtmed selliste sÃĩnumite lugemiseks. + See jututuba ei ole läbivalt krÃŧptitud. + "Selle koduserveri versioon on Ãŧsna vana. Palu oma koduserveri haldajat, et ta teeks vajalikud uuendused. Kui sa jätkad, siis mÃĩni funktsionaalsus ei pruugi toimida nii, nagu vaja." + Sina määrasid, et siia jututuppa pääseb vaid kutsega. + %1$s määras, et siia jututuppa pääseb vaid kutsega. + Näita krÃŧptitud jututubades tervet ajalugu + %1$s ja %2$s + %1$s %2$s jututoas ja %3$s + + %d kutse + %d kutset + + Sa oled klÃĩpsinud teavitust! + "Palun klÃĩpsi teavitust. Kui sa teavitust ei näe, palun kontrolli oma seadme seadistusi." + Teavituse kuvamine + Sa praegu vaatad teavitust! KlÃĩpsi mind! + TÃĩuketeavituse vastuvÃĩtmine ei Ãĩnnestunud. Üks lahendus oleks kui paigaldad rakenduse uuesti. + Rakendus vÃĩtab vastu tÃĩuketeavitust + Rakendus ootab tÃĩuketeavitust + TÃĩuketeavituse test + Otsing krÃŧptitud jututubades ei ole veel toetatud. + Otsi suhtluskeelu saanud kasutajaid + Sul ei ole Ãĩigusi siin jututoas helistamiseks + Sul ei ole piisavalt Ãĩigusi, et selles jututoas alustada konverentsikÃĩnet + Taasta algolek + \ No newline at end of file From a086b2001b84223ac2f61cf36e4d4d950e51762b Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Thu, 15 Oct 2020 05:15:37 +0000 Subject: [PATCH 256/278] Translated using Weblate (Russian) Currently translated at 99.4% (1907 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/ru/ --- vector/src/main/res/values-ru/strings.xml | 626 +++------------------- 1 file changed, 83 insertions(+), 543 deletions(-) diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index c88a1162fa..e8912c0640 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -1,21 +1,18 @@ - + ru RU - ХООйŅ‰ĐĩĐŊиŅ КоĐŧĐŊĐ°Ņ‚Đ° НаŅŅ‚Ņ€ĐžĐšĐēи ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž ŅĐžĐąĐĩŅĐĩĐ´ĐŊиĐēĐĩ ИŅŅ‚ĐžŅ€Đ¸Ņ‡ĐĩŅĐēиĐĩ - ПŅ€Đ¸ĐŊŅŅ‚ŅŒ ОŅ‚ĐēĐģĐžĐŊиŅ‚ŅŒ ЗавĐĩŅ€ŅˆĐ¸Ņ‚ŅŒ СвОĐŊĐžĐē - OK ОŅ‚ĐŧĐĩĐŊĐ° @@ -48,7 +45,6 @@ ВŅĐĩ Ņ€Đ°Đ˛ĐŊĐž ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ иĐģи ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ - ВŅ‹ĐšŅ‚и иС ŅƒŅ‡Ņ‘Ņ‚ĐŊОК СаĐŋиŅĐ¸ ГоĐģĐžŅĐžĐ˛ĐžĐš вŅ‹ĐˇĐžĐ˛ @@ -61,27 +57,22 @@ ЗаĐēŅ€Ņ‹Ņ‚ŅŒ ĐĄĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊĐž в ĐąŅƒŅ„ĐĩŅ€ ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ - ПодŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ПŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ - НаŅ‡Đ°ĐģĐž ИСйŅ€Đ°ĐŊĐŊŅ‹Đĩ ЛŅŽĐ´Đ¸ КоĐŧĐŊĐ°Ņ‚Ņ‹ - ФиĐģŅŒŅ‚Ņ€ ĐŊаСваĐŊиŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ФиĐģŅŒŅ‚Ņ€ иСйŅ€Đ°ĐŊĐžĐŗĐž ФиĐģŅŒŅ‚Ņ€ ĐģŅŽĐ´ĐĩĐš ФиĐģŅŒŅ‚Ņ€ ĐŊаСваĐŊиŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ - ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ МаĐģОваĐļĐŊŅ‹Đĩ - БĐĩŅĐĩĐ´Ņ‹ ЛоĐēĐ°ĐģŅŒĐŊŅ‹Đĩ ĐēĐžĐŊŅ‚Đ°ĐēŅ‚Ņ‹ @@ -89,7 +80,6 @@ НĐĩŅ‚ диаĐģĐžĐŗОв ВŅ‹ ĐŊĐĩ Đ´Đ°Đģи Đ´ĐžŅŅ‚ŅƒĐŋ Element Đē вĐŊŅƒŅ‚Ņ€ĐĩĐŊĐŊиĐŧ ĐēĐžĐŊŅ‚Đ°ĐēŅ‚Đ°Đŧ НĐĩŅ‚ Ņ€ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚Ов - КоĐŧĐŊĐ°Ņ‚Ņ‹ ĐĄĐŋиŅĐžĐē ĐēĐžĐŧĐŊĐ°Ņ‚ @@ -99,9 +89,8 @@ %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš - + - ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐģĐžĐŗи ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐļŅƒŅ€ĐŊĐ°ĐģŅ‹ ĐžŅˆĐ¸ĐąĐžĐē ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅĐēŅ€Đ¸ĐŊŅˆĐžŅ‚ @@ -114,10 +103,8 @@ ХйОК ĐžŅ‚ĐŋŅ€Đ°Đ˛Đēи ĐžŅ‚Ņ‡ĐĩŅ‚Đ° Ой ĐžŅˆĐ¸ĐąĐēĐĩ (%s) ПŅ€ĐžĐŗŅ€ĐĩŅŅ (%s%%) В ĐŋŅ€ĐžŅˆĐģŅ‹Đš Ņ€Đ°Đˇ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ ĐŊĐĩĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊĐž СавĐĩŅ€ŅˆĐ¸ĐģĐž Ņ€Đ°ĐąĐžŅ‚Ņƒ. ĐĨĐžŅ‚иŅ‚Đĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐžŅ‚Ņ‡ĐĩŅ‚ Đž ŅĐąĐžĐĩ? - ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ в ПŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊ - ВойŅ‚и в КоĐŧĐŊĐ°Ņ‚Ņƒ ИĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ХОСдаŅ‚ŅŒ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ @@ -126,14 +113,11 @@ URL ŅĐĩŅ€Đ˛ĐĩŅ€Đ° URL ŅĐĩŅ€Đ˛ĐĩŅ€Đ° авŅ‚ĐžŅ€Đ¸ĐˇĐ°Ņ†Đ¸Đ¸ ПоиŅĐē - НаŅ‡Đ°Ņ‚ŅŒ ĐŊОвŅ‹Đš Ņ‡Đ°Ņ‚ НаŅ‡Đ°Ņ‚ŅŒ ĐŗĐžĐģĐžŅĐžĐ˛ĐžĐš вŅ‹ĐˇĐžĐ˛ НаŅ‡Đ°Ņ‚ŅŒ видĐĩОвŅ‹ĐˇĐžĐ˛ - ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ Ņ„Đ°ĐšĐģŅ‹ КаĐŧĐĩŅ€Đ° - ВŅ…Од ХОСдаŅ‚ŅŒ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ @@ -180,7 +164,6 @@ На Đ°Đ´Ņ€ĐĩŅ %s ĐąŅ‹ĐģĐž ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ĐŋиŅŅŒĐŧĐž. ПоŅĐģĐĩ ĐŋĐĩŅ€ĐĩŅ…Ода ĐŋĐž ŅŅŅ‹ĐģĐēĐĩ в ĐŋиŅŅŒĐŧĐĩ, ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŊиĐļĐĩ. НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ email: ŅƒĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž вŅ‹ ĐŋĐĩŅ€ĐĩŅˆĐģи ĐŋĐž ĐŋŅ€Đ¸ŅĐģĐ°ĐŊĐŊОК ŅŅŅ‹ĐģĐēĐĩ ВаŅˆ ĐŋĐ°Ņ€ĐžĐģŅŒ ŅĐąŅ€ĐžŅˆĐĩĐŊ. ОŅŅƒŅ‰ĐĩŅŅ‚вĐģĐĩĐŊ вŅ‹Ņ…Од ĐŊĐ° вŅĐĩŅ… ŅĐĩŅŅĐ¸ŅŅ… - вŅ‹ ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚Đĩ ĐŋĐžĐģŅƒŅ‡Đ°Ņ‚ŅŒ push ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ. ДĐģŅ вĐēĐģŅŽŅ‡ĐĩĐŊиŅ push ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК СаĐŊОвО вОКдиŅ‚Đĩ ĐŊĐ° ĐēĐ°ĐļĐ´ĐžĐŧ иС ваŅˆĐ¸Ņ… ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚в. - URL Đ´ĐžĐģĐļĐĩĐŊ ĐŊĐ°Ņ‡Đ¸ĐŊĐ°Ņ‚ŅŒŅŅ Ņ http[s]:// ХйОК вŅ…Ода: ŅĐĩŅ‚ĐĩваŅ ĐžŅˆĐ¸ĐąĐēĐ° @@ -189,7 +172,6 @@ ХйОК Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Đ¸ ХйОК Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Đ¸: ĐžŅˆĐ¸ĐąĐēĐ° ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи email ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ ĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊŅ‹Đš URL - НĐĩвĐĩŅ€ĐŊĐžĐĩ иĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ иĐģи ĐŋĐ°Ņ€ĐžĐģŅŒ ĐŖĐēаСаĐŊĐŊŅ‹Đš Ņ‚ĐžĐēĐĩĐŊ Đ´ĐžŅŅ‚ŅƒĐŋĐ° ĐŊĐĩ Ņ€Đ°ŅĐŋОСĐŊĐ°ĐŊ ПовŅ€ĐĩĐļĐ´ĐĩĐŊĐŊŅ‹Đš JSON @@ -197,35 +179,27 @@ ОŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ŅĐģиŅˆĐēĐžĐŧ ĐŧĐŊĐžĐŗĐž СаĐŋŅ€ĐžŅĐžĐ˛ ЛоĐŗиĐŊ ŅƒĐļĐĩ иŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ ВŅ‹ ĐŊĐĩ ĐŋĐĩŅ€ĐĩŅˆĐģи ĐŋĐž вŅ‹ŅĐģĐ°ĐŊĐŊОК в email ŅŅŅ‹ĐģĐēĐĩ - - ЧŅ‚ĐĩĐŊиĐĩ ŅĐŋиŅĐēĐ° вŅŅ‚ŅƒĐŋивŅˆĐ¸Ņ… - - ОŅ‚ĐēŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐēĐ°Đē ОŅ€Đ¸ĐŗиĐŊĐ°Đģ КŅ€ŅƒĐŋĐŊŅ‹Đš ĐĄŅ€ĐĩĐ´ĐŊиК МĐĩĐģĐēиК - "ОŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ СаĐŗŅ€ŅƒĐˇĐēŅƒ? ОŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ СаĐŗŅ€ŅƒĐˇĐēŅƒ? %d Ņ %1$dĐŧ %2$dŅ - ВŅ‡ĐĩŅ€Đ° ĐĄĐĩĐŗОдĐŊŅ - НазваĐŊиĐĩ КоĐŧĐŊĐ°Ņ‚Ņ‹ ĐĸĐĩĐŧĐ° ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ - ВŅ‹ĐˇĐžĐ˛ ŅĐžĐĩдиĐŊŅ‘ĐŊ ĐŖŅŅ‚Đ°ĐŊавĐģиваĐĩŅ‚ŅŅ ŅĐžĐĩдиĐŊĐĩĐŊиĐĩâ€Ļ @@ -235,16 +209,13 @@ ВŅ…ОдŅŅ‰Đ¸Đš видĐĩОвŅ‹ĐˇĐžĐ˛ ВŅ…ОдŅŅ‰Đ¸Đš ĐŗĐžĐģĐžŅĐžĐ˛ĐžĐš вŅ‹ĐˇĐžĐ˛ ИдŅ‘Ņ‚ Ņ€Đ°ĐˇĐŗОвОŅ€â€Ļ - ВŅ‹ĐˇŅ‹Đ˛Đ°ĐĩĐŧŅ‹Đš айОĐŊĐĩĐŊŅ‚ ĐŊĐĩ ĐžŅ‚вĐĩŅ‡Đ°ĐĩŅ‚. МĐĩдиавŅ‹ĐˇĐžĐ˛ ĐŊĐĩ ŅƒĐ´Đ°ĐģŅŅ НĐĩвОСĐŧĐžĐļĐŊĐž иĐŊиŅ†Đ¸Đ°ĐģиСиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐ°ĐŧĐĩŅ€Ņƒ ЗвоĐŊĐžĐē ĐŋŅ€Đ¸ĐŊŅŅ‚ ĐŊĐ° Đ´Ņ€ŅƒĐŗĐžĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ - ĐĄĐŊŅŅ‚ŅŒ Ņ„ĐžŅ‚Đž иĐģи видĐĩĐž" НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ СаĐŋиŅĐ°Ņ‚ŅŒ видĐĩĐž" - Element ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Element ĐŊŅƒĐļĐ´Đ°ĐĩŅ‚ŅŅ в Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊии ĐŊĐ° Đ´ĐžŅŅ‚ŅƒĐŋ Đē ваŅˆĐĩĐš Ņ„ĐžŅ‚Đž-и видĐĩĐžŅ‚ĐĩĐēĐĩ Đ´ĐģŅ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đēи и ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊиŅ вĐģĐžĐļĐĩĐŊиК. @@ -261,25 +232,20 @@ Element ĐŧĐžĐļĐĩŅ‚ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ВаŅˆŅƒ Đ°Đ´Ņ€ĐĩŅĐŊŅƒŅŽ ĐēĐŊиĐŗŅƒ, Ņ‡Ņ‚ОйŅ‹ ĐŊĐ°ĐšŅ‚и Đ´Ņ€ŅƒĐŗиŅ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš ŅĐĩŅ‚и ĐŋĐž email иĐģи Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐŊĐžĐŧŅƒ ĐŊĐžĐŧĐĩŅ€Ņƒ. \n \nĐĄĐžĐŗĐģĐ°ŅĐŊŅ‹ Đģи вŅ‹ ĐŋОдĐĩĐģиŅ‚ŅŒŅŅ ŅĐ˛ĐžĐĩĐš Đ°Đ´Ņ€ĐĩŅĐŊОК ĐēĐŊиĐŗОК Đ´ĐģŅ ŅŅ‚ОК Ņ†ĐĩĐģи\? - ИСвиĐŊиŅ‚Đĩ. ДĐĩĐšŅŅ‚виĐĩ ĐŊĐĩ вŅ‹ĐŋĐžĐģĐŊĐĩĐŊĐž иС-Са ĐŊĐĩĐ´ĐžŅŅ‚Đ°Ņ‚ĐžŅ‡ĐŊŅ‹Ņ… Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиК - ĐĄĐžŅ…Ņ€Đ°ĐŊĐĩĐŊĐž ĐĄĐžŅ…Ņ€Đ°ĐŊиŅ‚ŅŒ в СаĐŗŅ€ŅƒĐˇĐēи? ДА НЕĐĸ ПŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ - ĐŖĐ´Đ°ĐģиŅ‚ŅŒ ПŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ ПŅ€ĐžŅĐŧĐžŅ‚Ņ€ ОŅ‚ĐēĐģĐžĐŊиŅ‚ŅŒ - ПĐĩŅ€ĐĩĐšŅ‚и Đē ĐŋĐĩŅ€Đ˛ĐžĐŧŅƒ ĐŊĐĩĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐŊĐžĐŧŅƒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅŽ. - %s ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Đģ ваŅ ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ ĐŋŅ€Đ¸ŅˆĐģĐž ĐŊĐ° Đ°Đ´Ņ€ĐĩŅ %s, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ĐŊĐĩ ŅĐ˛ŅĐˇĐ°ĐŊ Ņ ŅŅ‚иĐŧ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ĐžĐŧ. @@ -287,27 +253,22 @@ ВŅ‹ ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ĐĩŅŅŒ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē %s. ĐĨĐžŅ‚иŅ‚Đĩ ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ОйŅŅƒĐļĐ´ĐĩĐŊиŅŽ? ĐēĐžĐŧĐŊĐ°Ņ‚Đ° Đ­Ņ‚Đž ĐŋŅ€ĐĩĐ´. ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹. ВŅ‹ в Ņ€ĐĩĐļиĐŧĐĩ Ņ‚ĐžĐģŅŒĐēĐž Ņ‡Ņ‚ĐĩĐŊиŅ. - НовŅ‹Đš Ņ‡Đ°Ņ‚ ДобавиŅ‚ŅŒ ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēĐ° 1 ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ - ПоĐēиĐŊŅƒŅ‚ŅŒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ вŅ‹ĐšŅ‚и иС ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹\? ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ иŅĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ %s иС Ņ‡Đ°Ņ‚Đ°? ХОСдаŅ‚ŅŒ - В ŅĐĩŅ‚и НĐĩĐ´ĐžŅŅ‚ŅƒĐŋĐĩĐŊ ПоĐēОК - АДМИНИСĐĸРИРОВАНИЕ ВĐĢЗОВ ĐŸĐ Đ¯ĐœĐĢЕ ЧАĐĸĐĢ СЕССИИ - ПŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Ņ‚ŅŒ ПоĐēиĐŊŅƒŅ‚ŅŒ ŅŅ‚ĐžŅ‚ Ņ‡Đ°Ņ‚ ИŅĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ иС ŅŅ‚ĐžĐŗĐž Ņ‡Đ°Ņ‚Đ° @@ -322,18 +283,14 @@ ĐŖĐŋĐžĐŧŅĐŊŅƒŅ‚ŅŒ ОŅ‚ОйŅ€Đ°ĐˇĐ¸Ņ‚ŅŒ ŅĐŋиŅĐžĐē ŅĐĩŅŅĐ¸Đš ВŅ‹ ĐŊĐĩ ŅĐŧĐžĐļĐĩŅ‚Đĩ ĐžŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ ŅŅ‚Đž Đ´ĐĩĐšŅŅ‚виĐĩ, ĐŋĐžŅĐēĐžĐģŅŒĐēŅƒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ Ņ‚Đ°ĐēОК ĐļĐĩ ŅƒŅ€ĐžĐ˛ĐĩĐŊŅŒ Đ´ĐžŅŅ‚ŅƒĐŋĐ°, ĐēĐ°Đē и Ņƒ ваŅ. ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹? - "ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹ Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Ņ‚ŅŒ %s в ŅŅ‚ĐžŅ‚ Ņ‡Đ°Ņ‚?" - ПŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Ņ‚ŅŒ ĐŋĐž ID ЛоĐēĐ°ĐģŅŒĐŊŅ‹Đĩ КоĐŊŅ‚Đ°ĐēŅ‚Ņ‹ (%d) ĐĸĐžĐģŅŒĐēĐž СаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ - ПŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Ņ‚ŅŒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ĐŋĐž ID ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ ОдиĐŊ иĐģи ĐŊĐĩŅĐēĐžĐģŅŒĐēĐž Đ°Đ´Ņ€ĐĩŅĐžĐ˛ email иĐģи Matrix ID Email иĐģи Matrix ID - ПоиŅĐē %s ĐŋĐĩŅ‡Đ°Ņ‚Đ°ĐĩŅ‚â€Ļ @@ -350,7 +307,6 @@ ĐŖĐ´Đ°ĐģиŅ‚ŅŒ ĐŊĐĩĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ФаКĐģ ĐŊĐĩ ĐŊаКдĐĩĐŊ ĐŖ ваŅ ĐŊĐĩŅ‚ ĐŋŅ€Đ°Đ˛ ĐŋиŅĐ°Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ в ŅŅ‚ĐžĐŧ Ņ‡Đ°Ņ‚Đĩ - ДовĐĩŅ€ŅŅ‚ŅŒ НĐĩ дОвĐĩŅ€ŅŅ‚ŅŒ @@ -363,7 +319,6 @@ ĐĄĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° иСĐŧĐĩĐŊиĐģŅŅ и ваŅˆ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊ Ņ‚ĐĩĐŋĐĩŅ€ŅŒ ĐĩĐŧŅƒ ĐŊĐĩ дОвĐĩŅ€ŅĐĩŅ‚. Đ­Ņ‚Đž ОЧЕНĐŦ ПОДОЗРИĐĸЕЛĐŦНО. Đ ĐĩĐēĐžĐŧĐĩĐŊĐ´ŅƒĐĩŅ‚ŅŅ, НЕ Đ”ĐžĐ’Đ•Đ Đ¯ĐĸĐŦ ŅŅ‚ĐžĐŧŅƒ ĐŊОвОĐŧŅƒ ŅĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚Ņƒ. ĐĄĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚ иСĐŧĐĩĐŊиĐģŅŅ Ņ Ņ€Đ°ĐŊĐĩĐĩ дОвĐĩŅ€ĐĩĐŊĐŊĐžĐŗĐž ĐŊĐ° ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅ‹Đš. ВозĐŧĐžĐļĐŊĐž, ŅĐĩŅ€Đ˛ĐĩŅ€ ОйĐŊОвиĐģ ŅĐ˛ĐžĐš ŅĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚. ХвŅĐļиŅ‚ĐĩŅŅŒ Ņ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ĐžĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° Đ´ĐģŅ ĐŋĐžĐģŅƒŅ‡ĐĩĐŊиŅ ĐžĐļидаĐĩĐŧĐžĐŗĐž ĐžŅ‚ĐŋĐĩŅ‡Đ°Ņ‚ĐēĐ° ŅĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚Đ°. ПŅ€Đ¸ĐŧиŅ‚Đĩ ŅĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚ Ņ‚ĐžĐģŅŒĐēĐž ĐĩŅĐģи Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° ĐžĐŋŅƒĐąĐģиĐēОваĐģ ĐžŅ‚ĐŋĐĩŅ‡Đ°Ņ‚ĐžĐē ŅĐĩŅ€Ņ‚иŅ„иĐēĐ°Ņ‚Đ°, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚вŅƒĐĩŅ‚ ŅƒĐēаСаĐŊĐŊĐžĐŧŅƒ вŅ‹ŅˆĐĩ. - ПодŅ€ĐžĐąĐŊĐžŅŅ‚и ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ЛŅŽĐ´Đ¸ @@ -372,7 +327,6 @@ НĐĩĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊŅ‹Đš ID. ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ email иĐģи Matrix ID вида \'@localpart:domain\' ПРИГЛАШЕНĐĢ ПРИСОЕДИНИЛИСĐŦ - ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ° ĐžŅ‚Ņ‡ĐĩŅ‚Đ° Đž ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚Đĩ ВŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ ŅĐēŅ€Ņ‹Ņ‚ŅŒ вŅĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ? @@ -380,7 +334,6 @@ ĐŖŅ‡Ņ‚иŅ‚Đĩ, Ņ‡Ņ‚Đž ŅŅ‚Đž Đ´ĐĩĐšŅŅ‚виĐĩ ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅŅ‚иŅ‚ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ и ĐŧĐžĐļĐĩŅ‚ СаĐŊŅŅ‚ŅŒ ĐŊĐĩĐēĐžŅ‚ĐžŅ€ĐžĐĩ вŅ€ĐĩĐŧŅ. ОŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ СаĐŗŅ€ŅƒĐˇĐēŅƒ ОŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ СаĐŗŅ€ŅƒĐˇĐēŅƒ - ПоиŅĐē ФиĐģŅŒŅ‚Ņ€ ŅĐŋиŅĐēĐ° ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš @@ -389,7 +342,6 @@ ĐĄĐžĐžĐ‘ĐŠĐ•ĐĐ˜Đ¯ ЛЮДИ ФАЙЛĐĢ - ПРИСОЕДИНИЛИСĐŦ КАĐĸАЛОГ @@ -402,18 +354,15 @@ ВойŅ‚и в ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ВойŅ‚и в ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ВвĐĩдиŅ‚Đĩ ID ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ иĐģи ĐŋŅĐĩвдОĐŊиĐŧ - ПŅ€ĐžŅĐŧĐžŅ‚Ņ€ ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐ° ПоиŅĐē в ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐĩâ€Ļ - ИСйŅ€Đ°ĐŊĐŊĐžĐĩ ĐŖĐŧĐĩĐŊŅŒŅˆĐ¸Ņ‚ŅŒ ĐŋŅ€Đ¸ĐžŅ€Đ¸Ņ‚ĐĩŅ‚ ПŅ€ŅĐŧОК Ņ‡Đ°Ņ‚ ПоĐēиĐŊŅƒŅ‚ŅŒ ОйŅŅƒĐļĐ´ĐĩĐŊиĐĩ ЗабŅ‹Ņ‚ŅŒ - ХООйŅ‰ĐĩĐŊиŅ НаŅŅ‚Ņ€ĐžĐšĐēи @@ -422,9 +371,7 @@ ПŅ€ĐžŅ‡Đ¸Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ АвŅ‚ĐžŅ€ŅĐēиĐĩ ĐŋŅ€Đ°Đ˛Đ° ПоĐģиŅ‚иĐēĐ° ĐēĐžĐŊŅ„идĐĩĐŊŅ†Đ¸Đ°ĐģŅŒĐŊĐžŅŅ‚и - - АваŅ‚Đ°Ņ€ ОŅ‚ОйŅ€Đ°ĐļĐ°ĐĩĐŧĐžĐĩ иĐŧŅ Email @@ -433,22 +380,18 @@ ДобавиŅ‚ŅŒ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊ ХиŅŅ‚ĐĩĐŧĐŊŅ‹Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ. ХвĐĩĐ´ĐĩĐŊиŅ Đž ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊии - ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ Đ´ĐģŅ ŅŅ‚ОК ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ Đ´ĐģŅ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸ ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ŅĐēŅ€Đ°ĐŊ ĐŊĐ° 3 ŅĐĩĐēŅƒĐŊĐ´Ņ‹ - В ĐŋĐĩŅ€ŅĐžĐŊĐ°ĐģŅŒĐŊŅ‹Ņ… Ņ‡Đ°Ņ‚Đ°Ņ… В ĐŗŅ€ŅƒĐŋĐŋОвŅ‹Ņ… Ņ‡Đ°Ņ‚Đ°Ņ… КоĐŗĐ´Đ° ĐŧĐĩĐŊŅ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐ°ŅŽŅ‚ в ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ВŅ‹ĐˇĐžĐ˛Ņ‹ ХООйŅ‰ĐĩĐŊиŅ ĐžŅ‚ йОŅ‚Đ° - ХиĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņ ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ Ņ„ĐžĐŊОвŅƒŅŽ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸ŅŽ ĐĸĐ°ĐšĐŧĐ°ŅƒŅ‚ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Đ¸ ЗадĐĩŅ€ĐļĐēĐ° ĐŧĐĩĐļĐ´Ņƒ ĐēĐ°ĐļдОК ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸ĐĩĐš - ВĐĩŅ€ŅĐ¸Ņ ВĐĩŅ€ŅĐ¸Ņ OLM ПŅ€Đ°Đ˛Đ¸ĐģĐ° и ŅƒŅĐģОвиŅ @@ -457,8 +400,6 @@ ПоĐģиŅ‚иĐēĐ° ĐēĐžĐŊŅ„идĐĩĐŊŅ†Đ¸Đ°ĐģŅŒĐŊĐžŅŅ‚и ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ вĐĩŅŅŒ ĐēŅŅˆ - - ПаŅ€Đ°ĐŧĐĩŅ‚Ņ€Ņ‹ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ИĐŗĐŊĐžŅ€Đ¸Ņ€ŅƒĐĩĐŧŅ‹Đĩ @@ -484,19 +425,15 @@ АŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Ņ ПаŅ€ĐžĐģŅŒ: ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ - АвŅ‚ĐžŅ€Đ¸ĐˇĐžĐ˛Đ°ĐŊ ĐēĐ°Đē ĐĄĐĩŅ€Đ˛ĐĩŅ€ ĐĄĐĩŅ€Đ˛ĐĩŅ€ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ - ОĐļидаĐĩŅ‚ŅŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊŅƒŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ и ĐŋĐĩŅ€ĐĩКдиŅ‚Đĩ ĐŋĐž вŅ‹ŅĐģĐ°ĐŊĐŊОК ŅŅŅ‹ĐģĐēĐĩ. ЗаŅ‚ĐĩĐŧ ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ. НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹. ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊŅƒŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ и ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŊĐ° ŅĐžĐ´ĐĩŅ€ĐļĐ°Ņ‰ŅƒŅŽŅŅ ŅŅŅ‹ĐģĐēŅƒ. ПоŅĐģĐĩ ŅŅ‚ĐžĐŗĐž ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ. - Đ­Ņ‚ĐžŅ‚ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ ŅƒĐļĐĩ СаĐŊŅŅ‚. ĐĸĐ°ĐēОК Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ ĐŊĐĩ ĐŊаКдĐĩĐŊ. Đ­Ņ‚ĐžŅ‚ ĐŊĐžĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° ŅƒĐļĐĩ иŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ. - ĐĄĐŧĐĩĐŊĐ° ĐŋĐ°Ņ€ĐžĐģŅ ĐĸĐĩĐēŅƒŅ‰Đ¸Đš ĐŋĐ°Ņ€ĐžĐģŅŒ НовŅ‹Đš ĐŋĐ°Ņ€ĐžĐģŅŒ @@ -506,13 +443,9 @@ ОŅ‚ОйŅ€Đ°ĐļĐ°Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ %s? ĐŖŅ‡Ņ‚иŅ‚Đĩ, Ņ‡Ņ‚Đž ŅŅ‚Đž Đ´ĐĩĐšŅŅ‚виĐĩ ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅŅ‚иŅ‚ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ и ĐŧĐžĐļĐĩŅ‚ СаĐŊŅŅ‚ŅŒ ĐŊĐĩĐēĐžŅ‚ĐžŅ€ĐžĐĩ вŅ€ĐĩĐŧŅ. - ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ŅƒĐ´Đ°ĐģиŅ‚ŅŒ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО Đ´ĐģŅ ĐŋĐžĐģŅƒŅ‡ĐĩĐŊиŅ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК? - ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ŅƒĐ´Đ°ĐģиŅ‚ŅŒ %1$s %2$s? - ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅŅ‚Ņ€Đ°ĐŊŅƒ - ĐĄŅ‚Ņ€Đ°ĐŊĐ° ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ° вŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅŅ‚Ņ€Đ°ĐŊŅƒ ĐĸĐĩĐģĐĩŅ„ĐžĐŊ @@ -522,21 +455,17 @@ ВвĐĩдиŅ‚Đĩ ĐēОд Đ°ĐēŅ‚иваŅ†Đ¸Đ¸ ОŅˆĐ¸ĐąĐēĐ° ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° Код - - АваŅ‚Đ°Ņ€ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ НазваĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐĸĐĩĐŧĐ° МĐĩŅ‚Đēи ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ОŅ‚ĐŧĐĩŅ‡ĐĩĐŊĐž ĐēĐ°Đē: - ИСйŅ€Đ°ĐŊĐŊĐžĐĩ МаĐģОваĐļĐŊŅ‹Đĩ НĐĩŅ‚ - ДоŅŅ‚ŅƒĐŋĐŊĐžŅŅ‚ŅŒ и видиĐŧĐžŅŅ‚ŅŒ ОŅ‚ОйŅ€Đ°ĐļĐ°Ņ‚ŅŒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ в ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐĩ @@ -544,22 +473,18 @@ ДоŅŅ‚ŅƒĐŋ Đē иŅŅ‚ĐžŅ€Đ¸Đ¸ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ КŅ‚Đž ĐŧĐžĐļĐĩŅ‚ Ņ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ иŅŅ‚ĐžŅ€Đ¸ŅŽ? КŅ‚Đž иĐŧĐĩĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ? - ВŅĐĩ ĐĸĐžĐģŅŒĐēĐž Ņ‡ĐģĐĩĐŊŅ‹ (Ņ ĐŧĐžĐŧĐĩĐŊŅ‚Đ° вŅ‹ĐąĐžŅ€Đ° ŅŅ‚ОК ĐžĐŋŅ†Đ¸Đ¸) ĐĸĐžĐģŅŒĐēĐž Ņ‡ĐģĐĩĐŊŅ‹ (Ņ ĐŧĐžĐŧĐĩĐŊŅ‚Đ° ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ) ĐĸĐžĐģŅŒĐēĐž Ņ‡ĐģĐĩĐŊŅ‹ (Ņ ĐŧĐžĐŧĐĩĐŊŅ‚Đ° ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊĐĩĐŊиŅ) - ДĐģŅ ĐŗĐĩĐŊĐĩŅ€Đ°Ņ†Đ¸Đ¸ ŅŅŅ‹ĐģĐēи ĐēĐžĐŧĐ°ĐŊĐ´Đ° Đ´ĐžĐģĐļĐŊĐ° иĐŧĐĩŅ‚ŅŒ Đ°Đ´Ņ€ĐĩŅ. ĐĸĐžĐģŅŒĐēĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊĐŊŅ‹Đĩ ВŅĐĩ Ņƒ ĐēĐžĐŗĐž ĐĩŅŅ‚ŅŒ ŅŅŅ‹ĐģĐēĐ° ĐŊĐ° ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ, ĐēŅ€ĐžĐŧĐĩ ĐŗĐžŅŅ‚ĐĩĐš ВŅĐĩ Ņƒ ĐēĐžĐŗĐž ĐĩŅŅ‚ŅŒ ŅŅŅ‹ĐģĐēĐ° ĐŊĐ° ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ, вĐēĐģŅŽŅ‡Đ°Ņ ĐŗĐžŅŅ‚ĐĩĐš - ЗабаĐŊĐĩĐŊŅ‹Đĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи - ДоĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊĐž ВĐŊŅƒŅ‚Ņ€ĐĩĐŊĐŊиК ID ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ @@ -571,36 +496,27 @@ ВаĐŧ ĐŊĐĩОйŅ…ОдиĐŧĐž вŅ‹ĐšŅ‚и, Ņ‡Ņ‚ОйŅ‹ вĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ. ШиŅ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ Ņ‚ĐžĐģŅŒĐēĐž Đ´ĐģŅ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐŊŅ‹Ņ… ŅĐĩŅŅĐ¸Đš НиĐēĐžĐŗĐ´Đ° ĐŊĐĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ĐŊĐ° ĐŊĐĩĐŋŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐŊŅ‹Đĩ ŅĐĩŅŅĐ¸Đ¸ в ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ Ņ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸. - ĐŖ ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐĩŅ‰Đĩ ĐŊĐĩŅ‚ ĐģĐžĐēĐ°ĐģŅŒĐŊĐžĐŗĐž Đ°Đ´Ņ€ĐĩŅĐ° НовŅ‹Đš Đ°Đ´Ņ€ĐĩŅ (ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ #foo:matrix.org") - НĐĩвĐĩŅ€ĐŊŅ‹Đš Ņ„ĐžŅ€ĐŧĐ°Ņ‚ ĐŋŅĐĩвдОĐŊиĐŧĐ° \'%s\' ĐŊĐĩвĐĩŅ€ĐŊŅ‹Đš Ņ„ĐžŅ€ĐŧĐ°Ņ‚ ĐŋŅĐĩвдОĐŊиĐŧĐ° ДĐģŅ ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚ ĐžŅĐŊОвĐŊĐžĐŗĐž Đ°Đ´Ņ€ĐĩŅĐ°. ПŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиŅ ĐžŅĐŊОвĐŊĐžĐŗĐž Đ°Đ´Ņ€ĐĩŅĐ° - ĐŖŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ ĐēĐ°Đē ĐžŅĐŊОвĐŊОК Đ°Đ´Ņ€ĐĩŅ ĐĄĐąŅ€ĐžŅĐ¸Ņ‚ŅŒ ĐžŅĐŊОвĐŊОК Đ°Đ´Ņ€ĐĩŅ КоĐŋиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ID ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ КоĐŋиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ°Đ´Ņ€ĐĩŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ - В ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ. В ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ вŅ‹ĐēĐģŅŽŅ‡ĐĩĐŊĐž ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ. ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ (вĐŊиĐŧĐ°ĐŊиĐĩ: ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅĐŊОва ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊĐž!) - КаŅ‚Đ°ĐģĐžĐŗ - %s ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ŅŅ СаĐŗŅ€ŅƒĐˇĐ¸Ņ‚ŅŒ иŅŅ‚ĐžŅ€Đ¸ŅŽ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹, ĐŊĐž ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ĐĩĐĩ ĐŊĐ°ĐšŅ‚и. - - ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž ŅĐēвОСĐŊĐžĐŧ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊии - ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž ŅĐžĐąŅ‹Ņ‚ии ID ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ Curve25519 идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸ĐžĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ @@ -608,7 +524,6 @@ АĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ ID ŅĐĩŅĐ¸Đ¸ ОŅˆĐ¸ĐąĐēĐ° Đ´ĐĩŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đēи - ИĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ Đž ŅĐĩŅŅĐ¸Đ¸ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ĐĩĐģŅ ПŅƒĐąĐģиŅ‡ĐŊĐžĐĩ иĐŧŅ ПŅƒĐąĐģиŅ‡ĐŊĐžĐĩ иĐŧŅ @@ -616,7 +531,6 @@ КĐģŅŽŅ‡ ŅĐĩŅŅĐ¸Đ¸ ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° Ed25519 ĐžŅ‚ĐŋĐĩŅ‡Đ°Ņ‚ĐžĐē - Đ­ĐēŅĐŋĐžŅ€Ņ‚ E2E ĐēĐģŅŽŅ‡ĐĩĐš ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ Đ­ĐēŅĐŋĐžŅ€Ņ‚ ĐēĐģŅŽŅ‡ĐĩĐš ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ Đ­ĐēŅĐŋĐžŅ€Ņ‚ ĐēĐģŅŽŅ‡ĐĩĐš в ĐģĐžĐēĐ°ĐģŅŒĐŊŅ‹Đš Ņ„Đ°ĐšĐģ @@ -626,31 +540,25 @@ E2E ĐēĐģŅŽŅ‡Đ¸ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊŅ‹ в \'%s\'. ПŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ: ŅŅ‚ĐžŅ‚ Ņ„Đ°ĐšĐģ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅƒĐ´Đ°ĐģĐĩĐŊ ĐŋĐžŅĐģĐĩ Đ´ĐĩиĐŊŅŅ‚Đ°ĐģĐģŅŅ†Đ¸Đ¸ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ. - ИĐŧĐŋĐžŅ€Ņ‚ E2E ĐēĐģŅŽŅ‡ĐĩĐš ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ИĐŧĐŋĐžŅ€Ņ‚ ĐēĐģŅŽŅ‡ĐĩĐš ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ИĐŧĐŋĐžŅ€Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐģŅŽŅ‡Đ¸ иС ĐģĐžĐēĐ°ĐģŅŒĐŊĐžĐŗĐž Ņ„Đ°ĐšĐģĐ° ИĐŧĐŋĐžŅ€Ņ‚ ШиŅ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ‚ĐžĐģŅŒĐēĐž Đ´ĐģŅ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐŊŅ‹Ņ… ŅĐĩŅŅĐ¸Đš НĐĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐŊĐĩĐŋŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐŊŅ‹Đŧ ŅĐĩŅŅĐ¸ŅĐŧ Ņ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸. - НĐĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐž ПŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐž В Ņ‡ĐĩŅ€ĐŊĐžĐŧ ŅĐŋиŅĐēĐĩ - ĐŊĐĩиСвĐĩŅŅ‚ĐŊĐ°Ņ ŅĐĩŅŅĐ¸Ņ ĐŊиŅ‡ĐĩĐŗĐž - ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ОŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ БĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ РаСŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ - ПŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ŅĐĩŅŅĐ¸ŅŽ ЧŅ‚ОйŅ‹ ŅƒĐąĐĩдиŅ‚ŅŒŅŅ, Ņ‡Ņ‚Đž ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸ ĐŧĐžĐļĐŊĐž дОвĐĩŅ€ŅŅ‚ŅŒ, ОйŅ€Đ°Ņ‚иŅ‚ĐĩŅŅŒ Đē ĐĩĐŗĐž вĐģĐ°Đ´ĐĩĐģŅŒŅ†Ņƒ, иŅĐŋĐžĐģŅŒĐˇŅƒŅ Đ´Ņ€ŅƒĐŗиĐĩ ŅĐŋĐžŅĐžĐąŅ‹ (ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€, ĐģиŅ‡ĐŊĐž иĐģи ĐŋĐž Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊŅƒ), и ŅĐŋŅ€ĐžŅĐ¸Ņ‚Đĩ, ŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚вŅƒĐĩŅ‚ Đģи ĐēĐģŅŽŅ‡, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ĐžĐŊ видиŅ‚ в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ… Đ´ĐģŅ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸: "ЕŅĐģи ŅĐžĐ˛ĐŋĐ°Đ´Đ°ĐĩŅ‚, Ņ‚Đž ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐēĐŊĐžĐŋĐēŅƒ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ĐŊиĐļĐĩ. ЕŅĐģи ĐŊĐĩ ŅĐžĐ˛ĐŋĐ°Đ´Đ°ĐĩŅ‚, вОСĐŧĐžĐļĐŊĐž ĐēŅ‚Đž-Ņ‚Đž ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ŅŅ ĐŋĐĩŅ€ĐĩŅ…ваŅ‚иŅ‚ŅŒ ŅĐĩŅŅĐ¸ŅŽ и вŅ‹ СаŅ…ĐžŅ‚иŅ‚Đĩ дОйавиŅ‚ŅŒ ĐĩĐŗĐž в Ņ‡ĐĩŅ€ĐŊŅ‹Đš ŅĐŋиŅĐžĐē. В ĐąŅƒĐ´ŅƒŅ‰ĐĩĐŧ Đ´Đ°ĐŊĐŊŅ‹Đš ĐŋŅ€ĐžŅ†ĐĩŅŅ ĐąŅƒĐ´ĐĩŅ‚ ŅƒĐģŅƒŅ‡ŅˆĐĩĐŊ." Đ¯ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Đģ, Ņ‡Ņ‚Đž ĐēĐģŅŽŅ‡Đ¸ ŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‚ - КоĐŧĐŊĐ°Ņ‚Đ° ŅĐžĐ´ĐĩŅ€ĐļиŅ‚ ĐŊĐĩиСвĐĩŅŅ‚ĐŊŅ‹Đĩ ŅĐĩŅŅĐ¸Đ¸ Đ­Ņ‚Đ° ĐēĐžĐŧĐŊĐ°Ņ‚Đ° ŅĐžĐ´ĐĩŅ€ĐļиŅ‚ ĐŊĐĩиСвĐĩŅŅ‚ĐŊŅ‹Đĩ ŅĐĩŅŅĐ¸Đ¸, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ĐŊĐĩ ĐąŅ‹Đģи ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊŅ‹. @@ -658,7 +566,6 @@ \nПĐĩŅ€ĐĩĐ´ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐĩĐŊиĐĩĐŧ Ņ€ĐĩĐēĐžĐŧĐĩĐŊĐ´ŅƒĐĩĐŧ ваĐŧ ĐŋŅ€ĐžĐšŅ‚и ĐŋŅ€ĐžŅ†ĐĩŅŅ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи Đ´ĐģŅ ĐēĐ°ĐļдОК ŅĐĩŅŅĐ¸Đ¸, ĐŊĐž вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ĐŋОвŅ‚ĐžŅ€ĐŊĐž, ĐŊĐĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŅ. \n \nНĐĩиСвĐĩŅŅ‚ĐŊŅ‹Đĩ ŅĐĩŅŅĐ¸Đ¸: - ВŅ‹ĐąĐžŅ€ ŅĐŋиŅĐēĐ° ĐēĐžĐŧĐŊĐ°Ņ‚ ĐĄĐĩŅ€Đ˛ĐĩŅ€ вОСĐŧĐžĐļĐŊĐž ĐŊĐĩĐ´ĐžŅŅ‚ŅƒĐŋĐĩĐŊ иĐģи ĐŋĐĩŅ€ĐĩĐŗŅ€ŅƒĐļĐĩĐŊ @@ -666,30 +573,23 @@ URL Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° ВŅĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ %s ВŅĐĩ ĐŧĐĩŅŅ‚ĐŊŅ‹Đĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ %s - ПоиŅĐē в иŅŅ‚ĐžŅ€Đ¸Đ¸ ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēиК иĐŊŅ‚ĐĩŅ€Ņ„ĐĩĐšŅ Đ¯ĐˇŅ‹Đē ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅĐˇŅ‹Đē - ЗаĐŋŅƒŅĐēĐ°Ņ‚ŅŒ ĐŋŅ€Đ¸ СаĐŗŅ€ŅƒĐˇĐēĐĩ ПоĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ ĐŧĐĩŅ‚Đēи вŅ€ĐĩĐŧĐĩĐŊи Đ´ĐģŅ вŅĐĩŅ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК - 3 Đ´ĐŊŅ 1 ĐŊĐĩĐ´ĐĩĐģŅ 1 ĐŧĐĩŅŅŅ† ПоŅŅ‚ĐžŅĐŊĐŊĐž - ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ ĐŧĐĩдиа ĐēŅŅˆ НĐĩĐ´ĐžŅŅ‚ŅƒĐŋĐĩĐŊ - КаŅ‚Đ°ĐģĐžĐŗ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš КАĐĸАЛОГ ПОЛĐŦЗОВАĐĸЕЛЕЙ (%s) Đ ĐĩĐļиĐŧ ŅĐēĐžĐŊĐžĐŧии Ņ‚Ņ€Đ°Ņ„иĐēĐ° - ĐĸĐĩĐŧĐ° - РаСĐŧĐĩŅ€ ŅˆŅ€Đ¸Ņ„Ņ‚Đ° ОŅ‡ĐĩĐŊŅŒ ĐŧĐĩĐģĐēиК МаĐģŅ‹Đš @@ -699,19 +599,15 @@ ĐĄĐ°ĐŧŅ‹Đš йОĐģŅŒŅˆĐžĐš ОĐŗŅ€ĐžĐŧĐŊŅ‹Đš ĐĄĐžŅ…Ņ€Đ°ĐŊиŅ‚ŅŒ ĐŧĐĩдиа - ХвĐĩŅ‚ĐģĐ°Ņ Ņ‚ĐĩĐŧĐ° ĐĸŅ‘ĐŧĐŊĐ°Ņ Ņ‚ĐĩĐŧĐ° ЧŅ‘Ņ€ĐŊĐ°Ņ Ņ‚ĐĩĐŧĐ° - ЗвŅƒĐē ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ПоĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ ĐŧĐĩŅ‚Đēи вŅ€ĐĩĐŧĐĩĐŊи в 12-Ņ‡Đ°ŅĐžĐ˛ĐžĐŧ Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đĩ - ВаĐŧ ĐŊŅƒĐļĐŊĐž Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиĐĩ ĐŊĐ° ŅƒĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ видĐļĐĩŅ‚Đ°Đŧи в ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ ХОСдаĐŊиĐĩ видĐļĐĩŅ‚Đ° ĐŊĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ОŅŅƒŅ‰ĐĩŅŅ‚вĐģŅŅ‚ŅŒ ĐēĐžĐŊŅ„ĐĩŅ€ĐĩĐŊŅ† СвОĐŊĐēи Ņ‡ĐĩŅ€ĐĩС Jitsi ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ŅƒĐ´Đ°ĐģиŅ‚ŅŒ видĐļĐĩŅ‚ иС ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹? - НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ŅĐžĐˇĐ´Đ°Ņ‚ŅŒ видĐļĐĩŅ‚. НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ СаĐŋŅ€ĐžŅ. @@ -722,10 +618,8 @@ В СаĐŋŅ€ĐžŅĐĩ ĐžŅ‚ŅŅƒŅ‚ŅŅ‚вŅƒĐĩŅ‚ user_id. КоĐŧĐŊĐ°Ņ‚Đ° %s ĐŊĐĩвидиĐŧĐ°. ДобавиŅ‚ŅŒ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ Matrix - ХиĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņâ€Ļ МоĐŊиŅ‚ĐžŅ€Đ¸ĐŊĐŗ ŅĐžĐąŅ‹Ņ‚иК - ВŅ‹ĐˇĐžĐ˛ ХООйŅ‰ĐĩĐŊиŅ, ŅĐžĐ´ĐĩŅ€ĐļĐ°Ņ‰Đ¸Đĩ ĐŧĐžĐĩ иĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ВŅ‹ дОйавиĐģи ĐŊОвОŅŽ ŅĐĩŅŅĐ¸ŅŽ \'%s\', СаĐŋŅ€Đ°ŅˆĐ¸Đ˛Đ°ŅŽŅ‰Đ°Ņ ĐēĐģŅŽŅ‡Đ¸ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ. @@ -734,97 +628,70 @@ НаŅ‡Đ°Ņ‚ŅŒ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ ПодĐĩĐģиŅ‚ŅŒŅŅ ĐąĐĩС ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи ИĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ СаĐŋŅ€ĐžŅ - ЗвŅƒĐēОвŅ‹Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ БĐĩССвŅƒŅ‡ĐŊŅ‹Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ - ĐĄĐ´ĐĩĐģĐ°Ņ‚ŅŒ Ņ„ĐžŅ‚Đž ĐĄĐŊŅŅ‚ŅŒ видĐĩĐž - АĐŊĐ°ĐģиŅ‚иĐēĐ° - ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ вŅŅ‚Ņ€ĐžĐĩĐŊĐŊŅƒŅŽ ĐēĐ°ĐŧĐĩŅ€Ņƒ - ХООйŅ‰Đ¸Ņ‚ŅŒ Ой ĐžŅˆĐ¸ĐąĐēĐĩ - ВĐŊиĐŧĐ°ĐŊиĐĩ! КоĐŊŅ„ĐĩŅ€ĐĩĐŊŅ†-ŅĐ˛ŅĐˇŅŒ ĐŊĐ°Ņ…ОдиŅ‚ŅŅ в Ņ€Đ°ĐˇŅ€Đ°ĐąĐžŅ‚ĐēĐĩ и ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐŊĐĩĐŊĐ°Đ´ĐĩĐļĐŊОК. - ОŅˆĐ¸ĐąĐēĐ° ĐēĐžĐŧĐ°ĐŊĐ´Ņ‹ НĐĩŅ€Đ°ŅĐŋОСĐŊĐ°ĐŊĐŊĐ°Ņ ĐēĐžĐŧĐ°ĐŊĐ´Đ°: %s - ВŅ‹ĐēĐģ ГŅ€ĐžĐŧĐēĐž - ЗаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ - ХвĐĩĐ´ĐĩĐŊиŅ Đž ŅĐžĐžĐąŅ‰ĐĩŅŅ‚вĐĩ - ЗаĐŗŅ€ŅƒĐˇĐēĐ°â€Ļ - "ЗаĐēŅ€Ņ‹Ņ‚ŅŒ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ" ХООйŅ‰ĐĩŅŅ‚ва - ПоиŅĐē ŅĐžĐžĐąŅ‰ĐĩŅŅ‚в - ПŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Ņ‚ŅŒ ХООйŅ‰ĐĩŅŅ‚ва НĐĩŅ‚ ĐŗŅ€ŅƒĐŋĐŋ - ВŅ‹ Đ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊĐž Ņ…ĐžŅ‚иŅ‚Đĩ ĐŊĐ°Ņ‡Đ°Ņ‚ŅŒ ĐŊОвŅ‹Đš Ņ‡Đ°Ņ‚ Ņ %s? ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ĐŊĐ°Ņ‡Đ°Ņ‚ŅŒ ĐŗĐžĐģĐžŅĐžĐ˛ĐžĐš вŅ‹ĐˇĐžĐ˛? ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ĐŊĐ°Ņ‡Đ°Ņ‚ŅŒ видĐĩОвŅ‹ĐˇĐžĐ˛? - ĐĄĐŋиŅĐžĐē ĐŗŅ€ŅƒĐŋĐŋ - БĐģĐžĐēиŅ€ŅƒŅŽŅ‰Đ¸Đš ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ вŅ‹ĐŗĐžĐŊиŅ‚ иŅ… иС ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ и ĐŊĐĩ ĐŋОСвОĐģиŅ‚ иĐŧ ŅĐŊОва ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ. - ВŅĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ (ĐŗŅ€ĐžĐŧĐēĐž) ВŅĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐĸĐžĐģŅŒĐēĐž ŅƒĐŋĐžĐŧиĐŊĐ°ĐŊиŅ БĐĩС СвŅƒĐēĐ° - ДобавиŅ‚ŅŒ ŅŅ€ĐģŅ‹Đē ĐŊĐ° ĐŗĐģавĐŊŅ‹Đš ŅĐēŅ€Đ°ĐŊ - + ДобавиŅ‚ŅŒ ĐŊĐ° ĐŗĐģавĐŊŅ‹Đš ŅĐēŅ€Đ°ĐŊ ПŅ€ĐĩĐ´ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ URL-Đ°Đ´Ņ€ĐĩŅĐžĐ˛ ВибŅ€Đ°Ņ†Đ¸Ņ ĐŋŅ€Đ¸ ŅƒĐŋĐžĐŧиĐŊĐ°ĐŊии ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ - ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ НовŅ‹Đš ID ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва (ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ +foo:matrix.org) НĐĩĐ´ĐžĐŋŅƒŅŅ‚иĐŧŅ‹Đš ID ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва \'%s\' ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅ‹Đš ID ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва - - ХОСдаŅ‚ŅŒ ХОСдаŅ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩŅŅ‚вО ИĐŧŅ ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва ПŅ€Đ¸ĐŧĐĩŅ€ ID ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва ĐŋŅ€Đ¸ĐŧĐĩŅ€ - НаŅ‡Đ°ĐģĐž ЛŅŽĐ´Đ¸ КоĐŧĐŊĐ°Ņ‚Ņ‹ НĐĩŅ‚ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš - КоĐŧĐŊĐ°Ņ‚Ņ‹ ПŅ€Đ¸ŅĐžĐĩдиĐŊиĐģŅŅ ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊ ФиĐģŅŒŅ‚Ņ€ ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēОв ĐŗŅ€ŅƒĐŋĐŋŅ‹ ФиĐģŅŒŅ‚Ņ€ ĐēĐžĐŧĐŊĐ°Ņ‚ ĐŗŅ€ŅƒĐŋĐŋŅ‹ - АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва ĐŊĐĩ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авиĐģ ĐŋОдŅ€ĐžĐąĐŊĐžĐŗĐž ĐžĐŋиŅĐ°ĐŊиŅ ŅŅ‚ĐžĐŗĐž ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва. - ВаŅ вŅ‹ĐŗĐŊĐ°Đģ %2$s иС %1$s ВаŅ СайаĐŊиĐģ %2$s в %1$s ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %1$s ПŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ ŅĐŊОва ЗабŅ‹Ņ‚ŅŒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ВŅŅ‚Ņ€ŅŅ…ĐŊиŅ‚Đĩ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО, Ņ‡Ņ‚ОйŅ‹ ŅĐžĐžĐąŅ‰Đ¸Ņ‚ŅŒ Ой ĐžŅˆĐ¸ĐąĐēĐĩ - ДĐĩĐšŅŅ‚виŅ ĐĄĐŋиŅĐžĐē ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēОв ОŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ СаĐŗĐžĐģОвОĐē @@ -833,74 +700,68 @@ %d ĐēĐžĐŧĐŊĐ°Ņ‚Đ° %d ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ %d ĐēĐžĐŧĐŊĐ°Ņ‚ - + %d ĐēĐžĐŧĐŊĐ°Ņ‚Đ° %d ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ %d ĐēĐžĐŧĐŊĐ°Ņ‚ - + %1$s в %2$s - %d Đ°ĐēŅ‚ивĐŊŅ‹Đš видĐļĐĩŅ‚ %d Đ°ĐēŅ‚ивĐŊŅ‹Ņ… видĐļĐĩŅ‚Đ° %d Đ°ĐēŅ‚ивĐŊŅ‹Ņ… видĐļĐĩŅ‚Ов - + - АваŅ‚Đ°Ņ€ - %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 ĐŊĐĩĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐŊŅ‹Ņ… ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК - + ПоĐģŅƒŅ‡Đ¸Ņ‚ŅŒ аваŅ‚Đ°Ņ€ ЗаĐŧĐĩŅ‚ĐēĐ° аваŅ‚Đ°Ņ€Đ° ХООйŅ‰ĐĩŅŅ‚ва - Đ­Ņ‚Đ° ĐēĐžĐŧĐŊĐ°Ņ‚Đ° ĐŊĐĩ ĐŋĐžĐēаСŅ‹Đ˛Đ°ĐĩŅ‚ ĐģŅŽĐąŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва КоĐŊŅ„идĐĩĐŊŅ†Đ¸Đ°ĐģŅŒĐŊĐžŅŅ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК НоŅ€ĐŧĐ°ĐģŅŒĐŊŅ‹Đš @@ -909,74 +770,55 @@ â€ĸ ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ŅĐžĐ´ĐĩŅ€ĐļĐ°Ņ‚ Ņ‚ĐžĐģŅŒĐēĐž ĐŧĐĩŅ‚Đ°Đ´Đ°ĐŊĐŊŅ‹Đĩ â€ĸ ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ŅĐžĐ´ĐĩŅ€ĐļĐ°Ņ‚ ĐŧĐĩŅ‚Đ°Đ´Đ°ĐŊĐŊŅ‹Đĩ и Đ´Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ â€ĸ ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐŊĐĩ ĐąŅƒĐ´ŅƒŅ‚ ĐŋĐžĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - КоĐŊŅ„идĐĩĐŊŅ†Đ¸Đ°ĐģŅŒĐŊĐžŅŅ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК Element ĐŧĐžĐļĐĩŅ‚ Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ Đ´ĐģŅ ŅƒĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиŅ ĐēĐžĐŊŅ„идĐĩĐŊŅ†Đ¸Đ°ĐģŅŒĐŊĐžŅŅ‚ŅŒŅŽ и ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚ŅŒŅŽ ваŅˆĐ¸Ņ… ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК. Đ­Ņ‚Đž ĐŧĐžĐļĐĩŅ‚ ĐŋОвĐģиŅŅ‚ŅŒ ĐŊĐ° вŅ€ĐĩĐŧŅ Ņ€Đ°ĐąĐžŅ‚Ņ‹ ĐžŅ‚ йаŅ‚Đ°Ņ€Đĩи. ПŅ€ĐĩĐ´ĐžŅŅ‚авиŅ‚ŅŒ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиĐĩ ВŅ‹ĐąŅ€Đ°Ņ‚ŅŒ Đ´Ņ€ŅƒĐŗОК ваŅ€Đ¸Đ°ĐŊŅ‚ - ОĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊĐŊĐ°Ņ ĐēĐžĐŊŅ„идĐĩĐŊŅ†Đ¸Đ°ĐģŅŒĐŊĐžŅŅ‚ŅŒ ĐŊĐ°Đ´ĐĩĐļĐŊĐž ĐžŅ‚ Matrix-Homeserver ĐŋĐžĐģŅƒŅ‡ĐĩĐŊĐž ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅŅ‚иĐēĐĩŅ€ - ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅŅ‚иĐēĐĩŅ€ ĐŖ ваŅ ŅĐĩĐšŅ‡Đ°Ņ ĐŊĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋĐŊŅ‹Ņ… ŅŅ‚иĐēĐĩŅ€ĐžĐ˛. ДобавиŅ‚ŅŒ ŅĐĩĐšŅ‡Đ°Ņ? - ДĐĩĐ°ĐēŅ‚иваŅ†Đ¸Ņ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚Đ° ДĐĩĐ°ĐēŅ‚ивиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐŧОК Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ - ОŅ‚ĐŋŅ€Đ°Đ˛ĐēĐ° Đ°ĐŊĐ°ĐģиŅ‚иŅ‡ĐĩŅĐēиŅ… Đ´Đ°ĐŊĐŊŅ‹Ņ… Element ŅĐžĐąĐ¸Ņ€Đ°ĐĩŅ‚ Đ°ĐŊĐžĐŊиĐŧĐŊŅƒŅŽ Đ°ĐŊĐ°ĐģиŅ‚иĐēŅƒ Đ´ĐģŅ ŅƒĐģŅƒŅ‡ŅˆĐĩĐŊиŅ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, вĐēĐģŅŽŅ‡Đ¸Ņ‚Đĩ Đ°ĐŊĐ°ĐģиŅ‚иĐēŅƒ, Ņ‡Ņ‚ОйŅ‹ ĐŋĐžĐŧĐžŅ‡ŅŒ ĐŊĐ°Đŧ ŅƒĐģŅƒŅ‡ŅˆĐ¸Ņ‚ŅŒ Element. Да, Ņ Ņ…ĐžŅ‡Ņƒ ĐŋĐžĐŧĐžŅ‡ŅŒ! - ОбŅĐˇĐ°Ņ‚ĐĩĐģŅŒĐŊŅ‹Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ ĐžŅ‚ŅŅƒŅ‚ŅŅ‚вŅƒĐĩŅ‚. ПаŅ€Đ°ĐŧĐĩŅ‚Ņ€ ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģĐĩĐŊ. ДĐģŅ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐĩĐŊиŅ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиŅ ŅŅ‚ĐžĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° %1$s вŅ‹ Đ´ĐžĐģĐļĐŊŅ‹ ОСĐŊĐ°ĐēĐžĐŧиŅ‚ŅŒŅŅ и ĐŋŅ€Đ¸ĐŊŅŅ‚ŅŒ ĐŖŅĐģОвиŅ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиŅ. ОзĐŊĐ°ĐēĐžĐŧиŅ‚ŅŒŅŅ ŅĐĩĐšŅ‡Đ°Ņ - ДĐĩĐ°ĐēŅ‚ивиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ŅƒĐ´Đ°ĐģиŅ‚Đĩ вŅĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ Ņ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģ, ĐŋĐžŅĐģĐĩ Đ´ĐĩĐ°ĐēŅ‚иваŅ†Đ¸Đ¸ ĐŧĐžĐĩĐŗĐž Đ°ĐēĐēĐ°ŅƒĐŊŅ‚Đ° (ĐŋŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ: ĐąŅƒĐ´ŅƒŅ‰Đ¸Đĩ ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēи ŅƒĐ˛Đ¸Đ´ŅŅ‚ ĐŊĐĩĐŋĐžĐģĐŊŅƒŅŽ иŅŅ‚ĐžŅ€Đ¸ŅŽ Ņ€Đ°ĐˇĐŗОвОŅ€ĐžĐ˛) ЧŅ‚ОйŅ‹ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ, ввĐĩдиŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒ: ДĐĩĐ°ĐēŅ‚ивиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ - Đ­Ņ‚Đž Đ´ĐĩĐšŅŅ‚виĐĩ ŅĐ´ĐĩĐģĐ°ĐĩŅ‚ ваŅˆŅƒ ŅƒŅ‡ĐĩŅ‚ĐŊŅƒŅŽ СаĐŋиŅŅŒ ĐŊĐĩĐŋŅ€Đ¸ĐŗОдĐŊОК Đ´ĐģŅ Đ´Đ°ĐģŅŒĐŊĐĩĐšŅˆĐĩĐŗĐž иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиŅ. ВŅ‹ ĐŊĐĩ ŅĐŧĐžĐļĐĩŅ‚Đĩ вОКŅ‚и в ŅĐ¸ŅŅ‚ĐĩĐŧŅƒ и ĐŊиĐēŅ‚Đž Đ´Ņ€ŅƒĐŗОК ĐŊĐĩ ŅĐŧĐžĐļĐĩŅ‚ СаĐŊОвО СаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅƒŅ‡ĐĩŅ‚ĐŊŅƒŅŽ СаĐŋиŅŅŒ Ņ ваŅˆĐ¸Đŧ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ‚ĐžŅ€ĐžĐŧ. ĐĸĐ°ĐēĐļĐĩ, ŅŅ‚Đž ĐŋŅ€Đ¸Đ˛ĐĩĐ´ĐĩŅ‚ Đē Ņ‚ĐžĐŧŅƒ, Ņ‡Ņ‚Đž вŅ‹ ĐŋĐžĐēиĐŊĐĩŅ‚Đĩ вŅĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹, в ĐēĐžŅ‚ĐžŅ€Ņ‹Ņ… ŅƒŅ‡Đ°ŅŅ‚вОваĐģи и Đ´Đ°ĐŊĐŊŅ‹Đĩ Đž ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ ĐąŅƒĐ´ŅƒŅ‚ ŅƒĐ´Đ°ĐģĐĩĐŊŅ‹ Ņ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸. Đ­Ņ‚Đž Đ´ĐĩĐšŅŅ‚виĐĩ ĐŊĐĩОйŅ€Đ°Ņ‚иĐŧĐž. По ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ, Đ´ĐĩĐ°ĐēŅ‚иваŅ†Đ¸Ņ ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ ĐŊĐĩ ŅƒĐ´Đ°ĐģŅĐĩŅ‚ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐŊŅ‹Đĩ ваĐŧи ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ. ЕŅĐģи вŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ, Ņ‡Ņ‚ОйŅ‹ ĐŧŅ‹ ŅƒĐ´Đ°ĐģиĐģи вŅĐĩ ваŅˆĐ¸ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - ĐŋĐžŅŅ‚авŅŒŅ‚Đĩ ĐžŅ‚ĐŧĐĩŅ‚ĐēŅƒ в ĐŋĐžĐģĐĩ ĐŊиĐļĐĩ. ВидиĐŧĐžŅŅ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиК в Matrix ĐŋĐžŅ…ĐžĐļĐ° ĐŊĐ° ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊŅƒŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ. ĐŖĐ´Đ°ĐģĐĩĐŊиĐĩ ваŅˆĐ¸Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК ОСĐŊĐ°Ņ‡Đ°ĐĩŅ‚, Ņ‡Ņ‚Đž ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐŊŅ‹Đĩ ваĐŧи ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐŊĐĩ ĐąŅƒĐ´ŅƒŅ‚ ĐŋĐžĐēаСаĐŊŅ‹ ĐŊОвŅ‹Đŧ иĐģи ĐŊĐĩ СаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅĐŧ, ĐŊĐž Ņ‚Đĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ŅƒĐļĐĩ ĐŋĐžĐģŅƒŅ‡Đ¸Đģи ŅŅ‚и ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - ĐŋĐž ĐŋŅ€ĐĩĐļĐŊĐĩĐŧŅƒ ĐąŅƒĐ´ŅƒŅ‚ иŅ… видĐĩŅ‚ŅŒ. ЛиŅ†ĐĩĐŊСии ŅŅ‚ĐžŅ€ĐžĐŊĐŊиŅ… ĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐžĐ´Đ¸Ņ‚ĐĩĐģĐĩĐš - ĐĄĐēĐ°Ņ‡Đ°Ņ‚ŅŒ ГовоŅ€Đ¸Ņ‚ŅŒ ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ ПĐĩŅ€ĐĩСаĐŋŅ€ĐžŅĐ¸Ņ‚ŅŒ ĐēĐģŅŽŅ‡Đ¸ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ Ņƒ Đ´Ņ€ŅƒĐŗиŅ… ваŅˆĐ¸Ņ… ŅĐĩŅŅĐ¸Đš. - ОŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊ СаĐŋŅ€ĐžŅ ĐēĐģŅŽŅ‡Đ°. - ЗаĐŋŅ€ĐžŅ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊ ЗаĐŋŅƒŅŅ‚иŅ‚Đĩ Element ĐŊĐ° Đ´Ņ€ŅƒĐŗĐžĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ, ĐēĐžŅ‚ĐžŅ€ĐžĐĩ ĐŧĐžĐļĐĩŅ‚ Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ, Đ´ĐģŅ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đēи ĐēĐģŅŽŅ‡Đ° ĐŊĐ° ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ. - ВвĐĩдиŅ‚Đĩ СдĐĩŅŅŒâ€Ļ - ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐŗĐžĐģĐžŅĐžĐ˛ĐžĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ - ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ Ņâ€Ļ К ŅĐžĐļĐ°ĐģĐĩĐŊиŅŽ, Đ´ĐģŅ вŅ‹ĐŋĐžĐģĐŊĐĩĐŊиŅ ŅŅ‚ĐžĐŗĐž Đ´ĐĩĐšŅŅ‚виŅ ĐŊĐĩ ĐŊаКдĐĩĐŊĐž вĐŊĐĩŅˆĐŊĐĩĐĩ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ. - ОŅ‚ĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ĐŗĐžĐģĐžŅĐžĐ˛Ņ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ ваŅˆ ĐŋĐ°Ņ€ĐžĐģŅŒ. - ЕŅĐģи вОСĐŧĐžĐļĐŊĐž, дОйавŅŒŅ‚Đĩ ĐžĐŋиŅĐ°ĐŊиĐĩ ĐŊĐ° Đ°ĐŊĐŗĐģиКŅĐēĐžĐŧ ŅĐˇŅ‹ĐēĐĩ. ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐžŅ‚вĐĩŅ‚â€Ļ ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐžŅ‚вĐĩŅ‚ (ĐŊĐĩСаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš)â€Ļ ПŅ€ĐĩдваŅ€Đ¸Ņ‚ĐĩĐģŅŒĐŊŅ‹Đš ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ ĐŧĐĩдиа ĐŋĐĩŅ€ĐĩĐ´ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐēОК - В ĐŊĐ°ŅŅ‚ĐžŅŅ‰ĐĩĐĩ вŅ€ĐĩĐŧŅ вŅ‹ ĐŊĐĩ ŅĐ˛ĐģŅĐĩŅ‚ĐĩŅŅŒ ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēĐžĐŧ ĐēĐ°ĐēиŅ…-ĐģийО ŅĐžĐžĐąŅ‰ĐĩŅŅ‚в. - ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐģавиŅˆŅƒ Enter Đ´ĐģŅ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đēи ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ОŅ‚ОйŅ€Đ°ĐļĐ°ĐĩŅ‚ Đ´ĐĩĐšŅŅ‚виĐĩ БаĐŊиŅ‚ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ Ņ ŅƒĐēаСаĐŊĐŊŅ‹Đŧ ID @@ -993,20 +835,20 @@ Đ­Ņ‚ĐžŅ‚ Ņ€Đ°ĐˇĐŗОвОŅ€ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐ°ĐĩŅ‚ŅŅ СдĐĩŅŅŒ Đ­Ņ‚Đ° ĐēĐžĐŧĐŊĐ°Ņ‚Đ° ŅĐ˛ĐģŅĐĩŅ‚ŅŅ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐĩĐŊиĐĩĐŧ Đ´Ņ€ŅƒĐŗĐžĐŗĐž Ņ€Đ°ĐˇĐŗОвОŅ€Đ° НаĐļĐŧиŅ‚Đĩ СдĐĩŅŅŒ Đ´ĐģŅ ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€Đ° ŅŅ‚Đ°Ņ€Ņ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК - ПŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ Ņ ŅƒĐēаСаĐŊĐŊŅ‹Đŧ ĐŋŅĐĩвдОĐŊиĐŧĐžĐŧ ДĐģŅ иŅĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиŅ ŅƒĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиŅ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅĐŧи Matrix - ИС-Са ĐžŅ‚ŅŅƒŅ‚ŅŅ‚виŅ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиК ŅŅ‚Đž Đ´ĐĩĐšŅŅ‚виĐĩ ĐŊĐĩвОСĐŧĐžĐļĐŊĐž. - %d ŅĐĩĐēŅƒĐŊĐ´Đ° - %d ŅĐĩĐēŅƒĐŊĐ´Ņ‹ - %d ŅĐĩĐēŅƒĐŊĐ´ + %d ŅĐĩĐē. + %d ŅĐĩĐē. + %d ŅĐĩĐē. + %d ŅĐĩĐē. - %d ĐŧиĐŊŅƒŅ‚Đ° - %d ĐŧиĐŊŅƒŅ‚Ņ‹ - %d ĐŧиĐŊŅƒŅ‚ + %d ĐŧиĐŊ. + %d ĐŧиĐŊ. + %d ĐŧиĐŊ. + %d ĐŧиĐŊ. %d Ņ‡Đ°Ņ @@ -1018,160 +860,124 @@ %d Đ´ĐŊи %d Đ´ĐŊĐĩĐš - ĐĄĐĩĐšŅ‡Đ°Ņ %1$s %1$s %2$s ĐŊаСад - "%1$S " %1$s и %2$s %1$s %2$s - %d вŅ‹ĐąŅ€Đ°ĐŊ %d вŅ‹ĐąŅ€Đ°ĐŊĐž %d вŅ‹ĐąŅ€Đ°ĐŊŅ‹ - + %d ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐē %d ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēĐ° %d ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēОв - + - %d ĐēĐžĐŧĐŊĐ°Ņ‚Đ° %d ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ %d ĐēĐžĐŧĐŊĐ°Ņ‚ - + ХиŅŅ‚ĐĩĐŧĐŊŅ‹Đĩ ĐžĐŋОвĐĩŅ‰ĐĩĐŊиŅ - ЛиĐŧиŅ‚ Ņ€ĐĩŅŅƒŅ€ŅĐžĐ˛ иŅŅ‡ĐĩŅ€ĐŋĐ°ĐŊ ХвŅĐˇĐ°Ņ‚ŅŒŅŅ Ņ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ĐžĐŧ - ĐĸĐĩĐŧĐ° status.im - ОŅˆĐ¸ĐąĐēĐ° - ВĐĩŅ€ŅĐ¸Ņ %s ХОСдаŅ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ ПаŅ€ĐžĐģŅŒĐŊŅ‹Đĩ Ņ„Ņ€Đ°ĐˇŅ‹ ĐŊĐĩ ŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‚ ŅĐ˛ŅĐļиŅ‚ĐĩŅŅŒ Ņ ваŅˆĐ¸Đŧ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ĐžĐŧ - ПŅ€ĐĩвŅ‹ŅˆĐĩĐŊ ОдиĐŊ иС Ņ€ĐĩŅŅƒŅ€ŅĐŊŅ‹Ņ… ĐģиĐŧиŅ‚Ов ŅĐĩŅ€Đ˛ĐĩŅ€Đ°, ĐŋĐž ŅŅ‚ĐžĐŧŅƒ ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи ĐŊĐĩ ŅĐŧĐžĐŗŅƒŅ‚ авŅ‚ĐžŅ€Đ¸ĐˇĐžĐ˛Đ°Ņ‚ŅŒŅŅ. ПŅ€ĐĩвŅ‹ŅˆĐĩĐŊ ОдиĐŊ иС Ņ€ĐĩŅŅƒŅ€ŅĐŊŅ‹Ņ… ĐģиĐŧиŅ‚Ов ŅĐĩŅ€Đ˛ĐĩŅ€Đ°. - ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€Đ¸Đ´ŅƒĐŧĐ°ĐšŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ Đ´ĐģŅ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ŅĐēŅĐŋĐžŅ€Ņ‚иŅ€ŅƒĐĩĐŧŅ‹Ņ… ĐēĐģŅŽŅ‡ĐĩĐš. ВаĐŧ ĐŊŅƒĐļĐŊĐž ĐąŅƒĐ´ĐĩŅ‚ ввĐĩŅŅ‚и Ņ‚Ņƒ ĐļĐĩ ŅĐ°ĐŧŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ Đ´ĐģŅ иĐŧĐŋĐžŅ€Ņ‚Đ° ĐēĐģŅŽŅ‡ĐĩĐš. ИС-Са ĐĩĐļĐĩĐŧĐĩŅŅŅ‡ĐŊĐžĐŗĐž ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊиŅ Đ°ĐēŅ‚ивĐŊŅ‹Ņ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš ŅĐĩŅ€Đ˛ĐĩŅ€Đ° ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ иС ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš ĐŊĐĩ ŅĐŧĐžĐŗŅƒŅ‚ авŅ‚ĐžŅ€Đ¸ĐˇĐžĐ˛Đ°Ņ‚ŅŒŅŅ. ĐĄĐĩŅ€Đ˛ĐĩŅ€ Đ´ĐžŅŅ‚иĐŗ ĐĩĐļĐĩĐŧĐĩŅŅŅ‡ĐŊĐžĐŗĐž ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊиŅ Đ°ĐēŅ‚ивĐŊŅ‹Ņ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš. - ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ° %s Đ´ĐģŅ ŅƒĐ˛ĐĩĐģиŅ‡ĐĩĐŊиŅ ŅŅ‚ĐžĐŗĐž ĐģиĐŧиŅ‚Đ°. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, %s, Ņ‡Ņ‚ОйŅ‹ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒŅŅ ŅŅ‚иĐŧ ŅĐĩŅ€Đ˛Đ¸ŅĐžĐŧ. - ЛĐĩĐŊиваŅ ĐŋОдĐŗŅ€ŅƒĐˇĐēĐ° ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēОв ĐŖвĐĩĐģиŅ‡Đ¸Ņ‚ŅŒ ĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐžĐ´Đ¸Ņ‚ĐĩĐģŅŒĐŊĐžŅŅ‚ŅŒ Са ŅŅ‡Ņ‘Ņ‚ СаĐŗŅ€ŅƒĐˇĐēи ŅĐžĐąĐĩŅĐĩĐ´ĐŊиĐēОв Ņ‚ĐžĐģŅŒĐēĐž ĐŋŅ€Đ¸ ĐŋĐĩŅ€Đ˛ĐžĐŧ ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€Đĩ. ВаŅˆ ŅĐĩŅ€Đ˛ĐĩŅ€ ĐŊĐĩ ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ ĐģĐĩĐŊивŅƒŅŽ ĐŋОдĐŗŅ€ŅƒĐˇĐēŅƒ ŅĐžĐąĐĩŅĐĩĐ´ĐŊиĐēОв. ПоĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ ĐŋОСĐļĐĩ. - ИСвиĐŊиŅ‚Đĩ, ĐŋŅ€ĐžĐ¸ĐˇĐžŅˆĐģĐ° ĐžŅˆĐ¸ĐąĐēĐ° - Ņ€Đ°ĐˇĐ˛ĐĩŅ€ĐŊŅƒŅ‚ŅŒ ŅĐ˛ĐĩŅ€ĐŊŅƒŅ‚ŅŒ - ВŅŅ‘ Ņ€Đ°Đ˛ĐŊĐž ĐŋОСвОĐŊиŅ‚ŅŒ ПаŅ€ĐžĐģŅŒ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ° ОСĐŊĐ°ĐēĐžĐŧŅŒŅ‚ĐĩŅŅŒ и ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅĐžĐŗĐģĐ°ŅĐ¸Đĩ Ņ ĐŋĐžĐģиŅ‚иĐēОК ŅŅ‚ĐžĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ°: - ВŅ‹ĐˇĐžĐ˛Ņ‹ ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ŅŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊŅƒŅŽ ĐŧĐĩĐģОдиŅŽ Element Đ´ĐģŅ вŅ…ОдŅŅ‰Đ¸Ņ… СвОĐŊĐēОв МĐĩĐģОдиŅ СвОĐŊĐēĐ° ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ĐŧĐĩĐģОдиŅŽ СвОĐŊĐēĐ°: - ИдŅ‘Ņ‚ видĐĩОСвОĐŊĐžĐē â€Ļ - ВŅ‹ĐŗĐŊĐ°Ņ‚ŅŒ ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ° - ПоиŅĐē ĐŋŅ€ĐžĐąĐģĐĩĐŧ Ņ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅĐŧи ОĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ Đž ĐŊайОŅ€Đĩ Ņ‚ĐĩĐēŅŅ‚Đ° Markdown Ņ„ĐžŅ€ĐŧĐ°Ņ‚иŅ€ĐžĐ˛Đ°ĐŊиĐĩ ФОĐŊОвОĐĩ ĐĄĐžĐĩдиĐŊĐĩĐŊиĐĩ ПŅ€ĐĩĐ´ĐžŅŅ‚авиŅ‚ŅŒ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиĐĩ - ПŅ€ĐžĐ¸ĐˇĐžŅˆĐģĐ° ĐžŅˆĐ¸ĐąĐēĐ° ĐŋŅ€Đ¸ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊии ваŅˆĐĩĐŗĐž Đ°Đ´Ņ€ĐĩŅĐ° ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹. - ПŅ€ĐžĐ¸ĐˇĐžŅˆĐģĐ° ĐžŅˆĐ¸ĐąĐēĐ° ĐŋŅ€Đ¸ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊии ваŅˆĐĩĐŗĐž ĐŊĐžĐŧĐĩŅ€Đ° Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ°. ДоĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊĐ°Ņ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ: %s - Đ­Ņ‚Đ° ĐžĐŋŅ†Đ¸Ņ Ņ‚Ņ€ĐĩĐąŅƒĐĩŅ‚ ŅŅ‚ĐžŅ€ĐžĐŊĐŊĐĩĐŗĐž ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ Đ´ĐģŅ СаĐŋиŅĐ¸ ŅĐžĐžĐąŅ‰ĐĩĐŊиК. - КоĐŧĐ°ĐŊĐ´Đĩ \"%s\" ĐŊŅƒĐļĐŊĐž йОĐģŅŒŅˆĐĩ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐ˛, иĐģи ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Ņ‹ ĐŊĐĩвĐĩŅ€ĐŊŅ‹. Markdown вĐēĐģŅŽŅ‡ĐĩĐŊ. Markdown вŅ‹ĐēĐģŅŽŅ‡ĐĩĐŊ. - ВŅĐĩĐŗĐ´Đ° ДĐģŅ ŅĐžĐžĐąŅ‰ĐĩĐŊиК и ĐžŅˆĐ¸ĐąĐžĐē ĐĸĐžĐģŅŒĐēĐž Đ´ĐģŅ ĐžŅˆĐ¸ĐąĐžĐē - ПŅ€Đ¸ĐŊиĐŧĐ°ŅŽ - Đ ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚Ņ‹ диаĐŗĐŊĐžŅŅ‚иĐēи ЗаĐŋŅƒŅŅ‚иŅ‚ŅŒ Ņ‚ĐĩŅŅ‚Ņ‹ ВŅ‹ĐŋĐžĐģĐŊŅĐĩŅ‚ŅŅâ€Ļ (%1$d иС %2$d) В ĐžŅĐŊОвĐŊĐžĐŧ, вŅŅ‘ в ĐŋĐžŅ€ŅĐ´ĐēĐĩ. ЕŅĐģи вŅ‹ ĐŋĐž-ĐŋŅ€ĐĩĐļĐŊĐĩĐŧŅƒ ĐŊĐĩ ĐŋĐžĐģŅƒŅ‡Đ°ĐĩŅ‚Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ, ĐŋĐžĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐžŅ‚ĐŋŅ€Đ°Đ˛ŅŒŅ‚Đĩ ĐžŅ‚Ņ‡ĐĩŅ‚ Ой ĐžŅˆĐ¸ĐąĐēĐĩ, Ņ‡Ņ‚ОйŅ‹ ĐŋĐžĐŧĐžŅ‡ŅŒ ĐŊĐ°Đŧ Ņ€Đ°ĐˇĐžĐąŅ€Đ°Ņ‚ŅŒŅŅ. ОдиĐŊ иĐģи ĐŊĐĩŅĐēĐžĐģŅŒĐēĐž Ņ‚ĐĩŅŅ‚Ов ĐŊĐĩ ĐŋŅ€ĐžĐšĐ´ĐĩĐŊŅ‹, ĐŋĐžĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ ĐŋŅ€ĐĩĐ´ĐģĐ°ĐŗĐ°ĐĩĐŧŅ‹Đĩ Ņ€ĐĩŅˆĐĩĐŊиŅ. ОдиĐŊ иĐģи ĐŊĐĩŅĐēĐžĐģŅŒĐēĐž Ņ‚ĐĩŅŅ‚Ов ĐŊĐĩ ĐŋŅ€ĐžĐšĐ´ĐĩĐŊŅ‹, ĐŋĐžĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐžŅ‚ĐŋŅ€Đ°Đ˛ŅŒŅ‚Đĩ ĐžŅ‚Ņ‡ĐĩŅ‚ Ой ĐžŅˆĐ¸ĐąĐēĐĩ, Ņ‡Ņ‚ОйŅ‹ ĐŋĐžĐŧĐžŅ‡ŅŒ ĐŊĐ°Đŧ иŅŅĐģĐĩдОваŅ‚ŅŒ ĐŋŅ€ĐžĐąĐģĐĩĐŧŅƒ. - НаŅŅ‚Ņ€ĐžĐšĐēи ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹. ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ вĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ… ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹. ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ… ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹. ОŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи - НаŅŅ‚Ņ€ĐžĐšĐēи Đ°ĐēĐēĐ°ŅƒĐŊŅ‚Đ°. ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ вĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ Đ´ĐģŅ ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸. ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ Đ´ĐģŅ ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи Đ°ĐēĐēĐ°ŅƒĐŊŅ‚Đ°. ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ - НаŅŅ‚Ņ€ĐžĐšĐēи ŅĐĩŅŅĐ¸Đ¸. ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ вĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ Đ´ĐģŅ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸. ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐŊĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž Đ´ĐģŅ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸. \nПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи Element. ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ - ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° ŅĐĩŅ€Đ˛Đ¸ŅĐžĐ˛ Play APK Google Play ŅĐĩŅ€Đ˛Đ¸ŅĐžĐ˛ Đ´ĐžŅŅ‚ŅƒĐŋĐĩĐŊ и ОйĐŊОвĐģŅ‘ĐŊ. Element иŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ ŅĐĩŅ€Đ˛Đ¸ŅŅ‹ Google Play Đ´ĐģŅ Đ´ĐžŅŅ‚авĐēи push-ŅĐžĐžĐąŅ‰ĐĩĐŊиК, ĐŊĐž ĐŊĐĩ ĐŋĐžŅ…ĐžĐļĐĩ Ņ‡Ņ‚Đž ĐžĐŊ ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ ĐŋŅ€Đ°Đ˛Đ¸ĐģŅŒĐŊĐž: %1$s ИŅĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅĐĩŅ€Đ˛Đ¸ŅŅ‹ Play - ĐĸĐžĐēĐĩĐŊ Firebase ĐĸĐžĐēĐĩĐŊ FCM ŅƒŅĐŋĐĩŅˆĐŊĐž ĐŋĐžĐģŅƒŅ‡ĐĩĐŊ: %1$s НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ Ņ‚ĐžĐēĐĩĐŊ FCM: %1$s - Đ ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Ņ Ņ‚ĐžĐēĐĩĐŊĐ° ĐĸĐžĐēĐĩĐŊ FCM ŅƒŅĐŋĐĩŅˆĐŊĐž СаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊ ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ СаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ‚ĐžĐēĐĩĐŊ FCM ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ: %1$s - ĐĄĐģŅƒĐļйа ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ĐĄĐģŅƒĐļйа ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК СаĐŋŅƒŅ‰ĐĩĐŊĐ°. ĐĄĐģŅƒĐļйа ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ĐŊĐĩ СаĐŋŅƒŅ‰ĐĩĐŊĐ°. ПоĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅŅ‚иŅ‚ŅŒ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ. ЗаĐŋŅƒŅŅ‚иŅ‚ŅŒ ŅĐģŅƒĐļĐąŅƒ - АвŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐĩŅĐēиК ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅĐē ŅĐģŅƒĐļĐąŅ‹ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ĐĄĐģŅƒĐļйа ĐąŅ‹ĐģĐ° ŅƒĐąĐ¸Ņ‚Đ° и ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅ‰ĐĩĐŊĐ° авŅ‚ĐžĐŧĐ°Ņ‚иŅ‡ĐĩŅĐēи. НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅŅ‚иŅ‚ŅŒ ŅĐģŅƒĐļĐąŅƒ - ЗаĐŋŅƒŅĐē ĐŋŅ€Đ¸ СаĐŗŅ€ŅƒĐˇĐēĐĩ ĐĄĐģŅƒĐļйа ĐąŅƒĐ´ĐĩŅ‚ СаĐŋŅƒŅ‰ĐĩĐŊĐ° ĐŋĐžŅĐģĐĩ ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅĐēĐ° ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ва. ПŅ€Đ¸ ĐŋĐĩŅ€ĐĩСаĐŗŅ€ŅƒĐˇĐēĐĩ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ва ŅĐģŅƒĐļйа ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚ СаĐŋŅƒŅ‰ĐĩĐŊĐ° , вŅ‹ ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚Đĩ ĐŋĐžĐģŅƒŅ‡Đ°Ņ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ, ĐŋĐžĐēĐ° Element ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚ ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ ОдиĐŊ Ņ€Đ°Đˇ. ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ СаĐŋŅƒŅĐē ĐŋŅ€Đ¸ СаĐŗŅ€ŅƒĐˇĐēĐĩ - ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ Ņ„ĐžĐŊОвŅ‹Đĩ ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊиŅ ФОĐŊОвŅ‹Đĩ ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊиŅ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ Đ´ĐģŅ Element. Đ­Ņ‚ĐžŅ‚ Ņ‚ĐĩŅŅ‚ Đ´ĐžĐģĐļĐĩĐŊ ĐąŅ‹Ņ‚ŅŒ СаĐŋŅƒŅ‰ĐĩĐŊ Ņ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиĐĩĐŧ ĐŧОйиĐģŅŒĐŊŅ‹Ņ… Đ´Đ°ĐŊĐŊŅ‹Ņ… (ĐąĐĩС WIFI). %1$s @@ -1179,12 +985,10 @@ РайОŅ‚Đ° ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ ĐąŅƒĐ´ĐĩŅ‚ ĐļĐĩŅŅ‚ĐēĐž ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊĐ°, ĐŋĐžĐēĐ° ĐžĐŊĐž ĐŊĐ°Ņ…ОдиŅ‚ŅŅ в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ, и ŅŅ‚Đž ĐŧĐžĐļĐĩŅ‚ ĐŋОвĐģиŅŅ‚ŅŒ ĐŊĐ° ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ. %1$s ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐžĐŗŅ€Đ°ĐŊиŅ‡ĐĩĐŊиŅ - ОĐŋŅ‚иĐŧиСаŅ†Đ¸Ņ йаŅ‚Đ°Ņ€Đĩи ОĐŋŅ‚иĐŧиСаŅ†Đ¸Ņ йаŅ‚Đ°Ņ€Đĩи ĐŊĐĩ вĐģиŅĐĩŅ‚ ĐŊĐ° Element. ЕŅĐģи ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ ĐžŅŅ‚авĐģŅĐĩŅ‚ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО в ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊĐŊĐžĐŧ ĐžŅ‚ ŅĐĩŅ‚и и в ĐŊĐĩĐŋОдвиĐļĐŊĐžĐŧ ŅĐžŅŅ‚ĐžŅĐŊии в Ņ‚ĐĩŅ‡ĐĩĐŊиĐĩ ĐŊĐĩĐēĐžŅ‚ĐžŅ€ĐžĐŗĐž вŅ€ĐĩĐŧĐĩĐŊи ĐŋŅ€Đ¸ вŅ‹ĐēĐģŅŽŅ‡ĐĩĐŊĐŊĐžĐŧ ŅĐēŅ€Đ°ĐŊĐĩ, ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО ĐŋĐĩŅ€ĐĩŅ…ОдиŅ‚ в Ņ€ĐĩĐļиĐŧ Doze. Đ­Ņ‚Đž ĐŋŅ€ĐĩĐ´ĐžŅ‚вŅ€Đ°Ņ‰Đ°ĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиК Đē ŅĐĩŅ‚и и ĐžŅ‚ĐēĐģĐ°Đ´Ņ‹Đ˛Đ°ĐĩŅ‚ вŅ‹ĐŋĐžĐģĐŊĐĩĐŊиĐĩ СадаĐŊиК, ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸ŅŽ и ĐŋĐĩŅ€ĐĩĐ´Đ°Ņ‡Ņƒ ŅŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚ĐŊŅ‹Ņ… аваŅ€Đ¸ĐšĐŊŅ‹Ņ… ŅĐ¸ĐŗĐŊĐ°ĐģОв. ИĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐžĐŋŅ‚иĐŧиСаŅ†Đ¸ŅŽ - ПŅ€ĐĩĐ´ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ ŅŅŅ‹ĐģĐžĐē в Ņ‡Đ°Ņ‚Đĩ, ĐēĐžĐŗĐ´Đ° ваŅˆ Đ´ĐžĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€ ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ ŅŅ‚Ņƒ Ņ„ŅƒĐŊĐēŅ†Đ¸ŅŽ. ПоĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ Đ´Ņ€ŅƒĐŗиĐŧ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅĐŧ, Ņ‡Ņ‚Đž вŅ‹ ĐŋĐĩŅ‡Đ°Ņ‚Đ°ĐĩŅ‚Đĩ. ФОŅ€ĐŧĐ°Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ, иŅĐŋĐžĐģŅŒĐˇŅƒŅ markdown. НаĐŋŅ€Đ¸ĐŧĐĩŅ€, ĐŋОСвОĐģŅĐĩŅ‚ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ СвĐĩСдОŅ‡Đēи Đ´ĐģŅ вŅ‹Đ´ĐĩĐģĐĩĐŊиŅ Ņ‚ĐĩĐēŅŅ‚Đ° ĐēŅƒŅ€ŅĐ¸Đ˛ĐžĐŧ. @@ -1195,7 +999,6 @@ ВĐēĐģŅŽŅ‡Đ°ĐĩŅ‚ иСĐŧĐĩĐŊĐĩĐŊиŅ аваŅ‚Đ°Ņ€Đ° и ĐžŅ‚ОйŅ€Đ°ĐļĐ°ĐĩĐŧĐžĐŗĐž иĐŧĐĩĐŊи. НĐĩОйŅ…ОдиĐŧĐž ĐŧиĐŊиĐŧиСиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ вĐģиŅĐŊиĐĩ ĐŊĐ° Ņ„ĐžĐŊОвОĐĩ ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ Đ´ĐģŅ ĐŊĐ°Đ´Ņ‘ĐļĐŊĐžŅŅ‚и ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК. На ŅĐģĐĩĐ´ŅƒŅŽŅ‰ĐĩĐŧ ŅĐēŅ€Đ°ĐŊĐĩ ваĐŧ ĐąŅƒĐ´ĐĩŅ‚ ĐŋŅ€ĐĩĐ´ĐģĐžĐļĐĩĐŊĐž Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ РаКОŅ‚Ņƒ вŅĐĩĐŗĐ´Đ° Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ, ĐŋĐžĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€Đ¸ĐŧиŅ‚Đĩ. - ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ŅĐ¸ŅŅ‚ĐĩĐŧĐŊŅƒŅŽ ĐēĐ°ĐŧĐĩŅ€Ņƒ вĐŧĐĩŅŅ‚Đž ĐēĐ°ĐŧĐĩŅ€Ņ‹ Element. ПоĐēаСаŅ‚ŅŒ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ %1$s: @@ -1203,43 +1006,31 @@ +%d %d+ НĐĩ ĐŊаКдĐĩĐŊ APK ŅĐĩŅ€Đ˛Đ¸ŅĐžĐ˛ Google Play. ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐŧĐžĐŗŅƒŅ‚ Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐŊĐĩĐŋŅ€Đ°Đ˛Đ¸ĐģŅŒĐŊĐž. - НĐĩ вĐģиŅĐĩŅ‚ ĐŊĐ° ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ, иŅĐēĐģŅŽŅ‡ĐĩĐŊиŅ и СаĐŋŅ€ĐĩŅ‚Ņ‹. - Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ ĐēĐģŅŽŅ‡Đ° Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš ĐŊĐĩ СавĐĩŅ€ŅˆĐĩĐŊĐž, ĐŋĐžĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋОдОĐļдиŅ‚Đĩâ€Ļ - ПŅ€ĐžĐŋŅƒŅŅ‚иŅ‚ŅŒ ГоŅ‚ОвО - Đ Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊĐŊŅ‹Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ЗĐŊĐ°Ņ‡ĐĩĐŊиĐĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐŋĐž ŅĐžĐąŅ‹Ņ‚иŅŽ - ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēиĐĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи. ОбŅ€Đ°Ņ‚иŅ‚Đĩ вĐŊиĐŧĐ°ĐŊиĐĩ, Đ´ĐģŅ ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Ņ… Ņ‚иĐŋОв ŅĐžĐžĐąŅ‰ĐĩĐŊиК вŅ‹ĐąŅ€Đ°ĐŊ ĐąĐĩССвŅƒŅ‡ĐŊŅ‹Đš Ņ€ĐĩĐļиĐŧ (ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиĐĩ ĐąŅƒĐ´ĐĩŅ‚, ĐŊĐž ĐąĐĩС СвŅƒĐēĐ°). НĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ…. НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ СаĐŗŅ€ŅƒĐˇĐ¸Ņ‚ŅŒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēиĐĩ ĐŋŅ€Đ°Đ˛Đ¸ĐģĐ°, ĐŋОвŅ‚ĐžŅ€Đ¸Ņ‚Đĩ ĐŋĐžĐŋŅ‹Ņ‚ĐēŅƒ. ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи - ДобавиŅ‚ŅŒ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ - НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ŅˆŅƒĐŧĐŊŅ‹Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ Đž вŅ‹ĐˇĐžĐ˛Đ°Ņ… НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ĐąĐĩССвŅƒŅ‡ĐŊŅ‹Đĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ВŅ‹ĐąŅ€Đ°Ņ‚ŅŒ Ņ†Đ˛ĐĩŅ‚ ŅĐ˛ĐĩŅ‚ОдиОда, вийŅ€Đ°Ņ†Đ¸ŅŽ, СвŅƒĐēâ€Ļ - - ĐŖĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ ĐēŅ€Đ¸ĐŋŅ‚ĐžĐŗŅ€Đ°Ņ„иŅ‡ĐĩŅĐēиĐŧи ĐēĐģŅŽŅ‡Đ°Đŧи ĐŖĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đŧ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩĐŧ ĐēĐģŅŽŅ‡ĐĩĐš - БĐĩССвŅƒŅ‡ĐŊŅ‹Đš ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ ПаŅ€ĐžĐģŅŒĐŊĐ°Ņ Ņ„Ņ€Đ°ĐˇĐ° ŅĐģиŅˆĐēĐžĐŧ ĐŋŅ€ĐžŅŅ‚Đ°Ņ - ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ŅƒĐ´Đ°ĐģиŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ, ĐĩŅĐģи Ņ…ĐžŅ‚иŅ‚Đĩ, Ņ‡Ņ‚ОйŅ‹ Element ŅĐŗĐĩĐŊĐĩŅ€Đ¸Ņ€ĐžĐ˛Đ°Đģ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ. Matrix ŅĐĩŅŅĐ¸Ņ ĐŊĐĩĐ´ĐžŅŅ‚ŅƒĐŋĐŊĐ° - НиĐēĐžĐŗĐ´Đ° ĐŊĐĩ Ņ‚ĐĩŅ€ŅĐšŅ‚Đĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК ХООйŅ‰ĐĩĐŊиŅ в СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ĐēĐžĐŧĐŊĐ°Ņ‚Đ°Ņ… СаŅ‰Đ¸Ņ‰ĐĩĐŊŅ‹ ŅĐēвОСĐŊŅ‹Đŧ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩĐŧ. КĐģŅŽŅ‡Đ¸ Đ´ĐģŅ ĐŋŅ€ĐžŅ‡Ņ‚ĐĩĐŊиŅ ŅŅ‚иŅ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК ĐĩŅŅ‚ŅŒ Ņ‚ĐžĐģŅŒĐēĐž Ņƒ ваŅ и ĐŋĐžĐģŅƒŅ‡Đ°Ņ‚ĐĩĐģŅ(ĐĩĐš). \n @@ -1255,10 +1046,8 @@ Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŊĐ°Ņ‡Đ°ĐģĐžŅŅŒ ĐŖвĐĩŅ€ĐĩĐŊŅ‹? ĐŖĐ´Đ°ĐģиŅ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ ĐēĐģŅŽŅ‡ĐĩĐš ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ Ņ ŅĐĩŅ€Đ˛ĐĩŅ€Đ°? ВŅ‹ йОĐģŅŒŅˆĐĩ ĐŊĐĩ ŅĐŧĐžĐļĐĩŅ‚Đĩ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ Đ´ĐģŅ Ņ‡Ņ‚ĐĩĐŊиŅ иŅŅ‚ĐžŅ€Đ¸Đ¸ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК. - ĐŖĐ´Đ°ĐģиŅ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ŅƒĐ´Đ°ĐģиŅ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ (%s) - ĐŖĐ´Đ°ĐģĐĩĐŊиĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋииâ€Ļ ЧŅ‚ОйŅ‹ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ ĐēĐģŅŽŅ‡Đ° в ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸, вОŅŅŅ‚Đ°ĐŊОвиŅ‚Đĩ ĐĩĐŗĐž Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ŅĐ˛ĐžĐĩĐš ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇŅ‹ иĐģи ĐēĐģŅŽŅ‡Đ° вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ. Đ ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ иĐŧĐĩĐĩŅ‚ ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅƒŅŽ ĐŋОдĐŋиŅŅŒ иС ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊĐŊОК ŅĐĩŅŅĐ¸Đ¸ %s @@ -1267,62 +1056,46 @@ Đ ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ иĐŧĐĩĐĩŅ‚ Đ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅƒŅŽ ĐŋОдĐŋиŅŅŒ Ņ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸. Đ ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ ĐŋОдĐŋиŅĐ°ĐŊĐ° ŅĐĩŅŅĐ¸ĐĩĐš Ņ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ‚ĐžŅ€ĐžĐŧ %s. Đ ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đĩ ĐēĐžĐŋии ĐēĐģŅŽŅ‡ĐĩĐš ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸ ĐŊĐĩ ŅĐžŅ…Ņ€Đ°ĐŊŅŅŽŅ‚ŅŅ. - - Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš ĐŊĐĩ Đ°ĐēŅ‚ивиŅ€ĐžĐ˛Đ°ĐŊĐž в ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸. Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš ŅƒŅĐŋĐĩŅˆĐŊĐž ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊĐž Đ´ĐģŅ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸. ĐŖĐ´Đ°ĐģиŅ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ - ВоŅŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ иС Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии ĐĄĐĩŅŅĐ¸ĐžĐŊĐŊĐžĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŊĐĩ Đ°ĐēŅ‚ивиŅ€ĐžĐ˛Đ°ĐŊĐž - - ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ РаСйĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ иŅŅ‚ĐžŅ€Đ¸ŅŽ ВоŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии: ВоŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиК - ВвĐĩдиŅ‚Đĩ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ - ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ Đ´ĐģŅ Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đēи иŅŅ‚ĐžŅ€Đ¸Đ¸ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК ЕŅĐģи вŅ‹ ĐŊĐĩ СĐŊĐ°ĐĩŅ‚Đĩ ваŅˆŅƒ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ %s. - иŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ВŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋĐžŅ‚ĐĩŅ€ŅŅ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ, ĐĩŅĐģи вŅ‹ĐšĐ´ĐĩŅ‚Đĩ иС ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹ иĐģи ĐŋĐžŅ‚ĐĩŅ€ŅĐĩŅ‚Đĩ ŅŅ‚Đž ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО. - ЗаĐŋŅ€Đ°ŅˆĐ¸Đ˛Đ°ĐĩŅ‚ вĐĩŅ€ŅĐ¸ŅŽ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋииâ€Ļ ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ Đ´ĐģŅ Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đēи иŅŅ‚ĐžŅ€Đ¸Đ¸ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК ПоŅ‚ĐĩŅ€ŅĐģи ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ? В ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ… вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ŅĐžĐˇĐ´Đ°Ņ‚ŅŒ ĐŊОвŅ‹Đš. ОŅˆĐ¸ĐąĐēĐ° ŅĐĩŅ‚и: ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ и ĐŋОвŅ‚ĐžŅ€Đ¸Ņ‚Đĩ ĐŋĐžĐŋŅ‹Ņ‚ĐēŅƒ. - Đ ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐ° %s ! ОŅˆĐ¸ĐąĐēĐ° ĐŋĐžĐģŅƒŅ‡ĐĩĐŊиŅ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸ Đž дОвĐĩŅ€Đ¸Đ¸ Đ´ĐģŅ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии (%s). - Đ ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ иĐŧĐĩĐĩŅ‚ ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅƒŅŽ ĐŋОдĐŋиŅŅŒ иС ĐŊĐĩĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊĐŊОК ŅĐĩŅŅĐ¸Đ¸ %s НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ ĐŋĐžŅĐģĐĩĐ´ĐŊŅŽŅŽ вĐĩŅ€ŅĐ¸ŅŽ ĐēĐģŅŽŅ‡ĐĩĐš вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ (%s). %d ĐŊОвŅ‹Đš ĐēĐģŅŽŅ‡ ĐąŅ‹Đģ дОйавĐģĐĩĐŊ Đē ŅŅ‚ĐžĐŧŅƒ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вŅƒ. %d ĐŊОвŅ‹Ņ… ĐēĐģŅŽŅ‡Đ° ĐąŅ‹Đģи дОйавĐģĐĩĐŊŅ‹ Đē ŅŅ‚ĐžĐŧŅƒ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вŅƒ. %d ĐŊОвŅ‹Ņ… ĐēĐģŅŽŅ‡ĐĩĐš ĐąŅ‹Đģи дОйавĐģĐĩĐŊŅ‹ Đē ŅŅ‚ĐžĐŧŅƒ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вŅƒ. - + - ВоŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐ° Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ Ņ %d ĐēĐģŅŽŅ‡ĐžĐŧ. ВоŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đĩ ĐēĐžĐŋии Ņ %d ĐēĐģŅŽŅ‡Đ°Đŧи. ВоŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đĩ ĐēĐžĐŋии Ņ %d ĐēĐģŅŽŅ‡Đ°Đŧи. НĐĩвОСĐŧĐžĐļĐŊĐž Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ŅŅ‚ĐžĐŗĐž ĐēĐģŅŽŅ‡Đ° вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ: ŅƒĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž вŅ‹ ввĐĩĐģи ĐŋŅ€Đ°Đ˛Đ¸ĐģŅŒĐŊŅ‹Đš ĐēĐģŅŽŅ‡. - НĐĩвОСĐŧĐžĐļĐŊĐž Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ Đ´Đ°ĐŊĐŊĐžĐŗĐž ĐŋĐ°Ņ€ĐžĐģŅ: ŅƒĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž вŅ‹ ввĐĩĐģи вĐĩŅ€ĐŊŅ‹Đš ĐŋĐ°Ņ€ĐžĐģŅŒ. КĐģŅŽŅ‡Đ¸ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ĐēĐžĐŋиŅ€ŅƒŅŽŅ‚ŅŅ ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€ в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ. ПĐĩŅ€Đ˛ĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŧĐžĐļĐĩŅ‚ СаĐŊŅŅ‚ŅŒ ĐŊĐĩŅĐēĐžĐģŅŒĐēĐž ĐŧиĐŊŅƒŅ‚. - - ГĐĩĐŊĐĩŅ€Đ°Ņ†Đ¸Ņ ĐēĐģŅŽŅ‡ĐĩĐš вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ Ņ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиĐĩĐŧ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇŅ‹ ĐŧĐžĐļĐĩŅ‚ СаĐŊŅŅ‚ŅŒ ĐŊĐĩŅĐēĐžĐģŅŒĐēĐž ŅĐĩĐēŅƒĐŊĐ´. КĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ĐąŅ‹Đģ ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊ в \'%s\'. ПŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ: ŅŅ‚ĐžŅ‚ Ņ„Đ°ĐšĐģ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅƒĐ´Đ°ĐģĐĩĐŊ ĐŋŅ€Đ¸ ŅƒĐ´Đ°ĐģĐĩĐŊии ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ. - [%1$s] \nĐ­Ņ‚Đ° ĐžŅˆĐ¸ĐąĐēĐ° вĐŊĐĩ ĐēĐžĐŊŅ‚Ņ€ĐžĐģŅ Element. На Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐĩ ĐŊĐĩŅ‚ ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ Google. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, дОйавŅŒŅ‚Đĩ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ Google. [%1$s] @@ -1336,35 +1109,28 @@ ĐŖвĐĩŅ€ĐĩĐŊŅ‹? ХОСдаĐŊиĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии ĐĄĐ´ĐĩĐģĐ°ĐšŅ‚Đĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ ваŅˆĐ¸Ņ… ĐēĐģŅŽŅ‡ĐĩĐš иĐģи ĐŋĐžŅ‚ĐĩŅ€ŅĐĩŅ‚Đĩ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ваŅˆĐ¸Đŧ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ. - ОŅŅ‚Đ°Ņ‚ŅŒŅŅ ПŅ€ĐĩŅ€Đ˛Đ°Ņ‚ŅŒ - ĐŖвĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ вŅ‹ĐšŅ‚и? ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ иĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ. (Đ Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊĐŊŅ‹Đš) Đ ŅƒŅ‡ĐŊОК ŅĐēŅĐŋĐžŅ€Ņ‚ ĐēĐģŅŽŅ‡ĐĩĐš - ХОСдаĐŊиĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии ĐŖŅĐŋĐĩŅ…! ПодĐŋиŅŅŒ - АĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ ВĐĩŅ€ŅĐ¸Ņ Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ %d ĐēĐģŅŽŅ‡Đ°â€Ļ Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ %d ĐēĐģŅŽŅ‡ĐĩĐšâ€Ļ Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ %d ĐēĐģŅŽŅ‡ĐĩĐšâ€Ļ - + - ВŅĐĩ ĐēĐģŅŽŅ‡Đ¸ ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊŅ‹ Đ ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐšâ€Ļ - НиĐēĐžĐŗĐ´Đ° ĐŊĐĩ Ņ‚ĐĩŅ€ŅĐšŅ‚Đĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ НиĐēĐžĐŗĐ´Đ° ĐŊĐĩ Ņ‚ĐĩŅ€ŅĐšŅ‚Đĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ НаŅ‡Đ°Ņ‚ŅŒ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš - Đ­Ņ‚Đž ĐąŅ‹Đģ Ņ ПодĐĩĐģиŅ‚ŅŒŅŅ Đ¯ ŅĐ´ĐĩĐģĐ°Đģ ĐēĐžĐŋиŅŽ @@ -1374,9 +1140,7 @@ НаŅ‡Đ°Ņ‚ŅŒ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš НоваŅ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ ĐēĐģŅŽŅ‡Đ° ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš - ĐŖĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đŧ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩĐŧ ĐēĐģŅŽŅ‡ĐĩĐš - НовŅ‹Đĩ ĐēĐģŅŽŅ‡Đ¸ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК ОбĐŊĐ°Ņ€ŅƒĐļĐĩĐŊĐ° ĐŊОваŅ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ ĐēĐģŅŽŅ‡Đ° ĐąĐĩСОĐŋĐ°ŅĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК. \n @@ -1384,7 +1148,6 @@ ВаŅˆĐ¸ ĐēĐģŅŽŅ‡Đ¸ ĐēĐžĐŋиŅ€ŅƒŅŽŅ‚ŅŅ. (ДоĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊĐž) НаŅŅ‚Ņ€ĐžĐšĐēĐ° Ņ ĐēĐģŅŽŅ‡ĐžĐŧ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ В Ņ€ĐĩĐļиĐŧĐĩ ŅĐēĐžĐŊĐžĐŧии Ņ‚Ņ€Đ°Ņ„Ņ„иĐēĐ° ĐŋŅ€Đ¸ĐŧĐĩĐŊŅĐĩŅ‚ŅŅ ŅĐŋĐĩŅ†Đ¸Đ°ĐģŅŒĐŊŅ‹Đš Ņ„иĐģŅŒŅ‚Ņ€, ĐŋĐžŅŅ‚ĐžĐŧŅƒ ОйĐŊОвĐģĐĩĐŊиĐĩ ĐŋŅ€Đ¸ŅŅƒŅ‚ŅŅ‚виŅ и ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ Đž ĐŊайОŅ€Đĩ ĐžŅ‚Ņ„иĐģŅŒŅ‚Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ŅŽŅ‚ŅŅ. - ИĐģи СаŅ‰Đ¸Ņ‚иŅ‚Đĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ĐēĐģŅŽŅ‡Đ° вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ, ŅĐžŅ…Ņ€Đ°ĐŊив ĐĩĐŗĐž в ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐŧ ĐŧĐĩŅŅ‚Đĩ. БĐĩСОĐŋĐ°ŅĐŊĐ°Ņ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ ĐēĐģŅŽŅ‡ĐĩĐš Đ´ĐžĐģĐļĐŊĐ° ĐąŅ‹Ņ‚ŅŒ Đ°ĐēŅ‚ивиŅ€ĐžĐ˛Đ°ĐŊĐ° ĐŊĐ° вŅĐĩŅ… ваŅˆĐ¸Ņ… ŅĐĩŅŅĐ¸ŅŅ…, Ņ‡Ņ‚ОйŅ‹ ĐŊĐĩ ĐŋĐžŅ‚ĐĩŅ€ŅŅ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ. ЗаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐ°Ņ ĐēĐžĐŋиŅ ĐēĐģŅŽŅ‡ĐĩĐš ĐąŅƒĐ´ĐĩŅ‚ Ņ…Ņ€Đ°ĐŊиŅ‚ŅŒŅŅ ĐŊĐ° ваŅˆĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. ДĐģŅ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и СаŅ‰Đ¸Ņ‚иŅ‚Đĩ ĐĩŅ‘ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇĐžĐš. @@ -1395,7 +1158,6 @@ ĐĄĐēĐ°Ņ‡Đ¸Đ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐšâ€Ļ ВŅ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ ĐēĐģŅŽŅ‡Đ° вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅâ€Ļ ИĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ - ИĐŊиŅ†Đ¸Đ°ĐģиСаŅ†Đ¸Ņ ŅĐĩŅ€Đ˛Đ¸ŅĐ° ОŅ‚ĐŧĐĩŅ‚иŅ‚ŅŒ ĐēĐ°Đē ĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐŊĐžĐĩ ВойŅ‚и Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ĐĩдиĐŊĐžĐŗĐž вŅ…Ода @@ -1404,43 +1166,36 @@ ОбĐŊОвиŅ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒ ПаŅ€ĐžĐģŅŒ ĐŊĐĩ Đ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģĐĩĐŊ ПаŅ€ĐžĐģи ĐŊĐĩ ŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‚ - МĐĩдиа ĐĄĐļĐ°Ņ‚иŅ ĐŋĐž ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ИŅŅ‚ĐžŅ‡ĐŊиĐē ĐŧĐĩдиа ĐŋĐž ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ - %1$s: 1 ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ + %1$s: %2$d ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ %1$s: %2$d ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ %1$s: %2$d ŅĐžĐžĐąŅ‰ĐĩĐŊиК + %1$s: %2$d ŅĐžĐžĐąŅ‰ĐĩĐŊиК %d ĐžĐŋОвĐĩŅ‰ĐĩĐŊиĐĩ %d ĐžĐŋОвĐĩŅ‰ĐĩĐŊиŅ %d ĐžĐŋОвĐĩŅ‰ĐĩĐŊиК - НовоĐĩ ŅĐžĐąŅ‹Ņ‚иĐĩ КоĐŧĐŊĐ°Ņ‚Đ° НовŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ НовоĐĩ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ МĐŊĐĩ ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēŅƒ - ПŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ŅĐĩŅŅĐ¸ŅŽ - ВаŅˆĐĩ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО иŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ ŅƒŅŅ‚Đ°Ņ€ĐĩвŅˆĐ¸Đš TLS ĐŋŅ€ĐžŅ‚ĐžĐēĐžĐģ, ŅƒŅĐˇĐ˛Đ¸ĐŧŅ‹Đš Đ´ĐģŅ Đ°Ņ‚Đ°Đē, Đ´ĐģŅ ваŅˆĐĩĐš ĐļĐĩ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и ваĐŧ ĐžŅ‚ĐēаСаĐŊĐž в ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊии ПŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅĐŧ ĐŊĐĩ" ĐŊŅƒĐļĐŊĐž ĐŋОдĐēĐģŅŽŅ‡Đ°Ņ‚ŅŒŅŅ Đē HomeServer в Ņ„ĐžĐŊОвОĐŧ Ņ€ĐĩĐļиĐŧĐĩ, ŅŅ‚Đž Đ´ĐžĐģĐļĐŊĐž ŅĐŊиСиŅ‚ŅŒ Ņ€Đ°ŅŅ…Од СаŅ€ŅĐ´Đ° йаŅ‚Đ°Ņ€Đĩи" КĐģавиŅˆĐ° Ввод ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ вĐŧĐĩŅŅ‚Đž ĐŋĐĩŅ€ĐĩĐŊĐžŅĐ° ŅŅ‚Ņ€ĐžĐēи - ВоŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩŅŅ‚и СвŅƒĐē СаŅ‚вОŅ€Đ° - ĐŊĐĩиСвĐĩŅŅ‚ĐŊŅ‹Đš IP ** ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐŊĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ - ĐŋĐžĐļĐ°ĐģŅƒĐšŅŅ‚Đ° ĐžŅ‚ĐēŅ€ĐžĐšŅ‚Đĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ - К ŅĐžĐļĐ°ĐģĐĩĐŊиŅŽ, ĐēĐžĐŊŅ„ĐĩŅ€ĐĩĐŊŅ†-СвОĐŊĐēи Ņ Jitsi ĐŊĐĩ ĐŋОддĐĩŅ€ĐļиваŅŽŅ‚ŅŅ ĐŊĐ° ŅŅ‚Đ°Ņ€Ņ‹Ņ… ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ваŅ… (ĐŊиĐļĐĩ Android OS - 5.0) - НоваŅ ŅĐĩŅŅĐ¸Ņ СаĐŋŅ€Đ°ŅˆĐ¸Đ˛Đ°ĐĩŅ‚ ĐēĐģŅŽŅ‡Đ¸ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ. \nИĐŧŅ ŅĐĩŅŅĐ¸Đ¸: %1$s \nПоŅĐģĐĩĐ´ĐŊиК Ņ€Đ°Đˇ в ŅĐĩŅ‚и: %2$s @@ -1449,12 +1204,10 @@ \nИĐŧŅ ŅĐĩŅŅĐ¸Đ¸: %1$s \nПоŅĐģĐĩĐ´ĐŊиК Ņ€Đ°Đˇ в ŅĐĩŅ‚и: %2$s \nЕŅĐģи вŅ‹ ĐŊĐĩ ĐžŅ‚ĐēŅ€Ņ‹Đ˛Đ°Đģи ĐŊОвŅƒŅŽ ŅĐĩŅŅĐ¸ŅŽ - ĐŋŅ€ĐžĐ¸ĐŗĐŊĐžŅ€Đ¸Ņ€ŅƒĐšŅ‚Đĩ ŅŅ‚ĐžŅ‚ СаĐŋŅ€ĐžŅ. - ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ПодĐĩĐģиŅ‚ŅŒŅŅ ЗаĐŋŅ€ĐžŅ ĐŋОдĐĩĐģиŅ‚ŅŅ ĐēĐģŅŽŅ‡ĐĩĐŧ ИĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ - ОŅˆĐ¸ĐąĐēĐ° ĐžŅ‚ĐēĐģиĐēĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đ° ДоĐŋĐžĐģĐŊиŅ‚ŅŒ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Ņ‹ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° Element ОйĐŊĐ°Ņ€ŅƒĐļиĐģ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēŅƒŅŽ ĐēĐžĐŊŅ„иĐŗŅƒŅ€Đ°Ņ†Đ¸ŅŽ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° Đ´ĐģŅ ваŅˆĐĩĐŗĐž userID Đ´ĐžĐŧĐĩĐŊĐ°\"%1$s\": @@ -1465,33 +1218,26 @@ ВŅ…ОдŅŅ‰Đ¸Đš СаĐŋŅ€ĐžŅ Đž ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēĐĩ ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ, Ņ‡Ņ‚ОйŅ‹ ĐžŅ‚ĐŧĐĩŅ‚иŅ‚ŅŒ ĐĩŅ‘ ĐēĐ°Đē дОвĐĩŅ€ĐĩĐŊĐŊŅƒŅŽ. ДовĐĩŅ€Đ¸Đĩ ŅĐĩŅŅĐ¸ŅĐŧ ĐŋĐ°Ņ€Ņ‚ĐŊĐĩŅ€ĐžĐ˛ ĐŋОСвОĐģŅĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅƒĐ˛ĐĩŅ€ĐĩĐŊĐŊŅ‹Đŧ в ĐŊĐ°Đ´Ņ‘ĐļĐŊĐžŅŅ‚и ŅĐēвОСĐŊĐžĐŗĐž ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ŅĐžĐžĐąŅ‰ĐĩĐŊиК. ПоŅ‚двĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸ ĐŋĐžĐŧĐĩŅ‚иŅ‚ ĐĩŅ‘ дОвĐĩŅ€ĐĩĐŊĐŊОК Đ´ĐģŅ ваŅ и ваŅˆĐĩĐŗĐž ĐŋĐ°Ņ€Ņ‚ĐŊŅ‘Ņ€Đ°. - ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ, ŅƒĐąĐĩдивŅˆĐ¸ŅŅŒ, Ņ‡Ņ‚Đž ŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Đĩ ŅĐŧĐ°ĐšĐģиĐēи ĐŋĐžŅĐ˛ĐģŅŅŽŅ‚ŅŅ ĐŊĐ° ŅĐēŅ€Đ°ĐŊĐĩ ĐŋĐ°Ņ€Ņ‚ĐŊĐĩŅ€Đ° ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ, ŅƒĐąĐĩдивŅˆĐ¸ŅŅŒ, Ņ‡Ņ‚Đž ŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Đĩ Ņ†Đ¸Ņ„Ņ€Ņ‹ ĐŋĐžŅĐ˛ĐģŅŅŽŅ‚ŅŅ ĐŊĐ° ŅĐēŅ€Đ°ĐŊĐĩ ĐŋĐ°Ņ€Ņ‚ĐŊĐĩŅ€Đ° - ВŅ‹ ĐŋĐžĐģŅƒŅ‡Đ¸Đģи вŅ…ОдŅŅ‰Đ¸Đš СаĐŋŅ€ĐžŅ ĐŊĐ° ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ. ПоŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ СаĐŋŅ€ĐžŅ В ĐžĐļидаĐŊии ĐŋĐ°Ņ€Ņ‚ĐŊĐĩŅ€Đ°, Ņ‡Ņ‚ОйŅ‹ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ â€Ļ - ПŅ€ĐžĐ˛ĐĩŅ€ĐĩĐŊĐž! ВŅ‹ ŅƒŅĐŋĐĩŅˆĐŊĐž ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Đģи ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ. ЗаŅ‰Đ¸Ņ‰ĐĩĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐžŅ‚ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ŅˆĐ¸Ņ„Ņ€ŅƒŅŽŅ‚ŅŅ end-to-end и ĐŊĐĩ ĐŧĐžĐŗŅƒŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊŅ‹ Ņ‚Ņ€ĐĩŅ‚ŅŒĐ¸Đŧи ĐģиŅ†Đ°Đŧи. ПоĐŊŅĐģ - НиŅ‡ĐĩĐŗĐž ĐŊĐĩ ĐŋĐžŅĐ˛ĐģŅĐĩŅ‚ŅŅ\? НĐĩ вŅĐĩ ĐēĐģиĐĩĐŊŅ‚Ņ‹ ĐŋĐžĐēĐ° ĐŋОддĐĩŅ€ĐļиваŅŽŅ‚ иĐŊŅ‚ĐĩŅ€Đ°ĐēŅ‚ивĐŊŅƒŅŽ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ. ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ŅƒŅŅ‚Đ°Ņ€ĐĩвŅˆŅƒŅŽ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ. ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ŅƒŅŅ‚Đ°Ņ€ĐĩвŅˆŅƒŅŽ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ. - ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° ĐēĐģŅŽŅ‡Đ° ЗаĐŋŅ€ĐžŅ ĐžŅ‚ĐŧĐĩĐŊĐĩĐŊ ДŅ€ŅƒĐŗĐ°Ņ ŅŅ‚ĐžŅ€ĐžĐŊĐ° ĐžŅ‚ĐŧĐĩĐŊиĐģĐ° ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ. \n%s ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° ĐžŅ‚ĐŧĐĩĐŊĐĩĐŊĐ°. \nПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %s - ИĐŊŅ‚ĐĩŅ€Đ°ĐēŅ‚ивĐŊĐžĐĩ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ŅĐĩŅŅĐ¸Đ¸ ЗаĐŋŅ€ĐžŅ ĐŊĐ° ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ %s ĐļĐĩĐģĐ°ĐĩŅ‚ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ваŅˆĐĩ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО - ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ ĐžŅ‚ĐŧĐĩĐŊиĐģ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ ВŅ€ĐĩĐŧŅ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи иŅŅ‚ĐĩĐēĐģĐž ĐĄĐĩŅŅĐ¸Ņ ĐŊĐĩ СĐŊĐ°ĐĩŅ‚ Ой ŅŅ‚ОК Ņ‚Ņ€Đ°ĐŊСаĐēŅ†Đ¸Đ¸ @@ -1503,23 +1249,18 @@ НĐĩŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚виĐĩ ĐēĐģŅŽŅ‡ĐĩĐš НĐĩŅĐžĐžŅ‚вĐĩŅ‚ŅŅ‚виĐĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ НĐĩиСвĐĩŅŅ‚ĐŊĐ°Ņ ĐžŅˆĐ¸ĐąĐēĐ° - Đ ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ ŅŅƒŅ‰ĐĩŅŅ‚вŅƒĐĩŅ‚ ĐŊĐ° Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ "ПоŅ…ĐžĐļĐĩ, Ņƒ ваŅ ŅƒĐļĐĩ ĐĩŅŅ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐ°Ņ ĐēĐžĐŋиŅ ĐēĐģŅŽŅ‡Đ° ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи иС Đ´Ņ€ŅƒĐŗОК ŅĐĩŅŅĐ¸Đ¸. ĐĨĐžŅ‚иŅ‚Đĩ СаĐŧĐĩĐŊиŅ‚ŅŒ ĐĩĐŗĐž ĐŊОвŅ‹Đŧ\?" ЗаĐŧĐĩĐŊиŅ‚ŅŒ ĐĄŅ‚ĐžĐŋ - ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° ŅĐžŅŅ‚ĐžŅĐŊиŅ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ ВŅ‹ вŅ‹ŅˆĐģи иС ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹ иС-Са ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅ‹Ņ… иĐģи иŅŅ‚ĐĩĐēŅˆĐ¸Ņ… ŅƒŅ‡ĐĩŅ‚ĐŊŅ‹Ņ… Đ´Đ°ĐŊĐŊŅ‹Ņ…. - Đ ĐĩĐ´Đ°ĐēŅ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ОŅ‚вĐĩŅ‚иŅ‚ŅŒ - ПовŅ‚ĐžŅ€Đ¸Ņ‚ŅŒ ПŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ĐĩŅŅŒ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ, Ņ‡Ņ‚ОйŅ‹ ĐŊĐ°Ņ‡Đ°Ņ‚ŅŒ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ. ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģ ваĐŧ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊ %s - ВŅ‹ в ĐēŅƒŅ€ŅĐĩ! ĐŖ ваŅ йОĐģŅŒŅˆĐĩ ĐŊĐĩŅ‚ ĐŊĐĩĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК ДобŅ€Đž ĐŋĐžĐļĐ°ĐģОваŅ‚ŅŒ Đ´ĐžĐŧОК! @@ -1528,22 +1269,17 @@ ЗдĐĩŅŅŒ ĐąŅƒĐ´ŅƒŅ‚ ĐžŅ‚ОйŅ€Đ°ĐļĐ°Ņ‚ŅŒŅŅ ваŅˆĐ¸ диаĐģĐžĐŗи КоĐŧĐŊĐ°Ņ‚Ņ‹ ЗдĐĩŅŅŒ ĐąŅƒĐ´ŅƒŅ‚ ĐžŅ‚ОйŅ€Đ°ĐļĐ°Ņ‚ŅŒŅŅ ваŅˆĐ¸ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ - Đ ĐĩĐ°ĐēŅ†Đ¸Đ¸ ПŅ€Đ¸ĐŊŅŅ‚ŅŒ НŅ€Đ°Đ˛Đ¸Ņ‚ŅŒŅŅ ДобавиŅ‚ŅŒ Ņ€ĐĩĐ°ĐēŅ†Đ¸ŅŽ ПŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ Ņ€ĐĩĐ°ĐēŅ†Đ¸Đ¸ МĐĩĐŊĐĩĐ´ĐļĐĩŅ€ иĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸Đ¸ - МĐĩĐŊĐĩĐ´ĐļĐĩŅ€ иĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸Đ¸ ĐŊĐĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ. Đ ĐĩĐ°ĐēŅ†Đ¸Đ¸ - ХОйŅ‹Ņ‚иĐĩ ŅƒĐ´Đ°ĐģĐĩĐŊĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐŧ МĐĩŅ€ĐžĐŋŅ€Đ¸ŅŅ‚иĐĩ, ĐŧОдĐĩŅ€Đ¸Ņ€ŅƒĐĩĐŧĐžĐĩ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ĐžĐŧ ĐŋĐžĐŧĐĩŅ‰ĐĩĐŊиŅ ПоŅĐģĐĩĐ´ĐŊĐĩĐĩ иСĐŧĐĩĐŊĐĩĐŊиĐĩ %1$s %2$s - - НĐĩĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊĐžĐĩ ŅĐžĐąŅ‹Ņ‚иĐĩ, ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐžŅ‚ОйŅ€Đ°ĐļĐĩĐŊĐž ХОСдаŅ‚ŅŒ ĐŊОвŅƒŅŽ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ĐĄĐĩŅ‚и ĐŊĐĩŅ‚. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ Đē ИĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚Ņƒ. @@ -1551,11 +1287,9 @@ ИСĐŧĐĩĐŊиŅ‚ŅŒ ŅĐĩŅ‚ŅŒ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋОдОĐļдиŅ‚Đĩâ€Ļ ВŅĐĩ ŅĐžĐžĐąŅ‰ĐĩŅŅ‚ва - Đ­Ņ‚Ņƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ĐŊĐĩĐģŅŒĐˇŅ ĐŋŅ€ĐĩдваŅ€Đ¸Ņ‚ĐĩĐģŅŒĐŊĐž ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ КоĐŧĐŊĐ°Ņ‚Ņ‹ ДиаĐģĐžĐŗи - НоваŅ ĐēĐžĐŧĐŊĐ°Ņ‚Đ° СОЗДАĐĸĐŦ ИĐŧŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ @@ -1563,18 +1297,13 @@ ЛŅŽĐąĐžĐš ŅĐŧĐžĐļĐĩŅ‚ ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ КаŅ‚Đ°ĐģĐžĐŗ ĐŊĐžĐŧĐĩŅ€ĐžĐ˛ ОĐŋŅƒĐąĐģиĐēОваŅ‚ŅŒ ŅŅ‚Ņƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ в ĐēĐ°Ņ‚Đ°ĐģĐžĐŗĐĩ ĐŊĐžĐŧĐĩŅ€ĐžĐ˛ - ПŅ€ĐžĐ¸ĐˇĐžŅˆĐģĐ° ĐžŅˆĐ¸ĐąĐēĐ° ĐŋŅ€Đ¸ ĐŋĐžĐģŅƒŅ‡ĐĩĐŊии иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸ Đž дОвĐĩŅ€Đ¸Đ¸ ПŅ€ĐžĐ¸ĐˇĐžŅˆĐģĐ° ĐžŅˆĐ¸ĐąĐēĐ° ĐŋŅ€Đ¸ ĐŋĐžĐģŅƒŅ‡ĐĩĐŊии ĐēĐģŅŽŅ‡ĐĩĐš Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ Đ´Đ°ĐŊĐŊŅ‹Ņ… - ИĐŧĐŋĐžŅ€Ņ‚ ĐēĐģŅŽŅ‡ĐĩĐš e2e иС Ņ„Đ°ĐšĐģĐ° \"%1$s\". - ВĐĩŅ€ŅĐ¸Ņ Matrix SDK ДŅ€ŅƒĐŗиĐĩ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ Ņ‚Ņ€ĐĩŅ‚ŅŒĐ¸Ņ… ŅŅ‚ĐžŅ€ĐžĐŊ ВŅ‹ ŅƒĐļĐĩ ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩĐģи ŅŅ‚Ņƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ! - БŅ‹ŅŅ‚Ņ€ĐžĐĩ Ņ€ĐĩĐ°ĐŗиŅ€ĐžĐ˛Đ°ĐŊиĐĩ - ОбŅ‰ĐĩĐĩ ПаŅ€Đ°ĐŧĐĩŅ‚Ņ€Ņ‹ БĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚ŅŒ и ĐēĐžĐŊŅ„идĐĩĐŊŅ†Đ¸Đ°ĐģŅŒĐŊĐžŅŅ‚ŅŒ @@ -1586,89 +1315,62 @@ session_name: Url: ФОŅ€ĐŧĐ°Ņ‚: - ГоĐģĐžŅ и видĐĩĐž ПоĐŧĐžŅ‰ŅŒ и иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Ņ - - Đ ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸ĐžĐŊĐŊŅ‹Đš Ņ‚ĐžĐēĐĩĐŊ - ОŅŅ‚авиŅ‚ŅŒ ĐžŅ‚СŅ‹Đ˛ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŊĐ°ĐŋиŅˆĐ¸Ņ‚Đĩ ваŅˆĐĩ ĐŋŅ€ĐĩĐ´ĐģĐžĐļĐĩĐŊиĐĩ ĐŊиĐļĐĩ. ОĐŋиŅˆĐ¸Ņ‚Đĩ ваŅˆĐĩ ĐŋŅ€ĐĩĐ´ĐģĐžĐļĐĩĐŊиĐĩ СдĐĩŅŅŒ ĐĄĐŋĐ°ŅĐ¸ĐąĐž, ĐŋŅ€ĐĩĐ´ĐģĐžĐļĐĩĐŊиĐĩ ĐąŅ‹ĐģĐž ŅƒŅĐŋĐĩŅˆĐŊĐž ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ПŅ€ĐĩĐ´ĐģĐžĐļĐĩĐŊиĐĩ ĐŊĐĩ ĐąŅ‹ĐģĐž ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž (%s) - ПоĐēаСаŅ‚ŅŒ ŅĐēŅ€Ņ‹Ņ‚Ņ‹Đĩ ŅĐžĐąŅ‹Ņ‚иŅ в ĐģĐĩĐŊŅ‚Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиК - ПŅ€ĐĩдваŅ€Đ¸Ņ‚ĐĩĐģŅŒĐŊŅ‹Đš ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ в Element ĐŋĐžĐēĐ° ĐŊĐĩ ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ŅŅ - ДиаĐģĐžĐŗи - ЖдиŅ‚Đĩâ€Ļ ШиŅ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŧиĐŊиаŅ‚ŅŽŅ€Ņ‹â€Ļ ОŅ‚ĐŋŅ€Đ°Đ˛ĐēĐ° ĐŧиĐŊиаŅ‚ŅŽŅ€ (%1$s / %2$s) ФаКĐģ ŅˆĐ¸Ņ„Ņ€ŅƒĐĩŅ‚ŅŅâ€Ļ ФаКĐģ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģŅĐĩŅ‚ŅŅ (%1$s / %2$s) - ФаКĐģ %1$s СаĐŗŅ€ŅƒĐļĐ°ĐĩŅ‚ŅŅâ€Ļ ФаКĐģ %1$s ĐąŅ‹Đģ СаĐŗŅ€ŅƒĐļĐĩĐŊ! - (иСĐŧĐĩĐŊĐĩĐŊĐž) - - Đ ĐĩĐ´Đ°ĐēŅ‚иŅ€ĐžĐ˛Đ°ĐŊиĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиК ИСĐŧĐĩĐŊĐĩĐŊиŅ ĐŊĐĩ ĐŊаКдĐĩĐŊŅ‹ - ОŅ‚Ņ„иĐģŅŒŅ‚Ņ€ĐžĐ˛Ņ‹Đ˛Đ°Ņ‚ŅŒ Ņ€Đ°ĐˇĐŗОвОŅ€Ņ‹â€Ļ НĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŊĐ°ĐšŅ‚и Ņ‚Đž, Ņ‡Ņ‚Đž иŅ‰ĐĩŅ‚Đĩ\? ХОСдаŅ‚ŅŒ ĐŊОвŅƒŅŽ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐŊОвОĐĩ ĐŋŅ€ŅĐŧĐžĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ПŅ€ĐžŅĐŧĐžŅ‚Ņ€ ŅĐŋиŅĐžĐē ĐēĐžĐŧĐŊĐ°Ņ‚ - ИĐŧŅ иĐģи ID (#example:matrix.org) - ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐļĐĩŅŅ‚ ŅĐŧĐ°Ņ…иваĐŊиŅ Đ´ĐģŅ ĐžŅ‚вĐĩŅ‚Đ° в ĐģĐĩĐŊŅ‚Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиК - ĐĄŅŅ‹ĐģĐēĐ° ŅĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊĐ° в ĐąŅƒŅ„ĐĩŅ€ ОйĐŧĐĩĐŊĐ° - ДобавиŅ‚ŅŒ ĐŋĐž Matrix ID ХОСдаĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹â€Ļ "Đ ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚ ĐŊĐĩ ĐŊаКдĐĩĐŊ, иŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ дОйавиŅ‚ŅŒ matrix ID Đ´ĐģŅ ĐŋОиŅĐēĐ° ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ." НаŅ‡ĐŊиŅ‚Đĩ ĐŋĐĩŅ‡Đ°Ņ‚Đ°Ņ‚ŅŒ, Ņ‡Ņ‚ОйŅ‹ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ Ņ€ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚ ФиĐģŅŒŅ‚Ņ€ ĐŋĐž иĐŧĐĩĐŊи ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ иĐģи IDâ€Ļ - ПŅ€Đ¸ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩâ€Ļ - ИŅŅ‚ĐžŅ€Đ¸Ņ иСĐŧĐĩĐŊĐĩĐŊиК - ОбзоŅ€ ОŅ‚ĐēĐģĐžĐŊиŅ‚ŅŒ - ДĐģŅ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐĩĐŊиŅ ВаĐŧ ĐŊĐĩОйŅ…ОдиĐŧĐž ĐŋŅ€Đ¸ĐŊŅŅ‚ŅŒ ĐŖŅĐģОвиŅ Đ´Đ°ĐŊĐŊĐžĐŗĐž ŅĐĩŅ€Đ˛Đ¸ŅĐ°. - ПŅ€Đ°Đ˛Đ¸ĐģĐ° push-ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ĐŊĐĩ ĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊŅ‹ НĐĩŅ‚ СаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… push-ŅˆĐģŅŽĐˇĐžĐ˛ - ĐŖŅĐģОвиŅ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авĐģĐĩĐŊиŅ ŅƒŅĐģŅƒĐŗ ĐŖŅĐģОвиŅ ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€Đ° БŅ‹Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋĐŊŅ‹Đŧ Đ´ĐģŅ Đ´Ņ€ŅƒĐŗиŅ… ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ йОŅ‚Ов, ĐŧĐžŅŅ‚Ņ‹, видĐļĐĩŅ‚Ņ‹ и ŅŅ‚иĐēĐĩŅ€Ņ‹ - ЧиŅ‚Đ°Ņ‚ŅŒ в - НиĐēŅ‚Đž ОŅ‚ĐŧĐĩĐŊĐ° ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐĄĐĩŅ€Đ˛ĐĩŅ€ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ĐŊĐĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ. - ЗвоĐŊĐžĐē ĐŊĐĩ ŅĐžŅŅ‚ĐžŅĐģŅŅ иС-Са ĐŊĐĩĐŋŅ€Đ°Đ˛Đ¸ĐģŅŒĐŊĐž ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊĐŊĐžĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° ПоĐŋŅ€ĐžŅĐ¸Ņ‚Đĩ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Đ° ваŅˆĐĩĐŗĐž Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° (%1$s) ĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ TURN ŅĐĩŅ€Đ˛ĐĩŅ€, Ņ‡Ņ‚ОйŅ‹ СвОĐŊĐēи Ņ€Đ°ĐąĐžŅ‚Đ°Đģи ĐŊĐ°Đ´ĐĩĐļĐŊĐž. \n \nКŅ€ĐžĐŧĐĩ Ņ‚ĐžĐŗĐž, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋĐžĐŋŅ€ĐžĐąĐžĐ˛Đ°Ņ‚ŅŒ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐŋŅƒĐąĐģиŅ‡ĐŊŅ‹Đš ŅĐĩŅ€Đ˛ĐĩŅ€ ĐŋĐž %2$s, ĐŊĐž ŅŅ‚Đž ĐąŅƒĐ´ĐĩŅ‚ ĐŊĐĩ Ņ‚Đ°Đē ĐŊĐ°Đ´ĐĩĐļĐŊĐž, и ĐžĐŊ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авиŅ‚ ваŅˆ IP-Đ°Đ´Ņ€ĐĩŅ ŅŅ‚ĐžĐŧŅƒ ŅĐĩŅ€Đ˛ĐĩŅ€Ņƒ. ВŅ‹ Ņ‚Đ°ĐēĐļĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ŅƒĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ŅŅ‚иĐŧ в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ…. ПоĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ %s БоĐģŅŒŅˆĐĩ ĐŊĐĩ ŅĐŋŅ€Đ°ŅˆĐ¸Đ˛Đ°Ņ‚ŅŒ - ĐŖŅŅ‚Đ°ĐŊОвиŅ‚Đĩ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸, и ĐŋОСĐļĐĩ ĐžĐŊĐ° ĐŧĐžĐļĐĩŅ‚ ĐąŅƒĐ´ĐĩŅ‚ ĐŊаКдĐĩĐŊĐ° ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēĐ°Đŧи, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ваŅ СĐŊĐ°ŅŽŅ‚. ĐŖŅŅ‚Đ°ĐŊОвиŅ‚Đĩ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊ, и ĐŋОСĐļĐĩ ĐĩĐŗĐž ĐŧĐžĐŗŅƒŅ‚ ĐžĐŋŅ†Đ¸ĐžĐŊĐ°ĐģŅŒĐŊĐž ОйĐŊĐ°Ņ€ŅƒĐļиваŅ‚ŅŒ ĐģŅŽĐ´Đ¸, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ваŅ СĐŊĐ°ŅŽŅ‚. ĐŖŅŅ‚Đ°ĐŊОвиŅ‚Đĩ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚Đ°. ПозĐļĐĩ иŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊŅƒŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ иĐģи Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊ, Ņ‡Ņ‚ОйŅ‹ иŅ… ĐŧĐžĐŗĐģи ĐŊĐ°ĐšŅ‚и ĐģŅŽĐ´Đ¸, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ваŅ СĐŊĐ°ŅŽŅ‚. @@ -1679,8 +1381,6 @@ ОĐŋŅ‚иĐŧиСиŅ€ĐžĐ˛Đ°ĐŊ Đ´ĐģŅ Ņ€Đ°ĐąĐžŅ‚Ņ‹ в Ņ€ĐĩĐ°ĐģŅŒĐŊĐžĐŧ вŅ€ĐĩĐŧĐĩĐŊи БĐĩС Ņ„ĐžĐŊОвОК ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Đ¸ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ОйĐŊОвиŅ‚ŅŒ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи. - - ПŅ€ĐĩĐ´ĐŋĐžŅ‡Ņ‚иŅ‚ĐĩĐģŅŒĐŊŅ‹Đš иĐŊŅ‚ĐĩŅ€Đ˛Đ°Đģ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Đ¸ ОбĐŊĐ°Ņ€ŅƒĐļĐĩĐŊиĐĩ БŅƒĐ´ĐĩŅ‚ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ%s в ĐēĐ°Ņ‡ĐĩŅŅ‚вĐĩ ĐŋĐžĐŧĐžŅ‰ĐŊиĐēĐ°, ĐĩŅĐģи ваŅˆ Đ´ĐžĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€ ĐŊĐĩ ĐŋŅ€ĐĩĐ´ĐģĐ°ĐŗĐ°ĐĩŅ‚ ĐĩĐŗĐž (ваŅˆ IP-Đ°Đ´Ņ€ĐĩŅ ĐąŅƒĐ´ĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋĐĩĐŊ вО вŅ€ĐĩĐŧŅ Ņ€Đ°ĐˇĐŗОвОŅ€Đ°) @@ -1698,9 +1398,7 @@ ПŅƒĐąĐģиŅ‡ĐŊĐžĐĩ иĐŧŅ ŅĐĩŅŅĐ¸Đ¸ видĐŊŅ‹ ĐģŅŽĐ´ŅĐŧ, Ņ ĐēĐžŅ‚ĐžŅ€Ņ‹Đŧи вŅ‹ ОйŅ‰Đ°ĐĩŅ‚ĐĩŅŅŒ ВŅ‹ ĐŊĐĩ иŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚Đĩ ĐēĐ°ĐēОК-ĐģийО ŅĐĩŅ€Đ˛ĐĩŅ€ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ИдĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸ĐžĐŊĐŊŅ‹Đš ŅĐĩŅ€Đ˛ĐĩŅ€ ĐŊĐĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ, Ņ‚Ņ€ĐĩĐąŅƒĐĩŅ‚ŅŅ ŅĐąŅ€ĐžŅ ĐŋĐ°Ņ€ĐžĐģŅ. - ПоŅ…ĐžĐļĐĩ, вŅ‹ ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ĐĩŅŅŒ ĐŋОдĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ Đē Đ´Ņ€ŅƒĐŗĐžĐŧŅƒ Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŧŅƒ ŅĐĩŅ€Đ˛ĐĩŅ€Ņƒ. ВŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ вŅ‹ĐšŅ‚и\? - ĐĄĐĩŅ€Đ˛ĐĩŅ€ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸ĐžĐŊĐŊŅ‹Đš ŅĐĩŅ€Đ˛ĐĩŅ€ НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸ĐžĐŊĐŊŅ‹Đš ŅĐĩŅ€Đ˛ĐĩŅ€ @@ -1710,7 +1408,6 @@ ВидиĐŧŅ‹Đĩ Đ°Đ´Ņ€ĐĩŅĐ° ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ ДоŅŅ‚ŅƒĐŋĐŊŅ‹Đĩ ĐŊĐžĐŧĐĩŅ€Đ° Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊОв В ĐžĐļидаĐŊии - ВвĐĩдиŅ‚Đĩ Đ°Đ´Ņ€ĐĩŅ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŋОдĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ Đē ŅĐĩŅ€Đ˛ĐĩŅ€Ņƒ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ URL ŅĐĩŅ€Đ˛ĐĩŅ€Đ° идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ @@ -1721,19 +1418,15 @@ МŅ‹ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи ваĐŧ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐžĐĩ ĐŋиŅŅŒĐŧĐž Ņ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩĐŧ ĐŊĐ° %s, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ваŅˆŅƒ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊŅƒŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ и ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŊĐ° ŅŅŅ‹ĐģĐēŅƒ Đ´ĐģŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ ВŅ‹ĐąŅ€Đ°ĐŊĐŊŅ‹Đš ŅĐĩŅ€Đ˛ĐĩŅ€ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ĐŊĐĩ иĐŧĐĩĐĩŅ‚ ŅƒŅĐģОвиК ОйŅĐģŅƒĐļиваĐŊиŅ. ПŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ, Ņ‚ĐžĐģŅŒĐēĐž ĐĩŅĐģи вŅ‹ дОвĐĩŅ€ŅĐĩŅ‚Đĩ вĐģĐ°Đ´ĐĩĐģŅŒŅ†Ņƒ ŅĐģŅƒĐļĐąŅ‹ ĐĸĐĩĐēŅŅ‚ОвОĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž %s. ВвĐĩдиŅ‚Đĩ ĐēОд ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ĐžĐŊ ŅĐžĐ´ĐĩŅ€ĐļиŅ‚. - В ĐŊĐ°ŅŅ‚ĐžŅŅ‰ĐĩĐĩ вŅ€ĐĩĐŧŅ вŅ‹ Đ´ĐĩĐģиŅ‚ĐĩŅŅŒ Đ°Đ´Ņ€ĐĩŅĐ°Đŧи ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ иĐģи Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐŊŅ‹Đŧи ĐŊĐžĐŧĐĩŅ€Đ°Đŧи ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ %1$s. ВаĐŧ ĐŊŅƒĐļĐŊĐž ĐŋОвŅ‚ĐžŅ€ĐŊĐž ĐŋОдĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ Đē %2$s, Ņ‡Ņ‚ОйŅ‹ ĐŋŅ€ĐĩĐēŅ€Đ°Ņ‚иŅ‚ŅŒ Đ´ĐĩĐģиŅ‚ŅŒŅŅ иĐŧи. ПŅ€Đ¸ĐŧиŅ‚Đĩ ĐŖŅĐģОвиŅ ОйŅĐģŅƒĐļиваĐŊиŅ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ (%s), Ņ‡Ņ‚ОйŅ‹ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ ОйĐŊĐ°Ņ€ŅƒĐļĐĩĐŊиĐĩ ĐŋĐž Đ°Đ´Ņ€ĐĩŅŅƒ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ иĐģи ĐŊĐžĐŧĐĩŅ€Ņƒ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ°. ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐŋОдŅ€ĐžĐąĐŊŅ‹Đĩ ĐģĐžĐŗи. ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ вĐģĐžĐļĐĩĐŊиĐĩ - ОŅ‚ĐēŅ€ĐžĐšŅ‚Đĩ ĐŊавиĐŗĐ°Ņ†Đ¸ĐžĐŊĐŊŅ‹Đš ŅŅ‰Đ¸Đē ОŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ ĐŧĐĩĐŊŅŽ ŅĐžĐˇĐ´Đ°ĐŊиŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ НĐĩвĐĩŅ€ĐŊŅ‹Đš Đ°Đ´Ņ€ĐĩŅ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° Matrix ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒ ĐĸŅ€ĐĩĐąŅƒĐĩŅ‚ŅŅ Đ°ŅƒŅ‚ĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Ņ - - ИĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸Đ¸ РаСŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ иĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸Đ¸ ВидĐļĐĩŅ‚ @@ -1746,10 +1439,7 @@ Đ­Ņ‚ĐžŅ‚ видĐļĐĩŅ‚ ĐąŅ‹Đģ дОйавĐģĐĩĐŊ: ВаŅˆĐ¸ Ņ‚ĐĩĐŧĐ° ID ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ - - Cyrl - ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŧĐĩĐŊĐĩĐ´ĐļĐĩŅ€ иĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸Đš Ņ‡Ņ‚ОйŅ‹ ŅƒĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ йОŅ‚Đ°Đŧи, ĐŧĐžŅŅ‚Đ°Đŧи, видĐļĐĩŅ‚Đ°Đŧи и ĐŊайОŅ€Đ°Đŧи ŅŅ‚иĐēĐĩŅ€ĐžĐ˛. \nМĐĩĐŊĐĩĐ´ĐļĐĩŅ€Ņ‹ иĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸Đš ĐŋĐžĐģŅƒŅ‡Đ°ŅŽŅ‚ Đ´Đ°ĐŊĐŊŅ‹Đĩ Đž ĐēĐžĐŊŅ„иĐŗŅƒŅ€Đ°Ņ†Đ¸Đ¸, ĐŧĐžĐŗŅƒŅ‚ иСĐŧĐĩĐŊŅŅ‚ŅŒ видĐļĐĩŅ‚Ņ‹, ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ в ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ и ŅƒŅŅ‚Đ°ĐŊавĐģиваŅ‚ŅŒ ĐŋŅ€Đ°Đ˛Đ° ĐžŅ‚ ваŅˆĐĩĐŗĐž иĐŧĐĩĐŊи. "ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиĐĩ ĐŧĐžĐļĐĩŅ‚ ĐžŅŅ‚авиŅ‚ŅŒ cookie ĐŊĐ° ваŅˆĐĩĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ и ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ Đ´Đ°ĐŊĐŊŅ‹Đĩ в %s:" @@ -1757,7 +1447,6 @@ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ СаĐŗŅ€ŅƒĐˇĐ¸Ņ‚ŅŒ видĐļĐĩŅ‚. \n%s ОŅ‚ОСваŅ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đ´ĐģŅ ĐŧĐĩĐŊŅ - ВаŅˆĐĩ ĐžŅ‚ОйŅ€Đ°ĐļĐ°ĐĩĐŧĐžĐĩ иĐŧŅ URL ваŅˆĐĩĐŗĐž аваŅ‚Đ°Ņ€Đ° ВаŅˆ ID @@ -1766,7 +1455,6 @@ ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐ°ĐŧĐĩŅ€Ņƒ ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐŧиĐēŅ€ĐžŅ„ĐžĐŊ ПоĐģŅƒŅ‡Đ°Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ĐŧĐĩдиа, СаŅ‰Đ¸Ņ‰Ņ‘ĐŊĐŊŅ‹Đŧ DRM - ХОСдаŅ‚ŅŒ ĐŊОвŅƒŅŽ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ПоĐēаСаŅ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒ ĐĄĐēŅ€Ņ‹Ņ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒ @@ -1776,7 +1464,6 @@ ГаĐģĐĩŅ€ĐĩŅ Đ­Ņ‚Đž ŅĐŋĐ°Đŧ ИĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ - ВŅĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐĸĐžĐģŅŒĐēĐž ĐŋŅ€Đ¸ ŅƒĐŋĐžĐŧиĐŊĐ°ĐŊиŅŅ… НаŅŅ‚Ņ€ĐžĐšĐēи @@ -1784,39 +1471,29 @@ %1$s ŅĐ´ĐĩĐģĐ°Đģ(Đ°) ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ Đ´ĐžŅŅ‚ŅƒĐŋĐŊОК Đ´ĐģŅ вŅĐĩŅ…, Ņƒ ĐēĐžĐŗĐž ĐĩŅŅ‚ŅŒ ŅŅŅ‹ĐģĐēĐ°. %1$s ŅĐ´ĐĩĐģĐ°Đģ(Đ°) ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ Đ´ĐžŅŅ‚ŅƒĐŋĐŊОК Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅŽ. ПодŅ€ĐžĐąĐŊŅ‹Đĩ ĐģĐžĐŗи ĐŋĐžĐŧĐžĐŗŅƒŅ‚ Ņ€Đ°ĐˇŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸ĐēĐ°Đŧ, ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авив йОĐģŅŒŅˆĐĩ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸, ĐēĐžĐŗĐ´Đ° вŅ‹ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģŅĐĩŅ‚Đĩ RageShake. ДаĐļĐĩ ĐēĐžĐŗĐ´Đ° ĐžĐŊи Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊŅ‹, ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ ĐŊĐĩ ĐģĐžĐŗиŅ€ŅƒĐĩŅ‚ ваŅˆĐ¸ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ и Đ´Ņ€ŅƒĐŗиĐĩ ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊŅ‹Đĩ Đ´Đ°ĐŊĐŊŅ‹Đĩ. - - ОŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ ŅĐžĐˇĐ´Đ°ĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹â€Ļ ВĐŊиС - КоĐŊŅ‚Đ°ĐēŅ‚ ĐĄŅ‚иĐēĐĩŅ€ ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ° ĐļĐ°ĐģОйŅ‹ ĐŊĐ° ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ПоĐļĐ°ĐģОваŅ‚ŅŒŅŅ ИГНОРИРОВАĐĸĐŦ ПОЛĐŦЗОВАĐĸĐ•Đ›Đ¯ - ВŅĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ (ĐŗŅ€ĐžĐŧĐēĐž) БĐĩС СвŅƒĐēĐ° ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ Đ´Đ°ĐŊĐŊĐžĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ĐŋОд ŅĐŋОКĐģĐĩŅ€ĐžĐŧ ĐĄĐŋОКĐģĐĩŅ€ ВвĐĩдиŅ‚Đĩ ĐēĐģŅŽŅ‡ĐĩвŅ‹Đĩ ŅĐģОва, Ņ‡Ņ‚ОйŅ‹ ĐŊĐ°ĐšŅ‚и Ņ€ĐĩĐ°ĐēŅ†Đ¸ŅŽ. - ДоĐģĐŗиК ĐēĐģиĐē ĐŋĐž ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ ĐŋĐžĐēĐ°ĐļĐĩŅ‚ Đ´ĐžĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊŅ‹Đĩ ĐžĐŋŅ†Đ¸Đ¸ - - НĐĩĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - Đ­Ņ‚Đž ваŅˆ Ņ€Đ°ĐˇĐŗОвОŅ€. ВĐģĐ°Đ´ĐĩĐšŅ‚Đĩ иĐŧ. ОбŅ‰Đ°ĐšŅ‚ĐĩŅŅŒ Ņ ĐģŅŽĐ´ŅŒĐŧи ĐŊĐ°ĐŋŅ€ŅĐŧŅƒŅŽ иĐģи в ĐŗŅ€ŅƒĐŋĐŋĐ°Ņ… НаŅ‡Đ°Ņ‚ŅŒ - ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ŅĐĩŅ€Đ˛ĐĩŅ€ КаĐē и Ņƒ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹, Ņƒ ŅƒŅ‡Ņ‘Ņ‚ĐŊŅ‹Ņ… СаĐŋиŅĐĩĐš ОдиĐŊ Đ´ĐžĐŧ, Ņ…ĐžŅ‚Ņ вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ОйŅ‰Đ°Ņ‚ŅŒŅŅ Ņ ĐēĐĩĐŧ ŅƒĐŗОдĐŊĐž ПŅ€ĐĩĐŧиŅƒĐŧ-Ņ…ĐžŅŅ‚иĐŊĐŗ Đ´ĐģŅ ĐžŅ€ĐŗĐ°ĐŊиСаŅ†Đ¸Đš ĐŖСĐŊĐ°Ņ‚ŅŒ йОĐģŅŒŅˆĐĩ ДŅ€ŅƒĐŗОК ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēиĐĩ и Ņ€Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊĐŊŅ‹Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи - ПŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ ПодĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ Đē %1$s ПодĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ Đē Element Matrix Services @@ -1824,7 +1501,6 @@ ЗаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒŅŅ ВойŅ‚и в ŅĐ¸ŅŅ‚ĐĩĐŧŅƒ ПŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ Ņ SSO - МодŅƒĐģŅŒĐŊŅ‹Đš Đ°Đ´Ņ€ĐĩŅ АдŅ€ĐĩŅ ПŅ€ĐĩĐŧиŅƒĐŧ-Ņ…ĐžŅŅ‚иĐŊĐŗ Đ´ĐģŅ ĐžŅ€ĐŗĐ°ĐŊиСаŅ†Đ¸Đš @@ -1836,20 +1512,15 @@ ПŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ŅĐžĐˇĐ´Đ°Ņ‚ŅŒ ŅƒŅ‡Ņ‘Ņ‚ĐŊŅƒŅŽ СаĐŋиŅŅŒ ĐŊĐ° ŅŅ‚ĐžĐŧ Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. \n \nĐĨĐžŅ‚иŅ‚Đĩ СаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒŅŅ Ņ‡ĐĩŅ€ĐĩС вĐĩĐą-ĐēĐģиĐĩĐŊŅ‚\? - Đ­Ņ‚ĐžŅ‚ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ ĐŊĐĩ ŅĐ˛ŅĐˇĐ°ĐŊ ĐŊи Ņ ОдĐŊОК ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅŅŒŅŽ. - ĐĄĐąŅ€ĐžŅĐ¸Ņ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒ ĐŊĐ° %1$s ДаĐģĐĩĐĩ Email НовŅ‹Đš ĐŋĐ°Ņ€ĐžĐģŅŒ - ВĐŊиĐŧĐ°ĐŊиĐĩ! ĐĄĐŧĐĩĐŊĐ° ĐŋĐ°Ņ€ĐžĐģŅ ĐŋŅ€Đ¸Đ˛ĐĩĐ´Ņ‘Ņ‚ Đē ŅĐąŅ€ĐžŅŅƒ вŅĐĩŅ… ŅĐēвОСĐŊŅ‹Ņ… ĐēĐģŅŽŅ‡ĐĩĐš ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ вО вŅĐĩŅ… ваŅˆĐ¸Ņ… ŅĐĩŅŅĐ¸ŅŅ…, Ņ‡Ņ‚Đž ŅĐ´ĐĩĐģĐ°ĐĩŅ‚ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅƒŅŽ иŅŅ‚ĐžŅ€Đ¸ŅŽ Ņ€Đ°ĐˇĐŗОвОŅ€ĐžĐ˛ ĐŊĐĩŅ‡Đ¸Ņ‚Đ°ĐĩĐŧОК. НаŅŅ‚Ņ€ĐžĐšŅ‚Đĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš иĐģи ŅĐēŅĐŋĐžŅ€Ņ‚иŅ€ŅƒĐšŅ‚Đĩ ĐēĐģŅŽŅ‡Đ¸ ĐžŅ‚ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ иС Đ´Ņ€ŅƒĐŗОК ŅĐĩŅŅĐ¸Đ¸, ĐŋŅ€ĐĩĐļĐ´Đĩ Ņ‡ĐĩĐŧ ŅĐąŅ€Đ°ŅŅ‹Đ˛Đ°Ņ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒ. ПŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ - ДаĐŊĐŊŅ‹Đš email ĐŊĐĩ ŅĐ˛ŅĐˇĐ°ĐŊ ĐŊи Ņ ОдĐŊиĐŧ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ĐžĐŧ - ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅĐ˛ĐžŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ ПиŅŅŒĐŧĐž Ņ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩĐŧ ĐąŅ‹ĐģĐž ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ĐŊĐ° %1$s. НаĐļĐŧиŅ‚Đĩ ĐŊĐ° ŅŅŅ‹ĐģĐēŅƒ, Ņ‡Ņ‚ОйŅ‹ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ŅĐ˛ĐžĐš ĐŊОвŅ‹Đš ĐŋĐ°Ņ€ĐžĐģŅŒ. КаĐē Ņ‚ĐžĐģŅŒĐēĐž вŅ‹ ĐŋĐĩŅ€ĐĩКдĐĩŅ‚Đĩ ĐŋĐž ŅŅŅ‹ĐģĐēĐĩ, ĐēĐžŅ‚ĐžŅ€ŅƒŅŽ ĐžĐŊ ŅĐžĐ´ĐĩŅ€ĐļиŅ‚, ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŊиĐļĐĩ. @@ -1857,33 +1528,27 @@ ВаŅˆ ĐŋĐ°Ņ€ĐžĐģŅŒ ĐąŅ‹Đģ ŅĐąŅ€ĐžŅˆĐĩĐŊ. ВŅ‹ вŅ‹ŅˆĐģи иС вŅĐĩŅ… ŅĐĩŅŅĐ¸Đš и йОĐģŅŒŅˆĐĩ ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚Đĩ ĐŋĐžĐģŅƒŅ‡Đ°Ņ‚ŅŒ push-ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ. ЧŅ‚ОйŅ‹ вОСОйĐŊОвиŅ‚ŅŒ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ, вОКдиŅ‚Đĩ ŅĐŊОва ĐŊĐ° ĐēĐ°ĐļĐ´ĐžĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ. Назад, Ņ‡Ņ‚ОйŅ‹ вОКŅ‚и в ŅĐ¸ŅŅ‚ĐĩĐŧŅƒ - ПŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ ВаŅˆ ĐŋĐ°Ņ€ĐžĐģŅŒ ĐĩŅ‰Đĩ ĐŊĐĩ иСĐŧĐĩĐŊĐĩĐŊ. \n \nОŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ ĐŋŅ€ĐžŅ†ĐĩŅŅ ŅĐŧĐĩĐŊŅ‹ ĐŋĐ°Ņ€ĐžĐģŅ\? - ЗадаŅ‚ŅŒ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ Đ­ĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐ°Ņ ĐŋĐžŅ‡Ņ‚Đ° Đ­ĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐ°Ņ ĐŋĐžŅ‡Ņ‚Đ° (ĐŋĐž ĐļĐĩĐģĐ°ĐŊиŅŽ) ДаĐģĐĩĐĩ - ĐŖŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ ĐŊĐžĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° ĐŖĐēĐ°ĐļиŅ‚Đĩ ĐŊĐžĐŧĐĩŅ€ ŅĐ˛ĐžĐĩĐŗĐž Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ°, Ņ‡Ņ‚ОйŅ‹ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ СĐŊĐ°ĐēĐžĐŧŅ‹Đŧ ĐŊĐ°ĐšŅ‚и ваŅ. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, иŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŧĐĩĐļĐ´ŅƒĐŊĐ°Ņ€ĐžĐ´ĐŊŅ‹Đš Ņ„ĐžŅ€ĐŧĐ°Ņ‚. НоĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° НоĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° (ĐŊĐĩОйŅĐˇĐ°Ņ‚ĐĩĐģŅŒĐŊĐž) ДаĐģĐĩĐĩ - ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ĐŊĐžĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° МŅ‹ Ņ‚ĐžĐģŅŒĐēĐž Ņ‡Ņ‚Đž ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи ĐēОд ĐŊĐ° %1$s. ВвĐĩдиŅ‚Đĩ ĐĩĐŗĐž ĐŊиĐļĐĩ, Ņ‡Ņ‚ОйŅ‹ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ, Ņ‡Ņ‚Đž ŅŅ‚Đž вŅ‹. ВвĐĩдиŅ‚Đĩ ĐēОд ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ĐŋОвŅ‚ĐžŅ€ĐŊĐž ДаĐģĐĩĐĩ - МĐĩĐļĐ´ŅƒĐŊĐ°Ņ€ĐžĐ´ĐŊŅ‹Đĩ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐŊŅ‹Đĩ ĐŊĐžĐŧĐĩŅ€Đ° Đ´ĐžĐģĐļĐŊŅ‹ ĐŊĐ°Ņ‡Đ¸ĐŊĐ°Ņ‚ŅŒŅŅ Ņ \'+\' НоĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° ĐēĐ°ĐļĐĩŅ‚ŅŅ ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅ‹Đŧ. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐĩĐŗĐž - ЗаŅ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒŅŅ в %1$s ИĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ иĐģи email ИĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ @@ -1894,25 +1559,21 @@ ВаŅˆ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ ĐĩŅ‰Đĩ ĐŊĐĩ ŅĐžĐˇĐ´Đ°ĐŊ. \n \nОŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ ĐŋŅ€ĐžŅ†ĐĩŅŅ Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ°Ņ†Đ¸Đ¸\? - ВŅ‹ĐąŅ€Đ°Ņ‚ŅŒ matrix.org ВŅ‹ĐąŅ€Đ°Ņ‚ŅŒ Element Matrix Services ВŅ‹ĐąŅ€Đ°Ņ‚ŅŒ Đ´Ņ€ŅƒĐŗОК ŅĐĩŅ€Đ˛ĐĩŅ€ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐšĐ´Đ¸Ņ‚Đĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ ĐēĐ°ĐŋŅ‡ĐĩĐš ПŅ€Đ¸ĐŧиŅ‚Đĩ ŅƒŅĐģОвиŅ Đ´ĐģŅ ĐŋŅ€ĐžĐ´ĐžĐģĐļĐĩĐŊиŅ - ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ваŅˆ email МŅ‹ Ņ‚ĐžĐģŅŒĐēĐž Ņ‡Ņ‚Đž ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи email ĐŊĐ° %1$s. \nПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŊĐ° ŅĐžĐ´ĐĩŅ€ĐļĐ°Ņ‰ŅƒŅŽŅŅ в ĐŊŅ‘Đŧ ŅŅŅ‹ĐģĐēŅƒ, Ņ‡Ņ‚ОйŅ‹ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ ŅĐžĐˇĐ´Đ°ĐŊиĐĩ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚Đ°. ДоĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€ ŅƒŅŅ‚Đ°Ņ€ĐĩĐģ Đ­Ņ‚ĐžŅ‚ Đ´ĐžĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€ иŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ ŅĐģиŅˆĐēĐžĐŧ ŅŅ‚Đ°Ņ€ŅƒŅŽ вĐĩŅ€ŅĐ¸ŅŽ Đ´ĐģŅ ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊиŅ. ПоĐŋŅ€ĐžŅĐ¸Ņ‚Đĩ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Đ° ОйĐŊОвиŅ‚ŅŒ Đ´ĐžĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€. - ОŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ŅĐģиŅˆĐēĐžĐŧ ĐŧĐŊĐžĐŗĐž СаĐŋŅ€ĐžŅĐžĐ˛. ВŅ‹ ŅĐŧĐžĐļĐĩŅ‚Đĩ ĐŋОвŅ‚ĐžŅ€Đ¸Ņ‚ŅŒ ĐŋĐžĐŋŅ‹Ņ‚ĐēŅƒ Ņ‡ĐĩŅ€ĐĩС %1$d ŅĐĩĐēŅƒĐŊĐ´Ņƒâ€Ļ ОŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ŅĐģиŅˆĐēĐžĐŧ ĐŧĐŊĐžĐŗĐž СаĐŋŅ€ĐžŅĐžĐ˛. ВŅ‹ ŅĐŧĐžĐļĐĩŅ‚Đĩ ĐŋОвŅ‚ĐžŅ€Đ¸Ņ‚ŅŒ ĐŋĐžĐŋŅ‹Ņ‚ĐēŅƒ Ņ‡ĐĩŅ€ĐĩС %1$d ŅĐĩĐēŅƒĐŊĐ´Ņ‹â€Ļ ОŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ŅĐģиŅˆĐēĐžĐŧ ĐŧĐŊĐžĐŗĐž СаĐŋŅ€ĐžŅĐžĐ˛. ВŅ‹ ŅĐŧĐžĐļĐĩŅ‚Đĩ ĐŋОвŅ‚ĐžŅ€Đ¸Ņ‚ŅŒ ĐŋĐžĐŋŅ‹Ņ‚ĐēŅƒ Ņ‡ĐĩŅ€ĐĩС %1$d ŅĐĩĐēŅƒĐŊĐ´â€Ļ - ВŅ‹ вŅ‹ŅˆĐģи иС ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹ Đ­Ņ‚Đž ĐŧĐžĐŗĐģĐž ĐŋŅ€ĐžĐ¸ĐˇĐžĐšŅ‚и ĐŋĐž Ņ€Đ°ĐˇĐŊŅ‹Đŧ ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊĐ°Đŧ: \n @@ -1922,7 +1583,6 @@ \n \nâ€ĸ АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ ваŅˆĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° СайĐģĐžĐēиŅ€ĐžĐ˛Đ°Đģ ваĐŧ Đ´ĐžŅŅ‚ŅƒĐŋ иС ŅĐžĐžĐąŅ€Đ°ĐļĐĩĐŊиК ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и. ВойŅ‚и ŅĐŊОва - ВŅ‹ вŅ‹ŅˆĐģи иС ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹ ВойŅ‚и АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ ваŅˆĐĩĐŗĐž Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° (%1$s) вŅ‹Đ˛ĐĩĐģ ваŅ иС ваŅˆĐĩĐŗĐž Đ°ĐēĐēĐ°ŅƒĐŊŅ‚Đ° %2$s (%3$s). @@ -1934,7 +1594,6 @@ \n \nĐŖĐ´Đ°ĐģиŅ‚Đĩ иŅ…, ĐĩŅĐģи вŅ‹ СаĐēĐžĐŊŅ‡Đ¸Đģи иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ŅŅ‚Đž ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО иĐģи Ņ…ĐžŅ‚иŅ‚Đĩ вОКŅ‚и в Đ´Ņ€ŅƒĐŗŅƒŅŽ ŅƒŅ‡Ņ‘Ņ‚ĐŊŅƒŅŽ СаĐŋиŅŅŒ. ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ вŅĐĩ Đ´Đ°ĐŊĐŊŅ‹Đĩ - ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ Đ´Đ°ĐŊĐŊŅ‹Đĩ ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ вŅĐĩ Đ´Đ°ĐŊĐŊŅ‹Đĩ, Ņ…Ņ€Đ°ĐŊŅŅ‰Đ¸ĐĩŅŅ в Đ´Đ°ĐŊĐŊŅ‹Đš ĐŧĐžĐŧĐĩĐŊŅ‚ ĐŊĐ° ŅŅ‚ĐžĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ\? \nВойдиŅ‚Đĩ СаĐŊОвО, Ņ‡Ņ‚ОйŅ‹ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē Đ´Đ°ĐŊĐŊŅ‹Đŧ ŅĐ˛ĐžĐĩĐš ŅƒŅ‡Ņ‘Ņ‚ĐŊОК СаĐŋиŅĐ¸ и ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ. @@ -1942,10 +1601,8 @@ ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ Đ´Đ°ĐŊĐŊŅ‹Đĩ ĐĸĐĩĐēŅƒŅ‰Đ°Ņ ŅĐĩŅŅĐ¸Ņ ĐŋŅ€ĐĩĐ´ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊĐ° Đ´ĐģŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ %1$s, Đ° вŅ‹ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авĐģŅĐĩŅ‚Đĩ ŅƒŅ‡Ņ‘Ņ‚ĐŊŅ‹Đĩ Đ´Đ°ĐŊĐŊŅ‹Đĩ Đ´ĐģŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ %2$s. Đ­Ņ‚Đž ĐŊĐĩ ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ŅŅ в Element. \nПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ŅĐŊĐ°Ņ‡Đ°ĐģĐ° ĐžŅ‡Đ¸ŅŅ‚иŅ‚Đĩ Đ´Đ°ĐŊĐŊŅ‹Đĩ, Đ° СаŅ‚ĐĩĐŧ ŅĐŊОва вОКдиŅ‚Đĩ ĐŋОд Đ´Ņ€ŅƒĐŗиĐŧ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ĐžĐŧ. - ВаŅˆĐ° ŅŅŅ‹ĐģĐēĐ° ĐŊĐ° matrix.to ĐŊĐĩвĐĩŅ€ĐŊĐ° ОĐŋиŅĐ°ĐŊиĐĩ ŅĐģиŅˆĐēĐžĐŧ ĐēĐžŅ€ĐžŅ‚ĐēĐžĐĩ - ПоŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ вŅĐĩ ĐŧОи ŅĐĩŅŅĐ¸Đ¸ ДоĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊŅ‹Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи Đ ĐĩĐļиĐŧ Ņ€Đ°ĐˇŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸ĐēĐ° @@ -1953,7 +1610,6 @@ НаŅŅ‚Ņ€ĐžĐšĐēи ĐĸĐĩĐēŅƒŅ‰Đ°Ņ ŅĐĩŅŅĐ¸Ņ ДŅ€ŅƒĐŗиĐĩ ŅĐĩŅŅĐ¸Đ¸ - ВĐēĐģŅŽŅ‡ĐĩĐŊĐž ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ НĐĩдОвĐĩŅ€ĐĩĐŊĐŊŅ‹Đš вŅ…Од ВĐģĐžĐļĐĩĐŊиŅ @@ -1962,7 +1618,6 @@ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, вŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒ. ĐŖĐ´Đ°ĐģиŅ‚ŅŒâ€Ļ ПŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩĐŊĐž - ĐŖСĐŊĐ°Ņ‚ŅŒ йОĐģŅŒŅˆĐĩ НаŅŅ‚Ņ€ĐžĐšĐēи ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ @@ -1975,120 +1630,92 @@ АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Ņ‹ МодĐĩŅ€Đ°Ņ‚ĐžŅ€Ņ‹ ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи - ХООйŅ‰ĐĩĐŊиĐĩ ŅƒĐ´Đ°ĐģĐĩĐŊĐž МЕДИА В ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ ĐŊĐĩŅ‚ ĐŧĐĩдиаŅ„Đ°ĐšĐģОв ФАЙЛĐĢ В ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ ĐŊĐĩŅ‚ Ņ„Đ°ĐšĐģОв - Đ­Ņ‚Đž ĐŊĐĩĐ´ĐžĐŋŅƒŅŅ‚иĐŧĐž ДŅ€ŅƒĐŗĐ°Ņ ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊĐ°â€Ļ ПоĐļĐ°ĐģОваŅ‚ŅŒŅŅ ĐŊĐ° ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ БĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚ŅŒ ЕŅ‰Ņ‘ QR-ĐēОд - ĐĄĐžĐĩдиĐŊĐĩĐŊиĐĩ Ņ ŅĐĩŅ€Đ˛ĐĩŅ€ĐžĐŧ ĐŋĐžŅ‚ĐĩŅ€ŅĐŊĐž ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ иĐģи ĐēĐģŅŽŅ‡ РаСйĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ иŅŅ‚ĐžŅ€Đ¸ŅŽ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК - ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅĐ˛ĐžĐ¸ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ва в Ņ€Đ°ĐˇĐ´ĐĩĐģĐĩ НаŅŅ‚Ņ€ĐžĐšĐēи. ПаŅ€ĐžĐģŅŒĐŊĐ°Ņ Ņ„Ņ€Đ°ĐˇĐ° Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ПаŅ€ĐžĐģŅŒ ŅƒŅ‡Ņ‘Ņ‚ĐŊОК СаĐŋиŅĐ¸ - ЗадайŅ‚Đĩ %s ВвĐĩдиŅ‚Đĩ %s, Ņ‡Ņ‚ОйŅ‹ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ. - %s ŅĐŋĐžŅĐžĐąŅŅ‚вŅƒĐĩŅ‚ дОвĐĩŅ€Đ¸ŅŽ, СаŅ‰Đ¸Ņ‰Đ°ĐĩŅ‚ и Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ŅƒĐĩŅ‚ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ. НĐĩ ĐŋĐĩŅ€ĐĩиŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒ ŅƒŅ‡Ņ‘Ņ‚ĐŊОК СаĐŋиŅĐ¸. - - Đ­Ņ‚Đž ĐŧĐžĐļĐĩŅ‚ СаĐŊŅŅ‚ŅŒ ĐŊĐĩŅĐēĐžĐģŅŒĐēĐž ŅĐĩĐēŅƒĐŊĐ´, ĐŋĐžĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŊĐ°ĐąĐĩŅ€Đ¸Ņ‚ĐĩŅŅŒ Ņ‚ĐĩŅ€ĐŋĐĩĐŊиŅ. %s ŅĐžĐˇĐ´Đ°Đģ(Đ°) и ĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Đģ(Đ°) ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. - ХООйŅ‰ĐĩĐŊиĐĩâ€Ļ - ДоŅŅ‚ŅƒĐŋĐŊĐž ОйĐŊОвĐģĐĩĐŊиĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅĐĩĐąŅ и Đ´Ņ€ŅƒĐŗиŅ… Đ´ĐģŅ СаŅ‰Đ¸Ņ‚Ņ‹ ваŅˆĐ¸Ņ… ĐąĐĩŅĐĩĐ´ - ПаŅ€ĐžĐģŅŒĐŊĐ°Ņ Ņ„Ņ€Đ°ĐˇĐ° Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ вŅ…Од ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅĐ˛ĐžŅŽ ĐģиŅ‡ĐŊĐžŅŅ‚ŅŒ и ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚Đĩ Đ´ĐžŅŅ‚ŅƒĐŋ Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ, ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Đ˛ ŅŅ‚ĐžŅ‚ вŅ…Од в Đ´Ņ€ŅƒĐŗОК ŅĐĩŅŅĐ¸Đ¸. ЛĐĩĐŊŅ‚Đ° ŅĐžĐžĐąŅ‰ĐĩĐŊиК - КĐģŅŽŅ‡ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐĄĐŗĐĩĐŊĐĩŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐģŅŽŅ‡ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - Đ Đ°ŅĐŋĐĩŅ‡Đ°Ņ‚Đ°ĐšŅ‚Đĩ ĐĩĐŗĐž и Ņ…Ņ€Đ°ĐŊиŅ‚Đĩ в ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐŧ ĐŧĐĩŅŅ‚Đĩ ĐŖŅŅ‚Đ°ĐŊОвĐēĐ° ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇŅ‹ Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ĐŋОСвОĐģŅĐĩŅ‚ СаŅ‰Đ¸Ņ‚иŅ‚ŅŒ и Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ и дОвĐĩŅ€Đ¸Đĩ. \n \nЕŅĐģи вŅ‹ ĐŊĐĩ Ņ…ĐžŅ‚иŅ‚Đĩ ŅƒŅŅ‚Đ°ĐŊавĐģиваŅ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ, ŅĐžĐˇĐ´Đ°ĐšŅ‚Đĩ вĐŧĐĩŅŅ‚Đž ĐŊĐĩĐŗĐž ĐēĐģŅŽŅ‡ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ. ĐŖŅŅ‚Đ°ĐŊОвĐēĐ° ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇŅ‹ Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ĐŋОСвОĐģŅĐĩŅ‚ СаŅ‰Đ¸Ņ‚иŅ‚ŅŒ и Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ и дОвĐĩŅ€Đ¸Đĩ. - - ШиŅ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž ШиŅ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŊĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊĐž %1$s: %2$s %1$s: %2$s %3$s - ПоĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ ŅƒĐ´Đ°ĐģŅ‘ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ПоĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ СаĐŗĐģŅƒŅˆĐēŅƒ ĐŊĐ° ĐŧĐĩŅŅ‚Đĩ ŅƒĐ´Đ°ĐģŅ‘ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК МŅ‹ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи ĐŋиŅŅŒĐŧĐž Đ´ĐģŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ ĐŊĐ° %s, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŋĐžŅ‡Ņ‚Ņƒ и ĐŊĐ°ĐļĐŧиŅ‚Đĩ ĐŊĐ° ŅŅŅ‹ĐģĐēŅƒ Đ´ĐģŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ Код ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ ĐŊĐĩвĐĩŅ€ĐŊŅ‹Đš. - ПоĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ ŅĐŊОва ĐŋĐžŅĐģĐĩ ĐŋŅ€Đ¸ĐŊŅŅ‚иŅ ŅƒŅĐģОвиК ОйŅĐģŅƒĐļиваĐŊиŅ ĐŊĐ° ваŅˆĐĩĐŧ Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. - ПоŅ…ĐžĐļĐĩ, ŅĐĩŅ€Đ˛ĐĩŅ€ Đ´ĐžĐģĐŗĐžĐĩ вŅ€ĐĩĐŧŅ ĐŊĐĩ ĐžŅ‚вĐĩŅ‡Đ°ĐĩŅ‚, Ņ‡Ņ‚Đž ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ вŅ‹ĐˇĐ˛Đ°ĐŊĐž ĐŋĐģĐžŅ…иĐŧ ŅĐžĐĩдиĐŊĐĩĐŊиĐĩĐŧ иĐģи ĐžŅˆĐ¸ĐąĐēОК ĐŊĐ° ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. ПоĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ ŅĐŊОва Ņ‡ĐĩŅ€ĐĩС ĐŊĐĩĐēĐžŅ‚ĐžŅ€ĐžĐĩ вŅ€ĐĩĐŧŅ. - НĐĩдавĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ПŅ€ĐžŅ‡Đ¸Đĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ - ĐĄĐŧĐĩĐŊиŅ‚ŅŒ ĐŋĐ°Ņ€ĐžĐģŅŒ ŅƒŅ‡Ņ‘Ņ‚ĐŊОК СаĐŋиŅĐ¸â€Ļ - ПоддĐĩŅ€ĐļиваĐĩŅ‚ŅŅ Ņ‚ĐžĐģŅŒĐēĐž в СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ĐēĐžĐŧĐŊĐ°Ņ‚Đ°Ņ… ХОСдаŅ‚ŅŒ ĐŊОвŅ‹Đš диаĐģĐžĐŗ %1$s, %2$s и %3$s ĐŋŅ€ĐžŅ‡Đģи %1$s и %2$s ĐŋŅ€ĐžŅ‡Đģи ФаКĐģ \'%1$s\' (%2$s) ŅĐģиŅˆĐēĐžĐŧ йОĐģŅŒŅˆĐžĐš. МаĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊŅ‹Đš Ņ€Đ°ĐˇĐŧĐĩŅ€ Đ´ĐģŅ СаĐŗŅ€ŅƒĐˇĐēи %3$s. - ПŅ€ĐžĐ¸ĐˇĐžŅˆĐģĐ° ĐžŅˆĐ¸ĐąĐēĐ° ĐŋŅ€Đ¸ СаĐŗŅ€ŅƒĐˇĐēĐĩ вĐģĐžĐļĐĩĐŊиŅ. %1$s %2$s ЖаĐģОйа ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐ° - ЖаĐģОйа ĐŊĐ° ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐ°. -\n -\nЕŅĐģи вŅ‹ ĐŊĐĩ Ņ…ĐžŅ‚иŅ‚Đĩ видĐĩŅ‚ŅŒ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐĩĐŗĐž СайĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ, Ņ‡Ņ‚ОйŅ‹ ŅĐēŅ€Ņ‹Ņ‚ŅŒ ĐĩĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ + ЖаĐģОйа ĐŊĐ° ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐ°. +\n +\nЕŅĐģи вŅ‹ ĐŊĐĩ Ņ…ĐžŅ‚иŅ‚Đĩ видĐĩŅ‚ŅŒ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐĩĐŗĐž иĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ, Ņ‡Ņ‚ОйŅ‹ ŅĐēŅ€Ņ‹Ņ‚ŅŒ ĐĩĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ. ОŅ‚ĐŧĐĩŅ‡ĐĩĐŊĐž ĐēĐ°Đē ŅĐŋĐ°Đŧ - Đ­Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ĐąŅ‹Đģ ĐžŅ‚ĐŧĐĩŅ‡ĐĩĐŊ ĐēĐ°Đē ŅĐŋĐ°Đŧ. -\n -\nЕŅĐģи вŅ‹ ĐŊĐĩ Ņ…ĐžŅ‚иŅ‚Đĩ видĐĩŅ‚ŅŒ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐĩĐŗĐž СайĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ, Ņ‡Ņ‚ОйŅ‹ ŅĐēŅ€Ņ‹Ņ‚ŅŒ ĐĩĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ + Đ­Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ĐąŅ‹Đģ ĐžŅ‚ĐŧĐĩŅ‡ĐĩĐŊ ĐēĐ°Đē ŅĐŋĐ°Đŧ. +\n +\nЕŅĐģи вŅ‹ ĐŊĐĩ Ņ…ĐžŅ‚иŅ‚Đĩ видĐĩŅ‚ŅŒ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐĩĐŗĐž иĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ, Ņ‡Ņ‚ОйŅ‹ ŅĐēŅ€Ņ‹Ņ‚ŅŒ ĐĩĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ. ЖаĐģОйа ĐŊĐ° ĐŊĐĩĐŋŅ€Đ¸ĐĩĐŧĐģĐĩĐŧĐžĐĩ ŅĐžĐ´ĐĩŅ€ĐļĐ°ĐŊиĐĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐ° - Đ­Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ĐąŅ‹Đģ ĐžŅ‚ĐŧĐĩŅ‡ĐĩĐŊ ĐēĐ°Đē ĐŊĐĩĐŋŅ€Đ¸ĐĩĐŧĐģĐĩĐŧŅ‹Đš. -\n -\nЕŅĐģи вŅ‹ ĐŊĐĩ Ņ…ĐžŅ‚иŅ‚Đĩ видĐĩŅ‚ŅŒ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐĩĐŗĐž СайĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ, Ņ‡Ņ‚ОйŅ‹ ŅĐēŅ€Ņ‹Ņ‚ŅŒ ĐĩĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - + Đ­Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ĐąŅ‹Đģ ĐžŅ‚ĐŧĐĩŅ‡ĐĩĐŊ ĐēĐ°Đē ĐŊĐĩĐŋŅ€Đ¸ĐĩĐŧĐģĐĩĐŧŅ‹Đš. +\n +\nЕŅĐģи вŅ‹ ĐŊĐĩ Ņ…ĐžŅ‚иŅ‚Đĩ видĐĩŅ‚ŅŒ ĐēĐžĐŊŅ‚ĐĩĐŊŅ‚ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐĩĐŗĐž иĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ, Ņ‡Ņ‚ОйŅ‹ ŅĐēŅ€Ņ‹Ņ‚ŅŒ ĐĩĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ. ОĐŊи ŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‚ ОĐŊи ĐŊĐĩ ŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‚ ЗаĐēŅ€Ņ‹Ņ‚ŅŒ ĐžĐēĐŊĐž ĐąŅĐēĐ°ĐŋĐ° ĐēĐģŅŽŅ‡ĐĩĐš %s ĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐž НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ОйŅ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ Đ´Đ°ĐŊĐŊŅ‹Đĩ - Element Ņ‚Ņ€ĐĩĐąŅƒŅŽŅ‚ŅŅ ĐŋŅ€Đ°Đ˛Đ° Đ´ĐģŅ ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊиŅ ваŅˆĐ¸Ņ… ĐēĐģŅŽŅ‡ĐĩĐš ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ĐŊĐ° диŅĐē. \n \nПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚Đĩ Đ´ĐžŅŅ‚ŅƒĐŋ в ŅĐģĐĩĐ´ŅƒŅŽŅ‰ĐĩĐŧ вŅĐŋĐģŅ‹Đ˛Đ°ŅŽŅ‰ĐĩĐŧ ĐžĐēĐŊĐĩ, Ņ‡Ņ‚ОйŅ‹ ŅĐēŅĐŋĐžŅ€Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐģŅŽŅ‡Đ¸ вŅ€ŅƒŅ‡ĐŊŅƒŅŽ. - НĐĩŅ‚ ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊиŅ Đē ŅĐĩŅ‚и - ВоŅĐŋŅ€ĐžĐ¸ĐˇĐ˛ĐĩŅŅ‚и ПŅ€Đ¸ĐžŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ КоĐŋиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ВŅ‹ĐŋĐžĐģĐŊĐĩĐŊĐž - ĐŖвĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ЗвоĐŊĐžĐē ĐŊĐĩ ŅĐžŅŅ‚ĐžŅĐģŅŅ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ŅƒŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ Ņ€ĐĩĐ°ĐģŅŒĐŊĐžĐŗĐž вŅ€ĐĩĐŧĐĩĐŊи. \nПоĐŋŅ€ĐžŅĐ¸Ņ‚Đĩ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Đ° ваŅˆĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° ĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ŅĐĩŅ€Đ˛ĐĩŅ€ TURN, Ņ‡Ņ‚ОйŅ‹ СвОĐŊĐēи Ņ€Đ°ĐąĐžŅ‚Đ°Đģи ĐŊĐ°Đ´Ņ‘ĐļĐŊĐž. - ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ СвŅƒĐēОвОĐĩ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО ĐĸĐĩĐģĐĩŅ„ĐžĐŊ ДиĐŊĐ°ĐŧиĐē @@ -2099,21 +1726,15 @@ ЗадĐŊŅŅ ВŅ‹ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ HD ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ HD - ОŅˆĐ¸ĐąĐēĐ° SSL: ĐŊĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ идĐĩĐŊŅ‚иŅ„иŅ†Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Đ´Ņ€ŅƒĐŗĐžĐŗĐž айОĐŊĐĩĐŊŅ‚Đ°. ОŅˆĐ¸ĐąĐēĐ° SSL. АĐēŅ‚ивĐŊŅ‹Đš СвОĐŊĐžĐē (%s) ВĐĩŅ€ĐŊŅƒŅ‚ŅŒŅŅ Đē СвОĐŊĐēŅƒ - ОŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ ĐĄĐŊиСиŅ‚ŅŒ ŅĐžĐąŅŅ‚вĐĩĐŊĐŊŅ‹Đĩ ĐŋĐžĐģĐŊĐžĐŧĐžŅ‡Đ¸Ņ\? ОŅ‚ĐēĐģĐžĐŊиŅ‚ŅŒ - - ВŅ‹ ĐŊĐĩ ŅĐŧĐžĐļĐĩŅ‚Đĩ ĐžŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ ŅŅ‚Đž иСĐŧĐĩĐŊĐĩĐŊиĐĩ, ĐŋĐžŅĐēĐžĐģŅŒĐēŅƒ вŅ‹ ĐŋĐžĐŊиĐļĐ°ĐĩŅ‚Đĩ ŅĐĩĐąŅ в Đ´ĐžĐģĐļĐŊĐžŅŅ‚и, Đ° ĐĩŅĐģи вŅ‹ ĐŋĐžŅĐģĐĩĐ´ĐŊиК ĐŋŅ€Đ¸Đ˛Đ¸ĐģĐĩĐŗиŅ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ в ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ, Ņ‚Đž вОŅŅŅ‚Đ°ĐŊОвиŅ‚ŅŒ ĐŋŅ€Đ¸Đ˛Đ¸ĐģĐĩĐŗии ĐąŅƒĐ´ĐĩŅ‚ ĐŊĐĩвОСĐŧĐžĐļĐŊĐž. ПоĐŊиСиŅ‚ŅŒ - - ИĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ИĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ĐŋŅ€Đ¸Đ˛ĐĩĐ´ĐĩŅ‚ Đē ŅƒĐ´Đ°ĐģĐĩĐŊиŅŽ ĐĩĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиК иС ОйŅ‰Đ¸Ņ… ĐēĐžĐŧĐŊĐ°Ņ‚. \n @@ -2131,7 +1752,6 @@ ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ° ĐąĐģĐžĐēиŅ€ĐžĐ˛Đēи РаСйĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ РаСйĐģĐžĐēиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ĐŋОСвОĐģиŅ‚ ĐĩĐŧŅƒ ŅĐŊОва ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ. - БĐĩСОĐŋĐ°ŅĐŊĐžĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŖĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ НаŅŅ‚Ņ€ĐžĐšĐēĐ° ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐŗĐž Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ @@ -2140,43 +1760,32 @@ ЗаŅ‰Đ¸Ņ‚иŅ‚Đĩ ŅĐĩĐąŅ ĐžŅ‚ ĐŋĐžŅ‚ĐĩŅ€Đ¸ Đ´ĐžŅŅ‚ŅƒĐŋĐ° Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ и Đ´Đ°ĐŊĐŊŅ‹Đŧ, ŅĐžĐˇĐ´Đ°Đ˛ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đĩ ĐēĐžĐŋии ĐēĐģŅŽŅ‡ĐĩĐš ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ĐŊĐ° ваŅˆĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. ХОСдаКŅ‚Đĩ ĐŊОвŅ‹Đš ĐēĐģŅŽŅ‡ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и иĐģи СадаКŅ‚Đĩ ĐŊОвŅƒŅŽ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ Đ´ĐģŅ ŅŅƒŅ‰ĐĩŅŅ‚вŅƒŅŽŅ‰ĐĩĐš Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии. Đ­Ņ‚Đž СаĐŧĐĩĐŊиŅ‚ ваŅˆ Ņ‚ĐĩĐēŅƒŅ‰Đ¸Đš ĐēĐģŅŽŅ‡ иĐģи Ņ„Ņ€Đ°ĐˇŅƒ. - ИĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸Đ¸ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ ВĐēĐģŅŽŅ‡Đ¸Ņ‚Đĩ ÂĢĐŖĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ иĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸ŅĐŧиÂģ в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ…, Ņ‡Ņ‚ОйŅ‹ ŅĐ´ĐĩĐģĐ°Ņ‚ŅŒ ŅŅ‚Đž. - %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ СайĐģĐžĐēиŅ€ĐžĐ˛Đ°ĐŊ %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš СайĐģĐžĐēиŅ€ĐžĐ˛Đ°ĐŊĐž %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš СайĐģĐžĐēиŅ€ĐžĐ˛Đ°ĐŊĐž - КĐģŅŽŅ‡Đ¸ ŅƒŅĐŋĐĩŅˆĐŊĐž ŅĐēŅĐŋĐžŅ€Ņ‚иŅ€ĐžĐ˛Đ°ĐŊŅ‹ - ОБЗОР АĐēŅ‚ивĐŊŅ‹Đĩ видĐļĐĩŅ‚Ņ‹ - - КĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ĐąŅ‹Đģ ŅĐžŅ…Ņ€Đ°ĐŊŅ‘ĐŊ. - БĐĩСОĐŋĐ°ŅĐŊĐžĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ ЗаŅ‰Đ¸Ņ‚Đ° ĐžŅ‚ ĐŋĐžŅ‚ĐĩŅ€Đ¸ Đ´ĐžŅŅ‚ŅƒĐŋĐ° Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ и Đ´Đ°ĐŊĐŊŅ‹Đŧ - НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ - ДобавŅŒŅ‚Đĩ ŅĐŋĐĩŅ†Đ¸Đ°ĐģŅŒĐŊŅƒŅŽ вĐēĐģĐ°Đ´ĐēŅƒ Đ´ĐģŅ ĐŊĐĩĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐŊŅ‹Ņ… ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ĐŊĐ° ĐŗĐģавĐŊĐžĐŧ ŅĐēŅ€Đ°ĐŊĐĩ. - - ПŅ€ĐžŅ‡Đ¸Ņ‚Đ°Đģ 1 ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ + ПŅ€ĐžŅ‡Đ¸Ņ‚Đ°Đģ %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ ПŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐž %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅĐŧи ПŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐž %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅĐŧи + ПŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐž %d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅĐŧи - ДобавиŅ‚ŅŒ в иСйŅ€Đ°ĐŊĐŊĐžĐĩ ĐŖĐąŅ€Đ°Ņ‚ŅŒ иС иСйŅ€Đ°ĐŊĐŊĐžĐŗĐž %1$s ĐŊĐĩ вĐŊĐĩŅ ĐŊиĐēĐ°ĐēиŅ… иСĐŧĐĩĐŊĐĩĐŊиК ВŅ‹ ĐŊĐĩ вĐŊĐĩŅĐģи ĐŊиĐēĐ°ĐēиŅ… иСĐŧĐĩĐŊĐĩĐŊиК ВŅ‹ ĐŊĐĩ иĐŗĐŊĐžŅ€Đ¸Ņ€ŅƒĐĩŅ‚Đĩ ĐŊиĐēĐ°ĐēиŅ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš - ВŅ‹ ŅĐ´ĐĩĐģĐ°Đģи ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ Đ´ĐžŅŅ‚ŅƒĐŋĐŊОК Đ´ĐģŅ вŅĐĩŅ…, Ņƒ ĐēĐžĐŗĐž ĐĩŅŅ‚ŅŒ ŅŅŅ‹ĐģĐēĐ°. ВŅ‹ ŅĐ´ĐĩĐģĐ°Đģи ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅŽ. ĐĄĐžŅ…Ņ€Đ°ĐŊŅĐšŅ‚Đĩ ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊĐžŅŅ‚ŅŒ ваŅˆĐ¸Ņ… ĐŋĐĩŅ€ĐĩĐŋиŅĐžĐē Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ @@ -2185,10 +1794,8 @@ ВойŅ‚и в %1$s ВвĐĩдиŅ‚Đĩ Đ°Đ´Ņ€ĐĩŅ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° иĐģи Element, Đē ĐēĐžŅ‚ĐžŅ€ĐžĐŧŅƒ вŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ ĐŋОдĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ ВвĐĩдиŅ‚Đĩ Đ°Đ´Ņ€ĐĩŅ ŅĐĩŅ€Đ˛ĐĩŅ€Đ°, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš вŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ - На ваŅˆ ĐŋĐžŅ‡Ņ‚ОвŅ‹Đš ŅŅ‰Đ¸Đē ĐąŅƒĐ´ĐĩŅ‚ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐž ĐŋиŅŅŒĐŧĐž Ņ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩĐŧ ŅƒŅŅ‚Đ°ĐŊОвĐēи ĐŊОвОĐŗĐž ĐŋĐ°Ņ€ĐžĐģŅ. Đ¯ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Đģ ŅĐ˛ĐžŅŽ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊŅƒŅŽ ĐŋĐžŅ‡Ņ‚Ņƒ - ĐŖŅŅ‚Đ°ĐŊОвиŅ‚Đĩ Đ°Đ´Ņ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ Đ´ĐģŅ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸. ПозĐļĐĩ вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ Đ´ĐžĐŋĐžĐģĐŊиŅ‚ĐĩĐģŅŒĐŊĐž Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ¸Ņ‚ŅŒ ĐģŅŽĐ´ŅĐŧ, ĐēĐžŅ‚ĐžŅ€Ņ‹Ņ… вŅ‹ СĐŊĐ°ĐĩŅ‚Đĩ, ОйĐŊĐ°Ņ€ŅƒĐļиŅ‚ŅŒ ваŅ ĐŋĐž ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Đĩ. ВвĐĩĐ´ĐĩĐŊĐŊŅ‹Đš ĐēОд ĐŊĐĩвĐĩŅ€ĐĩĐŊ. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ. КŅ€ĐžĐŧĐĩ Ņ‚ĐžĐŗĐž, ĐĩŅĐģи Ņƒ ваŅ ŅƒĐļĐĩ ĐĩŅŅ‚ŅŒ ŅƒŅ‡ĐĩŅ‚ĐŊĐ°Ņ СаĐŋиŅŅŒ и вŅ‹ СĐŊĐ°ĐĩŅ‚Đĩ ŅĐ˛ĐžĐš идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ‚ĐžŅ€ Matrix и ĐŋĐ°Ņ€ĐžĐģŅŒ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ŅŅ‚ĐžŅ‚ ĐŧĐĩŅ‚Од: @@ -2199,28 +1806,20 @@ ЕŅĐģи вŅ‹ ĐŊĐĩ СĐŊĐ°ĐĩŅ‚Đĩ ŅĐ˛ĐžĐš ĐŋĐ°Ņ€ĐžĐģŅŒ, вĐĩŅ€ĐŊиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚ОйŅ‹ ŅĐąŅ€ĐžŅĐ¸Ņ‚ŅŒ ĐĩĐŗĐž. Đ­Ņ‚Đž ĐŊĐĩĐ´ĐžĐŋŅƒŅŅ‚иĐŧŅ‹Đš идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ‚ĐžŅ€ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ. ОĐļидаĐĩĐŧŅ‹Đš Ņ„ĐžŅ€ĐŧĐ°Ņ‚: \'@user:homeserver.org\' НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŊĐ°ĐšŅ‚и Đ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅ‹Đš Đ´ĐžĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅĐ˛ĐžĐš идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ‚ĐžŅ€ - ПĐĩŅ€Đ˛Đ¸Ņ‡ĐŊĐ°Ņ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņâ€Ļ - Rageshake ПоŅ€ĐžĐŗ ОйĐŊĐ°Ņ€ŅƒĐļĐĩĐŊиŅ ВŅŅ‚Ņ€ŅŅ…ĐŊиŅ‚Đĩ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊ, Ņ‡Ņ‚ОйŅ‹ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ĐŋĐžŅ€ĐžĐŗ ОйĐŊĐ°Ņ€ŅƒĐļĐĩĐŊиŅ ĐĸŅ€ŅŅĐēĐ° СаŅ„иĐēŅĐ¸Ņ€ĐžĐ˛Đ°ĐŊĐ°! ПоĐēаСŅ‹Đ˛Đ°ĐĩĐŧ Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐĩŅ€Đ˛Ņ‹Đĩ Ņ€ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚Ņ‹, ĐŊĐ°ĐąĐĩŅ€Đ¸Ņ‚Đĩ йОĐģŅŒŅˆĐĩ ĐąŅƒĐēвâ€Ļ - Đ Đ°ĐŊĐŊĐĩĐĩ ĐŋĐ°Đ´ĐĩĐŊиĐĩ Element ĐŧĐžĐļĐĩŅ‚ ĐŋĐ°Đ´Đ°Ņ‚ŅŒ Ņ‡Đ°Ņ‰Đĩ, ĐēĐžĐŗĐ´Đ° ĐŋŅ€ĐžĐ¸ŅŅ…ОдиŅ‚ ĐŊĐĩĐŋŅ€ĐĩдвидĐĩĐŊĐŊĐ°Ņ ĐžŅˆĐ¸ĐąĐēĐ° - ДобавĐģŅĐĩŅ‚ ŅĐŧĐ°ĐšĐģ ¯\\_(ツ)_/¯ в ĐŊĐ°Ņ‡Đ°ĐģĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ - ПоŅĐģĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊиŅ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ĐžĐŊĐž ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊĐž. - ВаŅˆ ĐŋĐžŅ‡Ņ‚ОвŅ‹Đš Đ´ĐžĐŧĐĩĐŊ ĐŊĐĩ иĐŧĐĩĐĩŅ‚ ĐŋŅ€Đ°Đ˛Đ° Ņ€ĐĩĐŗиŅŅ‚Ņ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒŅŅ ĐŊĐ° ŅŅ‚ĐžĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ - ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Đ˛, Ņ‡Ņ‚Đž ŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Đĩ ŅƒĐŊиĐēĐ°ĐģŅŒĐŊŅ‹Đĩ ŅĐŧĐ°ĐšĐģиĐēи ĐŋĐžŅĐ˛ĐģŅŅŽŅ‚ŅŅ ĐŊĐ° ĐĩĐŗĐž ŅĐēŅ€Đ°ĐŊĐĩ в Ņ‚ĐžĐŧ ĐļĐĩ ĐŋĐžŅ€ŅĐ´ĐēĐĩ. ДĐģŅ ĐŧĐ°ĐēŅĐ¸ĐŧĐ°ĐģŅŒĐŊОК ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и иŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ Đ´Ņ€ŅƒĐŗĐžĐĩ ĐŊĐ°Đ´ĐĩĐļĐŊĐžĐĩ ŅŅ€ĐĩĐ´ŅŅ‚вО ŅĐ˛ŅĐˇĐ¸ иĐģи ŅĐ´ĐĩĐģĐ°ĐšŅ‚Đĩ ŅŅ‚Đž ĐģиŅ‡ĐŊĐž. ИŅ‰Đ¸Ņ‚Đĩ СĐĩĐģĐĩĐŊŅ‹Đš Ņ‰Đ¸Ņ‚, Ņ‡Ņ‚ОйŅ‹ ŅƒĐąĐĩдиŅ‚ŅŒŅŅ, Ņ‡Ņ‚Đž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ дОвĐĩŅ€ĐĩĐŊĐŊŅ‹Đš. ДовĐĩŅ€ŅĐšŅ‚Đĩ вŅĐĩĐŧ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅĐŧ в ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ, Ņ‡Ņ‚ОйŅ‹ ОйĐĩŅĐŋĐĩŅ‡Đ¸Ņ‚ŅŒ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚ŅŒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹. - НĐĩ ĐąĐĩСОĐŋĐ°ŅĐŊĐž ОдĐŊĐž иС ŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Ņ… ŅƒŅĐģОвиК ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅĐēĐžĐŧĐŋŅ€ĐžĐŧĐĩŅ‚иŅ€ĐžĐ˛Đ°ĐŊĐž: \n @@ -2228,13 +1827,11 @@ \n— ДоĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€, Đē ĐēĐžŅ‚ĐžŅ€ĐžĐŧŅƒ ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ, ĐēĐžŅ‚ĐžŅ€ĐžĐŗĐž вŅ‹ ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅĐĩŅ‚Đĩ \n— ВаŅˆĐĩ иĐģи ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ Đē иĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚Ņƒ Đ´Ņ€ŅƒĐŗиŅ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš \n— ВаŅˆĐĩ иĐģи ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО Đ´Ņ€ŅƒĐŗиŅ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš - ВидĐĩĐž. ИСОйŅ€Đ°ĐļĐĩĐŊиĐĩ. АŅƒĐ´Đ¸Đž ФаКĐģ ĐĄŅ‚иĐēĐĩŅ€ - ОĐļидаĐŊиĐĩâ€Ļ %s ĐžŅ‚ĐŧĐĩĐŊĐĩĐŊĐž ВŅ‹ ĐžŅ‚ĐŧĐĩĐŊиĐģи @@ -2244,21 +1841,15 @@ ЗаĐŋŅ€ĐžŅ ĐŊĐ° ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ ПодŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ вŅ€ŅƒŅ‡ĐŊŅƒŅŽ - ВŅ‹ - ĐĄĐēĐ°ĐŊиŅ€ŅƒĐšŅ‚Đĩ ĐēОд Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ва Đ´Ņ€ŅƒĐŗĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ, Ņ‡Ņ‚ОйŅ‹ ĐŊĐ°Đ´ĐĩĐļĐŊĐž ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ Đ´Ņ€ŅƒĐŗ Đ´Ņ€ŅƒĐŗĐ° ĐĄĐēĐ°ĐŊиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ иŅ… ĐēОд НĐĩвОСĐŧĐžĐļĐŊĐž ŅĐēĐ°ĐŊиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ЕŅĐģи вŅ‹ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ĐģиŅ‡ĐŊĐž, ŅŅ€Đ°Đ˛ĐŊиŅ‚Đĩ ŅĐŧОдСи в Ņ‚Đ°ĐēĐžĐŧ ŅĐģŅƒŅ‡Đ°Đĩ - ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ĐŋŅ€Đ¸ ĐŋĐžĐŧĐžŅ‰Đ¸ ŅŅ€Đ°Đ˛ĐŊĐĩĐŊиŅ ŅĐŧОдСи - ПодŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ŅĐŧОдСи ЕŅĐģи вŅ‹ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ĐžŅ‚ŅĐēĐ°ĐŊиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐŋŅ€Đ¸Đ˛ĐĩĐ´ĐĩĐŊĐŊŅ‹Đš вŅ‹ŅˆĐĩ ĐēОд, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅŅ‚Đž, ŅŅ€Đ°Đ˛ĐŊив ĐēĐžŅ€ĐžŅ‚ĐēиК ŅƒĐŊиĐēĐ°ĐģŅŒĐŊŅ‹Đš ĐŊайОŅ€ ŅĐŧОдСи. - ИСОйŅ€Đ°ĐļĐĩĐŊиĐĩ QR-ĐēОда - ПодŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊĐž %s ПодŅ‚вĐĩŅ€ĐļĐ´Ņ‘ĐŊĐŊŅ‹Ņ… %s ОĐļидаĐŊиĐĩ Đ´ĐģŅ %sâ€Ļ @@ -2271,45 +1862,33 @@ \nВаŅˆĐ¸ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ СаŅ‰Đ¸Ņ‰ĐĩĐŊŅ‹ СаĐŧĐēĐ°Đŧи, и Ņ‚ĐžĐģŅŒĐēĐž Ņƒ ваŅ и ĐŋĐžĐģŅƒŅ‡Đ°Ņ‚ĐĩĐģŅ ĐĩŅŅ‚ŅŒ ŅƒĐŊиĐēĐ°ĐģŅŒĐŊŅ‹Đĩ ĐēĐģŅŽŅ‡Đ¸, Ņ‡Ņ‚ОйŅ‹ Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ иŅ…. ДĐĩĐšŅŅ‚виŅ АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Đ° ПоĐēиĐŊŅƒŅ‚ŅŒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒâ€Ļ - ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēиК ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ в %1$s МодĐĩŅ€Đ°Ņ‚ĐžŅ€ в %1$s По ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ в %1$s ПоĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒŅĐēиК (%1$d) в %2$s - ПĐĩŅ€ĐĩĐšŅ‚и Đē ĐŋĐžŅĐģĐĩĐ´ĐŊĐĩĐŧŅƒ ĐŋŅ€ĐžŅ‡Ņ‚Ņ‘ĐŊĐŊĐžĐŧŅƒ иĐŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅŽ - Element ĐŊĐĩ ОйŅ€Đ°ĐąĐ°Ņ‚Ņ‹Đ˛Đ°ĐĩŅ‚ ŅĐžĐąŅ‹Ņ‚иŅ Ņ‚иĐŋĐ° \'%1$s\' Element ĐŊĐĩ ОйŅ€Đ°ĐąĐ°Ņ‚Ņ‹Đ˛Đ°ĐĩŅ‚ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ Ņ‚иĐŋĐ° \'%1$s\' Element ŅŅ‚ĐžĐģĐēĐŊŅƒĐģŅŅ Ņ ĐŋŅ€ĐžĐąĐģĐĩĐŧОК ĐŋŅ€Đ¸ ĐžŅ‚ОйŅ€Đ°ĐļĐĩĐŊии ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐŗĐž ŅĐžĐąŅ‹Ņ‚иŅ Ņ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ‚ĐžŅ€ĐžĐŧ \'%1$s\' - ПĐĩŅ€ĐĩŅŅ‚Đ°Ņ‚ŅŒ иĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ - Đ­Ņ‚Đ° ŅĐĩŅŅĐ¸Ņ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ĐŋОдĐĩĐģиŅ‚ŅŒŅŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩĐŧ Ņ Đ´Ņ€ŅƒĐŗиĐŧи ŅĐĩŅŅĐ¸ŅĐŧи. \nПодŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ĐąŅƒĐ´ĐĩŅ‚ ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊĐž ĐģĐžĐēĐ°ĐģŅŒĐŊĐž и ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŅ в ĐąŅƒĐ´ŅƒŅ‰ĐĩĐš вĐĩŅ€ŅĐ¸Đ¸ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиŅ. - ПоŅŅ‹ĐģĐ°ĐĩŅ‚ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ, ĐžĐēŅ€Đ°ŅˆĐĩĐŊĐŊĐžĐĩ в Ņ†Đ˛ĐĩŅ‚ Ņ€Đ°Đ´ŅƒĐŗи ПоŅŅ‹ĐģĐ°ĐĩŅ‚ Đ´Đ°ĐŊĐŊŅƒŅŽ ŅĐŧĐžŅ†Đ¸ŅŽ, ĐžĐēŅ€Đ°ŅˆĐĩĐŊĐŊŅƒŅŽ в Ņ†Đ˛ĐĩŅ‚ Ņ€Đ°Đ´ŅƒĐŗи - Đ ĐĩĐ´Đ°ĐēŅ‚ĐžŅ€ ŅĐžĐžĐąŅ‰ĐĩĐŊиК - ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ŅĐēвОСĐŊĐžĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ПоŅĐģĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊиŅ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ĐžĐŊĐž ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊĐž. - АĐēŅ‚ивиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ\? ПоŅĐģĐĩ вĐēĐģŅŽŅ‡ĐĩĐŊиŅ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Đ´ĐģŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊĐž. ХООйŅ‰ĐĩĐŊиŅ, ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐŊŅ‹Đĩ в СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐŧ ĐŋĐžĐŧĐĩŅ‰ĐĩĐŊии, ĐŊĐĩ ĐŧĐžĐŗŅƒŅ‚ ĐąŅ‹Ņ‚ŅŒ СаĐŧĐĩŅ‡ĐĩĐŊŅ‹ ŅĐĩŅ€Đ˛ĐĩŅ€ĐžĐŧ, Ņ‚ĐžĐģŅŒĐēĐž ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēĐ°Đŧи ĐŋĐžĐŧĐĩŅ‰ĐĩĐŊиŅ. ВĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ĐŧĐžĐļĐĩŅ‚ ĐŋĐžĐŧĐĩŅˆĐ°Ņ‚ŅŒ ĐŋŅ€Đ°Đ˛Đ¸ĐģŅŒĐŊОК Ņ€Đ°ĐąĐžŅ‚Đĩ ĐŧĐŊĐžĐŗиŅ… йОŅ‚Ов и ĐŧĐžŅŅ‚Ов. АĐēŅ‚ивиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ - ЧŅ‚ОйŅ‹ ĐąŅ‹Ņ‚ŅŒ в ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ %s, ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Đ˛ ОдĐŊĐžŅ€Đ°ĐˇĐžĐ˛Ņ‹Đš ĐēОд. ЧŅ‚ОйŅ‹ ОйĐĩСОĐŋĐ°ŅĐ¸Ņ‚ŅŒ ŅĐĩĐąŅ, ŅĐ´ĐĩĐģĐ°ĐšŅ‚Đĩ ŅŅ‚Đž ĐģиŅ‡ĐŊĐž иĐģи иŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ Đ´Ņ€ŅƒĐŗОК ŅĐŋĐžŅĐžĐą ОйŅ‰ĐĩĐŊиŅ. - ĐĄŅ€Đ°Đ˛ĐŊиŅ‚Đĩ ŅƒĐŊиĐēĐ°ĐģŅŒĐŊŅ‹Đĩ ŅĐŧОдСи, ŅƒĐąĐĩдивŅˆĐ¸ŅŅŒ, Ņ‡Ņ‚Đž ĐžĐŊи ĐŋĐžŅĐ˛Đ¸ĐģиŅŅŒ в Ņ‚ĐžĐŧ ĐļĐĩ ĐŋĐžŅ€ŅĐ´ĐēĐĩ. ĐĄŅ€Đ°Đ˛ĐŊиŅ‚Đĩ ĐēОд Ņ Ņ‚ĐĩĐŧ, ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ĐžŅ‚ОйŅ€Đ°ĐļĐ°ĐĩŅ‚ŅŅ ĐŊĐ° ŅĐēŅ€Đ°ĐŊĐĩ Đ´Ņ€ŅƒĐŗĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ. ХООйŅ‰ĐĩĐŊиŅ Ņ ŅŅ‚иĐŧ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐŧ ĐŋĐžĐģĐŊĐžŅŅ‚ŅŒŅŽ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊŅ‹ и ĐŊĐĩ ĐŧĐžĐŗŅƒŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊŅ‹ Ņ‚Ņ€ĐĩŅ‚ŅŒĐ¸Đŧи ĐģиŅ†Đ°Đŧи. ВаŅˆĐ° ĐŊОваŅ ŅĐĩŅĐ¸Ņ Ņ‚ĐĩĐŋĐĩŅ€ŅŒ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊĐ°. ОĐŊĐ° иĐŧĐĩĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ваŅˆĐ¸Đŧ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ, и Đ´Ņ€ŅƒĐŗиĐĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи ĐąŅƒĐ´ŅƒŅ‚ ŅŅ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ ĐĩŅ‘ ĐŊĐ°Đ´ĐĩĐļĐŊОК. - КŅ€ĐžŅŅ-ĐŋОдĐŋиŅŅŒ КŅ€ĐžŅŅ-ĐŋОдĐŋиŅŅŒ вĐēĐģŅŽŅ‡ĐĩĐŊĐ° \nПŅ€Đ¸Đ˛Đ°Ņ‚ĐŊŅ‹Đĩ ĐēĐģŅŽŅ‡Đ¸ Ņ…Ņ€Đ°ĐŊŅŅ‚ŅŅ ĐŊĐ° ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ. @@ -2319,68 +1898,51 @@ КŅ€ĐžŅŅ-ĐŋОдĐŋиŅŅŒ вĐēĐģŅŽŅ‡ĐĩĐŊĐ°. \nКĐģŅŽŅ‡Đ¸ ŅĐ˛ĐģŅŅŽŅ‚ŅŅ ĐŊĐĩĐŊĐ°Đ´Ņ‘ĐļĐŊŅ‹Đŧи КŅ€ĐžŅŅ-ĐŋОдĐŋиŅŅŒ вŅ‹ĐēĐģŅŽŅ‡ĐĩĐŊĐ° - АдĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ ваŅˆĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° ĐžŅ‚ĐēĐģŅŽŅ‡Đ¸Đģ ŅĐēвОСĐŊĐžĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŋĐž ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ в ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊŅ‹Ņ… ĐēĐžĐŧĐŊĐ°Ņ‚Đ°Ņ… и диаĐģĐžĐŗĐ°Ņ…. АĐēŅ‚ивĐŊŅ‹Đĩ ŅĐĩŅŅĐ¸Đ¸ ПоĐēаСаŅ‚ŅŒ вŅĐĩ ŅĐĩŅŅĐ¸Đ¸ ĐŖĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ ŅĐĩŅŅĐ¸ŅĐŧи ВŅ‹ĐšŅ‚и иС ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸ - НĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋĐŊĐžĐŗĐž ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸ - %d ŅĐĩŅŅĐ¸Ņ Đ°ĐēŅ‚ивĐŊĐ° %d ŅĐĩŅŅĐ¸Đ¸ Đ°ĐēŅ‚ивĐŊŅ‹ %d ŅĐĩŅŅĐ¸Đš Đ°ĐēŅ‚ивĐŊĐž - ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ŅŅƒŅ‰ĐĩŅŅ‚вŅƒŅŽŅ‰ŅƒŅŽ ŅĐĩŅŅĐ¸ŅŽ Đ´ĐģŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ ŅŅ‚ОК, ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авив ĐĩĐš Đ´ĐžŅŅ‚ŅƒĐŋ Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ. - - ИĐŊŅŅ‚Ņ€ŅƒĐŧĐĩĐŊŅ‚Ņ‹ Đ´ĐģŅ Ņ€Đ°ĐˇŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸ĐēОв ДаĐŊĐŊŅ‹Đĩ ŅƒŅ‡Ņ‘Ņ‚ĐŊОК СаĐŋиŅĐ¸ ЕŅĐģи вŅ‹ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ŅŅƒŅ‰ĐĩŅŅ‚вŅƒŅŽŅ‰ĐĩĐš ŅĐĩŅŅĐ¸Đ¸ - ЗаĐŋŅ€ĐžŅŅ‹ ĐēĐģŅŽŅ‡ĐĩĐš - ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ Đ´ĐģŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ ĐŊОвОК ŅĐĩŅŅĐ¸Đ¸, ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авĐģŅŅ ĐĩĐš Đ´ĐžŅŅ‚ŅƒĐŋ Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ. ВаŅˆĐ¸ %2$s и %1$s ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹. \n \nДĐĩŅ€ĐļиŅ‚Đĩ иŅ… в ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и! ОĐŊи ĐŋĐžĐŊадОйŅŅ‚ŅŅ Đ´ĐģŅ Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đēи СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК и СаŅ‰Đ¸Ņ‚Ņ‹ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸Đ¸, ĐĩŅĐģи Ņƒ ваŅ ĐŊĐĩ ĐžŅŅ‚Đ°ĐŊĐĩŅ‚ŅŅ Đ°ĐēŅ‚ивĐŊŅ‹Ņ… ŅĐĩŅŅĐ¸Đš. - ЕŅĐģи вŅ‹ ĐžŅ‚ĐŧĐĩĐŊиŅ‚Đĩ ŅĐĩĐšŅ‡Đ°Ņ, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋĐžŅ‚ĐĩŅ€ŅŅ‚ŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ и Đ´Đ°ĐŊĐŊŅ‹Đĩ, ĐĩŅĐģи ĐŋĐžŅ‚ĐĩŅ€ŅĐĩŅ‚Đĩ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ŅĐ˛ĐžĐ¸Đŧ ĐģĐžĐŗиĐŊĐ°Đŧ. \n \nВŅ‹ Ņ‚Đ°ĐēĐļĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ и ŅƒĐŋŅ€Đ°Đ˛ĐģŅŅ‚ŅŒ ŅĐ˛ĐžĐ¸Đŧи ĐēĐģŅŽŅ‡Đ°Đŧи в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ…. - ХООйŅ‰ĐĩĐŊиŅ в ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊŅ‹ ŅĐēвОСĐŊŅ‹Đŧ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩĐŧ. ПоŅĐŧĐžŅ‚Ņ€Đ¸Ņ‚Đĩ ĐŋОдŅ€ĐžĐąĐŊĐžŅŅ‚и и ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš в иŅ… ĐŋŅ€ĐžŅ„иĐģĐĩ. ПаŅ€Đ°ĐŧĐĩŅ‚Ņ€Ņ‹ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК ХООйŅ‰ĐĩĐŊиŅ, ŅĐžĐ´ĐĩŅ€ĐļĐ°Ņ‰Đ¸Đĩ @room ОŅ‚ĐģĐ°Đ´ĐēĐ° НаŅŅ‚Ņ€ĐžĐšĐēи ваĐļĐŊĐžŅŅ‚и ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиК Đ´ĐģŅ ŅĐžĐąŅ‹Ņ‚иК - ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŋĐžŅĐģĐĩĐ´ĐŊŅŽŅŽ вĐĩŅ€ŅĐ¸ŅŽ Element ĐŊĐ° Đ´Ņ€ŅƒĐŗиŅ… ваŅˆĐ¸Ņ… ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ваŅ…, вĐĩĐą-ĐēĐģиĐĩĐŊŅ‚ Element, Element Đ´ĐģŅ ПК, Element Đ´ĐģŅ iOS, Element Đ´ĐģŅ АĐŊĐ´Ņ€ĐžĐ¸Đ´ иĐģи Đ´Ņ€ŅƒĐŗОК ĐēĐģиĐĩĐŊŅ‚ Matrix, ĐŋОддĐĩŅ€ĐļиваŅŽŅ‰Đ¸Đš ĐēŅ€ĐžŅŅ-ĐŋОдĐŋиŅŅŒ ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŋĐžŅĐģĐĩĐ´ĐŊŅŽŅŽ вĐĩŅ€ŅĐ¸ŅŽ Element ĐŊĐ° Đ´Ņ€ŅƒĐŗиŅ… ваŅˆĐ¸Ņ… ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ваŅ…: ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ĐŊОвŅƒŅŽ ŅĐĩŅŅĐ¸ŅŽ ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸: %1$s - НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ - БĐĩСОĐŋĐ°ŅĐŊĐžĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐĩ ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиĐĩ Đ­Ņ‚Đ° ŅĐĩŅŅĐ¸Ņ ŅĐ˛ĐģŅĐĩŅ‚ŅŅ дОвĐĩŅ€ĐĩĐŊĐŊОК Đ´ĐģŅ ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐŗĐž ОйĐŧĐĩĐŊĐ° ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧи, ĐŋĐžŅ‚ĐžĐŧŅƒ Ņ‡Ņ‚Đž вŅ‹ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Đģи ĐĩŅ‘: ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅŅ‚Ņƒ ŅĐĩŅŅĐ¸ŅŽ, Ņ‡Ņ‚ОйŅ‹ ĐŋĐžĐŧĐĩŅ‚иŅ‚ŅŒ ĐĩŅ‘ дОвĐĩŅ€ĐĩĐŊĐŊОК и ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авиŅ‚ŅŒ ĐĩĐš Đ´ĐžŅŅ‚ŅƒĐŋ Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ. ЕŅĐģи вŅ‹ ĐŊĐĩ вŅ…ОдиĐģи в ŅŅ‚Ņƒ ŅĐĩŅŅŅŽ, ваŅˆĐ° ŅƒŅ‡ĐĩŅ‚ĐŊĐ°Ņ СаĐŋиŅŅŒ ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅĐēĐžĐŧĐŋŅ€ĐžĐŧĐĩŅ‚иŅ€ĐžĐ˛Đ°ĐŊĐ°: - ДŅ€ŅƒĐŗиĐĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи ĐŧĐžĐŗŅƒŅ‚ ĐŊĐĩ дОвĐĩŅ€ŅŅ‚ŅŒ ĐĩĐŧŅƒ ЗавĐĩŅ€ŅˆĐ¸Ņ‚Đĩ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēŅƒ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и - ВĐĩŅ€Đ¸Ņ„иŅ†Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ВĐĩŅ€Đ¸Ņ„иŅ†Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐž ВĐŊиĐŧĐ°ĐŊиĐĩ - ОŅˆĐ¸ĐąĐēĐ° ĐŋĐžĐģŅƒŅ‡ĐĩĐŊиŅ ŅĐŋиŅĐēĐ° ŅĐĩŅŅĐ¸Đš ĐĄĐĩŅŅĐ¸Đ¸ ДовĐĩŅ€ĐĩĐŊĐŊŅ‹Đĩ НĐĩдОвĐĩŅ€ĐĩĐŊĐŊŅ‹Đĩ - Đ­Ņ‚Đ° ŅĐĩŅŅĐ¸Ņ ŅĐ˛ĐģŅĐĩŅ‚ŅŅ дОвĐĩŅ€ĐĩĐŊĐŊОК Đ´ĐģŅ ĐąĐĩСОĐŋĐ°ŅĐŊĐžĐŗĐž ОйĐŧĐĩĐŊĐ° ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧи, Ņ‚Đ°Đē ĐēĐ°Đē %1$s (%2$s) ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Đģ(Đ°) ĐĩĐŗĐž: %1$s (%2$s) вОŅˆĐĩĐģ(ĐģĐ°), иŅĐŋĐžĐģŅŒĐˇŅƒŅ ĐŊОвŅƒŅŽ ŅĐĩŅŅĐ¸ŅŽ: @@ -2396,54 +1958,39 @@ ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ваŅ€Đ¸Đ°ĐŊŅ‚ ХОСдаŅ‚ŅŒ ĐŋŅ€ĐžŅŅ‚ОК ĐžĐŋŅ€ĐžŅ НовŅ‹Đš вŅ…Од - ПоĐēĐ° ŅŅ‚ĐžŅ‚ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ ĐŊĐĩ дОвĐĩŅ€ŅĐĩŅ‚ ŅŅ‚ОК ŅĐĩŅŅĐ¸Đ¸, ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ, ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐŊŅ‹Đĩ в ОйĐĩ ŅŅ‚ĐžŅ€ĐžĐŊŅ‹, ĐŋĐžĐŧĐĩŅ‡Đ°ŅŽŅ‚ŅŅ ĐŋŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиŅĐŧи. КŅ€ĐžĐŧĐĩ Ņ‚ĐžĐŗĐž, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋОдŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ ŅĐĩŅŅĐ¸ŅŽ вŅ€ŅƒŅ‡ĐŊŅƒŅŽ. - - ИĐŊиŅ†Đ¸Đ°ĐģиСиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēŅ€ĐžŅŅ-ĐŋОдĐŋиŅŅŒ ĐĄĐąŅ€ĐžŅĐ¸Ņ‚ŅŒ ĐēĐģŅŽŅ‡Đ¸ - ПоŅ‡Ņ‚и ĐŗĐžŅ‚ОвО! ОŅ‚ОйŅ€Đ°ĐļĐ°ĐĩŅ‚ Đģи %s Ņ‚Đ°ĐēОК ĐļĐĩ Ņ‰Đ¸Ņ‚\? Да НĐĩŅ‚ - АĐēŅ‚ивиŅ€ĐžĐ˛Đ°ĐŊ Ņ€ĐĩĐļиĐŧ \"В ŅĐ°ĐŧĐžĐģŅ‘Ņ‚Đĩ\" - НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŊĐ°ĐšŅ‚и Đ´Đ°ĐŊĐŊŅ‹Đĩ в Ņ…Ņ€Đ°ĐŊиĐģиŅ‰Đĩ ВвĐĩдиŅ‚Đĩ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ Đ´ĐģŅ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŗĐž Ņ…Ņ€Đ°ĐŊиĐģиŅ‰Đ° ПŅ€ĐĩĐ´ŅƒĐŋŅ€ĐĩĐļĐ´ĐĩĐŊиĐĩ: ВŅ‹ Đ´ĐžĐģĐļĐŊŅ‹ ĐŋĐžĐģŅƒŅ‡Đ°Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ŅĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŧŅƒ Ņ…Ņ€Đ°ĐŊиĐģиŅ‰Ņƒ Ņ‚ĐžĐģŅŒĐēĐž Ņ дОвĐĩŅ€ĐĩĐŊĐŊĐžĐŗĐž ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ва - ВŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅŅ‚Đž вĐģĐžĐļĐĩĐŊиĐĩ в %1$s\? ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ иСОйŅ€Đ°ĐļĐĩĐŊиĐĩ в ĐžŅ€Đ¸ĐŗиĐŊĐ°ĐģŅŒĐŊĐžĐŧ Ņ€Đ°ĐˇĐŧĐĩŅ€Đĩ ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ иСОйŅ€Đ°ĐļĐĩĐŊиŅ в ĐžŅ€Đ¸ĐŗиĐŊĐ°ĐģŅŒĐŊĐžĐŧ Ņ€Đ°ĐˇĐŧĐĩŅ€Đĩ ОŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ иСОйŅ€Đ°ĐļĐĩĐŊиŅ в ĐžŅ€Đ¸ĐŗиĐŊĐ°ĐģŅŒĐŊĐžĐŧ Ņ€Đ°ĐˇĐŧĐĩŅ€Đĩ - ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅƒĐ´Đ°ĐģĐĩĐŊиĐĩ ВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ŅĐēŅ€Ņ‹Ņ‚ŅŒ (ŅƒĐ´Đ°ĐģиŅ‚ŅŒ) ŅŅ‚Đž ŅĐžĐąŅ‹Ņ‚иĐĩ\? ОбŅ€Đ°Ņ‚иŅ‚Đĩ вĐŊиĐŧĐ°ĐŊиĐĩ, Ņ‡Ņ‚Đž ĐĩŅĐģи вŅ‹ ŅƒĐ´Đ°ĐģиŅ‚Đĩ ĐŊаСваĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ иĐģи иСĐŧĐĩĐŊиŅ‚Đĩ Ņ‚ĐĩĐŧŅƒ, ŅŅ‚Đž ĐŧĐžĐļĐĩŅ‚ ĐžŅ‚ĐŧĐĩĐŊиŅ‚ŅŒ иСĐŧĐĩĐŊĐĩĐŊиĐĩ. ĐŖĐēаСаŅ‚ŅŒ ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊŅƒ ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ° Ņ€ĐĩĐ´Đ°ĐēŅ‚иŅ€ĐžĐ˛Đ°ĐŊиŅ - ХОйŅ‹Ņ‚иĐĩ ŅƒĐ´Đ°ĐģĐĩĐŊĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐŧ, ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %1$s ХОйŅ‹Ņ‚иĐĩ ĐŧОдĐĩŅ€Đ¸Ņ€ŅƒĐĩŅ‚ŅŅ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€ĐžĐŧ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹, ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %1$s - КĐģŅŽŅ‡Đ¸ ŅƒŅĐŋĐĩŅˆĐŊĐž ОйĐŊОвĐģĐĩĐŊŅ‹! - Element Đ´ĐģŅ Android - ОбĐŊОвиŅ‚ŅŒ - НовŅ‹Đš вŅ…Од в ваŅˆŅƒ ŅƒŅ‡Ņ‘Ņ‚ĐŊŅƒŅŽ СаĐŋиŅŅŒ. Đ­Ņ‚Đž ĐąŅ‹Đģи ВŅ‹\? НаĐļĐŧиŅ‚Đĩ, Ņ‡Ņ‚ОйŅ‹ ĐŋŅ€ĐžŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ и ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ Đ­Ņ‚Đž ĐąŅ‹Đģ ĐŊĐĩ Ņ ВаŅˆ Đ°ĐēĐēĐ°ŅƒĐŊŅ‚ ĐŧĐžĐļĐĩŅ‚ ĐžĐēаСаŅ‚ŅŒŅŅ ĐŋОд ŅƒĐŗŅ€ĐžĐˇĐžĐš - ЕŅĐģи вŅ‹ ĐŋŅ€ĐĩŅ€Đ˛Ņ‘Ņ‚Đĩ ĐŋŅ€ĐžŅ†ĐĩĐ´ŅƒŅ€Ņƒ, Ņ‚Đž ĐŊĐĩ ŅĐŧĐžĐļĐĩŅ‚Đĩ Ņ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐŊĐ° ŅŅ‚ĐžĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ, Đ° Đ´Ņ€ŅƒĐŗиĐĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи ĐŊĐĩ ĐąŅƒĐ´ŅƒŅ‚ дОвĐĩŅ€ŅŅ‚ŅŒ ĐĩĐŧŅƒ ЕŅĐģи вŅ‹ ĐŋŅ€ĐĩŅ€Đ˛Ņ‘Ņ‚Đĩ ĐŋŅ€ĐžŅ†ĐĩĐ´ŅƒŅ€Ņƒ, Ņ‚Đž ĐŊĐĩ ŅĐŧĐžĐļĐĩŅ‚Đĩ Ņ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐŊĐ° ŅĐ˛ĐžĐĩĐŧ ĐŊОвОĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вĐĩ, Đ° Đ´Ņ€ŅƒĐŗиĐĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģи ĐŊĐĩ ĐąŅƒĐ´ŅƒŅ‚ дОвĐĩŅ€ŅŅ‚ŅŒ ĐĩĐŧŅƒ ЕŅĐģи вŅ‹ ĐŋŅ€ĐĩŅ€Đ˛Ņ‘Ņ‚Đĩ ĐŋŅ€ĐžŅ†ĐĩĐ´ŅƒŅ€Ņƒ, ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŒ %1$s (%2$s) ĐŊĐĩ ĐąŅƒĐ´ĐĩŅ‚ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´Ņ‘ĐŊ. НаŅ‡ĐŊиŅ‚Đĩ СаĐŊОвО в ĐŋŅ€ĐžŅ„иĐģĐĩ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ. - ЧŅ‚Đž-Ņ‚Đž иС ŅŅ‚ĐžĐŗĐž ĐŧĐžĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ŅĐēĐžĐŧĐŋŅ€ĐžĐŧĐĩŅ‚иŅ€ĐžĐ˛Đ°ĐŊĐž: \n \n- ВаŅˆ ĐŋĐ°Ņ€ĐžĐģŅŒ @@ -2452,9 +1999,7 @@ \n- ИĐŊŅ‚ĐĩŅ€ĐŊĐĩŅ‚-ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ, иŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧĐžĐĩ ŅŅ‚иĐŧ иĐģи Đ´Ņ€ŅƒĐŗиĐŧ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вОĐŧ \n \nМŅ‹ Ņ€ĐĩĐēĐžĐŧĐĩĐŊĐ´ŅƒĐĩĐŧ ваĐŧ ĐŊĐĩĐŧĐĩĐ´ĐģĐĩĐŊĐŊĐž иСĐŧĐĩĐŊиŅ‚ŅŒ ŅĐ˛ĐžĐš ĐŋĐ°Ņ€ĐžĐģŅŒ и ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ в ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēĐ°Ņ…. - ПодŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ĐžŅ‚ĐŧĐĩĐŊĐĩĐŊĐž - ГĐĩĐŊĐĩŅ€Đ°Ņ†Đ¸Ņ ĐēĐģŅŽŅ‡Đ° ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и иС ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇŅ‹ ГĐĩĐŊĐĩŅ€Đ°Ņ†Đ¸Ņ ĐēĐģŅŽŅ‡Đ° SSSS иС ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇŅ‹ ГĐĩĐŊĐĩŅ€Đ°Ņ†Đ¸Ņ ĐēĐģŅŽŅ‡Đ° SSSS иС ĐŋĐ°Ņ€ĐžĐģŅŒĐŊОК Ņ„Ņ€Đ°ĐˇŅ‹ (%s) @@ -2462,70 +2007,51 @@ ЕŅĐģи вŅ‹ ĐŊĐĩ СĐŊĐ°ĐĩŅ‚Đĩ ваŅˆŅƒ ĐŋĐ°Ņ€ĐžĐģŅŒĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ Đ´ĐģŅ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ ĐēĐģŅŽŅ‡ĐĩĐš, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ %s. ЗадаŅ‚ŅŒ Ņ€ĐžĐģŅŒ ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚ŅŒ %s - ВвĐĩдиŅ‚Đĩ ŅĐ˛ĐžŅŽ %s ĐĩŅ‰Đĩ Ņ€Đ°Đˇ Đ´ĐģŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ. ВвĐĩдиŅ‚Đĩ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ, иСвĐĩŅŅ‚ĐŊŅƒŅŽ Ņ‚ĐžĐģŅŒĐēĐž ваĐŧ, Đ´ĐģŅ СаŅ‰Đ¸Ņ‚Ņ‹ Đ´Đ°ĐŊĐŊŅ‹Ņ… ĐŊĐ° ваŅˆĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. - НаŅŅ‚Ņ€ĐžĐšĐēĐ° вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ. ВаŅˆ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ГоŅ‚ОвО! ĐĨŅ€Đ°ĐŊиŅ‚Đĩ ĐĩĐŗĐž в ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и ЗавĐĩŅ€ŅˆĐ¸Ņ‚ŅŒ - ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ %1$s ĐēĐ°Đē ĐŋОдŅŅ‚Ņ€Đ°Ņ…ОвĐēŅƒ ĐŊĐ° ŅĐģŅƒŅ‡Đ°Đš, ĐĩŅĐģи вŅ‹ СайŅƒĐ´ĐĩŅ‚Đĩ %2$s. - ПŅƒĐąĐģиĐēĐ°Ņ†Đ¸Ņ ŅĐžĐˇĐ´Đ°ĐŊĐŊŅ‹Ņ… ĐēĐģŅŽŅ‡ĐĩĐš идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ОĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊиĐĩ ĐēĐģŅŽŅ‡Đ° SSSS ĐŋĐž ŅƒĐŧĐžĐģŅ‡Đ°ĐŊиŅŽ ХиĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņ ĐŧĐ°ŅŅ‚ĐĩŅ€-ĐēĐģŅŽŅ‡Đ° ХиĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņ ĐēĐģŅŽŅ‡Đ° ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ХиĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņ ĐēĐģŅŽŅ‡Đ° ŅĐ°ĐŧĐžĐŋОдĐŋиŅĐ¸ НаŅŅ‚Ņ€ĐžĐšĐēĐ° Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ ĐēĐģŅŽŅ‡ĐĩĐš - - ĐĄĐžŅ…Ņ€Đ°ĐŊиŅ‚Đĩ ĐŊĐ° USB-Ņ„ĐģĐĩŅˆĐēŅƒ иĐģи Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đš диŅĐē ĐĄĐēĐžĐŋиŅ€ŅƒĐšŅ‚Đĩ в ĐŋĐĩŅ€ŅĐžĐŊĐ°ĐģŅŒĐŊĐžĐĩ ОйĐģĐ°Ņ‡ĐŊĐžĐĩ Ņ…Ņ€Đ°ĐŊиĐģиŅ‰Đĩ - ВŅ‹ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ŅĐ´ĐĩĐģĐ°Ņ‚ŅŒ ŅŅ‚Đž Ņ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° - ШиŅ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐŊĐĩ ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ŅŅ - ВŅ‹ ŅĐžĐˇĐ´Đ°Đģи и ĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Đģи ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. - ПоŅ‡Ņ‚и ĐŗĐžŅ‚ОвО! ОŅ‚ОйŅ€Đ°ĐļĐ°ĐĩŅ‚ŅŅ Đģи Ņ‚Đ°ĐēОК ĐļĐĩ Ņ‰Đ¸Ņ‚ в Đ´Ņ€ŅƒĐŗОК ваŅˆĐĩĐš ŅĐĩŅŅĐ¸Đ¸\? ПоŅ‡Ņ‚и ĐŗĐžŅ‚ОвО! ОĐļидаĐŊиĐĩ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅâ€Ļ ОĐļидаĐŊиĐĩ Đ´ĐģŅ %sâ€Ļ - НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ иĐŧĐŋĐžŅ€Ņ‚иŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐģŅŽŅ‡Đ¸ - ЗаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ в ĐŋĐĩŅ€ŅĐžĐŊĐ°ĐģŅŒĐŊŅ‹Ņ… Ņ‡Đ°Ņ‚Đ°Ņ… ЗаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ в ĐŗŅ€ŅƒĐŋĐŋОвŅ‹Ņ… Ņ‡Đ°Ņ‚Đ°Ņ… ПŅ€Đ¸ ОйĐŊОвĐģĐĩĐŊии ĐēĐžĐŧĐŊĐ°Ņ‚ ПоŅŅ‹ĐģĐ°ĐĩŅ‚ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ в видĐĩ ĐŋŅ€ĐžŅŅ‚ĐžĐŗĐž Ņ‚ĐĩĐēŅŅ‚Đ°, ĐŊĐĩ иĐŊŅ‚ĐĩŅ€ĐŋŅ€ĐĩŅ‚иŅ€ŅƒŅ ĐĩĐŗĐž ĐēĐ°Đē Ņ€Đ°ĐˇĐŧĐĩŅ‚ĐēŅƒ - НĐĩвĐĩŅ€ĐŊĐžĐĩ иĐŧŅ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ и/иĐģи ĐŋĐ°Ņ€ĐžĐģŅŒ. ВвĐĩĐ´ĐĩĐŊĐŊŅ‹Đš ĐŋĐ°Ņ€ĐžĐģŅŒ ĐŊĐ°Ņ‡Đ¸ĐŊĐ°ĐĩŅ‚ŅŅ иĐģи СаĐēĐ°ĐŊŅ‡Đ¸Đ˛Đ°ĐĩŅ‚ŅŅ ĐŋŅ€ĐžĐąĐĩĐģĐ°Đŧи, ĐŋĐžĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ. Đ­Ņ‚Đ° ŅƒŅ‡Ņ‘Ņ‚ĐŊĐ°Ņ СаĐŋиŅŅŒ ĐąŅ‹ĐģĐ° Đ´ĐĩĐ°ĐēŅ‚ивиŅ€ĐžĐ˛Đ°ĐŊĐ°. - АĐēŅ‚ивиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēŅ€ĐžŅŅ-ĐŋОдĐŋиŅŅŒ ВвĐĩдиŅ‚Đĩ %s, Ņ‡Ņ‚ОйŅ‹ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģ - ВвĐĩдиŅ‚Đĩ %s Đ­Ņ‚Đž ĐŊĐĩĐ´ĐĩĐšŅŅ‚виŅ‚ĐĩĐģŅŒĐŊŅ‹Đš ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ввĐĩдиŅ‚Đĩ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ - ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° ĐēĐģŅŽŅ‡Đ° Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ ПŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° ĐēĐģŅŽŅ‡Đ° Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ (%s) ПоĐģŅƒŅ‡ĐĩĐŊиĐĩ ĐēŅ€Đ¸Đ˛ĐžĐš ĐēĐģŅŽŅ‡Đ° ГĐĩĐŊĐĩŅ€Đ°Ņ†Đ¸Ņ ĐēĐģŅŽŅ‡Đ° SSSS иС ĐēĐģŅŽŅ‡Đ° вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ĐĄĐžŅ…Ņ€Đ°ĐŊĐĩĐŊиĐĩ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии ĐēĐģŅŽŅ‡Đ° в SSSS %1$s (%2$s) - иŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ваŅˆ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ĐēĐģŅŽŅ‡Đ° Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии КĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ ĐēĐģŅŽŅ‡Đ° Ņ€ĐĩСĐĩŅ€Đ˛ĐŊОК ĐēĐžĐŋии - БĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ ŅĐēŅ€Đ¸ĐŊŅˆĐžŅ‚Ņ‹ в ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊии ВĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ ŅŅ‚ĐžĐŗĐž ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ° дОйавĐģŅĐĩŅ‚ FLAG_SECURE ĐēĐž вŅĐĩĐŧ Đ´ĐĩĐšŅŅ‚виŅĐŧ. ПĐĩŅ€ĐĩСаĐŋŅƒŅŅ‚иŅ‚Đĩ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ, Ņ‡Ņ‚ОйŅ‹ иСĐŧĐĩĐŊĐĩĐŊиŅ вŅŅ‚ŅƒĐŋиĐģи в ŅĐ¸ĐģŅƒ. - МĐĩдиаŅ„Đ°ĐšĐģ дОйавĐģĐĩĐŊ в ĐŗĐ°ĐģĐĩŅ€ĐĩŅŽ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ дОйавиŅ‚ŅŒ ĐŧĐĩдиаŅ„Đ°ĐšĐģ в ĐŗĐ°ĐģĐĩŅ€ĐĩŅŽ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ŅĐžŅ…Ņ€Đ°ĐŊиŅ‚ŅŒ ĐŧĐĩдиаŅ„Đ°ĐšĐģ @@ -2540,21 +2066,17 @@ ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ иĐģи ввĐĩдиŅ‚Đĩ ĐĩĐŗĐž вŅ€ŅƒŅ‡ĐŊŅƒŅŽ, ввĐĩĐ´Ņ иĐģи вŅŅ‚авив иС ĐąŅƒŅ„ĐĩŅ€Đ° ОйĐŧĐĩĐŊĐ° НĐĩвОСĐŧĐžĐļĐŊĐž Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅƒŅŽ ĐēĐžĐŋиŅŽ Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ŅŅ‚ĐžĐŗĐž ĐēĐģŅŽŅ‡Đ° вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ: ŅƒĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž вŅ‹ ввĐĩĐģи ĐŋŅ€Đ°Đ˛Đ¸ĐģŅŒĐŊŅ‹Đš ĐēĐģŅŽŅ‡. НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē СаŅ‰Đ¸Ņ‰ĐĩĐŊĐŊĐžĐŧŅƒ Ņ…Ņ€Đ°ĐŊиĐģиŅ‰Ņƒ Đ´Đ°ĐŊĐŊŅ‹Ņ… - НĐĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐž ЗаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐž ĐŊĐĩĐŋОдŅ‚вĐĩŅ€ĐļĐ´Ņ‘ĐŊĐŊОК ŅĐĩŅŅĐ¸ĐĩĐš ПŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ, ĐŗĐ´Đĩ вŅ‹ вОŅˆĐģи ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ вŅĐĩ ŅĐ˛ĐžĐ¸ ŅĐĩŅŅĐ¸Đ¸, Ņ‡Ņ‚ОйŅ‹ ŅƒĐąĐĩдиŅ‚ŅŒŅŅ в ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ и ŅĐžĐžĐąŅ‰ĐĩĐŊиК Đ ŅƒŅ‡ĐŊĐ°Ņ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēĐ° Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ Ņ‚ĐĩĐēŅŅ‚Đ° ПоĐŧĐĩŅ‚иŅ‚ŅŒ ĐēĐ°Đē ĐŊĐ°Đ´ĐĩĐļĐŊŅ‹Đš - ПĐĩŅ€ĐĩĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ŅŅ‚Ņƒ ŅŅŅ‹ĐģĐēŅƒ ĐĄŅŅ‹ĐģĐēĐ° %1$s ĐŋĐĩŅ€ĐĩĐŊĐ°ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ ваŅ ĐŊĐ° Đ´Ņ€ŅƒĐŗОК ŅĐ°ĐšŅ‚: %2$s. \n \nВŅ‹ ŅƒĐ˛ĐĩŅ€ĐĩĐŊŅ‹, Ņ‡Ņ‚Đž Ņ…ĐžŅ‚иŅ‚Đĩ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ\? - МŅ‹ ĐŊĐĩ ŅĐŧĐžĐŗĐģи ŅĐžĐˇĐ´Đ°Ņ‚ŅŒ ŅŅ‚Ņƒ ĐąĐĩŅĐĩĐ´Ņƒ. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš, ĐēĐžŅ‚ĐžŅ€Ņ‹Ņ… вŅ‹ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐ°ĐĩŅ‚Đĩ, и ĐŋĐžĐŋŅ€ĐžĐąŅƒĐšŅ‚Đĩ ĐĩŅ‰Ņ‘ Ņ€Đ°Đˇ. - ДобавиŅ‚ŅŒ ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēОв ПРИГЛАСИĐĸĐŦ ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐ°ĐĩĐŧ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐšâ€Ļ @@ -2567,11 +2089,9 @@ ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊŅ‹ %1$s и ĐĩŅ‰Đĩ %2$d ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅĐŧ МŅ‹ ĐŊĐĩ ĐŧĐžĐŗĐģи ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Ņ‚ŅŒ ŅŅ‚иŅ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš. ПоĐļĐ°ĐģŅƒĐšŅŅ‚Đ°, ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŒŅ‚Đĩ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš, ĐēĐžŅ‚ĐžŅ€Ņ‹Ņ… вŅ‹ Ņ…ĐžŅ‚иŅ‚Đĩ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Ņ‚ŅŒ, и ĐŋОвŅ‚ĐžŅ€Đ¸Ņ‚Đĩ ĐŋĐžĐŋŅ‹Ņ‚ĐēŅƒ. - ĐĸĐĩĐēŅƒŅ‰Đ¸Đš ŅĐˇŅ‹Đē ДŅ€ŅƒĐŗиĐĩ Đ´ĐžŅŅ‚ŅƒĐŋĐŊŅ‹Đĩ ŅĐˇŅ‹Đēи ЗаĐŗŅ€ŅƒĐˇĐēĐ° Đ´ĐžŅŅ‚ŅƒĐŋĐŊŅ‹Ņ… ŅĐˇŅ‹ĐēОвâ€Ļ - ПоŅĐŧĐžŅ‚Ņ€ĐĩŅ‚ŅŒ ŅƒŅĐģОвиŅ %s ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒŅŅ ĐžŅ‚ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ %s\? Đ­Ņ‚ĐžŅ‚ ŅĐĩŅ€Đ˛ĐĩŅ€ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ŅƒŅŅ‚Đ°Ņ€ĐĩĐģ. Element ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ Ņ‚ĐžĐģŅŒĐēĐž API V2. @@ -2581,7 +2101,6 @@ ДĐģŅ ваŅˆĐĩĐš ĐŋŅ€Đ¸Đ˛Đ°Ņ‚ĐŊĐžŅŅ‚и, Element ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐēŅƒ Đ°Đ´Ņ€ĐĩŅĐ° ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ и ĐŊĐžĐŧĐĩŅ€Đ° Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° Ņ‚ĐžĐģŅŒĐēĐž в Ņ…ŅŅˆĐ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐŧ видĐĩ. ПŅ€Đ¸Đ˛ŅĐˇĐēĐ° ĐŊĐĩ ŅƒĐ´Đ°ĐģĐ°ŅŅŒ. ĐĸĐĩĐēŅƒŅ‰Đ°Ņ вСаиĐŧĐžŅĐ˛ŅĐˇŅŒ Ņ ŅŅ‚иĐŧ идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ‚ĐžŅ€ĐžĐŧ ĐžŅ‚ŅŅƒŅ‚ŅŅ‚вŅƒĐĩŅ‚. - ВаŅˆ Đ´ĐžĐŧĐ°ŅˆĐŊиК ŅĐĩŅ€Đ˛ĐĩŅ€ (%1$s) ĐŋŅ€ĐĩĐ´ĐģĐ°ĐŗĐ°ĐĩŅ‚ иŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ %2$s Đ´ĐģŅ ваŅˆĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ %1$s КŅ€ĐžĐŧĐĩ Ņ‚ĐžĐŗĐž, вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ввĐĩŅŅ‚и ĐģŅŽĐąĐžĐš Đ´Ņ€ŅƒĐŗОК URL-Đ°Đ´Ņ€ĐĩŅ ŅĐĩŅ€Đ˛ĐĩŅ€Đ° идĐĩĐŊŅ‚иŅ„иĐēĐ°Ņ†Đ¸Đ¸ @@ -2593,29 +2112,23 @@ ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ СвŅƒĐē ĐŧиĐēŅ€ĐžŅ„ĐžĐŊĐ° ОŅ‚ĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐēĐ°ĐŧĐĩŅ€Ņƒ ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ ĐēĐ°ĐŧĐĩŅ€Ņƒ - ЗаŅ‰Đ¸Ņ‚иŅ‚Đĩ ŅĐĩĐąŅ ĐžŅ‚ ĐŋĐžŅ‚ĐĩŅ€Đ¸ Đ´ĐžŅŅ‚ŅƒĐŋĐ° Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ и Đ´Đ°ĐŊĐŊŅ‹Đŧ, ŅĐžĐˇĐ´Đ°Đ˛ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊŅ‹Đĩ ĐēĐžĐŋии ĐēĐģŅŽŅ‡ĐĩĐš ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ ĐŊĐ° ваŅˆĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐēĐģŅŽŅ‡ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и ХОСдаКŅ‚Đĩ ĐēĐģŅŽŅ‡ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и Đ´ĐģŅ Ņ…Ņ€Đ°ĐŊĐĩĐŊиŅ в ĐŊĐ°Đ´ĐĩĐļĐŊĐžĐŧ ĐŧĐĩŅŅ‚Đĩ, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ в ĐŧĐĩĐŊĐĩĐ´ĐļĐĩŅ€Đĩ ĐŋĐ°Ņ€ĐžĐģĐĩĐš иĐģи ŅĐĩĐšŅ„Đĩ. ИŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ ВвĐĩдиŅ‚Đĩ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ, иСвĐĩŅŅ‚ĐŊŅƒŅŽ Ņ‚ĐžĐģŅŒĐēĐž ваĐŧ, и ŅĐžĐˇĐ´Đ°ĐšŅ‚Đĩ ĐēĐģŅŽŅ‡ Đ´ĐģŅ Ņ€ĐĩСĐĩŅ€Đ˛ĐŊĐžĐŗĐž ĐēĐžĐŋиŅ€ĐžĐ˛Đ°ĐŊиŅ. - ĐĄĐžŅ…Ņ€Đ°ĐŊиŅ‚Đĩ ŅĐ˛ĐžĐš ĐēĐģŅŽŅ‡ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и ĐĨŅ€Đ°ĐŊиŅ‚Đĩ ĐēĐģŅŽŅ‡ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и в ĐŊĐ°Đ´ĐĩĐļĐŊĐžĐŧ ĐŧĐĩŅŅ‚Đĩ, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ в ĐŧĐĩĐŊĐĩĐ´ĐļĐĩŅ€Đĩ ĐŋĐ°Ņ€ĐžĐģĐĩĐš иĐģи ŅĐĩĐšŅ„Đĩ. - ЗадайŅ‚Đĩ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ ВвĐĩдиŅ‚Đĩ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ, иСвĐĩŅŅ‚ĐŊŅƒŅŽ Ņ‚ĐžĐģŅŒĐēĐž ваĐŧ, Đ´ĐģŅ СаŅ‰Đ¸Ņ‚Ņ‹ Đ´Đ°ĐŊĐŊŅ‹Ņ… ĐŊĐ° ваŅˆĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ. ĐĄĐĩĐēŅ€ĐĩŅ‚ĐŊĐ°Ņ Ņ„Ņ€Đ°ĐˇĐ° ДĐģŅ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиŅ ввĐĩдиŅ‚Đĩ ваŅˆŅƒ ŅĐĩĐēŅ€ĐĩŅ‚ĐŊŅƒŅŽ Ņ„Ņ€Đ°ĐˇŅƒ ĐĩŅ‰Ņ‘ Ņ€Đ°Đˇ. - ĐĄĐžŅ…Ņ€Đ°ĐŊиŅ‚Đĩ ваŅˆ ĐēĐģŅŽŅ‡ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и ĐĨŅ€Đ°ĐŊиŅ‚Đĩ ĐēĐģŅŽŅ‡ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и в ĐŊĐ°Đ´ĐĩĐļĐŊĐžĐŧ ĐŧĐĩŅŅ‚Đĩ, ĐŊĐ°ĐŋŅ€Đ¸ĐŧĐĩŅ€ в ĐŧĐĩĐŊĐĩĐ´ĐļĐĩŅ€Đĩ ĐŋĐ°Ņ€ĐžĐģĐĩĐš иĐģи ŅĐĩĐšŅ„Đĩ. - НазваĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ĐĸĐĩĐŧĐ° ВŅ‹ ŅƒŅĐŋĐĩŅˆĐŊĐž иСĐŧĐĩĐŊиĐģи ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ - ĐŖ ваŅ ĐŊĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋĐ° Đē ŅŅ‚ĐžĐŧŅƒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅŽ Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛ĐēĐ° ŅŅ‚ĐžĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ ĐŧĐžĐļĐĩŅ‚ СаĐŊŅŅ‚ŅŒ ĐŊĐĩĐēĐžŅ‚ĐžŅ€ĐžĐĩ вŅ€ĐĩĐŧŅ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ @@ -2624,17 +2137,12 @@ НĐĩŅ‚ Đ´ĐžŅŅ‚ŅƒĐŋĐ° Đē ŅŅ‚ĐžĐŧŅƒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅŽ, Ņ‚Đ°Đē ĐēĐ°Đē ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ĐĩĐģŅŒ ĐŊĐĩ дОвĐĩŅ€ŅĐĩŅ‚ ваŅˆĐĩĐš ŅĐĩŅŅĐ¸Đ¸ ВŅ‹ ĐŊĐĩ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋĐžĐģŅƒŅ‡Đ¸Ņ‚ŅŒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē ŅŅ‚ĐžĐŧŅƒ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅŽ, ĐŋĐžŅ‚ĐžĐŧŅƒ Ņ‡Ņ‚Đž ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ĐĩĐģŅŒ ĐŊĐ°ĐŧĐĩŅ€ĐĩĐŊĐŊĐž ĐŊĐĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģ ĐēĐģŅŽŅ‡Đ¸ ОĐļидаĐŊиĐĩ иŅŅ‚ĐžŅ€Đ¸Đ¸ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиŅ - Riot Ņ‚ĐĩĐŋĐĩŅ€ŅŒ Element! МŅ‹ Ņ€Đ°Đ´Ņ‹ ŅĐžĐžĐąŅ‰Đ¸Ņ‚ŅŒ, Ņ‡Ņ‚Đž ŅĐŧĐĩĐŊиĐģи иĐŧŅ! ВаŅˆĐĩ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ ОйĐŊОвĐģĐĩĐŊĐž, и вŅ‹ вОŅˆĐģи в ŅĐ˛ĐžŅŽ ŅƒŅ‡ĐĩŅ‚ĐŊŅƒŅŽ СаĐŋиŅŅŒ. ĐŸĐžĐĐ¯ĐĸНО ĐŖЗНАĐĸĐŦ БОЛĐŦШЕ - element - - ĐĄĐžŅ…Ņ€Đ°ĐŊиŅ‚ŅŒ ĐēĐģŅŽŅ‡ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ в - ДобавиŅ‚ŅŒ иС ĐŧĐžĐĩĐš Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐŊОК ĐēĐŊиĐŗи ВаŅˆĐ° Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐŊĐ°Ņ ĐēĐŊиĐŗĐ° ĐŋŅƒŅŅ‚Đ° ĐĸĐĩĐģĐĩŅ„ĐžĐŊĐŊĐ°Ņ ĐēĐŊиĐŗĐ° @@ -2642,13 +2150,10 @@ ПоĐģŅƒŅ‡Đ°ĐĩĐŧ ваŅˆĐ¸ ĐēĐžĐŊŅ‚Đ°ĐēŅ‚Ņ‹â€Ļ ВаŅˆĐ° ĐēĐžĐŊŅ‚Đ°ĐēŅ‚ĐŊĐ°Ņ ĐēĐŊиĐŗĐ° ĐŋŅƒŅŅ‚Đ° КĐŊиĐŗĐ° ĐēĐžĐŊŅ‚Đ°ĐēŅ‚Ов - ОŅ‚ОСваŅ‚ŅŒ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ ОŅ‚ОСваŅ‚ŅŒ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ Đ´ĐģŅ %1$s\? - ЗабаĐŊĐĩĐŊ %1$s НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ Ņ€Đ°ĐˇĐąĐ°ĐŊиŅ‚ŅŒ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ - Push-ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ĐžŅ‚ĐēĐģŅŽŅ‡ĐĩĐŊŅ‹ ПŅ€ĐžŅĐŧĐžŅ‚Ņ€Đ¸Ņ‚Đĩ ŅĐ˛ĐžĐ¸ ĐŊĐ°ŅŅ‚Ņ€ĐžĐšĐēи, Ņ‡Ņ‚ОйŅ‹ вĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ push-ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅ ВŅ‹ĐąĐĩŅ€Đ¸Ņ‚Đĩ PIN-ĐēОд Đ´ĐģŅ ОйĐĩŅĐŋĐĩŅ‡ĐĩĐŊиŅ ĐąĐĩСОĐŋĐ°ŅĐŊĐžŅŅ‚и @@ -2678,13 +2183,11 @@ %1$d/%2$d ĐēĐģŅŽŅ‡Đ° ŅƒŅĐŋĐĩŅˆĐŊĐž иĐŧĐŋĐžŅ€Ņ‚иŅ€ĐžĐ˛Đ°ĐŊŅ‹. %1$d/%2$d ĐēĐģŅŽŅ‡ĐĩĐš ŅƒŅĐŋĐĩŅˆĐŊĐž иĐŧĐŋĐžŅ€Ņ‚иŅ€ĐžĐ˛Đ°ĐŊĐž. - ĐŖĐŋŅ€Đ°Đ˛ĐģĐĩĐŊиĐĩ иĐŊŅ‚ĐĩĐŗŅ€Đ°Ņ†Đ¸ŅĐŧи НĐĩŅ‚ Đ°ĐēŅ‚ивĐŊŅ‹Ņ… видĐļĐĩŅ‚Ов КоĐŧĐŊĐ°Ņ‚Đ° ŅĐžĐˇĐ´Đ°ĐŊĐ°, ĐŊĐž ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ ĐŊĐĩ ĐžŅ‚ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊŅ‹ ĐŋĐž ŅĐģĐĩĐ´ŅƒŅŽŅ‰ĐĩĐš ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊĐĩ: \n \n%s - %1$s, %2$s и %3$d Ņ‡Đ¸Ņ‚Đ°ĐĩŅ‚ %1$s, %2$s и %3$d Đ´Ņ€ŅƒĐŗиŅ… Ņ‡Đ¸Ņ‚Đ°ŅŽŅ‚ @@ -2704,15 +2207,12 @@ ĐĸĐĩĐģĐĩŅ„ĐžĐŊĐŊŅ‹Đĩ ĐŊĐžĐŧĐĩŅ€Đ° ĐŖĐ´Đ°ĐģиŅ‚ŅŒ %s\? ĐŖĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž вŅ‹ ĐŋĐĩŅ€ĐĩŅˆĐģи ĐŋĐž ŅŅŅ‹ĐģĐēĐĩ в ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐžĐŧ ĐŋиŅŅŒĐŧĐĩ, ĐēĐžŅ‚ĐžŅ€ĐžĐĩ ĐŧŅ‹ ваĐŧ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи. - Đ­ĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊĐ°Ņ ĐŋĐžŅ‡Ņ‚Đ° и ĐŊĐžĐŧĐĩŅ€Đ° Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊОв ĐŖĐŋŅ€Đ°Đ˛ĐģŅĐšŅ‚Đĩ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚ОК и ĐŊĐžĐŧĐĩŅ€Đ°Đŧи Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊОв, ĐŋŅ€Đ¸Đ˛ŅĐˇĐ°ĐŊĐŊŅ‹Đŧи Đē ваŅˆĐĩĐš ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ Matrix - Код ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ĐŧĐĩĐļĐ´ŅƒĐŊĐ°Ņ€ĐžĐ´ĐŊŅ‹Đš Ņ„ĐžŅ€ĐŧĐ°Ņ‚ (ĐŊĐžĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° Đ´ĐžĐģĐļĐĩĐŊ ĐŊĐ°Ņ‡Đ¸ĐŊĐ°Ņ‚ŅŒŅŅ Ņ \'+\') ПодŅ‚вĐĩŅ€Đ´Đ¸Ņ‚Đĩ ŅĐ˛ĐžŅŽ ĐģиŅ‡ĐŊĐžŅŅ‚ŅŒ, ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Đ˛ ŅŅ‚ĐžŅ‚ ĐģĐžĐŗиĐŊ, ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авив ĐĩĐŧŅƒ Đ´ĐžŅŅ‚ŅƒĐŋ Đē СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅĐŧ. К ŅĐžĐļĐ°ĐģĐĩĐŊиŅŽ, ŅŅ‚Đ° ĐžĐŋĐĩŅ€Đ°Ņ†Đ¸Ņ ĐŋĐžĐēĐ° ĐŊĐĩĐ´ĐžŅŅ‚ŅƒĐŋĐŊĐ° Đ´ĐģŅ ŅƒŅ‡ĐĩŅ‚ĐŊŅ‹Ņ… СаĐŋиŅĐĩĐš, ĐŋОдĐēĐģŅŽŅ‡ĐĩĐŊĐŊŅ‹Ņ… Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ ĐĩдиĐŊĐžĐŗĐž вŅ…Ода. - НĐĩвОСĐŧĐžĐļĐŊĐž ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ŅŒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ, в ĐēĐžŅ‚ĐžŅ€ŅƒŅŽ ваĐŧ СаĐŋŅ€ĐĩŅ‰Ņ‘ĐŊ Đ´ĐžŅŅ‚ŅƒĐŋ. НĐĩвОСĐŧĐžĐļĐŊĐž ĐŊĐ°ĐšŅ‚и ŅŅ‚Ņƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. ĐŖĐąĐĩдиŅ‚ĐĩŅŅŒ, Ņ‡Ņ‚Đž ĐžĐŊĐ° ŅŅƒŅ‰ĐĩŅŅ‚вŅƒĐĩŅ‚. @@ -2720,18 +2220,58 @@ %d ŅĐĩĐēŅƒĐŊĐ´Ņ‹ %d ŅĐĩĐēŅƒĐŊĐ´ - ПоĐēаСаŅ‚ŅŒ ŅĐžĐąŅ‹Ņ‚иŅ ŅŅ‚Đ°Ņ‚ŅƒŅĐ° ŅƒŅ‡Đ°ŅŅ‚ĐŊиĐēОв ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ВĐēĐģŅŽŅ‡Đ°ĐĩŅ‚ в ŅĐĩĐąŅ ŅĐžĐąŅ‹Ņ‚иŅ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ/ ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊĐĩĐŊиŅ/вŅ‹Ņ…Ода/иŅĐēĐģŅŽŅ‡ĐĩĐŊиŅ/йаĐŊĐ° и иСĐŧĐĩĐŊĐĩĐŊиĐĩ аваŅ‚Đ°Ņ€Đ°/ĐžŅ‚ОйŅ€Đ°ĐļĐ°ĐĩĐŧĐžĐŗĐž иĐŧĐĩĐŊи. ГоĐģĐžŅĐžĐ˛Đ°ĐŊиĐĩ КĐŊĐžĐŋĐēи йОŅ‚Đ° ОŅ‚Ņ€ĐĩĐ°ĐŗиŅ€ĐžĐ˛Đ°Đģ: %s Đ ĐĩСŅƒĐģŅŒŅ‚Đ°Ņ‚ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēи - ĐĄŅŅ‹ĐģĐēĐ° ĐąŅ‹ĐģĐ° иŅĐēĐ°ĐļĐĩĐŊĐ° ĐŖ ваŅ ĐŊĐĩŅ‚ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиŅ ĐŊĐ° СаĐŋŅƒŅĐē СвОĐŊĐēĐ° в ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ ĐŖĐ´Đ°ĐģиŅ‚ŅŒ Đ´Đ°ĐŊĐŊŅ‹Đĩ ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ Ņ‚иĐŋĐ° %1$s\? \n \nИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ Ņ ĐžŅŅ‚ĐžŅ€ĐžĐļĐŊĐžŅŅ‚ŅŒŅŽ, ŅŅ‚Đž ĐŧĐžĐļĐĩŅ‚ ĐŋŅ€Đ¸Đ˛ĐĩŅŅ‚и Đē ĐŊĐĩĐžĐļидаĐŊĐŊĐžĐŧŅƒ ĐŋОвĐĩĐ´ĐĩĐŊиŅŽ. - - + ПИН-ĐēОд ĐŋĐžŅ‚Ņ€ĐĩĐąŅƒĐĩŅ‚ŅŅ ĐēĐ°ĐļĐ´Ņ‹Đš Ņ€Đ°Đˇ, ĐēĐžĐŗĐ´Đ° вŅ‹ ĐžŅ‚ĐēŅ€ĐžĐĩŅ‚Đĩ Element. + ПИН-ĐēОд ĐŋĐžŅ‚Ņ€ĐĩĐąŅƒĐĩŅ‚ŅŅ Ņ‡ĐĩŅ€ĐĩС 2 ĐŧиĐŊŅƒŅ‚Ņ‹ ĐŊĐĩиŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиŅ Element. + ĐĸŅ€ĐĩйОваŅ‚ŅŒ PIN-ĐēОд Ņ‡ĐĩŅ€ĐĩС 2 ĐŧиĐŊŅƒŅ‚Ņ‹ + ОŅ‚ОйŅ€Đ°ĐļĐ°Ņ‚ŅŒ Ņ‚ĐžĐģŅŒĐēĐž ĐēĐžĐģиŅ‡ĐĩŅŅ‚вО ĐŊĐĩĐŋŅ€ĐžŅ‡Đ¸Ņ‚Đ°ĐŊĐŊŅ‹Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК в ĐŋŅ€ĐžŅŅ‚ĐžĐŧ ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊии. + ПоĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ ĐŋОдŅ€ĐžĐąĐŊĐžŅŅ‚и, Ņ‚Đ°ĐēиĐĩ ĐēĐ°Đē ĐŊаСваĐŊиŅ ĐēĐžĐŧĐŊĐ°Ņ‚ и ŅĐžĐ´ĐĩŅ€ĐļĐ°ĐŊиĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиК. + ПоĐēаСŅ‹Đ˛Đ°Ņ‚ŅŒ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ в ŅƒĐ˛ĐĩĐ´ĐžĐŧĐģĐĩĐŊиŅŅ… + PIN-ĐēОд - ĐĩдиĐŊŅŅ‚вĐĩĐŊĐŊŅ‹Đš ŅĐŋĐžŅĐžĐą Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đ°Ņ‚ŅŒ Element. + ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ йиОĐŧĐĩŅ‚Ņ€Đ¸Ņ‡ĐĩŅĐēиĐĩ Đ´Đ°ĐŊĐŊŅ‹Đĩ ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ва, Ņ‚Đ°ĐēиĐĩ ĐēĐ°Đē ĐžŅ‚ĐŋĐĩŅ‡Đ°Ņ‚Đēи ĐŋĐ°ĐģŅŒŅ†Đĩв и Ņ€Đ°ŅĐŋОСĐŊаваĐŊиĐĩ ĐģиŅ†. + ВĐēĐģŅŽŅ‡Đ¸Ņ‚ŅŒ йиОĐŧĐĩŅ‚Ņ€Đ¸ŅŽ + НаŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ СаŅ‰Đ¸Ņ‚Ņƒ + ЗаŅ‰Đ¸Ņ‚иŅ‚Đĩ Đ´ĐžŅŅ‚ŅƒĐŋ Ņ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ PIN-ĐēОда и йиОĐŧĐĩŅ‚Ņ€Đ¸Đ¸. + ЗаŅ‰Đ¸Ņ‚Đ° Đ´ĐžŅŅ‚ŅƒĐŋĐ° + ВŅ‹ ĐŋĐĩŅ€ĐĩСаĐŋŅƒŅŅ‚иŅ‚Đĩ ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊиĐĩ ĐąĐĩС иŅŅ‚ĐžŅ€Đ¸Đ¸, ŅĐžĐžĐąŅ‰ĐĩĐŊиК, дОвĐĩŅ€ĐĩĐŊĐŊŅ‹Ņ… ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚в иĐģи дОвĐĩŅ€ĐĩĐŊĐŊŅ‹Ņ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš + ЕŅĐģи ŅĐąŅ€ĐžŅĐ¸Ņ‚ŅŒ вŅĐĩ + ДĐĩĐģĐ°ĐšŅ‚Đĩ ŅŅ‚Đž Ņ‚ĐžĐģŅŒĐēĐž в Ņ‚ĐžĐŧ ŅĐģŅƒŅ‡Đ°Đĩ, ĐĩŅĐģи Ņƒ ваŅ ĐŊĐĩŅ‚ Đ´Ņ€ŅƒĐŗĐžĐŗĐž ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚ва, Ņ ĐēĐžŅ‚ĐžŅ€ĐžĐŗĐž вŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ŅŅ‚Đž ŅƒŅŅ‚Ņ€ĐžĐšŅŅ‚вО. + ĐĄĐąŅ€ĐžŅĐ¸Ņ‚ŅŒ вŅĐĩ + ЗабŅ‹Đģи иĐģи ĐŋĐžŅ‚ĐĩŅ€ŅĐģи вŅĐĩ ваŅ€Đ¸Đ°ĐŊŅ‚Ņ‹ вОŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊиŅ\? ĐĄĐąŅ€ĐžŅĐ¸Ņ‚ŅŒ вŅĐĩ + ВŅ‹ вОŅˆĐģи. + %s вОŅˆŅ‘Đģ(ĐģĐ°). + ХООйŅ‰ĐĩĐŊиŅ в ŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊŅ‹ ŅĐēвОСĐŊŅ‹Đŧ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩĐŧ. + ПоĐēиĐŊŅƒŅ‚ŅŒ + НаŅŅ‚Ņ€ĐžĐšĐēи + ХООйŅ‰ĐĩĐŊиŅ СдĐĩŅŅŒ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊŅ‹. +\n +\nВаŅˆĐ¸ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ СаŅ‰Đ¸Ņ‰ĐĩĐŊŅ‹ СаĐŧĐēĐ°Đŧи, и Ņ‚ĐžĐģŅŒĐēĐž Ņƒ ваŅ и ĐŋĐžĐģŅƒŅ‡Đ°Ņ‚ĐĩĐģŅ ĐĩŅŅ‚ŅŒ ŅƒĐŊиĐēĐ°ĐģŅŒĐŊŅ‹Đĩ ĐēĐģŅŽŅ‡Đ¸ Đ´ĐģŅ иŅ… Ņ€Đ°ĐˇĐąĐģĐžĐēиŅ€ĐžĐ˛Đēи. + ХООйŅ‰ĐĩĐŊиŅ СдĐĩŅŅŒ ĐŊĐĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊŅ‹. + На ŅŅ‚ĐžĐŧ Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ Ņ€Đ°ĐąĐžŅ‚Đ°ĐĩŅ‚ ŅŅ‚Đ°Ņ€Đ°Ņ вĐĩŅ€ŅĐ¸Ņ. ПоĐŋŅ€ĐžŅĐ¸Ņ‚Đĩ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Đ° ваŅˆĐĩĐŗĐž Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° вŅ‹ĐŋĐžĐģĐŊиŅ‚ŅŒ ОйĐŊОвĐģĐĩĐŊиĐĩ. ВŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ, ĐŊĐž ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸ ĐŧĐžĐŗŅƒŅ‚ Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐŊĐĩĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊĐž. + ВŅ‹ ŅĐ´ĐĩĐģĐ°Đģи Đ´ĐžŅŅ‚ŅƒĐŋ Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅŽ. + %@ ŅĐ´ĐĩĐģĐ°Đģ(Đ°) Đ´ĐžŅŅ‚ŅƒĐŋ Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅŽ. + ПоĐēаСаŅ‚ŅŒ ĐŋĐžĐģĐŊŅƒŅŽ иŅŅ‚ĐžŅ€Đ¸ŅŽ в СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ĐēĐžĐŧĐŊĐ°Ņ‚Đ°Ņ… + %1$s и %2$s + %1$s в %2$s и %3$s + + %d ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ + %d ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅ + %d ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиК + %d ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиК + + ПоиŅĐē в СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ĐēĐžĐŧĐŊĐ°Ņ‚Đ°Ņ… ĐŋĐžĐēĐ° ĐŊĐĩ ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ŅŅ. + ФиĐģŅŒŅ‚Ņ€ СайĐģĐžĐēиŅ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģĐĩĐš + ĐŖ ваŅ ĐŊĐĩŅ‚ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиŅ ĐŊĐ° СаĐŋŅƒŅĐē СвОĐŊĐēĐ° + ĐŖ ваŅ ĐŊĐĩŅ‚ Ņ€Đ°ĐˇŅ€ĐĩŅˆĐĩĐŊиŅ ĐŊĐ° СаĐŋŅƒŅĐē ĐēĐžĐŊŅ„ĐĩŅ€ĐĩĐŊŅ†Đ¸Đ¸ + ĐĄĐąŅ€ĐžŅ + \ No newline at end of file From 843d1d57cfceffac1c27fb9a48098c0b80bfdf09 Mon Sep 17 00:00:00 2001 From: Jeff Huang Date: Wed, 14 Oct 2020 07:30:16 +0000 Subject: [PATCH 257/278] Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (190 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/zh_Hant/ --- .../src/main/res/values-zh-rTW/strings.xml | 65 +++++++------------ 1 file changed, 24 insertions(+), 41 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml index 355890923c..4a3293b195 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rTW/strings.xml @@ -1,8 +1,7 @@ - + %1$sīŧš%2$s %1$s å‚ŗ送äē†ä¸€åŧĩ圖į‰‡ã€‚ - %s įš„é‚€čĢ‹ %1$s 邀čĢ‹äē† %2$s %1$s 邀čĢ‹æ‚¨ @@ -30,52 +29,38 @@ äģģäŊ•äēē。 æœĒįŸĨ (%s)。 %1$s 開啟äē†įĢ¯å°įĢ¯åŠ å¯† (%2$s) - %1$s čĢ‹æą‚äē† VoIP æœƒč­°é€ščŠą VoIP æœƒč­°é€ščŠąåˇ˛é–‹å§‹ VoIP æœƒč­°é€ščŠąåˇ˛įĩæŸ - īŧˆå¤§é ­č˛ŧäšŸčŽŠæ›´äē†īŧ‰ %1$s į§ģ除äē†æˆŋ間名į¨ą %1$s į§ģ除äē†æˆŋ間ä¸ģ題 %1$s 更新äē†äģ–們įš„åŸēæœŦčŗ‡æ–™ %2$s %1$s å‚ŗ送加å…Ĩæˆŋ間įš„é‚€čĢ‹įĩĻ %2$s %1$s æŽĨ受 %2$s įš„é‚€čĢ‹ - ** į„Ąæŗ•č§Ŗ密īŧš%s ** å‚ŗ送者įš„čŖįŊŽä¸ĻæœĒåœ¨æ­¤č¨Šæ¯å‚ŗ送äģ–們įš„金鑰。 - į„Ąæŗ•įˇ¨čŧ¯ į„Ąæŗ•å‚ŗé€č¨Šæ¯ - 上å‚ŗ圖į‰‡å¤ąæ•— - įļ˛čˇ¯éŒ¯čĒ¤ Matrix 錯čĒ¤ - į›Žå‰į„Ąæŗ•é‡æ–°åŠ å…ĨįŠēæˆŋ間。 - åˇ˛åŠ å¯†įš„č¨Šæ¯ - é›ģ子éƒĩäģļ é›ģ話號įĸŧ - %1$s å‚ŗ送äē†ä¸€åŧĩč˛ŧ圖。 - 來č‡Ē%s įš„é‚€čĢ‹ čŠå¤ŠåŽ¤é‚€čĢ‹ %1$s 和 %2$s - įŠēčŠå¤ŠåŽ¤ %1$s 和 和å…ļäģ– %2$d 個äēē - č¨Šæ¯åˇ˛į§ģ除 č¨Šæ¯åˇ˛čĸĢ %1$s į§ģ除 č¨Šæ¯åˇ˛į§ģ除 [į†į”ąīŧš%1$s] č¨Šæ¯åˇ˛čĸĢ %1$s į§ģ除 [į†į”ąīŧš%2$s] - 初始化同æ­Ĩīŧš \næ­Ŗ在匯å…Ĩå¸ŗ號â€Ļâ€Ļ 初始化同æ­Ĩīŧš @@ -92,12 +77,9 @@ \næ­Ŗ在匯å…Ĩį¤žįž¤ 初始化同æ­Ĩīŧš \næ­Ŗ在匯å…Ĩå¸ŗ號čŗ‡æ–™ - %s åˇ˛å‡į´šæ­¤čŠå¤ŠåŽ¤ã€‚ - æ­Ŗ在å‚ŗé€č¨Šæ¯â€Ļâ€Ļ 清除å‚ŗ送äŊ‡åˆ— - %1$s æ’¤éŠˇäē† %2$s 加å…ĨčŠå¤ŠåŽ¤įš„é‚€čĢ‹ %1$s įš„é‚€čĢ‹ã€‚į†į”ąīŧš%2$s %1$s 邀čĢ‹äē† %2$s。į†į”ąīŧš%3$s @@ -112,32 +94,23 @@ %1$s æ’¤éŠˇäē† %2$s 加å…ĨčŠå¤ŠåŽ¤įš„é‚€čĢ‹ã€‚į†į”ąīŧš%3$s %1$s æŽĨ受 %2$s įš„é‚€čĢ‹ã€‚į†į”ąīŧš%3$s %1$s 撤回äē†å° %2$s įš„é‚€čĢ‹ã€‚į†į”ąīŧš%3$s - %1$s 新åĸžäē† %2$s į‚ēæ­¤čŠå¤ŠåŽ¤įš„地址。 - %1$s į§ģ除äē†æ­¤čŠå¤ŠåŽ¤įš„ %3$s 地址。 - %1$s į‚ēæ­¤čŠå¤ŠåŽ¤æ–°åĸž %2$s ä¸Ļį§ģ除 %3$s 地址。 - %1$s į‚ēæ­¤čŠå¤ŠåŽ¤č¨­åŽšäē† %2$s į‚ēä¸ģ地址。 %1$s į‚ēæ­¤čŠå¤ŠåŽ¤į§ģ除äē†ä¸ģčĻåœ°å€ã€‚ - %1$s åˇ˛å…č¨ąč¨ĒåŽĸ加å…ĨčŠå¤ŠåŽ¤ã€‚ %1$s åˇ˛įĻæ­ĸč¨ĒåŽĸ加å…ĨčŠå¤ŠåŽ¤ã€‚ - %1$s åˇ˛é–‹å•ŸįĢ¯åˆ°įĢ¯åŠ å¯†ã€‚ %1$s åˇ˛é–‹å•ŸįĢ¯åˆ°įĢ¯åŠ å¯†īŧˆį„Ąæŗ•č­˜åˆĨįš„æŧ”įŽ—æŗ• %2$sīŧ‰ã€‚ - %s æ­Ŗ在čĢ‹æą‚éŠ—č­‰æ‚¨įš„金鑰īŧŒäŊ†æ‚¨įš„åŽĸæˆļįĢ¯ä¸æ”¯æ´čŠå¤Šä¸­é‡‘é‘°éŠ—č­‰ã€‚æ‚¨å°‡åŋ…é ˆäŊŋį”¨čˆŠį‰ˆįš„é‡‘é‘°éŠ—č­‰äž†éŠ—č­‰é‡‘é‘°ã€‚ - %1$s åģēįĢ‹äē†čŠå¤ŠåŽ¤ 您å‚ŗ送äē†åœ–į‰‡ã€‚ 您å‚ŗ送äē†č˛ŧ圖。 - 您įš„é‚€čĢ‹ 您åģēįĢ‹äē†čŠå¤ŠåŽ¤ 您邀čĢ‹äē† %1$s @@ -165,7 +138,6 @@ æ‚¨åˇ˛å°‡æœĒ來įš„čŠå¤ŠåŽ¤æ­ˇå˛č¨­åŽšį‚ē對 %1$s 可čĻ‹ 您開啟äē†įĢ¯åˆ°įĢ¯åŠ å¯† (%1$s) 您升į´šäē†æ­¤čŠå¤ŠåŽ¤ã€‚ - 您čĢ‹æą‚äē† VoIP æœƒč­° 您į§ģ除äē†čŠå¤ŠåŽ¤åį¨ą 您į§ģ除äē†čŠå¤ŠåŽ¤ä¸ģ題 @@ -175,24 +147,20 @@ 您å‚ŗ送äē†é‚€čĢ‹įĩĻ %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 @@ -205,24 +173,39 @@ æ‚¨æ’¤éŠˇäē† %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 + %1$s åˇ˛é›ĸ開。į†į”ąīŧš%2$s + æ‚¨åˇ˛åŠ å…Ĩ。į†į”ąīŧš%1$s + %1$s åˇ˛åŠ å…Ĩ。į†į”ąīŧš%2$s + æ‚¨åˇ˛æ’¤éŠˇå° %1$s įš„é‚€čĢ‹ + %1$s åˇ˛æ’¤éŠˇå° %2$s įš„é‚€čĢ‹ + æ‚¨åˇ˛é‚€čĢ‹äē† %1$s + %1$s 邀čĢ‹äē† %2$s + æ‚¨åˇ˛åœ¨æ­¤å‡į´šã€‚ + %s åˇ˛åœ¨æ­¤å‡į´šã€‚ + æ‚¨čŽ“æœĒ來įš„č¨Šæ¯å° %1$s 可čĻ‹ + %1$s åˇ˛čŽ“æœĒ來įš„č¨Šæ¯å° %2$s 可čĻ‹ + æ‚¨åˇ˛é›ĸé–‹čŠå¤ŠåŽ¤ + %1$s åˇ˛é›ĸé–‹čŠå¤ŠåŽ¤ + æ‚¨åˇ˛åŠ å…Ĩ + %1$s åˇ˛åŠ å…Ĩ + æ‚¨åˇ˛åģēįĢ‹æ­¤č¨ŽčĢ– + %1$s åˇ˛åģēįĢ‹æ­¤č¨ŽčĢ– + \ No newline at end of file From 28df01b1843e5268c89dc34a76eca30c96f69da1 Mon Sep 17 00:00:00 2001 From: "@a2sc:matrix.org" Date: Mon, 12 Oct 2020 20:08:37 +0000 Subject: [PATCH 258/278] Translated using Weblate (German) Currently translated at 96.8% (184 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/de/ --- .../src/main/res/values-de/strings.xml | 67 ++++++------------- 1 file changed, 20 insertions(+), 47 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-de/strings.xml b/matrix-sdk-android/src/main/res/values-de/strings.xml index ae80edb47f..9b10aae10d 100644 --- a/matrix-sdk-android/src/main/res/values-de/strings.xml +++ b/matrix-sdk-android/src/main/res/values-de/strings.xml @@ -1,9 +1,7 @@ - + - %1$s: %2$s %1$s hat ein Bild gesendet. - Einladung von %s %1$s hat %2$s eingeladen %1$s hat dich eingeladen @@ -31,69 +29,50 @@ Jeder. Unbekannt (%s). %1$s hat die Ende-zu-Ende-VerschlÃŧsselung aktiviert (%2$s) - %1$s mÃļchte eine VoIP-Konferenz beginnen VoIP-Konferenz gestartet VoIP-Konferenz beendet - (Profilbild wurde ebenfalls geändert) %1$s hat den Raumnamen entfernt %1$s hat das Raum-Thema entfernt %1$s hat das Benutzerprofil aktualisiert %2$s %1$s hat eine Einladung an %2$s gesendet %1$s hat die Einladung in %2$s akzeptiert - ** Nicht entschlÃŧsselbar: %s ** Das absendende Gerät hat uns keine SchlÃŧssel fÃŧr diese Nachricht Ãŧbermittelt. - Entfernen nicht mÃļglich Nachricht kann nicht gesendet werden - Bild konnte nicht hochgeladen werden - Netzwerk-Fehler Matrix-Fehler - - - - Es ist aktuell nicht mÃļglich, einen leeren Raum erneut zu betreten. - VerschlÃŧsselte Nachricht - E-Mail-Adresse Telefonnummer - %1$s sandte einen Sticker. - Einladung von %s Raumeinladung %1$s und %2$s Leerer Raum - %1$s und 1 andere(r) %1$s und %2$d andere - - Nachricht entfernt Nachricht entfernt von %1$s Nachricht entfernt [Grund: %1$s] Nachricht entfernt von %1$s [Grund: %2$s] %s hat diesen Raum aufgewertet. - Sende eine Nachrichtâ€Ļ Sendewarteschlange leeren - Erste Synchronisation: Importiere Benutzerkontoâ€Ļ Erste Synchronisation: Importiere CryptoschlÃŧssel Erste Synchronisation: Importiere Räume @@ -102,7 +81,6 @@ Erste Synchronisation: Importiere verlassene Räume Erste Synchronisation: Importiere Gemeinschaften Erste Synchronisation: Importiere Benutzerdaten - %1$s hat die Einladung an %2$s, den Raum zu betreten, zurÃŧckgezogen %1$s\'s Einladung. Grund: %2$s %1$s hat %2$s eingeladen. Grund: %3$s @@ -117,33 +95,24 @@ %1$s hat Einladung an %2$s zu Betreten dieses Raumes zurÃŧckgezogen. Grund: %3$s %1$s hat die Einladung fÃŧr %2$s angenommen. Grund: %3$s %1$s hat Einladung fÃŧr %2$s verworfen. Grund: %3$s - %1$s fÃŧgt %2$s als eine Adresse fÃŧr diesen Raum hinzu. %1$s fÃŧgt %2$s als Adressen fÃŧr diesen Raum hinzu. - %1$s entfernt %2$s als eine Adresse fÃŧr diesen Raum. %1$s entfernt %2$s als Adressen fÃŧr diesen Raum. - %1$s fÃŧgt %2$s als Adresse fÃŧr diesen Raum hinzu und entfernt %3$s. - %1$s legt die Hauptadresse fest fÃŧr diesen Raum als %2$s fest. %1$s entfernt die Hauptadresse fÃŧr diesen Raum. - %1$s hat Gästen erlaubt den Raum zu betreten. %1$s hat Gäste unterbunden den Raum zu betreten. - %1$s aktivierte Ende-zu-Ende-VerschlÃŧsselung. %1$s aktivierte Ende-zu-Ende-VerschlÃŧsselung (unbekannter Algorithmus %2$s). - %s fordert zur ÜberprÃŧfung deines SchlÃŧssels auf, jedoch unterstÃŧtzt dein Client nicht die SchlÃŧsselÃŧberprÃŧfung im Chat. Du musst die herkÃļmmliche SchlÃŧsselÃŧberprÃŧfung verwenden, um die SchlÃŧssel zu ÃŧberprÃŧfen. - Du hast ein Bild gesendet. Du hast einen Sticker gesendet. - Deine Einladung %1$s hat den Raum erstellt Du hast den Raum erstellt @@ -170,7 +139,6 @@ Du hast den zukÃŧnftigen Nachrichtenverlauf fÃŧr %1$s sichtbar gemacht Du hast Ende-zu-Ende-VerschlÃŧsselung aktiviert (%1$s) Du hast den Raum aufgwertet. - Du hast eine VoIP-Konferenz angefordert Du hast den Raumnamen entfernt Du hast das Raumthema entfernt @@ -180,24 +148,20 @@ Du hast %1$s in den Raum eingeladen Du hast die Einladung fÃŧr %1$s zurÃŧckgenommen Du hast die Einladung fÃŧr %1$s akzeptiert - %1$s hat das %2$s Widget hinzugefÃŧgt Du hast das %1$s Widget hinzugefÃŧgt %1$s hat das %2$s Widget entfernt Du hast das %1$s Widget entfernt %1$s hat das %2$s Widget modifiziert Du hast das %1$s Widget modifiziert - Administrator Moderator Standard Benutzerdefiniert (%1$d) Benutzerdefiniert - Du hast die Berechtigungsstufe von %1$s geändert. %1$s hat die Berechtigungsstufe von %2$s geändert. %1$s von %2$s zu %3$s - Deine Einladung. Grund: %1$s Du hast %1$s eingeladen. Grund: %2$s Du bist dem Raum beigetreten. Grund: %1$s @@ -210,28 +174,37 @@ Du hast die Einladung fÃŧr %1$s zurÃŧckgenommen. Grund: %2$s Du hast die Einladung von %1$s angenommen. Grund: %2$s Du hast die Einladung von %1$s abgelehnt. Grund: %2$s - Du hast die Raumaddresse %1$s hinzugefÃŧgt. Du hast die Raumaddressen %1$s hinzugefÃŧgt. - - Du hast die Raumaddresse %1$s vom Raum entfernt. - Du hast die Raumaddressen %1$s vom Raum entfernt. + Du hast die Raum-Adresse %1$s vom Raum entfernt. + Du hast die Raum-Adressen %1$s vom Raum entfernt. - Du hast den Raumaddressen %1$s hinzugefÃŧgt und %2$s entfernt. - Du hast die Hauptaddresse fÃŧr diesen Raum auf %1$s gesetzt. Du hast die Hauptaddresse des Raums entfernt. - Du hast Gästen erlaubt dem Raum beizutreten. Du hast Gästen untersagt dem Raum beizutreten. - Du hast Ende-zu-Ende-VerschlÃŧsselung aktiviert. Du hast Ende-zu-Ende-VerschlÃŧsselung aktiviert (unbekannter Algorithmus %1$s). - %s hat Daten gesendet, um einen Anruf zu starten. Du hast Daten geschickt, um eine Anruf zu starten. - + Du hast Gästen erlaubt hier beizutreten. + %1$s hat Gästen erlaubt hier beizutreten. + Du bist beigetreten. Grund: %1$s + %1$s ist beigetreten. Grund: %2$s + Du hast die Einladung fÃŧr %1$s zurÃŧckgezogen + %1$s hat die Einladung fÃŧr %2$s zurÃŧckgezogen + Du hast %1$s eingeladen + %1$s hat %2$s eingeladen + Du hast zukÃŧnftige Nachrichten fÃŧr %2$s sichtbar gemacht + %1$s hat zukÃŧnftige Nachrichten fÃŧr %2$s sichtbar gemacht + Du hast den Raum verlassen + %1$s hat den Raum verlassen + Du bist beigetreten + %1$s ist beigetreten + Du hast eine Diskussion erstellt + %1$s hat eine Diskussion erstellt + \ No newline at end of file From 1692a52e0a3ce8abce913fc2c5e00e5db1300ea2 Mon Sep 17 00:00:00 2001 From: linsui Date: Wed, 14 Oct 2020 13:04:52 +0000 Subject: [PATCH 259/278] Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1918 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/zh_Hans/ --- vector/src/main/res/values-zh-rCN/strings.xml | 575 ++---------------- 1 file changed, 66 insertions(+), 509 deletions(-) diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 5504dbc81f..17bf14161c 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -1,14 +1,12 @@ - + zh CN - æŽĨ受 拒įģ 挂断 - 重新发送 åŧ•į”¨ 分äēĢ @@ -26,31 +24,23 @@ į™ģåŊ• į™ģå‡ē 搜į´ĸ - 发čĩˇæ–°įš„čŠå¤Š 发送文äģļ - 昨夊 äģŠå¤Š - čŠå¤ŠåŽ¤åį§° čŠå¤ŠåŽ¤ä¸ģéĸ˜ - é€šč¯įģ“束 拍摄į…§į‰‡æˆ–视éĸ‘ 无æŗ•åŊ•åˆļ视éĸ‘ - åˇ˛äŋå­˜ įģ§įģ­ - 加å…Ĩ æŸĨįœ‹ 拒įģ - %s é‚€č¯ˇæ‚¨åŠ å…Ĩčŋ™ä¸ĒčŠå¤ŠåŽ¤ 新įš„čŠå¤Š æˇģ加成员 - 退å‡ēčŠå¤ŠåŽ¤ 您įĄŽåŽščĻé€€å‡ēčŠå¤ŠåŽ¤å—īŧŸ 您įĄŽåŽščĻæŠŠ %s äģŽčŋ™ä¸ĒčŠå¤Šä¸­į§ģ除吗īŧŸ @@ -62,23 +52,18 @@ čŠå¤ŠåŽ¤ 莞įŊŽ 成员äŋĄæ¯ - äŋå­˜ įĻģåŧ€ 发送 æŸĨįœ‹æēäģŖį  æŸĨįœ‹č§Ŗ密后įš„æēäģŖį  或 - į™ģå‡ē įĻį”¨ - č­Ļ告 - č¯ˇæčŋ°æ‚¨é‡åˆ°įš„é—Žéĸ˜ã€‚您做äē†äģ€äšˆīŧŸæ‚¨æœŸæœ›å‘į”Ÿäģ€äšˆīŧŸåŽžé™…上发į”Ÿäē†äģ€äšˆīŧŸ 在čŋ™é‡Œæčŋ°æ‚¨įš„é—Žéĸ˜ čŋ›åēĻīŧˆ%s%%īŧ‰ - ä¸ģæœåŠĄå™¨ URL čēĢäģŊæœåŠĄå™¨ URL į™ģå…Ĩ @@ -120,7 +105,6 @@ 无æŗ•æŗ¨å†ŒīŧšįŊ‘įģœé”™č¯¯ 无æŗ•æŗ¨å†Œ č¯ˇčž“å…Ĩ有效įš„ URL - 无效įš„įš„į”¨æˆˇå/密į  æ˛Ąæœ‰åŒ…åĢ有效įš„ JSON 发送äē†čŋ‡å¤šįš„č¯ˇæą‚ @@ -128,7 +112,6 @@ 大 中 小 - 取æļˆä¸‹čŊŊīŧŸ 取æļˆä¸Šäŧ īŧŸ 是 @@ -136,21 +119,17 @@ 一ä¸ĒčŠå¤ŠåŽ¤ 1 äŊæˆå‘˜ 创åģē - 文äģļ - 搜į´ĸ čŋ‡æģ¤čŠå¤ŠåŽ¤æˆå‘˜ æ˛Ąæœ‰įģ“æžœ čŠå¤ŠåŽ¤ æļˆæ¯ 文äģļ - 加å…Ĩ čŠå¤ŠåŽ¤ åŧ€å§‹čŠå¤Š 创åģēčŠå¤ŠåŽ¤ - į§čŠ æļˆæ¯ 莞įŊŽ @@ -168,7 +147,6 @@ čŽžå¤‡åį§° 密į īŧš 提äē¤ - äŋŽæ”šå¯†į  新密į  įĄŽčŽ¤æ–°å¯†į  @@ -179,14 +157,12 @@ įŽ—æŗ• äŧšč¯ ID č§Ŗå¯†é”™č¯¯ - å‘é€č€…įš„äŧšč¯äŋĄæ¯ å…Ŧåŧ€åį§° äŧšč¯ ID äŧšč¯å¯†é’Ĩ éĒŒč¯ Ed25519 指įēš - å¯ŧå…Ĩ åˇ˛éĒŒč¯ 取æļˆ @@ -201,12 +177,9 @@ įĄŽčŽ¤ 发送崊æēƒæ—Ĩåŋ— 上æŦĄå¯åŠ¨åŽæœŦåē”į”¨å‘į”Ÿäē†å´Šæēƒã€‚是åĻ打åŧ€å´ŠæēƒæŠĨ告éĄĩéĸīŧŸ - åŧ€å§‹č¯­éŸŗé€šč¯ åŧ€å§‹č§†éĸ‘é€šč¯ - 拍摄į…§į‰‡æˆ–视éĸ‘ - 重复密į  äŊŋį”¨č‡ĒåŽšäš‰æœåŠĄå™¨é€‰éĄšīŧˆéĢ˜įē§īŧ‰ č¯ˇæŖ€æŸĨ您įš„į”ĩ子邎įŽąäģĨįģ§įģ­æŗ¨å†Œ @@ -214,7 +187,6 @@ 一封į”ĩ子邎äģļåˇ˛å‘é€č‡ŗ %s。į‚šå‡ģäē†å…ļ中įš„é“žæŽĨ后īŧŒč¯ˇį‚šå‡ģ下éĸ。 į”ĩ子邎įŽąåœ°å€éĒŒč¯å¤ąč´Ĩīŧšč¯ˇįĄŽäŋæ‚¨åˇ˛į‚šå‡ģ邮äģļ中įš„é“žæŽĨ 密į åˇ˛é‡įŊŽã€‚ æ‚¨åˇ˛äģŽæ‰€æœ‰čŽžå¤‡æŗ¨é”€åšļ且不再æŽĨ受推送通įŸĨ。čĻé‡æ–°å¯į”¨é€šįŸĨīŧŒč¯ˇé‡æ–°åœ¨į›¸åē”čŽžå¤‡ä¸Šį™ģåŊ•ã€‚ - 原始 %d į§’ é€šč¯åˇ˛čŋžæŽĨ @@ -228,7 +200,6 @@ įŽĄį†åˇĨå…ˇ į§čŠ čŽžå¤‡åˆ—čĄ¨ - é‚€č¯ˇ 退å‡ēčŋ™ä¸ĒčŠå¤ŠåŽ¤ äģŽčŋ™ä¸ĒčŠå¤ŠåŽ¤į§ģ除 @@ -243,9 +214,7 @@ 提及 昞į¤ēčŽžå¤‡åˆ—čĄ¨ 您įĄŽåŽščĻé‚€č¯ˇ %s 到čŋ™ä¸ĒčŠå¤Šå—īŧŸ - æœŦåœ°č”įŗģäēēīŧˆ%d ä¸Ēīŧ‰ - %1$s 和 %2$s æ­Ŗåœ¨čž“å…Ĩâ€Ļ %1$s 和 %2$s 及å…ļäģ–äēēæ­Ŗåœ¨čž“å…Ĩâ€Ļ å‘é€ä¸€æĄåŠ å¯†æļˆæ¯â€Ļ @@ -259,7 +228,6 @@ 删除æœĒ发送įš„æļˆæ¯ 文äģļæœĒ扞到 æ‚¨æ˛Ąæœ‰å‘é€åˆ°čŋ™ä¸ĒčŠå¤ŠåŽ¤įš„权限 - äŋĄäģģ 不äŋĄäģģ æŗ¨é”€ @@ -270,36 +238,29 @@ 莞įŊŽ åˇ˛é‚€č¯ˇ åˇ˛åŠ å…Ĩ - 您čĻéšč—æ‰€æœ‰æĨč‡Ēčŋ™ä¸Ēį”¨æˆˇįš„æļˆæ¯å—īŧŸ æŗ¨æ„īŧŒæ­¤æ“äŊœäŧšé‡å¯åē”į”¨åšļå°†čŠąč´šä¸€äē›æ—ļ间。 取æļˆä¸Šäŧ  取æļˆä¸‹čŊŊ - æ”ļč—å¤š äŊŽäŧ˜å…ˆįē§ 降äŊŽäŧ˜å…ˆįē§ 退å‡ēå¯šč¯ - į‰ˆæƒ 隐į§æ”ŋį­– - 手æœēåˇį  åē”į”¨äŋĄæ¯ - 启į”¨čŋ™ä¸Ēč´Ļæˆˇįš„通įŸĨ 启į”¨čŋ™ä¸ĒčŽžå¤‡įš„通įŸĨ æĨč‡Ēį§čŠįš„æļˆæ¯ æĨč‡Ēįž¤čŠįš„æļˆæ¯ åŊ“我čĸĢé‚€č¯ˇåŠ å…ĨčŠå¤ŠåŽ¤æ—ļ æĨč‡Ēæœē器äēēįš„æļˆæ¯ - 后台同æ­Ĩ 启į”¨åŽå°åŒæ­Ĩ 同æ­Ĩč¯ˇæą‚čļ…æ—ļ 每æŦĄåŒæ­Ĩč¯ˇæą‚äš‹é—´įš„é—´éš” - į‰ˆæƒ 隐į§æ”ŋį­– 清įŠēįŧ“å­˜ @@ -314,9 +275,7 @@ 是åĻ重新昞į¤ē所有æĨč‡Ē %s įš„æļˆæ¯īŧŸ æŗ¨æ„īŧŒæ­¤æ“äŊœäŧšé‡å¯åē”į”¨åšļå°†čŠąč´šä¸€äē›æ—ļ间。 - 选拊å›ŊåŽļ - å›ŊåŽļ č¯ˇé€‰æ‹Šä¸€ä¸Ēå›ŊåŽļ 手æœēéĒŒč¯ @@ -329,18 +288,14 @@ čŠå¤ŠåŽ¤åŽ†å˛å¯č§æ€§ č°å¯äģĨ阅č¯ģåŽ†å˛æļˆæ¯īŧŸ č°å¯äģĨčŽŋ问čŋ™ä¸ĒčŠå¤ŠåŽ¤īŧŸ - äģģäŊ•äēē äģ…æœŦįž¤æˆå‘˜īŧˆč‡Ēé€‰ä¸­æ­¤éĄšåŽåŧ€å§‹īŧ‰ åĒ有成员īŧˆäģŽäģ–äģŦčĸĢé‚€č¯ˇåŧ€å§‹īŧ‰ åĒ有成员īŧˆäģŽäģ–äģŦ加å…Ĩåŧ€å§‹īŧ‰ - åĒ有čĸĢé‚€č¯ˇįš„äēē 除游åŽĸ䚋外äģģäŊ•įŸĨ道čŋ™ä¸ĒčŠå¤ŠåŽ¤é“žæŽĨįš„äēē äģģäŊ•įŸĨ道čŋ™ä¸ĒčŠå¤ŠåŽ¤é“žæŽĨįš„äēēīŧŒåŒ…æ‹Ŧ游åŽĸ - čĸĢ封įĻįš„į”¨æˆˇ - éĢ˜įē§ æ­¤čŠå¤ŠåŽ¤įš„内部 ID 地址 @@ -348,10 +303,8 @@ įĢ¯å¯šįĢ¯åŠ å¯† 您需čĻæŗ¨é”€æĨ启į”¨åŠ å¯†ã€‚ åœ¨æ­¤čŠå¤ŠåŽ¤ä¸­ã€äŊŋį”¨æœŦčŽžå¤‡æ—ļīŧŒäģŽä¸å‘æœĒéĒŒč¯įš„čŽžå¤‡å‘é€åŠ å¯†æļˆæ¯ã€‚ - čŋ™ä¸ĒčŠå¤ŠåŽ¤æ˛Ąæœ‰æœŦ地地址 新地址īŧˆåĻ‚ #foo:matrix.orgīŧ‰ - åˆĢ名æ ŧåŧæ— æ•ˆ “%s” 不是有效įš„åˆĢ名æ ŧåŧ čŋ™ä¸ĒčŠå¤ŠåŽ¤åˇ˛å¯į”¨åŠ å¯†ã€‚ @@ -359,9 +312,7 @@ 启į”¨åŠ å¯† īŧˆč­Ļ告īŧšæ— æŗ•å†įĻį”¨īŧīŧ‰ į›ŽåŊ• - įĢ¯å¯šįĢ¯åŠ å¯†äŋĄæ¯ - äē‹äģļäŋĄæ¯ į”¨æˆˇ ID å¯ŧå‡ēįĢ¯åˆ°įĢ¯čŠå¤ŠåŽ¤å¯†é’Ĩ @@ -373,20 +324,17 @@ įĢ¯åˆ°įĢ¯čŠå¤ŠåŽ¤å¯†é’Ĩåˇ˛įģčĸĢäŋå­˜åˆ°â€œ%s”。 \n \næŗ¨æ„īŧšåĻ‚æžœåē”į”¨čĸĢ卸čŊŊīŧŒæ­¤æ–‡äģļ可čƒŊ将äŧščĸĢį§ģ除。 - å¯ŧå…ĨįĢ¯åˆ°įĢ¯čŠå¤ŠåŽ¤å¯†é’Ĩ å¯ŧå…ĨčŠå¤ŠåŽ¤å¯†é’Ĩ äģŽæœŦ地文äģļå¯ŧå…Ĩ密é’Ĩ äģ…å‘åˇ˛éĒŒč¯įš„čŽžå¤‡å‘é€åŠ å¯†æļˆæ¯ äŊŋį”¨æœŦčŽžå¤‡æ—ļīŧŒäģŽä¸å‘æœĒéĒŒč¯įš„čŽžå¤‡å‘é€åŠ å¯†æļˆæ¯ã€‚ - æœĒéĒŒč¯ æœĒįŸĨäŧšč¯ éĒŒč¯ 取æļˆéĒŒč¯ éĒŒč¯čŽžå¤‡ 我éĒŒč¯æ­¤å¯†é’Ĩ匚配 - čŠå¤ŠåŽ¤åŒ…åĢæœĒįŸĨčŽžå¤‡ į¨åŽå†č¯´ 永䚅铞æŽĨ @@ -404,7 +352,6 @@ 问éĸ˜åéĻˆå‘送成功 问éĸ˜åéĻˆå‘é€å¤ąč´Ĩīŧˆ%sīŧ‰ 阅č¯ģ - 无效äģ¤į‰Œ 在å‡ēįŽ°į›¸åē”įš„ API 前īŧŒæš‚不支持同æ—ļäŊŋį”¨į”ĩ子邎įŽąåœ°å€ä¸Žæ‰‹æœēåˇį æŗ¨å†Œã€‚åĒ有手æœēåˇį äŧščĸĢæˇģåŠ åˆ°æ­¤å¸æˆˇã€‚ @@ -414,20 +361,16 @@ 无æŗ•č¯†åˆĢ指厚įš„čŽŋ问äģ¤į‰Œ åŧ‚常įš„ JSON 您čŋ˜æœĒį‚šå‡ģį”ĩ子邎äģļ链æŽĨ - %1$d 分钟 %2$d į§’ - æ­Ŗ在å‘ŧåĢâ€Ļ å‘ŧå…Ĩįš„é€šč¯ å‘ŧå…Ĩįš„视éĸ‘é€šč¯ å‘ŧå…Ĩįš„č¯­éŸŗé€šč¯ é€šč¯ä¸­â€Ļ - é€šč¯æœĒčĸĢæŽĨåŦ。 åĒ’äŊ“čŋžæŽĨå¤ąč´Ĩ 无æŗ•åˆå§‹åŒ–į›¸æœē å…ļäģ–čŽžå¤‡åˇ˛æŽĨåŦ - äŋĄæ¯ " \n @@ -439,16 +382,13 @@ č¯ˇåœ¨æŽĨ下æĨåŧšå‡ēįš„įĒ—åŖä¸­æŽˆæƒå…čŽ¸čŽŋ闎。 寚不čĩˇã€‚å› ä¸ē权限不čļŗīŧŒæ“äŊœåˇ˛å–æļˆ - äŋå­˜č‡ŗ下čŊŊīŧŸ į§ģ除 æ­¤é‚€č¯ˇåˇ˛å‘é€č‡ŗæœĒ与此č´Ļæˆˇå…ŗ联įš„ %s。 您可čƒŊ希望į”¨ä¸€ä¸Ē不同įš„č´Ļæˆˇį™ģåŊ•īŧŒæˆ–č€…æŠŠčŋ™ä¸Ēį”ĩ子邎įŽąåŠ å…Ĩ到čŋ™ä¸Ēč´Ļæˆˇã€‚ čŋ™æ˜¯æ­¤čŠå¤ŠåŽ¤įš„éĸ„č§ˆã€‚ä¸ŽčŠå¤ŠåŽ¤įš„äē¤äē’åˇ˛įĻį”¨ã€‚ - é€šč¯ 您将不čƒŊ撤销čŋ™ä¸ĒäŋŽæ”šīŧŒå› ä¸ē您æ­Ŗåœ¨čŽŠčŋ™ä¸Ēį”¨æˆˇå’Œæ‚¨æ‹Ĩ有į›¸åŒįš„į‰šæƒįē§åˆĢ。 您įĄŽåŽšå—īŧŸ - čŋ™å¯čƒŊ意å‘ŗį€æœ‰äēē在æļ意åŠĢ持您įš„é€ščŽ¯īŧŒæˆ–č€…æ‚¨įš„手æœē不äŋĄäģģčŋœį¨‹æœåŠĄå™¨įš„æ•°å­—č¯äšĻ。 åĻ‚æžœæœåŠĄå™¨įŽĄį†å‘˜č¯´čŋ™æ˜¯æ­Ŗ常įš„īŧŒč¯ˇįĄŽäŋäģĨ下įš„指įēšä¸ŽįŽĄį†å‘˜æäž›įš„指įēšį›¸įŦĻ。 æŠĨ告čŋ™ä¸Ē内厚įš„原因 @@ -456,13 +396,11 @@ é‚€č¯ˇ æĩč§ˆį›ŽåŊ• æ­Ŗ在搜į´ĸį›ŽåŊ•â€Ļ - æ”ļč—å¤š äŊŋį”¨æĄæŦž æ˜ĩį§° 昞į¤ēįŗģįģŸčŽžįŊŽä¸­įš„åē”į”¨į¨‹åēäŋĄæ¯ã€‚ į‚šäēŽåąåš• 3 į§’ - é€šč¯č¯ˇæą‚ äŊŋį”¨æĄæŦž å…ļäģ– @@ -470,42 +408,31 @@ į™ģåŊ•ä¸ē č¯ˇæŖ€æŸĨ您įš„į”ĩ子邎įŽąåšļį‚šå‡ģ里éĸ包åĢįš„é“žæŽĨ。厌成æ—ļč¯ˇį‚šå‡ģįģ§įģ­ã€‚ 无æŗ•éĒŒč¯į”ĩ子邎įŽąåœ°å€ã€‚č¯ˇæŖ€æŸĨ您įš„é‚Žäģļåšļį‚šå‡ģå…ļ中įš„é“žæŽĨ。厌成后īŧŒč¯ˇį‚šå‡ģ“įģ§įģ­â€ã€‚ - æ­¤į”ĩ子邎įŽąåœ°å€åˇ˛čĸĢäŊŋį”¨ã€‚ 扞不到此į”ĩ子邎įŽąåœ°å€ã€‚ 此手æœēåˇį åˇ˛čĸĢäŊŋį”¨ã€‚ - 您įĄŽčŽ¤čĻį§ģ除此通įŸĨį›Žæ ‡å—īŧŸ - 您įĄŽčŽ¤čĻį§ģ除 %1$s %2$s 吗? - 无效įš„åˇ˛é€‰å›ŊåŽļįš„手æœēåˇį  čŠå¤ŠåŽ¤å›žį‰‡ čŠå¤ŠåŽ¤æ ‡į­ž 标į­žä¸ēīŧš - æ”ļč—å¤š äŊŽäŧ˜å…ˆįē§ 无 - čĻé“žæŽĨ一ä¸ĒčŠå¤ŠåŽ¤īŧŒåŋ…éĄģ有一ä¸Ē地址。 äģ…å‘åˇ˛éĒŒč¯įš„čŽžå¤‡å‘é€åŠ å¯†æļˆæ¯ æ‚¨æ˛Ąæœ‰æŒ‡åŽšæ­¤čŠå¤ŠåŽ¤įš„ä¸ģ地址。 ä¸ģ地址č­Ļ告 - 莞įŊŽä¸ēä¸ģ地址 取æļˆčŽžįŊŽä¸ēä¸ģ地址 复åˆļčŠå¤ŠåŽ¤ ID 复åˆļčŠå¤ŠåŽ¤åœ°å€ - åŖ°į§°įš„ Ed25519 指įēšå¯†é’Ĩ åˇ˛åˆ—å…Ĩéģ‘名单 - 无 - 列å…Ĩéģ‘名单 į§ģå‡ēéģ‘名单 - įĄŽčŽ¤ į§ģ除 您äŧŧäšŽæ˛Žä¸§åœ°æ‘‡äē†æ‘‡æ‰‹æœē。您æƒŗ打åŧ€é—Žéĸ˜åéĻˆį•Œéĸ吗īŧŸ @@ -518,9 +445,7 @@ Element 需čĻčŽŋ闎您įš„é€ščŽ¯åŊ•īŧŒæ‰čƒŊ栚捎į”ĩ子邎įŽąåœ°å€å’Œæ‰‹æœēåˇį æŸĨ扞å…ļäģ– Matrix į”¨æˆˇã€‚ å…čŽ¸ Element čŽŋ闎您įš„é€ščŽ¯åŊ•īŧŸ - įŠē闲 - äģ… Matrix į”¨æˆˇ 您įš„手æœēäŋĄäģģįš„č¯äšĻåˇ˛čĸĢ更攚。čŋ™éžå¸¸åå¸¸ã€‚åģēčŽŽæ‚¨ä¸čĻæŽĨå—æ­¤æ–°č¯äšĻ。 č¯äšĻåˇ˛äģŽäģĨ前受äŋĄäģģįš„更攚ä¸ē不受äŋĄäģģįš„č¯äšĻã€‚æœåŠĄå™¨å¯čƒŊåˇ˛æ›´æ–°å…ļč¯äšĻã€‚č¯ˇč”įŗģįŽĄį†å‘˜åšļæ ¸å¯šæœåŠĄå™¨įš„指įēšã€‚ @@ -555,7 +480,6 @@ \n我äģŦåģēčŽŽæ‚¨åœ¨įģ§įģ­æ“äŊœäš‹å‰īŧŒå…ˆéĒŒč¯æ¯ä¸ĒčŽžå¤‡īŧŒäŊ†åĻ‚果您æ„ŋ意䚟可äģĨ不éĒŒč¯č€Œé‡æ–°å‘送æļˆæ¯ã€‚ \n \næœĒįŸĨčŽžå¤‡īŧš - åŽ†å˛æļˆæ¯ é‚€č¯ˇ å…¨åą€æœį´ĸ @@ -563,16 +487,13 @@ æ”ļč—å¤š 联įŗģäēē čŠå¤ŠåŽ¤ - æŒ‰čŠå¤ŠåŽ¤åį§°čŋ‡æģ¤ 按æ”ļč—å¤ščŋ‡æģ¤ æŒ‰č”įŗģäēēčŋ‡æģ¤ æŒ‰čŠå¤ŠåŽ¤åį§°čŋ‡æģ¤ - é‚€č¯ˇ äŊŽäŧ˜å…ˆįē§ - å¯šč¯ æœŦåœ°é€ščŽ¯åŊ• @@ -580,18 +501,15 @@ æ˛Ąæœ‰å¯šč¯ æ˛Ąæœ‰įģ“æžœ æ‚¨æ˛Ąæœ‰æŽˆäēˆ Element čŽŋ问æœŦåœ°é€ščŽ¯åŊ•įš„权限 - čŠå¤ŠåŽ¤ čŠå¤ŠåŽ¤į›ŽåŊ• æ˛Ąæœ‰čŠå¤ŠåŽ¤ æ˛Ąæœ‰å…Ŧåŧ€čŠå¤ŠåŽ¤ - į”¨ ID é‚€č¯ˇį”¨æˆˇ č¯ˇčž“å…Ĩ一ä¸Ē或多ä¸Ēį”ĩ子邎įŽąåœ°å€æˆ– Matrix ID į”ĩ子邎įŽąåœ°å€æˆ– Matrix ID åŋ˜čŽ° - 选拊一ä¸ĒčŠå¤ŠåŽ¤į›ŽåŊ• æœåŠĄå™¨å¯čƒŊ不可į”¨æˆ–čŋ‡čŊŊ @@ -599,44 +517,33 @@ ä¸ģæœåŠĄå™¨ URL %s æœåŠĄå™¨ä¸Šįš„æ‰€æœ‰čŠå¤ŠåŽ¤ 所有æœŦ地 %s čŠå¤ŠåŽ¤ - 搜į´ĸåŽ†å˛ - åŽ†å˛æļˆæ¯ - į”¨ ID é‚€č¯ˇ čŋ›å…ĨčŠå¤ŠåŽ¤ čŋ›å…Ĩ一ä¸ĒčŠå¤ŠåŽ¤ 输å…ĨčŠå¤ŠåŽ¤ ID æˆ–č€…čŠå¤ŠåŽ¤åˆĢ名 - čˇŗ到įŦŦä¸€æĄæœĒč¯ģæļˆæ¯ã€‚ - ä¸ģéĄĩ昞į¤ē įŊŽéĄļåĢ有错čŋ‡įš„通įŸĨįš„čŠå¤ŠåŽ¤ įŊŽéĄļåĢ有æœĒč¯ģæļˆæ¯įš„čŠå¤ŠåŽ¤ į”¨æˆˇį•Œéĸ č¯­č¨€ č¯ˇé€‰æ‹Šč¯­č¨€ - įĻģįēŋ - į”¨æˆˇį›ŽåŊ• į”¨æˆˇį›ŽåŊ•īŧˆ%sīŧ‰ åŧ€æœēæ—ļč‡Ē动启动 清įŠēįŧ“å­˜įš„åĒ’äŊ“æ–‡äģļ äŋį•™åĒ’äŊ“æ–‡äģļ - ä¸ē所有æļˆæ¯æ˜žį¤ēæ—ļ间æˆŗ įœæĩé‡æ¨Ąåŧ - 3夊 1周 1ä¸Ē月 æ°¸čŋœ - ä¸ģéĸ˜ - 文字大小 垎小 小 @@ -648,15 +555,12 @@ æĩ…色ä¸ģéĸ˜ æˇąč‰˛ä¸ģéĸ˜ éģ‘色ä¸ģéĸ˜ - 通įŸĨåŖ°éŸŗ äŊŋį”¨12小æ—ļåˆļ昞į¤ēæ—ļ间æˆŗ - 您需čĻæƒé™æĨįŽĄį†čŋ™ä¸ĒčŠå¤ŠåŽ¤įš„小部äģļ 创åģē小部äģļå¤ąč´Ĩ į”¨ jitsi 创åģēäŧščŽŽé€šč¯ 您įĄŽåŽščĻåˆ é™¤čŋ™ä¸Ē小部äģļ吗īŧŸ - 无æŗ•åˆ›åģē小部äģļ。 å‘é€č¯ˇæą‚å¤ąč´Ĩ。 @@ -669,7 +573,6 @@ æˇģ加 Matrix åē”į”¨ æ­Ŗ在同æ­Ĩâ€Ļ į›‘åŦäē‹äģļ更新 - é€šč¯ 包åĢ我æ˜ĩį§°įš„æļˆæ¯ 包åĢ我į”¨æˆˇåįš„æļˆæ¯ @@ -678,76 +581,53 @@ åŧ€å§‹éĒŒč¯ 不éĒŒč¯č€Œåˆ†äēĢ åŋŊį•Ĩč¯ˇæą‚ - 反éĻˆé—Žéĸ˜ - 拍摄į…§į‰‡ æ‹æ‘„č§†éĸ‘ - äŊŋį”¨åŽŸį”Ÿį›¸æœē - č­Ļ告īŧ äŧščŽŽé€šč¯æ­Ŗ在åŧ€å‘中īŧŒå¯čƒŊ不可靠。 - å‘Ŋäģ¤é”™č¯¯ ä¸å¯č¯†åˆĢįš„å‘Ŋäģ¤īŧš%s - å…ŗ闭 åˇ˛åŠ å¯†æļˆæ¯ - 响铃通įŸĨ 静éģ˜é€šįŸĨ - 数捎æ”ļ集 - 响铃 - æ­Ŗ在加čŊŊâ€Ļ - 退å‡ē é‚€č¯ˇ 您įĄŽåŽščĻä¸Ž %s 发čĩˇæ–°įš„čŠå¤Šå—īŧŸ 您įĄŽåŽščĻå‘čĩˇč¯­éŸŗé€šč¯å—īŧŸ 您įĄŽåŽščĻå‘čĩˇč§†éĸ‘é€šč¯å—īŧŸ - 封įĻč¸ĸ掉将äģŽčŠå¤ŠåŽ¤ä¸­č¸ĸ掉äģ–äģŦåšļé˜ģæ­ĸäģ–äģŦ再æŦĄåŠ å…Ĩ。 - 全部æļˆæ¯ åĒ限提及 静éŸŗ - æˇģ加ä¸ģåąåš•åŋĢæˇæ–šåŧ - + æˇģ加到ä¸ģåąåš• 启į”¨é“žæŽĨéĸ„č§ˆ äŊŋį”¨ @ æ—ļ震动 - 通įŸĨ 创åģē æ ˇäž‹åį§° - %d æĄæ–°æļˆæ¯ - 重新加å…Ĩ åŋ˜čŽ°čŠå¤ŠåŽ¤ 所有æļˆæ¯īŧˆå“é“ƒīŧ‰ į¤žåŒēäŋĄæ¯ - 操äŊœ į¤žåŒē - 按į¤žåŒē名į§°čŋ‡æģ¤ - į¤žåŒē æ˛Ąæœ‰įž¤įģ„ - 摇一摇åŋĢæˇåéĻˆé—Žéĸ˜ - įž¤įģ„åˆ—čĄ¨ - æ­Ŗ在同æ­Ĩâ€Ļ %d äēē在įēŋ @@ -755,14 +635,11 @@ %d äŊæˆå‘˜įš„įŠļ态发į”Ÿäē†å˜åŒ– - %d äŊæˆå‘˜ 无效įš„į¤žåŒē ID “%s” 不是一ä¸Ē有效įš„į¤žåŒē ID - - %d æĄæœĒč¯ģæļˆæ¯ @@ -775,14 +652,12 @@ 通įŸĨ隐į§ æœŦåē”į”¨éœ€čĻåœ¨åŽå°čŋčĄŒįš„权限 åžŊįĢ  - %d ä¸ĒčŠå¤ŠåŽ¤ åˇ˛å¯į”¨ %d ä¸Ē小部äģļ - į¤žåŒē名į§° į¤žåŒē ID @@ -791,25 +666,20 @@ čŠå¤ŠåŽ¤ čŠå¤ŠåŽ¤ æ˛Ąæœ‰į”¨æˆˇ - åˇ˛åŠ å…Ĩ åˇ˛é‚€č¯ˇ čŋ‡æģ¤į¤žåŒē成员 čŋ‡æģ¤į¤žåŒēčŠå¤ŠåŽ¤ - æ‚¨åˇ˛čĸĢ %2$s äģŽ %1$s 中į§ģ除 æ‚¨åˇ˛čĸĢ %2$s äģŽ %1$s 中封įĻ į†į”ąīŧš%1$s 头像 - åˇ˛č¯ģ提į¤ē头像 通įŸĨ头像 - 有 %1$s ä¸ĒčŠå¤ŠåŽ¤įŦĻ合 “%2$s” %1$s æĄåœ¨ %2$s 中 - %d æĄæœĒč¯ģæļˆæ¯ @@ -817,24 +687,19 @@ Element 可äģĨ在后台čŋčĄŒäģĨ厉全隐密地įŽĄį†æ‚¨įš„通įŸĨīŧˆčŋ™å¯čƒŊäŧšåŊąå“į”ĩæą æļˆč€—īŧ‰ã€‚ čŽˇå–æƒé™ 选拊å…ļäģ–选饚 - â€ĸ 通įŸĨ通čŋ‡ Firebase Cloud Messaging 发送 â€ĸ 通įŸĨåĒåĢ有元数捎 â€ĸ 通įŸĨ不äŧšæ˜žį¤ēæļˆæ¯å†…厚 - 新įš„į¤žåŒēIDīŧˆåĻ‚ +foo:matrix.orgīŧ‰ į¤žåŒēįŽĄį†å‘˜æ˛Ąæœ‰æäž›čŋ™ä¸Ēį¤žåŒēįš„å…ˇäŊ“描čŋ°ã€‚ - 标准 äŊŽéšį§æ¨Ąåŧ 停į”¨č´Ļæˆˇ 停į”¨æˆ‘įš„č´Ļæˆˇ - 发送įģŸčŽĄåˆ†æžæ•°æŽ Element äŧšæ”ļ集åŒŋ名įģŸčŽĄæ•°æŽæĨ帎劊我äģŦ攚čŋ›į¨‹åēã€‚ č¯ˇå…čŽ¸čĩ„料分析äģĨ帎劊我äģŦ攚čŋ› Element。 是įš„īŧŒæˆ‘æ„ŋ意帎劊īŧ - 停į”¨č´Ļæˆˇ čŋ™å°†äŊŋ您įš„č´Ļæˆˇæ°¸čŋœä¸å†å¯į”¨ã€‚您将不čƒŊį™ģåŊ•īŧŒæˆ–äŊŋį”¨į›¸åŒįš„į”¨æˆˇ ID 重新æŗ¨å†Œã€‚您įš„č´Ļæˆˇå°†é€€å‡ēæ‰€æœ‰åˇ˛åŠ å…Ĩįš„čŠå¤ŠåŽ¤īŧŒčēĢäģŊæœåŠĄå™¨ä¸Šįš„č´ĻæˆˇäŋĄæ¯äšŸäŧščĸĢ删除。此操äŊœæ˜¯ä¸å¯é€†įš„。 @@ -844,52 +709,37 @@ Matrix 中įš„æļˆæ¯å¯č§æ€§įąģäŧŧäēŽį”ĩ子邎äģļ。我äģŦåŋ˜čŽ°æ‚¨įš„æļˆæ¯æ„ č¯ˇåœ¨æˆ‘åœį”¨č´Ļæˆˇįš„同æ—ļåŋ˜čŽ°æˆ‘发送įš„所有æļˆæ¯īŧˆč­Ļ告īŧščŋ™å°†å¯ŧ致æœĒæĨįš„į”¨æˆˇįœ‹åˆ°æŽ‹įŧēįš„å¯šč¯īŧ‰ č¯ˇčž“å…Ĩ您įš„密į äģĨįģ§įģ­īŧš 停į”¨č´Ļæˆˇ - å‘é€č´´įē¸ - å‘é€č´´įē¸ 您į›Žå‰æ˛Ąæœ‰å¯į”¨äģģäŊ•č´´įē¸åŒ…。 \n \nčĻæˇģ加一äē›å—īŧŸ - â€ĸ 通įŸĨ中įš„æļˆæ¯å†…厚äģŽ Matrix ä¸ģæœåŠĄå™¨į›´æŽĨ厉全įš„čŽˇå– â€ĸ 通įŸĨåĢ有æļˆæ¯ä¸Žå…ƒæ•°æŽ čŋ™ä¸ĒčŠå¤ŠåŽ¤ä¸äŧšæ˜žį¤ēäģģäŊ•į¤žåŒēįš„åžŊįĢ  įŧē少所需įš„参数。 无效参数。 æ ˇäž‹ ID - čĻæƒŗįģ§įģ­äŊŋį”¨ä¸ģæœåŠĄå™¨ %1$s 您åŋ…éĄģ阅č¯ģåšļ同意å…ļæœåŠĄæĄæŦžã€‚ įŽ°åœ¨é˜…č¯ģ - įŦŦ三斚åŧ€æēåčŽŽ - 下čŊŊ 清除 å‘é€č¯­éŸŗæļˆæ¯ - äŊŋį”¨â€Ļ打åŧ€ 寚不čĩˇīŧŒæ˛Ąæœ‰å¯åŽŒæˆæ­¤æ“äŊœįš„外部åē”į”¨ã€‚ - äģŽå…ļäģ–čŽžå¤‡ä¸Š é‡æ–°č¯ˇæą‚å¯†é’Ĩ。 - åˇ˛å‘é€å¯†é’Ĩå…ąäēĢč¯ˇæą‚ã€‚ - åˇ˛č¯ˇæą‚ č¯ˇåœ¨å…ļäģ–可č§Ŗ密此æļˆæ¯įš„čŽžå¤‡ä¸Šå¯åŠ¨ ElementīŧŒäģĨäžŋå…ļ将密é’Ĩ发送č‡ŗåŊ“å‰čŽžå¤‡ã€‚ - åœ¨æ­¤čž“å…Ĩâ€Ļ - å‘é€č¯­éŸŗæļˆæ¯ - č¯ˇčž“å…Ĩ您įš„密į ã€‚ - å‘č¨€ åĻ‚果可čƒŊįš„č¯īŧŒč¯ˇäŊŋį”¨č‹ąæ–‡æ’°å†™é—Žéĸ˜æčŋ°ã€‚ 发送加密įš„回复â€Ļ 发送回复īŧˆæœĒ加密īŧ‰â€Ļ 发送前éĸ„č§ˆåĒ’äŊ“æ–‡äģļ - äŊŋį”¨å›žčŊĻ锎发送æļˆæ¯ 昞į¤ē动äŊœ 䞝į…§ ID 封įĻį”¨æˆˇ @@ -904,19 +754,15 @@ Matrix 中įš„æļˆæ¯å¯č§æ€§įąģäŧŧäēŽį”ĩ子邎äģļ。我äģŦåŋ˜čŽ°æ‚¨įš„æļˆæ¯æ„ 更攚您昞į¤ēįš„æ˜ĩį§° 打åŧ€/å…ŗ闭 markdown äŋŽå¤ Matrix Apps įŽĄį† - čŋ™ä¸ĒčŠå¤ŠåŽ¤åˇ˛įģčĸĢæ›ŋæĸåšļ且不再æ´ģ衃 å¯šč¯åœ¨æ­¤įģ§įģ­ čŋ™ä¸ĒčŠå¤ŠåŽ¤æ˜¯åĻ一ä¸Ēå¯šč¯įš„åģļįģ­ į‚šå‡ģ此处æŸĨįœ‹æ›´æ—Šįš„æļˆæ¯ - 您į›Žå‰ä¸æ˜¯äģģäŊ•į¤žåŒēįš„成员。 - į”ąäēŽįŧē少权限īŧŒæ­¤æ“äŊœæ— æŗ•åŽŒæˆã€‚ %d ä¸Ēį”¨æˆˇ - %d į§’ @@ -929,58 +775,41 @@ Matrix 中įš„æļˆæ¯å¯č§æ€§įąģäŧŧäēŽį”ĩ子邎äģļ。我äģŦåŋ˜čŽ°æ‚¨įš„æļˆæ¯æ„ %d 夊 - įŽ°åœ¨%1$s %2$s前%1$s - "%1$s、 " %1$s 和 %2$s %1$s%2$s - åˇ˛é€‰æ‹Š %d ä¸Ē %d ä¸Ē成员 - %d ä¸ĒčŠå¤ŠåŽ¤ įŗģįģŸč­Ļ告 - čļ…å‡ēčĩ„æēé™åˆļ 联įŗģįŽĄį†å‘˜ - 联įŗģ您įš„æœåŠĄįŽĄį†å‘˜ - æœŦæœåŠĄå™¨å…ļ中一项čĩ„æēåˇ˛čļ…å‡ē限åˆļīŧŒéƒ¨åˆ†į”¨æˆˇå°†æ— æŗ•į™ģåŊ•ã€‚ æœŦæœåŠĄå™¨å…ļ中一项čĩ„æēåˇ˛čļ…å‡ē限åˆļ。 - æœŦæœåŠĄå™¨åˇ˛čžžåˆ°æ¯æœˆæ´ģ衃į”¨æˆˇé™åˆļīŧŒéƒ¨åˆ†į”¨æˆˇå°†æ— æŗ•į™ģåŊ•ã€‚ æœŦæœåŠĄå™¨åˇ˛čžžåˆ°æ¯æœˆæ´ģ衃į”¨æˆˇé™åˆļ。 - č¯ˇ %s äģĨįģ§įģ­äŊŋį”¨æœŦæœåŠĄã€‚ - č¯ˇ %s äģĨåĸžåŠ æ­¤é™åˆļįš„éĸåēĻ。 - Status.im ä¸ģéĸ˜ - äģį„ļå‘ŧåĢ æŽĨ受 - é”™č¯¯ - č¯ˇåŽĄé˜…åšļæŽĨ受此ä¸ģæœåŠĄå™¨įš„æ”ŋį­–īŧš - é€šč¯ ä¸ēæĨį”ĩäŊŋį”¨ Element įš„éģ˜čŽ¤é“ƒåŖ° æĨį”ĩ铃åŖ° č¯ˇé€‰æ‹ŠæĨį”ĩ铃åŖ°īŧš - į§ģ除 į†į”ą - į‰ˆæœŦ %s 通įŸĨ故障排除 æ•…éšœæŽ’é™¤č¯Šæ–­ @@ -989,54 +818,44 @@ Matrix 中įš„æļˆæ¯å¯č§æ€§įąģäŧŧäēŽį”ĩ子邎äģļ。我äģŦåŋ˜čŽ°æ‚¨įš„æļˆæ¯æ„ åŸēæœŦč¯Šæ–­įģ“æžœæ­Ŗ常。č‹Ĩ您čŋ˜æ˜¯æ˛’有æ”ļ到通įŸĨīŧŒč¯ˇæäē¤é”™č¯¯æŠĨ告äģĨ协劊我äģŦ调æŸĨ此闎éĸ˜ã€‚ 一ä¸Ē或多ä¸Ēæĩ‹č¯•æ˛Ąæœ‰é€ščŋ‡īŧŒč¯ˇå°č¯•åģē莎įš„äŋŽå¤æ–šæŗ•ã€‚ 一ä¸Ē或多ä¸Ēæĩ‹č¯•æ˛Ąæœ‰é€ščŋ‡īŧŒč¯ˇæäē¤é”™č¯¯åéĻˆäģĨ协劊我äģŦ调æŸĨ此闎éĸ˜ã€‚ - įŗģįģŸčŽžįŊŽã€‚ 通įŸĨåˇ˛åœ¨įŗģįģŸčŽžįŊŽä¸­å¯į”¨ã€‚ 通įŸĨåˇ˛åœ¨įŗģįģŸčŽžįŊŽä¸­įĻį”¨ã€‚ č¯ˇæŖ€æŸĨįŗģįģŸčŽžįŊŽã€‚ 打åŧ€čŽžįŊŽ - å¸åˇčŽžįŊŽã€‚ 您įš„å¸åˇåˇ˛å¯į”¨é€šįŸĨ。 您įš„å¸åˇåˇ˛įĻį”¨é€šįŸĨ。 č¯ˇæŖ€æŸĨå¸åˇčŽžįŊŽã€‚ 启į”¨ - čŽžå¤‡čŽžįŊŽã€‚ åˇ˛ä¸ēæ­¤čŽžå¤‡å¯į”¨é€šįŸĨ。 åˇ˛ä¸ēæ­¤čŽžå¤‡įĻį”¨é€šįŸĨ。 č¯ˇæŖ€æŸĨ Element 莞įŊŽã€‚ 启į”¨ - Play æœåŠĄæŖ€æŸĨ Google Play æœåŠĄįš„ APK 文äģļ可į”¨ä¸”ä¸ē最新į‰ˆæœŦ。 Element äŊŋį”¨ Google Play æœåŠĄæĨ推送通įŸĨīŧŒäŊ†åŽƒäŧŧ䚎åšļæœĒæ­ŖįĄŽčŽžįŊŽīŧš \n%1$s äŋŽå¤ Play æœåŠĄ - Firebase äģ¤į‰Œ æˆåŠŸčŽˇå– FCM Tokenīŧš %1$s FCM Token čŽˇå–å¤ąč´Ĩīŧš %1$s - æŗ¨å†Œ Token FCM Token åˇ˛æˆåŠŸæŗ¨å†Œč‡ŗä¸ģæœåŠĄå™¨ã€‚ 将 FCM Token æŗ¨å†Œč‡ŗä¸ģæœåŠĄå™¨æ—ļå¤ąč´Ĩīŧš %1$s - 通įŸĨæœåŠĄ 通įŸĨæœåŠĄæ­Ŗ在čŋčĄŒã€‚ 通įŸĨæœåŠĄå°šæœĒčŋčĄŒã€‚ č¯ˇå°č¯•é‡å¯æœŦåē”į”¨į¨‹åēã€‚ å¯åŠ¨æœåŠĄ - 调į”¨įŗģįģŸį›¸æœēåē”į”¨č€ŒéžäŊŋį”¨ Element 内įŊŽįš„į›¸æœēį•Œéĸ。 æ­¤é€‰éĄšéœ€čĻįŦŦ三斚åē”į”¨åŊ•åˆļæļˆæ¯ã€‚ - åŧ€æœēæ—ļ启动 启į”¨åŧ€æœēæ—ļ启动 - æŖ€æŸĨ后台限åˆļ į”ĩæą äŧ˜åŒ– č‹Ĩä¸ģæœåŠĄå™¨æ”¯æŒæœŦ功čƒŊīŧŒåœ¨čŠå¤Šæ—ļéĸ„č§ˆé“žæŽĨ内厚。 @@ -1054,13 +873,10 @@ Matrix 中įš„æļˆæ¯å¯č§æ€§įąģäŧŧäēŽį”ĩ子邎äģļ。我äģŦåŋ˜čŽ°æ‚¨įš„æļˆæ¯æ„ Element需čĻäŋæŒä¸€ä¸ĒäŊŽåŊąå“įš„后台čŋžæŽĨ才čƒŊäŋč¯å¯é įš„通įŸĨ。 在下一ä¸Ēåŧšå‡ēįĒ—åŖ中īŧŒįŗģįģŸå°†æį¤ēæ‚¨å…čŽ¸ Element 始įģˆåœ¨åŽå°čŋčĄŒīŧŒč¯ˇį‚šå‡ģâ€œå…čŽ¸â€œã€‚ 授äēˆæƒé™ - 在éĒŒč¯æ‚¨įš„į”ĩ子邎äģļ地址æ—ļ发į”Ÿäē†ä¸€ä¸Ēé”™č¯¯ã€‚ - 密į  在éĒŒč¯æ‚¨įš„手æœēåˇį æ—ļ发į”Ÿäē†ä¸€ä¸Ēé”™č¯¯ã€‚ éĸå¤–äŋĄæ¯īŧš%s - %d+ +%d %1$sīŧš%2$s @@ -1068,26 +884,19 @@ Matrix 中įš„æļˆæ¯å¯č§æ€§įąģäŧŧäēŽį”ĩ子邎äģļ。我äģŦåŋ˜čŽ°æ‚¨įš„æļˆæ¯æ„ æ€ģ是 æļˆæ¯ä¸Žé”™č¯¯ äģ…é”™č¯¯ - 昞į¤ēäŋĄæ¯åŒē域 æ”ļčĩˇ - åą•åŧ€ æŠąæ­‰īŧŒå‘į”Ÿäē†ä¸€ä¸Ēé”™č¯¯ - 您įš„ä¸ģæœåŠĄå™¨å°šæœĒ支持åģļčŋŸåŠ čŊŊčŠå¤ŠåŽ¤æˆå‘˜īŧŒč¯ˇį¨å€™å†č¯•ã€‚ - 通čŋ‡äģ…čŊŊå…Ĩ最čŋ‘čŠå¤Šä¸­å‡ēįŽ°įš„čŠå¤ŠåŽ¤æˆå‘˜æĨ提升性čƒŊ。 åģļčŋŸåŠ čŊŊčŠå¤ŠåŽ¤æˆå‘˜ åˇ˛åœį”¨ Markdown。 - åˇ˛å¯į”¨ Markdown。 视éĸ‘é€šč¯ä¸­â€Ļ - č‡Ē动重启通įŸĨæœåŠĄ æœåŠĄčĸĢ停æ­ĸīŧŒåšļåˇ˛č‡Ē动重启。 æœåŠĄé‡å¯å¤ąč´Ĩ - æœåŠĄå°†åœ¨čŽžå¤‡é‡å¯åŽå¯åŠ¨ã€‚ æœåŠĄä¸äŧšåœ¨čŽžå¤‡é‡å¯åŽå¯åŠ¨īŧŒåœ¨æ‚¨æ‰“åŧ€ Element 一æŦĄäš‹å‰æ‚¨å°†ä¸äŧšæ”ļ到æļˆæ¯é€šįŸĨ。 寚 Element įš„后台限åˆļåˇ˛čĸĢå…ŗ闭。此æĩ‹č¯•åē”在į§ģ动数捎īŧˆæ— Wi-Fiīŧ‰įŽ¯åĸƒä¸‹čŋ›čĄŒã€‚ @@ -1096,20 +905,16 @@ Matrix 中įš„æļˆæ¯å¯č§æ€§įąģäŧŧäēŽį”ĩ子邎äģļ。我äģŦåŋ˜čŽ°æ‚¨įš„æļˆæ¯æ„ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€šįŸĨ。 %1$s å…ŗ闭后台限åˆļ - Element æœĒčĸĢį”ĩæą äŧ˜åŒ–åŊąå“ã€‚ åĻ‚æžœčŽžå¤‡åœ¨æœĒ充į”ĩįš„情å†ĩ下å…ŗåąé™įŊŽä¸€æŽĩæ—ļ间īŧŒå…ļ将čŋ›å…Ĩ打į›šæ¨ĄåŧīŧˆDozeīŧ‰ã€‚čŋ™å°†é˜ģæ­ĸåē”į”¨čŽŋ问įŊ‘įģœåšļåģļ后å…ļčŋčĄŒã€åŒæ­Ĩ、与响铃。 åŋŊį•Ĩį”ĩæą äŧ˜åŒ– - č¯ˇčž“å…Ĩį”¨äēŽåŠ å¯†å¯†é’Ĩ备äģŊįš„密į ã€‚您在æĸ复此备äģŊæ—ļ需čĻäŊŋį”¨æ­¤å¯†į ã€‚ 创åģē密į  密į åŋ…éĄģ寚åē” 指äģ¤ %s 需čĻæ›´å¤šå‚æ•°īŧŒæˆ–č€…æœ‰äē›å‚数不æ­ŖįĄŽã€‚ æ˛Ąæœ‰å¯į”¨įš„ Google Play Services APK。æļˆæ¯é€šįŸĨ可čƒŊ不čƒŊæ­Ŗ常åˇĨäŊœã€‚ - 密é’Ĩ备äģŊ äŊŋį”¨å¤‡äģŊ密é’Ĩ - 密é’Ĩ备äģŊ尚æœĒ厌成īŧŒč¯ˇį­‰åž…â€Ļ åĻ‚果您此æ—ļį™ģå‡ēč´ĻåˇīŧŒæ‚¨å°†äŧšå¤ąåŽģ您įš„åˇ˛åŠ å¯†äŋĄæ¯ 密é’Ĩ备äģŊčŋ›čĄŒä¸­ã€‚åĻ‚果您此æ—ļį™ģå‡ēč´Ļåˇå°†æ— æŗ•å†čŽŋ闎您įš„åˇ˛åŠ å¯†äŋĄæ¯ã€‚ @@ -1120,22 +925,18 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š įĄŽåŽšå—īŧŸ 备äģŊ åĻ‚果您在į™ģå‡ēč´Ļåˇäš‹å‰ä¸å¤‡äģŊ密é’ĨīŧŒæ‚¨å°†å¤ąåŽģ您įš„åˇ˛åŠ å¯†äŋĄæ¯įš„čŽŋ闎权。 - į•™ä¸‹ čˇŗčŋ‡ 厌成 中æ­ĸ - 您įĄŽåŽščĻį™ģå‡ēč´Ļåˇå—īŧŸ éĢ˜įē§é€šįŸĨ莞įŊŽ äē‹äģļįš„通įŸĨ重čĻį¨‹åēĻ - č‡ĒåŽšäš‰čŽžįŊŽã€‚ č¯ˇæŗ¨æ„ä¸€äē›æļˆæ¯įąģåž‹åˇ˛čŽžįŊŽä¸ē静éŸŗīŧˆå°†äŧšį”Ÿæˆä¸€æĄæ˛Ąæœ‰é“ƒåŖ°įš„通įŸĨīŧ‰ã€‚ 有äē›é€šįŸĨåˇ˛åœ¨æ‚¨įš„č‡ĒåŽšäš‰čŽžįŊŽä¸­čĸĢįĻį”¨ã€‚ č‡ĒåŽšäš‰č§„åˆ™åŠ čŊŊå¤ąč´ĨīŧŒč¯ˇé‡č¯•ã€‚ æŖ€æŸĨ莞įŊŽ - [%1$s] \næ­¤é”™č¯¯ä¸å— Element 控åˆļīŧŒæ šæŽ Google įš„č¯´æŗ•īŧŒæ­¤é”™č¯¯čĄ¨į¤ēč¯ĨčŽžå¤‡åœ¨ FCM 中æŗ¨å†Œäē†å¤Ē多åē”į”¨ã€‚č¯Ĩé”™č¯¯äģ…在åē”į”¨į¨‹åēæ•°é‡æžå¤šįš„情å†ĩ下发į”ŸīŧŒå› æ­¤ä¸åē”åŊąå“æ™Žé€šį”¨æˆˇã€‚ [%1$s] @@ -1143,27 +944,20 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š [%1$s] \næ­¤é”™č¯¯ä¸å— Element 控åˆļã€‚æ­¤čŽžå¤‡ä¸Šæ˛Ąæœ‰į™ģåŊ• Google č´Ļåˇã€‚č¯ˇæ‰“åŧ€č´ĻåˇįŽĄį†å™¨åšļæˇģ加一ä¸Ē Google č´Ļåˇã€‚ æˇģ加č´Ļåˇ - 莞įŊŽå“é“ƒé€šįŸĨ 莞įŊŽį”ĩč¯é€šįŸĨ 莞įŊŽé™éŸŗ通įŸĨ 选拊指į¤ēį¯éĸœč‰˛īŧŒéœ‡åŠ¨īŧŒé“ƒåŖ°â€Ļ - - 加密密é’ĨįŽĄį† įœæĩé‡æ¨ĄåŧäŊŋį”¨äē†į‰šåŽšįš„čŋ‡æģ¤å™¨īŧŒæ‰€äģĨįŠļæ€æ›´æ–°å’Œčž“å…ĨįŠļ态通įŸĨ将äŧščĸĢčŋ‡æģ¤æŽ‰ã€‚ - åˇ˛åŠ å¯†äŋĄæ¯æĸ复 įŽĄį†å¯†é’Ĩ备äģŊ - 静éŸŗ č¯ˇčž“å…Ĩ一ä¸Ēį”¨æˆˇåã€‚ č¯ˇčž“å…Ĩ密į  密į å¤Ēåŧą - åĻ‚果您æƒŗčĻ Element į”Ÿæˆä¸€ä¸Ēæĸ复密é’ĨīŧŒč¯ˇåˆ é™¤å¯†į ã€‚ æ˛Ąæœ‰å¯į”¨įš„ Matrix äŧšč¯ - åˇ˛åŠ å¯†äŋĄæ¯æ°¸ä¸ä¸ĸå¤ą åŠ å¯†čŠå¤ŠåŽ¤ä¸­įš„äŋĄæ¯äŧščĸĢįĢ¯å¯šįĢ¯åŠ å¯†äģĨįĄŽäŋåŽ‰å…¨ã€‚åĒ有您和æ‹Ĩ有密é’Ĩįš„æŽĨæ”ļ斚可äģĨč¯ģ取čŋ™äē›äŋĄæ¯ã€‚ \n @@ -1171,7 +965,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š åŧ€å§‹äŊŋį”¨å¤‡äģŊ密é’Ĩ īŧˆéĢ˜įē§īŧ‰ 手动å¯ŧå‡ē密é’Ĩ - äŊŋį”¨å¯†į äģĨäŋæŠ¤æ‚¨įš„备äģŊ。 我äģŦ将äŧšåœ¨ä¸ģæœåŠĄå™¨ä¸Šäŋå­˜ä¸€äģŊ您įš„密é’Ĩįš„åŠ å¯†æ‹ˇč´ã€‚čŽžįŊŽä¸€ä¸Ē密į æĨäŋæŠ¤æ‚¨įš„备äģŊįš„厉全。 \n @@ -1193,7 +986,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š æĸ复密é’Ĩåˇ˛čĸĢäŋå­˜åˆ° \'%s\' 。 \n \nč­Ļ告īŧšåĻ‚æžœåē”į”¨čĸĢ卸čŊŊīŧŒæ­¤æ–‡äģļ可čƒŊäŧščĸĢ删除。 - č¯ˇåˆļäŊœä¸€äģŊæ‹ˇč´ 分äēĢæĸ复密é’Ĩ â€Ļ į”¨å¯†į æĨį”Ÿæˆæĸ复密é’ĨīŧŒæ­¤čŋ‡į¨‹å¯čƒŊäŧščŠąč´šå‡ į§’钟。 @@ -1201,25 +993,18 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š æ„å¤–é”™č¯¯ 备äģŊåŧ€å§‹ 您įš„加密密é’Ĩæ­Ŗ在后台čĸĢ备äģŊ到您įš„ä¸ģæœåŠĄå™¨ä¸Šã€‚åˆå§‹å¤‡äģŊ可čƒŊčŠąč´šå‡ åˆ†é’Ÿã€‚ - - 您įĄŽåŽšå—īŧŸ åĻ‚果您į™ģå‡ēč´Ļåˇæˆ–č€…ä¸ĸå¤ąæ­¤čŽžå¤‡īŧŒæ‚¨å¯čƒŊ再䚟无æŗ•čŽŋ闎您įš„äŋĄæ¯ã€‚ - æ­Ŗåœ¨čŽˇå–å¤‡äģŊįš„į‰ˆæœŦ â€Ļ äŊŋį”¨æĸ复密į č§Ŗ锁您įš„åˇ˛åŠ å¯†åŽ†å˛æļˆæ¯ äŊŋį”¨æ‚¨įš„æĸ复密é’Ĩ 不įŸĨ道您įš„æĸ复密į īŧŒæ‚¨å¯äģĨ %s 。 - äŊŋį”¨æĸ复密é’Ĩč§Ŗ锁您įš„åˇ˛åŠ å¯†åŽ†å˛æļˆæ¯ 输å…Ĩæĸ复密é’Ĩ - äŋĄæ¯æĸ复 - ä¸ĸå¤ąäē†æĸ复密é’ĨīŧŸæ‚¨å¯äģĨåœ¨čŽžįŊŽä¸­æ–°åģē一ä¸Ē。 无æŗ•äŊŋį”¨æ­¤å¯†į č§Ŗ密备äģŊīŧšč¯ˇæŖ€æŸĨæ‚¨čž“å…Ĩįš„æĸ复密į æ˜¯åĻæ­ŖįĄŽã€‚ įŊ‘įģœé”™č¯¯īŧšč¯ˇæŖ€æŸĨ您įš„įŊ‘įģœčŋžæŽĨåšļé‡č¯•ã€‚ - 备äģŊæĸ复中īŧš æĸ复密é’Ĩ莥įŽ—中 â€Ļ 密é’Ĩ下čŊŊ中 â€Ļ @@ -1227,7 +1012,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š č§Ŗé”åŽ†å˛ č¯ˇčž“å…Ĩæĸ复密é’Ĩ 无æŗ•äŊŋį”¨æ­¤æĸ复密é’Ĩč§Ŗ密备äģŊīŧšč¯ˇæŖ€æŸĨæ‚¨čž“å…Ĩįš„æĸ复密é’Ĩ是åĻæ­ŖįĄŽã€‚ - 备äģŊåˇ˛æĸ复 %s īŧ æĸ复äē†ä¸€ä¸Ē包åĢ %d ä¸Ē密é’Ĩįš„备äģŊ。 @@ -1235,18 +1019,13 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š %d ä¸Ē新密é’Ĩåˇ˛čĸĢæˇģåŠ åˆ°æ­¤čŽžå¤‡ä¸­ã€‚ - 无æŗ•čŽˇå–最新įš„æĸ复密é’Ĩį‰ˆæœŦ (%s) 。 äŧšč¯åŠ å¯†æ˛Ąæœ‰čĸĢ启į”¨ - - äģŽå¤‡äģŊæĸ复 删除备äģŊ - åˇ˛ä¸ēæ­¤čŽžå¤‡æ­ŖįĄŽčŽžįŊŽå¯†é’Ĩ备äģŊ。 密é’Ĩ备äģŊåœ¨æ­¤čŽžå¤‡ä¸ŠæœĒæŋ€æ´ģ。 您įš„密é’ĨæœĒäģŽæ­¤čŽžå¤‡å¤‡äģŊ。 - 备äģŊåĢ有一ä¸ĒæĨč‡Ē ID ä¸ē %s įš„æœĒįŸĨčŽžå¤‡įš„į­žåã€‚ 备äģŊå…ˇæœ‰æ­¤čŽžå¤‡įš„有效į­žåã€‚ 备äģŊå…ˇæœ‰åˇ˛éĒŒč¯čŽžå¤‡ %s įš„有效į­žåã€‚ @@ -1254,14 +1033,11 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 备äģŊå…ˇæœ‰åˇ˛éĒŒč¯čŽžå¤‡ %s įš„无效į­žå 备äģŊå…ˇæœ‰æœĒéĒŒč¯čŽžå¤‡ %s įš„无效į­žå 无æŗ•čŽˇåž—备äģŊ īŧˆ%sīŧ‰įš„äŋĄäģģäŋĄæ¯ã€‚ - čĻåœ¨æ­¤čŽžå¤‡ä¸ŠäŊŋį”¨å¯†é’Ĩ备äģŊīŧŒč¯ˇįĢ‹åŗäŊŋį”¨å¯†į æˆ–æĸ复密é’Ĩčŋ›čĄŒæĸ复。 备äģŊ删除中 â€Ļ 备äģŊīŧˆ%sīŧ‰åˆ é™¤å¤ąč´Ĩ - 删除备äģŊ čĻäģŽæ­¤æœåŠĄå™¨ä¸­åˆ é™¤æ‚¨å¤‡äģŊįš„加密密é’Ĩ吗īŧŸæ‚¨å°†æ— æŗ•å†äŊŋį”¨æĸ复密é’ĨæĨč¯ģ取加密įš„åŽ†å˛æļˆæ¯ã€‚ - 备äģŊ新密é’Ĩ åˇ˛æŖ€æĩ‹åˆ°æ–°įš„厉全æļˆæ¯å¯†é’Ĩ备äģŊ。 \n @@ -1269,42 +1045,32 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š é‚Ŗ是我 永不ä¸ĸå¤ąåˇ˛åŠ å¯†äŋĄæ¯ åŧ€å§‹äŊŋį”¨å¤‡äģŊ密é’Ĩ - 永不ä¸ĸå¤ąåˇ˛åŠ å¯†äŋĄæ¯ äŊŋį”¨å¤‡äģŊ密é’Ĩ - 新加密äŋĄæ¯å¯†é’Ĩ įŽĄį†å¯†é’Ĩ备äģŊ - 密é’Ĩ备äģŊ中 â€Ļ - 所有密é’ĨéƒŊåˇ˛å¤‡äģŊ %d ä¸Ē密é’Ĩ备äģŊ中 â€Ļ - į‰ˆæœŦ įŽ—æŗ• į­žå - åŋŊį•Ĩ - äģĨ单į‚šį™ģåŊ•æ–šåŧį™ģå…Ĩ 无æŗ•čŋžæŽĨ到此 URLīŧŒč¯ˇæŖ€æŸĨ 您įš„čŽžå¤‡äŊŋį”¨äē†čŋ‡æ—ļįš„ TLS åŽ‰å…¨åčŽŽīŧŒåŽšæ˜“受到æ”ģå‡ģīŧŒä¸ēäŋč¯åŽ‰å…¨īŧŒæ‚¨å°†æ— æŗ•čŋ›čĄŒčŋžæŽĨ 按回čŊĻ发送æļˆæ¯ čŊ¯é”Žį›˜įš„ Enter 按钎将发送æļˆæ¯č€Œä¸æ˜¯æˇģ加æĸ行įŦĻ - 密į æ›´æ–° 密į æ— æ•ˆ 密į ä¸åŒšé… - 无效įš„ä¸ģæœåŠĄå™¨æŽĸæĩ‹å“åē” č‡ĒåŠ¨åŽŒæˆæœåŠĄå™¨é€‰éĄš Element äžĻæĩ‹åˆ°æ‚¨įš„ userId 域名 \"%1$s\" 有č‡Ē厚䚉įš„æœåŠĄå™¨čŽžįŊŽīŧš \n%2$s äŊŋį”¨čŽžįŊŽ - æ­Ŗåœ¨åˆå§‹åŒ–æœåŠĄ åĒ’äŊ“ éģ˜čŽ¤åŽ‹įŧŠ @@ -1312,7 +1078,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š éģ˜čŽ¤åĒ’äŊ“æĨæē 选拊 播攞åŋĢ门åŖ° - æ ‡čŽ°ä¸ēåˇ˛č¯ģ æœŦåē”į”¨ 不 需čĻåœ¨åŽå°čŋžæŽĨä¸ģæœåŠĄå™¨īŧŒåē”čƒŊ减少į”ĩ量æļˆč€— @@ -1321,18 +1086,14 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š %d æĄé€šįŸĨ - 新æ´ģ动 čŠå¤ŠåŽ¤ 新æļˆæ¯ æ–°é‚€č¯ˇ 我 ** å‘é€å¤ąč´Ĩ - č¯ˇæ‰“åŧ€čŠå¤ŠåŽ¤ - æŠąæ­‰īŧŒæ—§čŽžå¤‡īŧˆAndroid įŗģįģŸį‰ˆæœŦäŊŽäēŽ 5.0īŧ‰ä¸æ”¯æŒäŊŋį”¨ Jitsi 创åģēį”ĩč¯äŧščŽŽ - éĒŒč¯äŧšč¯ - æœĒįŸĨ IP 一ä¸Ēæ–°čŽžå¤‡æ­Ŗåœ¨č¯ˇæą‚åŠ å¯†å¯†é’Ĩ。 \nčŽžå¤‡åį§°īŧš%1$s @@ -1342,15 +1103,12 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š \nčŽžå¤‡åį§°īŧš%1$s \n最čŋ‘上įēŋäēŽīŧš%2$s \nč‹Ĩ您æœĒ曞在åĻ一ä¸ĒčŽžå¤‡ä¸Šį™ģåŊ•īŧŒč¯ˇåŋŊį•Ĩæ­¤č¯ˇæą‚ã€‚ - éĒŒč¯ 分äēĢ 密é’Ĩ分äēĢč¯ˇæą‚ åŋŊį•Ĩ - æ›ŋæĸ įģˆæ­ĸ - æ­Ŗ在æŖ€æŸĨ备äģŊįŠļ态 通čŋ‡å¯šæ¯”一æŽĩįŽ€įŸ­įš„æ–‡æœŦ字įŦĻ串æĨéĒŒč¯čŽžå¤‡ã€‚ ä¸ēäŋč¯å°Ŋ可čƒŊéĢ˜įš„厉全性īŧŒæˆ‘äģŦåģēčŽŽæ‚¨ä¸Žå¯šæ–šåŊ“éĸäē¤æĸīŧŒæˆ–äŊŋį”¨åĻ一į§å¯äŋĄäģģįš„é€ščŽ¯æ–šåŧã€‚ @@ -1358,30 +1116,22 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š äŧ å…Ĩįš„éĒŒč¯č¯ˇæą‚ æŸĨįœ‹č¯ˇæą‚ æ­Ŗ在į­‰åž…寚斚įĄŽčŽ¤â€Ļ - åˇ˛éĒŒč¯īŧ æ‚¨åˇ˛æˆåŠŸéĒŒč¯æ­¤čŽžå¤‡ã€‚ äē†č§Ŗäē† - äģ€äšˆéƒŊæ˛Ąæœ‰å‡ēįŽ°īŧŸåšļ非所有įš„åŽĸæˆˇįĢ¯éƒŊåˇ˛æ”¯æŒäē¤äē’åŧéĒŒč¯ã€‚äŊŋį”¨æ—§į‰ˆéĒŒč¯å§ã€‚ äŊŋį”¨æ—§į‰ˆéĒŒč¯ã€‚ - 密é’ĨéĒŒč¯ č¯ˇæą‚åˇ˛å–æļˆ äē¤äē’åŧčŽžå¤‡éĒŒč¯ éĒŒč¯č¯ˇæą‚ %s æƒŗéĒŒč¯æ‚¨įš„čŖ…įŊŽ - æœĒįŸĨé”™č¯¯ - - įŧ–čž‘ 回复 - é‡č¯• å‘æ‚¨å‘é€é‚€č¯ˇ į”ą %s é‚€č¯ˇ - æŦĸčŋŽå›žåŽļīŧ å¯šč¯ čŠå¤ŠåŽ¤ @@ -1391,13 +1141,11 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 响åē” æŸĨįœ‹å“åē” 响åē” - į”ąį”¨æˆˇåˆ é™¤įš„äē‹äģļ 创åģēæ–°čŠå¤ŠåŽ¤ äŋŽæ”š č¯ˇį¨å€™â€Ļ 所有į¤žåŒē - 无æŗ•éĸ„č§ˆæ­¤čŠå¤ŠåŽ¤ čŠå¤ŠåŽ¤ 创åģē @@ -1405,7 +1153,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š čŠå¤ŠåŽ¤į›ŽåŊ• Matrix SDK į‰ˆæœŦ åŋĢæˇå“åē” - 通į”¨ 选项 厉全与隐į§ @@ -1413,37 +1160,28 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š æŽ¨é€č§„åˆ™ 尚æœĒ厚䚉äģģäŊ•æŽ¨é€č§„则 æ˛Ąæœ‰åˇ˛æŗ¨å†Œįš„推送通道 - app_idīŧš push_keyīŧš app_display_nameīŧš device_nameīŧš URLīŧš æ ŧåŧīŧš - éŸŗéĸ‘与视éĸ‘ 帎劊和å…ŗäēŽ - - īŧˆåˇ˛įŧ–čž‘īŧ‰ - 无 撤æļˆ 断åŧ€čŋžæŽĨ æŖ€æŸĨ 拒įģ - æ˛Ąæœ‰čŽžįŊŽčēĢäģŊæœåŠĄå™¨ã€‚ - æœåŠĄå™¨įš„é”™č¯¯é…įŊŽå¯ŧč‡´é€šč¯å¤ąč´Ĩ Hans - č¯ˇčĻæą‚您įš„åŽļåē­æœåŠĄå™¨ (%1$s) įš„įŽĄį†å‘˜é…įŊŽ TURN æœåŠĄå™¨īŧŒäģĨäŊŋé€šč¯å¯é åœ°åˇĨäŊœã€‚ \n \næˆ–č€…īŧŒæ‚¨å¯äģĨå°č¯•äŊŋį”¨ %2$s įš„å…Ŧå…ąæœåŠĄå™¨īŧŒäŊ†čŋ™å°†ä¸é‚Ŗ䚈可靠īŧŒåšļ且厃将与č¯ĨæœåŠĄå™¨å…ąäēĢ您įš„ IP 地址。您䚟可äģĨåœ¨â€œčŽžįŊŽâ€ä¸­čŋ›čĄŒįŽĄį†ã€‚ å°č¯•äŊŋį”¨ %s 不čĻå†é—Žæˆ‘ - 莞įŊŽį”¨äēŽå¸æˆˇæĸ复įš„į”ĩ子邎äģļīŧŒį„ļåŽå°ąå¯äģĨčŽŠčŽ¤č¯†æ‚¨įš„äēē选拊性æŽĸį´ĸ到您。 čŽžåŽšį”ĩč¯īŧŒį„ļåŽå°ąå¯äģĨčŽŠčŽ¤č¯†æ‚¨įš„äēē选拊性æŽĸį´ĸ到您。 čŽžåŽšį”ĩ子邎äģļäģĨäž›å¸åˇå¤åŽŸã€‚ į„ļåŽå°ąå¯äģĨčŽŠčŽ¤č¯†æ‚¨įš„äēēį”¨į”ĩ子邎äģļ或į”ĩč¯é€‰æ‹Šæ€§æŽĸį´ĸ到您。 @@ -1454,16 +1192,12 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 播攞 暂停 åŋŊį•Ĩ - - 复åˆļ 成功 - 通įŸĨ Element å‘ŧåĢå¤ąč´Ĩ 无æŗ•åģēįĢ‹åŽžæ—ļčŋžæŽĨ。 \nč¯ˇčĻæą‚您įš„åŽļåē­æœåŠĄå™¨įŽĄį†å‘˜é…įŊŽ TURN æœåŠĄå™¨äģĨäŊŋé€šč¯å¯é åˇĨäŊœã€‚ - 选拊åŖ°éŸŗčŽžå¤‡ į”ĩč¯ æ‰ŦåŖ°å™¨ @@ -1474,20 +1208,16 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 后 å…ŗ闭 HD 打åŧ€ HD - SSL é”™č¯¯īŧšå°šæœĒéĒŒč¯å¯šį­‰įĢ¯čēĢäģŊ。 SSL é”™č¯¯ã€‚ åŊ“您įš„åŽļåē­æœåŠĄå™¨æœĒ提䞛æ—ļ将äŊŋį”¨ %s äŊœä¸ēčž…åŠŠīŧˆåœ¨é€šč¯æ—ļ将分äēĢ您įš„ IP 地址īŧ‰ æ´ģåŠ¨é€šč¯ (%s) čŋ”å›žé€šč¯ - 在您įš„莞įŊŽä¸­æˇģ加čēĢäģŊæœåŠĄå™¨äģĨæ‰§čĄŒæ­¤æ“äŊœã€‚ 取æļˆé‚€č¯ˇ 降äŊŽæ‚¨č‡Ēåˇąįš„įē§åˆĢīŧŸ 您åŽļ无æŗ•æ’¤é”€æ­¤æ“äŊœå› ä¸ē您æ­Ŗ在降äŊŽæ‚¨įš„įē§åˆĢīŧŒåĻ‚æžœæ‚¨æ˜¯čŠå¤ŠåŽ¤ä¸­æœ€åŽä¸€ä¸Ēį‰šæƒį”¨æˆˇå°†æ— æŗ•æĸ复į‰šæƒã€‚ 降įē§ - - åŋŊį•Ĩį”¨æˆˇ åŋŊį•Ĩæ­¤į”¨æˆˇå°†äģŽæ‚¨å…ąäēĢįš„čŠå¤ŠåŽ¤į§ģ除äģ–äģŦįš„æļˆæ¯ã€‚ \n @@ -1505,12 +1235,9 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 封įĻį†į”ą 取æļˆå°įĻį”¨æˆˇ 取æļˆå°įĻį”¨æˆˇå°†å…čŽ¸äģ–äģŦ再æŦĄåŠ å…ĨčŠå¤ŠåŽ¤ã€‚ - įĄŽčŽ¤æ‚¨įš„密į  您无æŗ•åœ¨ Element į§ģ动į‰ˆä¸­čŋ™äšˆåš 需čĻčēĢäģŊčŽ¤č¯ - - 后台同æ­Ĩæ¨Ąåŧ į”ĩæą äŧ˜åŒ– Element 将在后台äģĨäŋį•™čŽžå¤‡æœ‰é™čĩ„æēīŧˆį”ĩæą īŧ‰įš„æ–šåŧåŒæ­Ĩ。 @@ -1521,8 +1248,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 无后台同æ­Ĩ åē”į”¨åœ¨åŽå°æ—ļ您不äŧšæ”ļ到æļˆæ¯é€šįŸĨ。 æ›´æ–°čŽžįŊŽå¤ąč´Ĩ。 - - 偏åĨŊ同æ­Ĩ间隔 %s \n取å†ŗäēŽčĩ„æēīŧˆį”ĩ量īŧ‰æˆ–čŽžå¤‡įŠļ态īŧˆįĄįœ īŧ‰åŒæ­Ĩ可čƒŊäŧšåģļčŋŸã€‚ @@ -1537,30 +1262,22 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 通čŋ‡åœ¨æ‚¨įš„æœåŠĄå™¨ä¸Šå¤‡äģŊ加密密é’ĨäŋéšœåŠ å¯†æļˆæ¯å’Œæ•°æŽįš„čŽŋ闎权。 ä¸ēæ‚¨åˇ˛æœ‰įš„备äģŊį”Ÿæˆæ–°įš„厉全密é’Ĩæˆ–čŽžįŊŽæ–°įš„厉全åŖäģ¤ã€‚ čŋ™å°†æ›ŋæĸ您įš„åŊ“前密é’Ĩ或įŸ­č¯­ã€‚ - 发įŽ° įŽĄį†æ‚¨įš„发įŽ°čŽžįŊŽã€‚ å…čŽ¸é›†æˆ 集成įŽĄį†å™¨ - é›†æˆåˇ˛įĻį”¨ č¯ˇåœ¨čŽžįŊŽä¸­å¯į”¨â€œå…čŽ¸é›†æˆâ€ã€‚ - %d ä¸Ē封įĻį”¨æˆˇ - å…Ŧåŧ€åį§°īŧˆå¯šé€šäŋĄå‚ä¸Žč€…å¯č§īŧ‰ äŧšč¯įš„å…Ŧåŧ€åį§°å¯šé€šäŋĄįš„å‚ä¸Žč€…å¯č§ 成功å¯ŧå‡ē密é’Ĩ - %1$s: %2$s %1$s: %2$s %3$s - æŸĨįœ‹ æ´ģ动小部äģļ - - 小部äģļ čŊŊå…Ĩ小部äģļ 此小部äģļæˇģåŠ č€…īŧš @@ -1571,49 +1288,37 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 重čŊŊ小部äģļ 在æĩč§ˆå™¨ä¸­æ‰“åŧ€ 撤æļˆæˆ‘įš„čŽŋ闎权限 - 您įš„æ˜ĩį§° 您įš„头像 URL 您įš„į”¨æˆˇ ID 您įš„ä¸ģéĸ˜ 小部äģļ ID čŠå¤ŠåŽ¤ ID - - 小部äģļæƒŗäŊŋį”¨äģĨ下čĩ„æēīŧš å…čŽ¸ é˜ģæ­ĸ全部 äŊŋį”¨į›¸æœē äŊŋį”¨éēĻ克éŖŽ č¯ģ取受 DRM äŋæŠ¤įš„åĒ’äŊ“ - æœĒ配įŊŽé›†æˆįŽĄį†å™¨ã€‚ č‹ĨčĻįģ§įģ­č¯ˇæŽĨå—æœåŠĄæĄæŦžã€‚ - æĸ复密é’Ĩåˇ˛äŋå­˜ã€‚ - 您įš„åŽļåē­æœåŠĄå™¨ä¸Šåˇ˛å­˜åœ¨å¤‡äģŊ 您äŧŧäšŽåˇ˛åœ¨åĻ一ä¸Ēäŧšč¯ä¸­čŽžįŊŽå¯†é’Ĩ备äģŊ。您æƒŗčĻå°†å…ļæ›ŋæĸä¸ēæ­Ŗ在创åģēįš„吗īŧŸ 厉全备äģŊ äŋæŠ¤åŠ å¯†äŋĄæ¯åŠæ•°æŽįš„čŽŋ闎权 - 莞įŊŽåŽ‰å…¨å¤‡äģŊ - į”ąäēŽæ— æ•ˆæˆ–čŋ‡æœŸįš„å‡­æŽæ‚¨åˇ˛į™ģå‡ē。 - éĒŒč¯äŧšč¯åˇ˛å°†å…ļæ ‡čŽ°ä¸ē可äŋĄã€‚åŊ“äŊŋį”¨įĢ¯åˆ°įĢ¯åŠ å¯†æļˆæ¯æ—ļäŋĄäģģå‚ä¸Žč€…įš„äŧšč¯å°†įģ™æ‚¨éĸå¤–įš„内åŋƒåšŗ静。 éĒŒč¯äŧšč¯å°†æ ‡čŽ°å…ļä¸ē可äŋĄīŧŒåŒæ—ļ将您įš„äŧšč¯å¯šå¯šæ–šæ ‡čŽ°ä¸ē可äŋĄã€‚ - 通čŋ‡įĄŽčŽ¤äģĨä¸‹čĄ¨æƒ…įŦĻåˇå‡ēįŽ°åœ¨å¯šæ–šįš„åąåš•ä¸ŠæĨéĒŒč¯æ­¤äŧšč¯ 通čŋ‡įĄŽčŽ¤åąåš•ä¸Šå¯šæ–šæ˜žį¤ēäģĨ下数字æĨéĒŒč¯æ­¤äŧšč¯ - 您æ”ļ到äŧ å…ĨéĒŒč¯č¯ˇæą‚。 与此į”¨æˆˇįš„厉全æļˆæ¯įĢ¯åˆ°įĢ¯åŠ å¯†īŧŒæ— æŗ•čĸĢįŦŦ三斚č¯ģ取。 寚斚取æļˆäē†éĒŒč¯ã€‚ \n%s éĒŒč¯åˇ˛å–æļˆã€‚ \nį†į”ąīŧš%s - į”¨æˆˇåˇ˛å–æļˆéĒŒč¯ éĒŒč¯čŋ‡į¨‹čļ…æ—ļ äŧšč¯ä¸įŸĨæ­¤äē‹åŠĄ @@ -1626,98 +1331,70 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š į”¨æˆˇä¸åŒšé… 您æœĒäŊŋį”¨čēĢäģŊæœåŠĄå™¨ æœĒ配įŊŽčēĢäģŊæœåŠĄå™¨īŧŒéœ€čĻé‡įŊŽæ‚¨įš„密į ã€‚ - 您äŧŧ䚎æ­Ŗåœ¨č¯•å›žčŋžæŽĨ到åĻ一ä¸ĒåŽļåē­æœåŠĄå™¨ã€‚您æƒŗčĻį™ģå‡ē吗īŧŸ - 加å…Ĩ一ä¸ĒčŠå¤ŠåŽ¤åŧ€å§‹äŊŋį”¨åē”į”¨ã€‚ æ‚¨åˇ˛įģčˇŸä¸Šäē†īŧ æ‚¨æ˛Ąæœ‰æœĒč¯ģæļˆæ¯ äģŽčŋ™é‡ŒčˇŸä¸ŠæœĒč¯ģæļˆæ¯ 您įš„į§čŠæļˆæ¯å°†åœ¨æ­¤å¤„昞į¤ē 您įš„čŠå¤ŠåŽ¤å°†åœ¨æ­¤æ˜žį¤ē - æļˆæ¯åˇ˛åˆ é™¤ 昞į¤ēåˇ˛į§ģ除æļˆæ¯ å¯šåˇ˛į§ģ除æļˆæ¯æ˜žį¤ē占äŊįŦĻ čŠå¤ŠåŽ¤įŽĄį†å‘˜ä¸ģ持įš„äē‹äģļ 最后į”ą %1$s įŧ–čž‘äēŽ %2$s - - æ ŧåŧé”™č¯¯äē‹äģļīŧŒæ— æŗ•æ˜žį¤ē 无įŊ‘įģœã€‚č¯ˇæŖ€æŸĨ您įš„įŊ‘įģœčŋžæŽĨ。 更攚įŊ‘įģœ Element 尚不支持å…Ŧåŧ€čŠå¤ŠåŽ¤éĸ„č§ˆ - į§čŠæļˆæ¯ - æ–°čŠå¤ŠåŽ¤ å…Ŧåŧ€ äģģäŊ•äēēéƒŊ可äģĨ加å…Ĩæ­¤čŠå¤ŠåŽ¤ å°†æ­¤čŠå¤ŠåŽ¤å‘å¸ƒåˆ°čŠå¤ŠåŽ¤į›ŽåŊ• - čŽˇå–äŋĄäģģäŋĄæ¯æ—ļ发į”Ÿé”™č¯¯ čŽˇå–å¯†é’Ĩ备äģŊ数捎æ—ļ发į”Ÿé”™č¯¯ - äģŽæ–‡äģļ \"%1$s\" å¯ŧå…ĨįĢ¯åˆ°įĢ¯å¯†é’Ĩ。 - å…ļäģ–įŦŦ三斚通įŸĨ æ‚¨åˇ˛įģåœ¨æŸĨįœ‹æ­¤čŠå¤ŠåŽ¤īŧ - æŗ¨å†Œäģ¤į‰Œ - 提å‡ēåģē莎 č¯ˇåœ¨ä¸‹æ–šå†™ä¸‹æ‚¨įš„åģēčŽŽã€‚ č¯ˇåœ¨æ­¤æčŋ°æ‚¨įš„åģē莎 č°ĸč°ĸīŧŒåģēčŽŽåˇ˛æˆåŠŸå‘é€ åģēčŽŽå‘é€å¤ąč´Ĩ (%s) - 在æ—ļ间įēŋ上昞į¤ē隐藏äē‹äģļ - į§čŠæļˆæ¯ - æ­Ŗ在į­‰åž…â€Ļ æ­Ŗ在加密įŧŠį•Ĩ回â€Ļ æ­Ŗ在发送įŧŠį•Ĩ回 (%1$s / %2$s) æ­Ŗ在加密文äģļâ€Ļ æ­Ŗ在发送文äģļ (%1$s / %2$s) - æ­Ŗ在下čŊŊ文äģļ %1$sâ€Ļ "文äģļ %1$s åˇ˛ä¸‹čŊŊīŧ" - æļˆæ¯įŧ–čž‘ æœĒ扞到įŧ–čž‘ - čŋ‡æģ¤å¯šč¯â€Ļ 扞不到您čĻæ‰žįš„īŧŸ 创åģēæ–°čŠå¤ŠåŽ¤ 发送新į§čŠæļˆæ¯ æŸĨįœ‹čŠå¤ŠåŽ¤į›ŽåŊ• - 名į§°æˆ– ID (#example:matrix.org) - 在æ—ļ间įēŋ中启į”¨æģ‘动回复 在ä¸ģåąåš•ä¸Šæˇģ加æœĒč¯ģ通įŸĨé€‰éĄšåĄã€‚ - 链æŽĨåˇ˛å¤åˆļ到å‰Ēč´´æŋ - 通čŋ‡ matrix ID æˇģ加 æ­Ŗ在创åģēčŠå¤ŠåŽ¤â€Ļ 无įģ“æžœīŧŒäŊŋį”¨é€ščŋ‡ matrix ID æˇģåŠ åœ¨æœåŠĄå™¨ä¸Šæœį´ĸ。 åŧ€å§‹čž“å…ĨäģĨčŽˇåž—įģ“æžœ 按į”¨æˆˇåæˆ– ID čŋ‡æģ¤â€Ļ - æ­Ŗ在加å…ĨčŠå¤ŠåŽ¤â€Ļ - æŸĨįœ‹įŧ–čž‘åŽ†å˛ - æœåŠĄæĄæŦž åŽĄæ ¸æĄæŦž 可čĸĢå…ļäģ–äēē发įŽ° äŊŋį”¨æœē器äēēīŧŒå°éƒ¨äģļå’Œč´´įē¸åŒ… - åˇ˛č¯ģäēŽ - - čēĢäģŊæœåŠĄå™¨ 断åŧ€čēĢäģŊæœåŠĄå™¨ 配įŊŽčēĢäģŊæœåŠĄå™¨ @@ -1732,7 +1409,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 我äģŦ向 %s įģ™æ‚¨å‘送äē†įĄŽčŽ¤į”ĩ子邎äģļīŧŒæŖ€æŸĨ您įš„į”ĩ子邎äģļåšļį‚šå‡ģįĄŽčŽ¤é“žæŽĨ 我äģŦ向 %s įģ™æ‚¨å‘送äē†įĄŽčŽ¤į”ĩ子邎äģļīŧŒč¯ˇå…ˆæŖ€æŸĨ您įš„į”ĩ子邎äģļåšļį‚šå‡ģįĄŽčŽ¤é“žæŽĨ æ­Ŗ在į­‰åž… - 输å…ĨčēĢäģŊæœåŠĄå™¨ URL 无æŗ•čŋžæŽĨ到čēĢäģŊæœåŠĄå™¨ č¯ˇčž“å…ĨčēĢäģŊæœåŠĄå™¨ url @@ -1740,20 +1416,13 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 您选拊įš„čēĢäģŊæœåŠĄå™¨æ— äģģäŊ•æœåŠĄæĄæŦžã€‚äģ…在您äŋĄäģģæœåŠĄæ‰€æœ‰č€…æ—ļįģ§įģ­ åˇ˛å‘ %s 发送文字æļˆæ¯ã€‚č¯ˇčž“å…Ĩ厃包åĢįš„éĒŒč¯į ã€‚ éĒŒč¯į ä¸æ­ŖįĄŽã€‚ - 您åŊ“前在čēĢäģŊæœåŠĄå™¨ %1$s 上分äēĢį”ĩ子邎äģļ地址或į”ĩč¯åˇį ã€‚您需čĻé‡čŋžæŽĨ %2$s åˇ˛åœæ­ĸ分äēĢ。 同意čēĢäģŊæœåŠĄå™¨ (%s) æœåŠĄæĄæŦžäŊŋ您可äģĨ通čŋ‡į”ĩ子邎äģļ地址或į”ĩč¯åˇį čĸĢ发įŽ°ã€‚ - 启į”¨č¯Ļįģ†æ—Ĩåŋ—。 åŊ“您发送 RageShake æ—ļč¯Ļįģ†æ—Ĩåŋ—将帎劊åŧ€å‘č€…æäž›æ›´å¤šæ—Ĩåŋ—。åŗäŊŋ启į”¨īŧŒåē”į”¨äšŸä¸äŧščŽ°åŊ•æļˆæ¯å†…厚或äģģäŊ•å…ļäģ–į§æœ‰æ•°æŽã€‚ - - æŽĨæ”ļ您įš„åŽļåē­æœåŠĄå™¨æĄæŦžå’ŒæĄäģļåŽč¯ˇé‡č¯•ã€‚ - æœåŠĄå™¨äŧŧ䚎响åē”æ—ļ间å¤Ēé•ŋīŧŒčŋ™å¯čƒŊ是į”ąäēŽčŋžæŽĨä¸č‰¯æˆ–æœåŠĄå™¨é”™č¯¯åŧ•čĩˇįš„。 č¯ˇį¨åŽå†č¯•ã€‚ - 发送附äģļ - 打åŧ€å¯ŧčˆĒčœå• 打åŧ€åˆ›åģēčŠå¤ŠåŽ¤čœå• å…ŗ闭创åģēčŠå¤ŠåŽ¤čœå•â€Ļ @@ -1763,16 +1432,13 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 昞į¤ē密į  éšč—å¯†į  čˇŗ到åē•éƒ¨ - %1$sīŧŒ%2$s 和 %3$s åˇ˛č¯ģ %1$s 和 %2$s åˇ˛č¯ģ %s åˇ˛č¯ģ %d ä¸Ēį”¨æˆˇåˇ˛č¯ģ - 上äŧ æ–‡äģļ \'%1$s\' (%2$s) čŋ‡å¤§ã€‚限åˆļä¸ē %3$s。 - čŽˇå–é™„äģļæ—ļå‡ē错。 文äģļ 联įŗģäēē @@ -1781,13 +1447,11 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š į›¸å†Œ č´´įē¸ 无æŗ•å¤„į†å…ąäēĢ数捎 - åĒ’äŊ“ æ­¤čŠå¤ŠåŽ¤ä¸­æ— åĒ’äŊ“ 文äģļ %1$s äēŽ %2$s æ­¤čŠå¤ŠåŽ¤ä¸­æ— æ–‡äģļ - 垃圞äŋĄæ¯ 不合适įš„内厚 č‡Ē厚䚉æŠĨ告â€Ļâ€Ļ @@ -1795,28 +1459,23 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š æŠĨ告此内厚įš„į†į”ą æŠĨ告 åŋŊį•Ĩį”¨æˆˇ - å†…åŽšåˇ˛æŠĨ告 - æ­¤å†…åŽšåˇ˛æŠĨ告。 -\n -\nåĻ‚果您不希望再įœ‹åˆ°æ­¤į”¨æˆˇįš„更多内厚īŧŒæ‚¨å¯äģĨåąč”Ŋäģ–äģĨ隐藏äģ–įš„äŋĄæ¯ + æ­¤å†…åŽšåˇ˛æŠĨ告。 +\n +\nåĻ‚果您不希望再įœ‹åˆ°æ­¤į”¨æˆˇįš„更多内厚īŧŒæ‚¨å¯äģĨåŋŊį•Ĩäģ–äģŦäģĨ隐藏äģ–äģŦįš„äŋĄæ¯ã€‚ æŠĨ告ä¸ē垃圞äŋĄæ¯ - æ­¤å†…åŽšåˇ˛æŠĨ告ä¸ē垃圞äŋĄæ¯ã€‚ -\n -\nåĻ‚果您不希望再įœ‹åˆ°æ­¤į”¨æˆˇįš„更多内厚īŧŒæ‚¨å¯äģĨåąč”Ŋäģ–äģĨ隐藏äģ–įš„äŋĄæ¯ + æ­¤å†…åŽšåˇ˛æŠĨ告ä¸ē垃圞äŋĄæ¯ã€‚ +\n +\nåĻ‚果您不希望再įœ‹åˆ°æ­¤į”¨æˆˇįš„更多内厚īŧŒæ‚¨å¯äģĨåŋŊį•Ĩäģ–äģŦäģĨ隐藏äģ–äģŦįš„äŋĄæ¯ã€‚ æŠĨ告ä¸ē不合适įš„内厚 - æ­¤å†…åŽšåˇ˛æŠĨ告ä¸ē不合适。 -\n -\nåĻ‚果您不希望再įœ‹åˆ°æ­¤į”¨æˆˇįš„更多内厚īŧŒæ‚¨å¯äģĨåąč”Ŋäģ–äģĨ隐藏äģ–įš„äŋĄæ¯ - + æ­¤å†…åŽšåˇ˛æŠĨ告ä¸ē不合适。 +\n +\nåĻ‚果您不希望再įœ‹åˆ°æ­¤į”¨æˆˇįš„更多内厚īŧŒæ‚¨å¯äģĨåŋŊį•Ĩäģ–äģŦäģĨ隐藏äģ–äģŦįš„æļˆæ¯ã€‚ Element 需čĻæƒé™åœ¨įŖį›˜ä¸Šäŋå­˜æ‚¨įš„įĢ¯åˆ°įĢ¯å¯†é’Ĩ。 \n \nč¯ˇåœ¨ä¸‹ä¸ĒåŧšįĒ—ä¸­å…čŽ¸čŽŋ问äģĨäžŋ手动å¯ŧå‡ē密é’Ĩ。 - į›Žå‰æ˛Ąæœ‰įŊ‘įģœčŋžæŽĨ - åŋŊį•Ĩį”¨æˆˇ - 全部æļˆæ¯īŧˆå˜ˆæ‚īŧ‰ 全部æļˆæ¯ äģ…提到我įš„ @@ -1828,22 +1487,17 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š %1$s æœĒ做更攚 您æœĒ做更攚 您æœĒåŋŊį•ĨäģģäŊ•į”¨æˆˇ - é•ŋæŒ‰čŠå¤ŠåŽ¤æŸĨįœ‹æ›´å¤šé€‰éĄš - - %1$s å°†čŠå¤ŠåŽ¤čŽžä¸ē寚äģģäŊ•įŸĨ道链æŽĨįš„į”¨æˆˇå…Ŧåŧ€ã€‚ æ‚¨å°†čŠå¤ŠåŽ¤čŽžä¸ē寚äģģäŊ•įŸĨ道链æŽĨįš„į”¨æˆˇå…Ŧåŧ€ã€‚ %1$s å°†čŠå¤ŠåŽ¤čŽžä¸ēäģ…é™é‚€č¯ˇã€‚ æ‚¨å°†čŠå¤ŠåŽ¤čŽžä¸ēäģ…é™é‚€č¯ˇã€‚ æœĒč¯ģæļˆæ¯ - čŋ™æ˜¯äŊ įš„å¯šč¯ã€‚æ‹Ĩ有厃。 与äēēäģŦį§čŠæˆ–įž¤čŠ 通čŋ‡åŠ å¯†äŋč¯å¯šč¯į§å¯† æ‰Šåą• & č‡Ē厚䚉您įš„äŊ“éĒŒ åŧ€å§‹å§ - é€‰æ‹ŠæœåŠĄå™¨ å°ąåƒį”ĩ子邎äģļīŧŒč´Ļæˆˇæœ‰ä¸€ä¸ĒåŽļīŧŒå°ŊįŽĄæ‚¨å¯äģĨ与äģģäŊ•äēēčŠå¤Š 在最大įš„å…Ŧå…ąæœåŠĄå™¨ä¸Šå…č´šåŠ å…Ĩ数į™žä¸‡į”¨æˆˇ @@ -1851,7 +1505,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š äē†č§Ŗ更多 å…ļäģ– č‡Ē厚䚉 & éĢ˜įē§čŽžįŊŽ - įģ§įģ­ čŋžæŽĨ到 %1$s čŋžæŽĨ到 Element Matrix æœåŠĄ @@ -1860,14 +1513,12 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š æŗ¨å†Œ į™ģå…Ĩ äŊŋį”¨å•į‚šį™ģåŊ•įģ§įģ­ - Element Matrix æœåŠĄåœ°å€ 地址 éĸ向įģ„įģ‡įš„éĢ˜įē§æ‰˜įŽĄ 输å…Ĩ Modular Element 或您æƒŗäŊŋį”¨įš„æœåŠĄå™¨åœ°å€ 输å…Ĩ您æƒŗčĻčŋžæŽĨįš„æœåŠĄå™¨æˆ– Element įš„地址 输å…Ĩ您æƒŗäŊŋį”¨įš„æœåŠĄå™¨įš„地址 - čŊŊå…ĨéĄĩéĸæ—ļå‡ē错īŧš%1$s (%2$d) åē”į”¨æ— æŗ•į™ģåŊ•åˆ°æ­¤åŽļåē­æœåŠĄå™¨ã€‚åŽļåē­æœåŠĄå™¨æ”¯æŒäģĨ下į™ģåŊ•įąģ型īŧš%1$s。 \n @@ -1876,58 +1527,46 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š åē”į”¨æ— æŗ•åœ¨æ­¤æœåŠĄå™¨ä¸Šåˆ›åģēč´Ļæˆˇã€‚ \n \n您æƒŗčĻé€ščŋ‡įŊ‘éĄĩåŽĸæˆˇįĢ¯æŗ¨å†Œå—īŧŸ - į”ĩ子邎äģļæœĒå…ŗč”åˆ°äģģäŊ•č´Ļæˆˇã€‚ - 在 %1$s 上重įŊŽå¯†į  éĒŒč¯é‚Žäģļ将发送到您įš„æ”ļäģļįŽąäģĨįĄŽčŽ¤čŽžįŊŽæ‚¨įš„新密į ã€‚ 下一ä¸Ē į”ĩ子邎äģļ 新密į  - æŗ¨æ„īŧ 更攚您įš„密į å°†é‡įŊŽæ‰€æœ‰äŧšč¯ä¸Šįš„įĢ¯åˆ°įĢ¯åŠ å¯†å¯†é’ĨīŧŒäģŽč€ŒäŊŋåŠ å¯†čŠå¤ŠčŽ°åŊ•æ— æŗ•č¯ģå–ã€‚åœ¨é‡čŽžå¯†į äš‹å‰īŧŒč¯ˇčŽžįŊŽâ€œå¯†é’Ĩ备äģŊ”或äģŽåĻ一ä¸Ēäŧšč¯ä¸­å¯ŧå‡ēčŠå¤ŠåŽ¤å¯†é’Ĩ。 įģ§įģ­ - į”ĩ子邎äģļæœĒ链æŽĨ到äģģäŊ•č´Ļæˆˇ - æŖ€æŸĨ您įš„æ”ļäģļįŽą éĒŒč¯į”ĩ子邎äģļåˇ˛å‘é€åˆ° %1$s。 į‚šå‡ģ链æŽĨäģĨįĄŽčŽ¤æ‚¨įš„新密į ã€‚čˇŸéšåŒ…åĢįš„é“žæŽĨéĒŒč¯åŽīŧŒč¯ˇį‚šå‡ģ下斚。 æˆ‘åˇ˛éĒŒč¯æˆ‘įš„į”ĩ子邎äģļ地址 - 成功īŧ 您įš„密į åˇ˛é‡įŊŽã€‚ æ‚¨åˇ˛į™ģå‡ē全部äŧšč¯īŧŒä¸äŧšå†æŽĨæ”ļ到推送通įŸĨ。č‹ĨčĻé‡æ–°å¯į”¨é€šįŸĨīŧŒč¯ˇåœ¨æ¯ä¸ĒčŽžå¤‡ä¸Šå†æŦĄį™ģåŊ•ã€‚ čŋ”回į™ģåŊ• - æŗ¨æ„ 您įš„密į å°šæœĒ更攚。 \n \n是åĻ中æ­ĸ密į æ›´æ”ščŋ‡į¨‹īŧŸ - 莞įŊŽį”ĩ子邎äģļ地址 莞įŊŽį”ĩ子邎äģļį”¨äēŽæĸ复您įš„å¸æˆˇã€‚äš‹åŽīŧŒæ‚¨å¯äģĨé€‰æ‹Šå…čŽ¸æ‚¨čŽ¤č¯†įš„äēē通čŋ‡į”ĩ子邎äģļ发įŽ°æ‚¨ã€‚ į”ĩ子邎äģļ į”ĩ子邎äģļīŧˆå¯é€‰īŧ‰ 下一ä¸Ē - 莞įŊŽį”ĩč¯åˇį  莞įŊŽį”ĩč¯åˇį īŧŒäģĨé€‰æ‹Šå…čŽ¸æ‚¨čŽ¤č¯†įš„äēē发įŽ°æ‚¨ã€‚ č¯ˇäŊŋį”¨å›Ŋ际æ ŧåŧã€‚ į”ĩč¯åˇį  į”ĩč¯åˇį īŧˆå¯é€‰īŧ‰ 下一ä¸Ē - įĄŽčŽ¤į”ĩč¯åˇį  我äģŦ向 %1$s 发送äē†éĒŒč¯į ã€‚åœ¨ä¸‹æ–ščž“å…Ĩ厃äģĨéĒŒč¯æ‚¨įš„čēĢäģŊ。 输å…ĨéĒŒč¯į  重新发送 下一ä¸Ē - å›Ŋ际į”ĩč¯åˇį åŋ…éĄģäģĨ ‘+’ åŧ€å¤´ į”ĩč¯åˇį äŧŧäšŽæ— æ•ˆã€‚č¯ˇæŖ€æŸĨ - 在 %1$s 上æŗ¨å†Œ į”¨æˆˇåæˆ–į”ĩ子邎äģļ į”¨æˆˇå @@ -1938,24 +1577,20 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 您įš„å¸æˆˇå°šæœĒ创åģē。 \n \n是åĻ中æ­ĸæŗ¨å†Œčŋ‡į¨‹īŧŸ - 选拊 matrix.org 选拊 Element Matrix Services 选拊č‡Ē厚䚉åŽļåē­æœåŠĄå™¨ č¯ˇčŋ›čĄŒäēēæœēéĒŒč¯ æŽĨå—æĄæŦžäģĨįģ§įģ­ - č¯ˇæŖ€æŸĨ您įš„į”ĩ子邎äģļ 我äģŦ向 %1$s 发送äē†į”ĩ子邎äģļ。 \nč¯ˇį‚šå‡ģå…ļ中包åĢįš„é“žæŽĨįģ§įģ­č´Ļæˆˇåˆ›åģē。 输å…Ĩįš„éĒŒč¯į ä¸æ­ŖįĄŽã€‚č¯ˇæŖ€æŸĨ。 čŋ‡æ—ļįš„åŽļåē­æœåŠĄå™¨ æ­¤åŽļåē­æœåŠĄå™¨čŋčĄŒįš„į‰ˆæœŦčŋ‡æ—§äģĨč‡ŗäēŽæ— æŗ•čŋžæŽĨ。čĻæą‚您įš„åŽļåē­æœåŠĄå™¨įŽĄį†å‘˜å‡įē§ã€‚ - 发送äē†å¤Ēå¤šč¯ˇæą‚ã€‚æ‚¨å¯äģĨ在 %1$d į§’åŽé‡č¯•â€Ļ - æˆ–č€…īŧŒåĻ‚æžœæ‚¨åˇ˛įģæ‹Ĩ有č´ĻæˆˇåšļįŸĨ道您įš„ Matrix æ ‡č¯†įŦĻ和密į īŧŒæ‚¨å¯äģĨäŊŋį”¨čŋ™į§æ–šåŧīŧš äŊŋį”¨ Matrix ID į™ģåŊ• äŊŋį”¨ Matrix ID į™ģåŊ• @@ -1964,7 +1599,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š åĻ‚果您不įŸĨ道您įš„密į īŧŒčŋ”回åšļ重įŊŽã€‚ čŋ™ä¸æ˜¯ä¸€ä¸Ē有效įš„į”¨æˆˇæ ‡č¯†įŦĻ。期望įš„æ ŧåŧīŧš\'@user:homeserver.org\' 无æŗ•æ‰žåˆ°æœ‰æ•ˆįš„åŽļåē­æœåŠĄå™¨ã€‚č¯ˇæŖ€æŸĨ您įš„æ ‡č¯†įŦĻ - æ‚¨åˇ˛į™ģå‡ē čŋ™å¯čƒŊį”ąäēŽå¤šį§åŽŸå› īŧš \n @@ -1974,7 +1608,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š \n \nâ€ĸ 您įš„æœåŠĄå™¨įŽĄį†å‘˜å‡ēäēŽåŽ‰å…¨åŽŸå› åˇ˛å–æļˆæ‚¨įš„čŽŋ闎权限。 重新į™ģå…Ĩ - æ‚¨åˇ˛į™ģå‡ē į™ģå…Ĩ 您įš„åŽļåē­æœåŠĄå™¨ (%1$s) įŽĄį†å‘˜å°†æ‚¨äģŽæ‚¨įš„č´Ļæˆˇ %2$s (%3$s) į™ģå‡ē。 @@ -1986,7 +1619,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š \n \nåĻ‚果您不再äŊŋį”¨æ­¤čŽžå¤‡īŧŒæˆ–æƒŗį™ģå…ĨåĻ一ä¸Ēå¸æˆˇīŧŒč¯ˇæ¸…除厃。 清除全部数捎 - 清除数捎 是åĻ清除åŊ“å‰å­˜å‚¨åœ¨æ­¤čŽžå¤‡ä¸Šįš„全部数捎īŧŸ \n再æŦĄį™ģå…ĨäģĨčŽŋ闎您įš„å¸æˆˇæ•°æŽå’Œæļˆæ¯ã€‚ @@ -1994,12 +1626,9 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 清除数捎 åŊ“前äŧšč¯į”¨äēŽį”¨æˆˇ %1$s č€Œæ‚¨æäž›äē†į”¨æˆˇ %2$s įš„å‡­č¯ã€‚Element 不支持此功čƒŊ。 \nč¯ˇå…ˆæ¸…é™¤æ•°æŽīŧŒį„ļ后重新į™ģå…ĨåĻ一ä¸Ēč´Ļæˆˇã€‚ - 您įš„ matrix.to 链æŽĨ更是不æ­ŖįĄŽ 描čŋ°å¤ĒįŸ­ - 初始同æ­Ĩâ€Ļ - æŸĨįœ‹æˆ‘įš„全部äŧšč¯ éĢ˜įē§čŽžįŊŽ åŧ€å‘č€…æ¨Ąåŧ @@ -2011,26 +1640,19 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 莞įŊŽ åŊ“前äŧšč¯ å…ļäģ–äŧšč¯ - äģ…昞į¤ēįŦŦ一ä¸Ēįģ“æžœīŧŒč¯ˇčž“å…Ĩ更多字įŦĻâ€Ļ - åŋĢé€Ÿå¤ąč´Ĩ 发į”Ÿæ„å¤–é”™č¯¯æ—ļīŧŒElement 可čƒŊ更įģå¸¸å´Šæēƒ - 在明文æļˆæ¯å‰æˇģ加 ¯\\_(ツ)_/¯ - 启į”¨åŠ å¯† 一æ—Ļ启į”¨īŧŒåŠ å¯†æ— æŗ•įĻį”¨ã€‚ - 您įš„į”ĩ子邎äģļ域无权æŗ¨å†Œæ­¤æœåŠĄå™¨ - 不可äŋĄį™ģå…Ĩ 匚配 不匚配 įĄŽčŽ¤ä¸‹æ–šį‹Ŧį‰ščĄ¨æƒ…äģĨį›¸åŒéĄēåēå‡ēįŽ°åœ¨äģ–äģŦįš„åąåš•ä¸ŠīŧŒäģĨéĒŒč¯æ­¤į”¨æˆˇã€‚ ä¸ēäē†čŽˇåž—最éĢ˜įš„厉全性īŧŒč¯ˇäŊŋį”¨å…ļäģ–可äŋĄé€šäŋĄæ–šåŧæˆ–äē˛č‡ĒįĄŽčŽ¤ã€‚ å¯ģ扞įģŋ色į›žį‰ŒäģĨįĄŽäŋį”¨æˆˇå¯äŋĄã€‚äŋĄäģģčŠå¤ŠåŽ¤ä¸­įš„所有į”¨æˆˇäģĨįĄŽäŋčŠå¤ŠåŽ¤įš„厉全。 - 不厉全 äģĨ下å…ļä¸­ä¸€éĄšå¯čƒŊäŧšå—åˆ°å¨čƒīŧš \n @@ -2038,13 +1660,11 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š \n - 您éĒŒč¯įš„į”¨æˆˇčŋžæŽĨ到įš„åŽļåē­æœåŠĄå™¨ \n - 您或å…ļ厃į”¨æˆˇįš„įŊ‘įģœčŋžæŽĨ \n - 您或å…ļäģ–į”¨æˆˇįš„čŽžå¤‡ - 视éĸ‘。 回į‰‡ã€‚ éŸŗéĸ‘ 文äģļ č´´įē¸ - æ­Ŗ在į­‰åž…â€Ļ %s åˇ˛å–æļˆ æ‚¨åˇ˛å–æļˆ @@ -2054,21 +1674,15 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š éĒŒč¯č¯ˇæą‚ éĒŒč¯æ­¤äŧšč¯ 手动éĒŒč¯ - 您 - äŊŋį”¨å…ļäģ–į”¨æˆˇįš„čŽžå¤‡æ‰Ģ描此į äģĨ厉全地į›¸äē’éĒŒč¯ æ‰Ģ描äģ–äģŦįš„į  无æŗ•æ‰Ģ描 åĻ‚果您不在įŽ°åœēīŧŒč¯ˇæ¯”čžƒčĄ¨æƒ…įŦĻåˇ - 通čŋ‡æ¯”čžƒčĄ¨æƒ…įŦĻåˇéĒŒč¯ - 通čŋ‡čĄ¨æƒ…éĒŒč¯ åĻ‚果您无æŗ•æ‰Ģ描上斚įš„į īŧŒé€ščŋ‡æ¯”čžƒįŽ€įŸ­į‹Ŧį‰šįš„čĄ¨æƒ…åēåˆ—éĒŒč¯ã€‚ - äēŒįģ´į å›žį‰‡ - éĒŒč¯ %s åˇ˛éĒŒč¯ %s æ­Ŗ在į­‰åž… %sâ€Ļ @@ -2091,52 +1705,38 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 上äŧ  įĻģåŧ€čŠå¤ŠåŽ¤ æ­Ŗ在įĻģåŧ€čŠå¤ŠåŽ¤â€Ļ - įŽĄį†å‘˜ åŽĄæŸĨ员 č‡Ē厚䚉 é‚€č¯ˇ į”¨æˆˇ - %1$s įŽĄį†å‘˜ %1$s åŽĄæŸĨ员 %1$s éģ˜čŽ¤æƒé™ %2$s č‡Ē厚䚉权限 (%1$d) - Element 无æŗ•å¤„į† \'%1$s\' įąģ型äē‹äģļ Element 无æŗ•å¤„į† \'%1$s\' įąģ型æļˆæ¯ Element åœ¨æ¸˛æŸ“ id ä¸ē \'%1$s\' įš„äē‹äģļ内厚æ—ļ遇到äē†ä¸€ä¸Ē问éĸ˜ - 取æļˆåŋŊį•Ĩ - č¯Ĩäŧšč¯æ— æŗ•ä¸Žæ‚¨įš„å…ļäģ–äŧšč¯å…ąäēĢæ­¤éĒŒč¯ã€‚ \néĒŒč¯å°†äŋå­˜åœ¨æœŦ地īŧŒåšļ在此åē”į”¨įš„æœĒæĨį‰ˆæœŦä¸­å…ąäēĢ。 - 最čŋ‘äŊŋį”¨įš„čŠå¤ŠåŽ¤ å…ļäģ–čŠå¤ŠåŽ¤ - 发送åŊŠč™šč‰˛įģ™åŽšæļˆæ¯ 发送åŊŠč™šč‰˛įģ™åŽščĄ¨æƒ… - æ—ļ间įēŋ - æļˆæ¯įŧ–čž‘å™¨ - 启į”¨įĢ¯åˆ°įĢ¯åŠ å¯† 一æ—Ļ启į”¨īŧŒåŠ å¯†æ— æŗ•įĻį”¨ã€‚ - 是åĻ启į”¨åŠ å¯†īŧŸ 启į”¨åŽīŧŒå°†æ— æŗ•įĻį”¨čŠå¤ŠåŽ¤åŠ å¯†ã€‚æœåŠĄå™¨æ— æŗ•įœ‹åˆ°åŠ å¯†čŠå¤ŠåŽ¤ä¸­å‘送įš„æļˆæ¯īŧŒåĒæœ‰čŠå¤ŠåŽ¤įš„å‚ä¸Žč€…æ‰čƒŊįœ‹åˆ°ã€‚启į”¨åŠ å¯†å¯čƒŊäŧšé˜ģæ­ĸčŽ¸å¤šæœē器äēē和æĄĨæŽĨæ­Ŗ常åˇĨäŊœã€‚ 启į”¨åŠ å¯† - ä¸ēäŋč¯åŽ‰å…¨īŧŒé€ščŋ‡æŖ€æŸĨ一æŦĄæ€§äģŖį éĒŒč¯ %s。 ä¸ēäŋč¯åŽ‰å…¨īŧŒäē˛č‡Ē或äŊŋį”¨å…ļäģ–通äŋĄæ–šåŧéĒŒč¯ã€‚ - æ¯”čžƒį‹Ŧį‰ščĄ¨æƒ…īŧŒįĄŽäŋåŽƒäģŦäģĨį›¸åŒéĄēåēå‡ēįŽ°ã€‚ 与å…ļäģ–į”¨æˆˇčŽžå¤‡ä¸Šæ˜žį¤ēįš„äģŖį æ¯”čžƒã€‚ 与此į”¨æˆˇįš„æļˆæ¯įĢ¯åˆ°įĢ¯åŠ å¯†īŧŒæ— æŗ•čĸĢįŦŦ三斚č¯ģ取。 您įš„æ–°äŧšč¯åˇ˛éĒŒč¯ã€‚厃可äģĨčŽŋ闎您įš„加密æļˆæ¯īŧŒå…ļäģ–į”¨æˆˇäŧšå°†å…ļ视ä¸ē可äŋĄã€‚ - äē¤å‰į­žå äē¤å‰į­žååˇ˛å¯į”¨ \nčŽžå¤‡ä¸Šįš„į§é’Ĩ。 @@ -2146,55 +1746,39 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š äē¤å‰į­žååˇ˛å¯į”¨ã€‚ \n密é’Ĩ不可äŋĄ äē¤å‰į­žåæœĒ启į”¨ - 您įš„æœåŠĄå™¨įŽĄį†å‘˜åˇ˛éģ˜čŽ¤įĻį”¨į§æœ‰čŠå¤ŠåŽ¤å’Œį§čŠæļˆæ¯įĢ¯åˆ°įĢ¯åŠ å¯†ã€‚ æŋ€æ´ģäŧšč¯ 昞į¤ē全部äŧšč¯ įŽĄį†äŧšč¯ į™ģå‡ēæ­¤äŧšč¯ - 加密äŋĄæ¯ä¸å¯į”¨ - æ­¤äŧšč¯å¯šåŽ‰å…¨æļˆæ¯å¯äŋĄå› ä¸ēæ‚¨åˇ˛éĒŒč¯åŽƒīŧš éĒŒč¯æ­¤äŧšč¯äģĨ将å…ļæ ‡čŽ°ä¸ē可äŋĄīŧŒåšļ授äēˆå…ļčŽŋ闎加密æļˆæ¯įš„权限。åĻ‚果您æœĒį™ģåŊ•æ­¤äŧšč¯īŧŒåˆ™æ‚¨įš„å¸æˆˇå¯čƒŊåˇ˛čĸĢį›—īŧš - %d ä¸Ēæ´ģ动äŧšč¯ - éĒŒč¯æ­¤į™ģåŊ• å…ļäģ–į”¨æˆˇå¯čƒŊ不äŋĄäģģ厃 厌善厉全 - äŊŋį”¨įŽ°æœ‰äŧšč¯æĨéĒŒč¯æ­¤äŧšč¯īŧŒåšļ授äēˆå…ļčŽŋ闎加密æļˆæ¯įš„权限。 - - éĒŒč¯ åˇ˛éĒŒč¯ æŗ¨æ„ - 无æŗ•čŽˇå–äŧšč¯ äŧšč¯ 可äŋĄ 不可äŋĄ - æ­¤äŧšč¯å¯šåŠ å¯†æļˆæ¯å¯äŋĄīŧŒ%1$s (%2$s) åˇ˛éĒŒč¯åŽƒīŧš %1$s (%2$s) äŊŋį”¨æ–°äŧšč¯į™ģå…Ĩīŧš 在此į”¨æˆˇäŋĄäģģæ­¤äŧšč¯äš‹å‰īŧŒå‘送到č¯Ĩäŧšč¯å’ŒäģŽč¯Ĩäŧšč¯å‘送įš„æļˆæ¯å‡æ ‡æœ‰č­Ļå‘Šã€‚æˆ–č€…īŧŒæ‚¨å¯äģĨ手动čŋ›čĄŒéĒŒč¯ã€‚ - - 初始化äē¤å‰į­žå 重įŊŽå¯†é’Ĩ - äēŒįģ´į  - åŋĢčĻåŽŒæˆäē†īŧ%s 昞į¤ēį›¸åŒįš„į›žį‰Œäē†å—īŧŸ äŊŋ åĻ - åˆ°æœåŠĄå™¨įš„čŋžæŽĨåˇ˛ä¸ĸå¤ą éŖžčĄŒæ¨Ąåŧåˇ˛æ‰“åŧ€ - åŧ€å‘åˇĨå…ˇ č´Ļæˆˇæ•°æŽ @@ -2207,44 +1791,33 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 创åģēįŽ€å•č°ƒæŸĨ äŊŋį”¨æĸ复įŸ­č¯­æˆ–密é’Ĩ åĻ‚果您无æŗ•čŽŋé—Žåˇ˛æœ‰äŧšč¯ - 新į™ģå…Ĩ - 无æŗ•åœ¨å­˜å‚¨ä¸­æ‰žåˆ°į§˜å¯† 输å…Ĩį§˜å¯†å­˜å‚¨å¯†į  æŗ¨æ„īŧš 您åē”äģ…在可äŋĄčŽžå¤‡ä¸ŠčŽŋ问į§˜å¯†å­˜å‚¨ - į§ģ除â€Ļ 您æƒŗčĻå‘送此附äģļ到 %1$s 吗īŧŸ 发送原始å°ē寸回į‰‡ - įĄŽčŽ¤į§ģ除 您įĄŽåŽžæƒŗčĻį§ģ除īŧˆåˆ é™¤īŧ‰æ­¤äē‹äģļ吗īŧŸæŗ¨æ„åĻ‚æžœæ‚¨åˆ é™¤čŠå¤ŠåŽ¤åæˆ–č¯éĸ˜æ›´æ”šīŧŒå¯äģĨ撤销更攚。 附加į†į”ą įŧ–čž‘į†į”ą - äē‹äģļčĸĢį”¨æˆˇåˆ é™¤īŧŒį†į”ąīŧš%1$s Element Android - 密é’Ĩč¯ˇæą‚ - č§Ŗ锁加密æļˆæ¯åŽ†å˛ - åˆˇæ–° - 新į™ģåŊ•ã€‚是您吗īŧŸ čŊģ按äģĨåŽĄæ ¸å’ŒéĒŒč¯ äŊŋį”¨æ­¤äŧšč¯éĒŒč¯æ–°įš„äŧšč¯īŧŒæŽˆæƒčŽŋ闎加密æļˆæ¯ã€‚ čŋ™ä¸æ˜¯æˆ‘ 您įš„č´Ļæˆˇå¯čƒŊåˇ˛čĸĢį›—į”¨ - åĻ‚果您取æļˆīŧŒæ‚¨å°†æ— æŗ•åœ¨æ­¤čŽžå¤‡ä¸Šč¯ģ取加密æļˆæ¯īŧŒå…ļäģ–į”¨æˆˇä¸äŧšäŋĄäģģ厃 åĻ‚果您取æļˆīŧŒæ‚¨å°†æ— æŗ•åœ¨æ–°čŽžå¤‡ä¸Šč¯ģ取加密æļˆæ¯īŧŒå…ļäģ–į”¨æˆˇä¸äŧšäŋĄäģģ厃 åĻ‚果您įŽ°åœ¨å–æļˆå°†ä¸äŧšéĒŒč¯ %1$s (%2$s)。在äģ–äģŦįš„į”¨æˆˇä¸ĒäēēæĄŖæĄˆä¸­é‡æ–°åŧ€å§‹ã€‚ - äģĨ下å…ļä¸­ä¸€éĄšå¯čƒŊ有éŖŽé™Šīŧš \n \n- 您įš„密į  @@ -2253,35 +1826,25 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š \n- čŽžå¤‡äŊŋį”¨įš„įŊ‘įģœčŋžæŽĨ \n \n我äģŦæŽ¨čæ‚¨åœ¨čŽžįŊŽä¸­įĢ‹åŗ更æĸ您įš„密į å’Œæĸ复密é’Ĩ。 - 通čŋ‡čŽžįŊŽéĒŒč¯æ‚¨įš„čŽžå¤‡ã€‚ éĒŒč¯åˇ˛å–æļˆ - æĸ复密į  æļˆæ¯å¯†é’Ĩ č´Ļæˆˇå¯†į  - 莞įŊŽä¸€ä¸Ē %s į”Ÿæˆæļˆæ¯å¯†é’Ĩ - įĄŽčŽ¤ %s - 输å…Ĩ您įš„ %s äģĨįģ§įģ­ã€‚ - 再æŦĄčž“å…Ĩ您įš„ %s įĄŽčŽ¤ã€‚ 不čĻäŊŋį”¨æ‚¨įš„č´Ļæˆˇå¯†į ã€‚ - 输å…ĨåĒ有äŊ įŸĨ道įš„厉全åŖäģ¤īŧŒį”¨äēŽäŋæŠ¤æœåŠĄå™¨ä¸Šįš„į§˜å¯†ã€‚ - čŋ™å¯čƒŊäŧščŠąč´šæ•°į§’īŧŒč¯ˇč€åŋƒį­‰åž…。 莞įŊŽæĸ复。 您įš„æĸ复密é’Ĩ 厌成äē†īŧ äŋæŒåŽ‰å…¨ 厌成 - äŊŋį”¨æ­¤ %1$s äŊœä¸ē厉全įŊ‘äģĨé˜˛æ‚¨åŋ˜čŽ°æ‚¨įš„ %2$s。 - 发布创åģēįš„čēĢäģŊ密é’Ĩ äģŽå¯†į į”ŸæˆåŽ‰å…¨å¯†é’Ĩ æ­Ŗ在厚䚉 SSSS éģ˜čŽ¤å¯†é’Ĩ @@ -2289,31 +1852,21 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š æ­Ŗ在同æ­Ĩį”¨æˆˇå¯†é’Ĩ æ­Ŗ在同æ­Ĩč‡Ēį­žåå¯†é’Ĩ æ­Ŗåœ¨čŽžįŊŽå¯†é’Ĩ备äģŊ - - 您įš„ %2$s 和 %1$s åˇ˛čŽžįŊŽã€‚ \n \nč¯ˇåŽ‰å…¨åœ°äŋįŽĄåŽƒã€‚åĻ‚果您ä¸ĸå¤ąäē†å…¨éƒ¨æ´ģ动äŧšč¯æ‚¨å°†éœ€čĻäŊŋį”¨åŽƒäģŦč§Ŗ锁加密æļˆæ¯å’ŒåŽ‰å…¨äŋĄæ¯ã€‚ - 将厃打印å‡ēæĨåšļ存攞在厉全įš„地斚 发送įˆ†é›ˇäŋĄæ¯ įˆ†é›ˇ 输å…Ĩå…ŗ锎字äģĨæŸĨæ‰žčĄ¨æƒ…ã€‚ - åˇ˛é˜… - čˇŗč‡ŗåˇ˛č¯ģ回执 - äē‹äģļčĸĢčŠå¤ŠåŽ¤įŽĄį†å‘˜č°ƒæ•´īŧŒį†į”ąīŧš%1$s - 密é’Ĩåˇ˛æ˜¯æœ€æ–°īŧ - äŋæŠ¤ä¸Žč§Ŗé”åˇ˛åŠ å¯†äŋĄæ¯åšļäŋĄäģģ%s。 äŋå­˜åˆ°äŧ˜į›˜æˆ–č€…å¤‡äģŊį›˜ 复åˆļ到您įš„ä¸Ēäēēäē‘存储 - 您无æŗ•åœ¨į§ģåŠ¨čŽžå¤‡ä¸Šæ‰§čĄŒæ­¤æ“äŊœ - 莞įŊŽæĸ复密į čŽŠæ‚¨čƒŊ够äŋæŠ¤å’Œč§Ŗ锁加密äŋĄæ¯åšļäŋĄäģģčŽžå¤‡ã€‚ \n \nåĻ‚æžœæ‚¨ä¸å¸Œæœ›čŽžįŊŽæ–‡æœŦ密į īŧŒé‚Ŗ䚈į”Ÿæˆå¯†é’ĨäēĻ可。 @@ -2321,21 +1874,16 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š åĻ‚果您įŽ°åœ¨å–æļˆīŧŒé‚Ŗ䚈åŊ“æ‚¨å¤ąåŽģį™ģåŊ•æƒé™æ—ļ也äŧšä¸ĸå¤ąåŠ å¯†įš„äŋĄæ¯å’Œæ•°æŽã€‚ \n \n您䚟可äģĨ通čŋ‡čŽžįŊŽčœå•æĨåģēįĢ‹äŋæŠ¤å¤‡äģŊäģĨ及įŽĄį†æ‚¨įš„密é’Ĩ。 - 加密åŧ€å¯ æœŦčŠå¤ŠåŽ¤äŋĄæ¯åˇ˛įģįĢ¯å¯šįĢ¯åŠ å¯†ã€‚éĒŒč¯æˆå‘˜æ—ļīŧŒč¯ˇæŸĨįœ‹å…ļä¸ĒäēēæĄŖæĄˆäģĨäē†č§Ŗ更多äŋĄæ¯ã€‚ 加密æœĒåŧ€å¯ 不支持æœŦčŠå¤ŠåŽ¤äŊŋį”¨įš„加密斚åŧ - %s 创åģēåšļ配įŊŽäē†čŠå¤ŠåŽ¤ã€‚ 您创åģēåšļ配įŊŽäē†čŠå¤ŠåŽ¤ã€‚ - æŽĨčŋ‘厌成īŧåĻ外įš„čŽžå¤‡æ˜¯åĻæ­Ŗ昞į¤ēį›¸åŒįš„į›žį‰Œå›žæ ‡īŧŸ æŽĨčŋ‘厌成īŧį­‰å€™įĄŽčŽ¤â€Ļâ€Ļ æ­Ŗ在į­‰å€™ %sâ€Ļ - å¯ŧå…Ĩ密é’Ĩå¤ąč´Ĩ - 通įŸĨ配įŊŽ ä¸€å¯šä¸€čŠå¤Šįš„加密äŋĄæ¯ įž¤čŠįš„加密äŋĄæ¯ @@ -2343,26 +1891,19 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š åŊ“čŠå¤ŠåŽ¤å‡įē§ æ•…éšœč¯Šæ–­ 按äē‹äģļ莞įŊŽé€šįŸĨ重čĻæ€§ - äģĨįē¯æ–‡æœŦåŊĸåŧå‘送æļˆæ¯īŧŒč€Œä¸å°†å…ļč§Ŗ释ä¸ē markdown - į”¨æˆˇåå’Œ/或密į ä¸æ­ŖįĄŽã€‚čž“å…Ĩįš„密į äģĨįŠēæ ŧåŧ€å¤´æˆ–įģ“å°žīŧŒč¯ˇæŖ€æŸĨ。 æ­¤å¸æˆˇåˇ˛åœį”¨ã€‚ - æļˆæ¯â€Ļ - 加密升įē§å¯į”¨ 启į”¨äē¤å‰į­žå éĒŒč¯æ‚¨č‡Ēåˇąå’Œå…ļäģ–äēēäģĨäŋč¯æ‚¨įš„čŠå¤ŠåŽ‰å…¨ - 输å…Ĩ您įš„ %s äģĨįģ§įģ­ äŊŋį”¨æ–‡äģļ - 输å…Ĩ %s æĸ复密į  无效įš„æĸ复密é’Ĩ č¯ˇčž“å…Ĩæĸ复密é’Ĩ - æŖ€æŸĨ备äģŊ密é’Ĩ æŖ€æŸĨ备äģŊ密é’Ĩ (%s) čŽˇå–æ›˛įēŋ密é’Ĩ @@ -2371,20 +1912,16 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š äģŽæĸ复密é’Ĩį”Ÿæˆ SSSS 密é’Ĩ æ­Ŗ在在 SSSS 中äŋå­˜å¯†é’Ĩ备äģŊį§˜å¯† %1$s (%2$s) - 输å…Ĩ您įš„密é’Ĩ备äģŊ密į äģĨįģ§įģ­ã€‚ äŊŋį”¨æ‚¨įš„密é’Ĩ备äģŊæĸ复密é’Ĩ 不įŸĨ道您įš„密é’Ĩ备äģŊ密į īŧŒæ‚¨å¯äģĨ %s。 密é’Ĩ备äģŊæĸ复密é’Ĩ - é˜ģæ­ĸåē”į”¨å†…åąåš•æˆĒ回 启į”¨æ­¤čŽžįŊŽæˇģ加 FLAG_SECURE 到所有æ´ģ动。重启åē”į”¨äŊŋ更攚į”Ÿæ•ˆã€‚ - åĒ’äŊ“æ–‡äģļåˇ˛æˇģ加到į›¸å†Œ 无æŗ•æˇģ加åĒ’äŊ“æ–‡äģļ到į›¸å†Œ 无æŗ•äŋå­˜åĒ’äŊ“æ–‡äģļ 选拊新įš„č´Ļæˆˇå¯†į â€Ļ - 在您įš„å…ļäģ–čŽžå¤‡ä¸ŠäŊŋį”¨æœ€æ–°įš„ ElementīŧŒElement WebīŧŒElement DesktopīŧŒElement iOSīŧŒElement for AndroidīŧŒæˆ–å…ļäģ–čƒŊ够äē¤å‰į­žåįš„ Matrix åŽĸæˆˇįĢ¯ Element Web \nElement Desktop @@ -2399,28 +1936,23 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 选拊您įš„æĸ复密é’ĨīŧŒæˆ–æ‰‹åŠ¨čž“å…Ĩ或äģŽå‰Ēč´´æŋį˛˜č´´ 无æŗ•äŊŋį”¨æ­¤æĸ复密é’Ĩč§Ŗ密备äģŊīŧšč¯ˇįĄŽčŽ¤æ‚¨čž“å…Ĩäē†æ­ŖįĄŽįš„æĸ复密é’Ĩ。 čŽŋé—ŽåŽ‰å…¨å­˜å‚¨å¤ąč´Ĩ - æœĒ加密 į”ąæœĒéĒŒč¯čŽžå¤‡åŠ å¯† æŸĨįœ‹æ‚¨įš„į™ģå…ĨäŊįŊŽ éĒŒč¯æ‚¨įš„全部äŧšč¯įĄŽäŋæ‚¨įš„č´Ļæˆˇå’Œæļˆæ¯åŽ‰å…¨ éĒŒč¯čŽŋ闎您įš„č´Ļæˆˇįš„æ–°į™ģåŊ•īŧš%1$s - äŊŋį”¨æ–‡æœŦ手动éĒŒč¯ éĒŒč¯į™ģåŊ• äŊŋį”¨čĄ¨æƒ…äē¤äē’åŧéĒŒč¯ 通čŋ‡äģŽæ‚¨įš„å…ļäģ–äŧšč¯éĒŒč¯æ­¤į™ģåŊ•įĄŽčŽ¤æ‚¨įš„čēĢäģŊīŧŒæŽˆæƒåŽƒčŽŋ闎您įš„加密æļˆæ¯ã€‚ æ ‡čŽ°ä¸ē可äŋĄ - č¯ˇé€‰æ‹Šį”¨æˆˇåã€‚ č¯ˇé€‰æ‹Šå¯†į ã€‚ äģ”įģ†æŖ€æŸĨ此铞æŽĨ 链æŽĨ %1$s æ­Ŗ在将您å¸Ļ到åĻ一ä¸ĒįĢ™į‚šīŧš%2$s。 \n \n您įĄŽåŽšæƒŗčĻįģ§įģ­å—īŧŸ - 我äģŦ无æŗ•åˆ›åģē您įš„į§čŠæļˆæ¯ã€‚č¯ˇæŖ€æŸĨ您čĻé‚€č¯ˇįš„į”¨æˆˇåšļé‡č¯•ã€‚ - æˇģ加成员 é‚€č¯ˇ æ­Ŗåœ¨é‚€č¯ˇį”¨æˆˇâ€Ļ @@ -2431,11 +1963,9 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š é‚€č¯ˇåˇ˛å‘é€åˆ° %1$s 和 %2$s į­‰ 我äģŦ无æŗ•é‚€č¯ˇį”¨æˆˇīŧŒč¯ˇæŖ€æŸĨ您æƒŗčĻé‚€č¯ˇįš„į”¨æˆˇåšļé‡č¯•ã€‚ - åŊ“å‰č¯­č¨€ å…ļäģ–可į”¨č¯­č¨€ æ­Ŗ在čŊŊå…Ĩ可į”¨č¯­č¨€â€Ļ - 打åŧ€ %s æĄæŦž 是åĻäģŽčēĢäģŊæœåŠĄå™¨ %s 断åŧ€īŧŸ čēĢäģŊæœåŠĄå™¨åˇ˛čŋ‡æœŸã€‚Element äģ…支持 API V2。 @@ -2445,7 +1975,6 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š ä¸ēäē†æ‚¨įš„隐į§īŧŒElement äģ…支持发送į”¨æˆˇį”ĩ子邎äģļ和į”ĩč¯åˇį įš„哈希å€ŧ。 å…ŗč”å¤ąč´Ĩ。 æ­¤æ ‡č¯†įŦĻ无åŊ“前å…ŗč”ã€‚ - 您įš„åŽļåē­æœåŠĄå™¨ (%1$s) åģē莎äŊŋį”¨ %2$s äŊœä¸ē您įš„čēĢäģŊæœåŠĄå™¨ äŊŋį”¨ %1$s æˆ–č€…īŧŒæ‚¨å¯äģĨ输å…ĨäģģäŊ•å…ļäģ–čēĢäģŊæœåŠĄå™¨ URL @@ -2458,9 +1987,7 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 取æļˆé™éŸŗéēĻ克éŖŽ 停æ­ĸį›¸æœē 启动į›¸æœē - 莞įŊŽåŽ‰å…¨å¤‡äģŊ - 厉全备äģŊ 通čŋ‡åœ¨æ‚¨įš„æœåŠĄå™¨ä¸Šå¤‡äģŊ加密密é’Ĩ防æ­ĸä¸ĸå¤ąå¯šåŠ å¯†æļˆæ¯å’Œæ•°æŽįš„čŽŋ闎。 莞įŊŽ @@ -2468,22 +1995,17 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š į”ŸæˆåŽ‰å…¨å¯†é’Ĩ存储在厉全įš„地斚åĻ‚密į įŽĄį†å™¨æˆ–äŋé™ŠįŽąã€‚ äŊŋį”¨åŽ‰å…¨åŖäģ¤ 输å…Ĩäģ…有您įŸĨ道įš„厉全åŖäģ¤īŧŒį”Ÿæˆå¤‡äģŊį”¨įš„密é’Ĩ。 - äŋå­˜æ‚¨įš„厉全密é’Ĩ 将您įš„厉全密é’Ĩ存储在厉全įš„地斚åĻ‚密į įŽĄį†å™¨æˆ–äŋé™ŠįŽąã€‚ - 莞įŊŽåŽ‰å…¨åŖäģ¤ 输å…ĨåĒ有您įŸĨ道įš„厉全åŖäģ¤īŧŒį”¨äēŽäŋæŠ¤æ‚¨įš„æœåŠĄå™¨ä¸Šįš„į§˜å¯†ã€‚ 厉全åŖäģ¤ 再æŦĄčž“å…Ĩ您įš„厉全åŖäģ¤äģĨįĄŽčŽ¤ã€‚ - äŋå­˜æ‚¨įš„厉全密é’Ĩ 将您įš„厉全密é’Ĩ存储在厉全įš„地斚åĻ‚密į įŽĄį†å™¨æˆ–äŋé™ŠįŽąã€‚ - čŠå¤ŠåŽ¤åį§° ä¸ģéĸ˜ æ‚¨åˇ˛æˆåŠŸæ›´æ”ščŠå¤ŠåŽ¤čŽžįŊŽ - 您无æŗ•čŽŋé—Žæ­¤æļˆæ¯ æ­Ŗ在į­‰åž…æ­¤æļˆæ¯īŧŒå¯čƒŊäŧščŠąč´šä¸€äē›æ—ļ间 无æŗ•č§Ŗ密 @@ -2492,17 +2014,12 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 您无æŗ•čŽŋé—Žæ­¤æļˆæ¯å› ä¸ē您įš„äŧšč¯ä¸čĸĢå‘é€č€…äŋĄäģģ 您无æŗ•čŽŋé—Žæ­¤æļˆæ¯å› ä¸ēå‘é€č€…æœ‰æ„ä¸å‘é€å¯†é’Ĩ æ­Ŗ在į­‰åž…åŠ å¯†åŽ†å˛ - Riot įŽ°åœ¨æ˜¯ Elementīŧ 我äģŦ兴åĨ‹åœ°åŽŖ布我äģŦ攚名äē†īŧæ‚¨įš„åē”į”¨åˇ˛įģæ˜¯æœ€æ–°įš„åšļä¸”æ‚¨åˇ˛į™ģå…Ĩ您įš„å¸æˆˇã€‚ 明į™Ŋäē† äē†č§Ŗ更多 - element - - 将æĸ复密é’Ĩäŋå­˜åˆ° - äģŽæˆ‘įš„į”ĩč¯į°ŋæˇģ加 您įš„į”ĩč¯į°ŋ是įŠēįš„ į”ĩč¯į°ŋ @@ -2510,22 +2027,19 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š æ­Ŗåœ¨čŽˇå–æ‚¨įš„联įŗģäēēâ€Ļ 您įš„é€ščŽ¯åŊ•æ˜¯įŠēįš„ é€ščŽ¯åŊ• - æ’¤é”€é‚€č¯ˇ 是åĻ撤销寚 %1$s įš„é‚€č¯ˇīŧŸ - čĸĢ %1$s 封įĻ č§Ŗ封į”¨æˆˇå¤ąč´Ĩ - 推送通įŸĨåˇ˛įĻį”¨ æŸĨįœ‹æ‚¨įš„莞įŊŽäģĨ启į”¨æŽ¨é€é€šįŸĨ 选拊 PIN äģĨįĄŽäŋåŽ‰å…¨ įĄŽčŽ¤ PIN - éĒŒč¯ pin å¤ąč´ĨīŧŒč¯ˇčž“å…Ĩ新įš„。 + éĒŒč¯ PIN å¤ąč´ĨīŧŒč¯ˇčž“å…Ĩ新įš„。 输å…Ĩ您įš„ PIN åŋ˜čŽ° PINīŧŸ - 重įŊŽ pin - 新 pin + 重įŊŽ PIN + 新 PIN ä¸ē重įŊŽæ‚¨įš„ PINīŧŒæ‚¨å°†éœ€čĻé‡æ–°į™ģåŊ•åšļ创åģē新įš„。 启į”¨ PIN åĻ‚果您æƒŗčĻé‡įŊŽæ‚¨įš„ PINīŧŒį‚šæŒ‰åŋ˜čŽ° PIN į™ģå‡ēåšļ重įŊŽã€‚ @@ -2544,13 +2058,11 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š 成功å¯ŧå…Ĩ %1$d/%2$d ä¸Ē密é’Ĩ。 - įŽĄį†é›†æˆ 无æ´ģ动小部äģļ čŠå¤ŠåŽ¤åˇ˛åˆ›åģēīŧŒäŊ†į”ąäēŽäģĨ下原因一äē›é‚€č¯ˇå°šæœĒ发送īŧš \n \n%s - %1$sīŧŒ%2$s 和å…ļäģ– %3$d äēēåˇ˛č¯ģ @@ -2566,32 +2078,77 @@ Element 在后台æ—ļįš„åˇĨäŊœå°†čĸĢæ˜žč‘—įš„限åˆļīŧŒčŋ™å¯čƒŊäŧšåŊąå“æļˆæ¯é€š į”ĩč¯åˇį  į§ģ除 %sīŧŸ č¯ˇįĄŽčŽ¤æ‚¨åˇ˛į‚šå‡ģ我äģŦ向您发送įš„į”ĩ子邎äģļ中įš„é“žæŽĨ。 - į”ĩ子邎äģļ和į”ĩč¯åˇį  įŽĄį†é“žæŽĨ到您įš„ Matrix č´Ļæˆˇįš„į”ĩ子邎äģļ和į”ĩč¯åˇį  - äģŖį  č¯ˇäŊŋį”¨å›Ŋ际æ ŧåŧīŧˆį”ĩč¯åˇį åŋ…éĄģäģĨ ‘+’ åŧ€å§‹īŧ‰ 通čŋ‡éĒŒč¯æ­¤į™ģåŊ•įĄŽčŽ¤æ‚¨įš„čēĢäģŊīŧŒæŽˆæƒåŽƒčŽŋ闎加密äŋĄæ¯ã€‚ æŠąæ­‰īŧŒå¯šäēŽčŋžæŽĨ到单į‚šį™ģåŊ•įš„č´Ļæˆˇæ­¤æ“äŊœå°šä¸å¯į”¨ã€‚ - 无æŗ•æ‰“åŧ€æ‚¨čĸĢ封įĻįš„čŠå¤ŠåŽ¤ã€‚ 无æŗ•æ‰žåˆ°æ­¤čŠå¤ŠåŽ¤ã€‚č¯ˇįĄŽčŽ¤åŽƒå­˜åœ¨ã€‚ æ‚¨æ˛Ąæœ‰æƒé™åœ¨æ­¤čŠå¤ŠåŽ¤å‘čĩˇé€šč¯ %d į§’ - 昞į¤ēčŠå¤ŠåŽ¤æˆå‘˜įŠļ态äē‹äģļ 包æ‹Ŧé‚€č¯ˇ/加å…Ĩ/įĻģåŧ€/č¸ĸ掉/封įĻäē‹äģļ和头像/æ˜ĩį§°å˜æ›´ã€‚ čŊŽč¯ĸ æœē器äēē按钎 回åē”īŧš%s éĒŒč¯įģ“æžœ - 是åĻ删除įąģ型 %1$s įš„č´Ļæˆˇæ•°æŽīŧŸ \n \n小åŋƒäŊŋį”¨īŧŒåŽƒå¯čƒŊå¯ŧč‡´æ„å¤–čĄŒä¸ē。 - 链æŽĨæ ŧåŧä¸æ­ŖįĄŽ - + 每æŦĄæ‰“åŧ€ Element éƒŊčĻæą‚ PIN į ã€‚ + 在 2 分钟æœĒäŊŋį”¨ Element 后čĻæą‚ PIN į ã€‚ + 2 分钟后čĻæą‚ PIN + äģ…在一ä¸ĒįŽ€å•é€šįŸĨ中昞į¤ēæœĒč¯ģæļˆæ¯å†…厚数量。 + 昞į¤ēįģ†čŠ‚åĻ‚čŠå¤ŠåŽ¤åį§°å’Œæļˆæ¯å†…厚。 + 在通įŸĨ中昞į¤ē内厚 + PIN į æ˜¯č§Ŗ锁 Element įš„唯一斚åŧã€‚ + 启į”¨čŽžå¤‡į‰šåŽšįš„į”Ÿį‰Šį‰šåžč¯†åˆĢīŧŒåĻ‚指įēšå’Œéĸéƒ¨č¯†åˆĢ。 + 启į”¨į”Ÿį‰Šį‰šåžč¯†åˆĢ + 配įŊŽäŋæŠ¤ + äŊŋį”¨ PIN 和į”Ÿį‰Šį‰šåžč¯†åˆĢäŋæŠ¤čŽŋ闎。 + äŋæŠ¤čŽŋ问 + + 昞į¤ē您įŽ°åœ¨å¯äģĨéĒŒč¯įš„ īŧ…d ä¸ĒčŽžå¤‡ + + 您将重新启动īŧŒæ˛Ąæœ‰åŽ†å˛čŽ°åŊ•īŧŒæļˆæ¯īŧŒå—äŋĄäģģįš„čŽžå¤‡æˆ–å—äŋĄäģģįš„į”¨æˆˇ + åĻ‚果您重įŊŽä¸€åˆ‡ + äģ…åŊ“æ˛Ąæœ‰å…ļäģ–čŽžå¤‡å¯į”¨æĨéĒŒč¯æ­¤čŽžå¤‡æ—ļīŧŒæ‰æ‰§čĄŒæ­¤æ“äŊœã€‚ + 重įŊŽä¸€åˆ‡ + åŋ˜čŽ°æˆ–ä¸ĸå¤ąäē†æ‰€æœ‰įš„å›žå¤é€‰éĄšīŧŸé‡įŊŽä¸€åˆ‡ + æ‚¨åˇ˛åŠ å…Ĩ。 + %s åˇ˛åŠ å…Ĩ。 + æ­¤čŠå¤ŠåŽ¤įš„æļˆæ¯æ˜¯įĢ¯åˆ°įĢ¯åŠ å¯†įš„。 + įĻģåŧ€ + 莞įŊŽ + 此处įš„æļˆæ¯æ˜¯įĢ¯åˆ°įĢ¯åŠ å¯†įš„īŧŒ +\n +\n您įš„æļˆæ¯åˇ˛į”¨é”äŋæŠ¤åšļ且åĒ有您和æ”ļäģļäēēæ‹Ĩ有唯一įš„é’Ĩ匙č§Ŗ锁厃äģŦ。 + 此处įš„æļˆæ¯ä¸æ˜¯įĢ¯åˆ°įĢ¯åŠ å¯†ã€‚ + æ­¤åŽļåē­æœåŠĄå™¨æ­Ŗ在čŋčĄŒčžƒæ—§į‰ˆæœŦ。čĻæą‚您įš„åŽļåē­æœåŠĄå™¨įŽĄį†å‘˜å‡įē§ã€‚您可äģĨįģ§įģ­īŧŒäŊ†ä¸€äē›åŠŸčƒŊ可čƒŊ无æŗ•æ­ŖįĄŽåˇĨäŊœã€‚ + 您äģ…发å‡ēæ­¤é‚€č¯ˇã€‚ + %1$s äģ…发å‡ēæ­¤é‚€č¯ˇã€‚ + åœ¨åŠ å¯†čŠå¤ŠåŽ¤æ˜žį¤ēåŽŒæ•´åŽ†å˛ + %1$s 和 %2$s + %1$s æĄåœ¨ %2$s 和 %3$s 中 + + %d ä¸Ēé‚€č¯ˇ + + 通įŸĨåˇ˛į‚šå‡ģīŧ + č¯ˇį‚šå‡ģ通įŸĨ。åĻ‚果您æœĒįœ‹åˆ°é€šįŸĨīŧŒč¯ˇæŖ€æŸĨįŗģįģŸčŽžįŊŽã€‚ + 通įŸĨ昞į¤ē + 您æ­Ŗ在æŸĨįœ‹é€šįŸĨīŧį‚šæˆ‘īŧ + æŽĨå—æŽ¨é€å¤ąč´Ĩ。重čŖ…åē”į”¨æˆ–可č§Ŗå†ŗ。 + åē”į”¨æ­Ŗ在æŽĨ受推送 + åē”į”¨æ­Ŗ在į­‰åž…推送 + æĩ‹č¯•æŽ¨é€ + å°šä¸æ”¯æŒåœ¨åŠ å¯†čŠå¤ŠåŽ¤ä¸­æœį´ĸ。 + čŋ‡æģ¤čĸĢ封įĻįš„į”¨æˆˇ + æ‚¨æ˛Ąæœ‰æƒé™å‘čĩˇé€šč¯ + æ‚¨æ˛Ąæœ‰æƒé™å‘čĩˇäŧščŽŽé€šč¯ + 重įŊŽ + \ No newline at end of file From ab8c9bd269a73a36ceaa4d8e7b443926a817194f Mon Sep 17 00:00:00 2001 From: TR_SLimey Date: Tue, 13 Oct 2020 19:53:44 +0000 Subject: [PATCH 260/278] Translated using Weblate (Polish) Currently translated at 79.7% (1529 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/pl/ --- vector/src/main/res/values-pl/strings.xml | 486 +++------------------- 1 file changed, 47 insertions(+), 439 deletions(-) diff --git a/vector/src/main/res/values-pl/strings.xml b/vector/src/main/res/values-pl/strings.xml index 690849ff6a..6501b49aee 100644 --- a/vector/src/main/res/values-pl/strings.xml +++ b/vector/src/main/res/values-pl/strings.xml @@ -1,11 +1,10 @@ - + Wiadomości PokÃŗj Ustawienia Informacje o uÅŧytkowniku Archiwum - OK Anuluj Zapisz @@ -30,15 +29,14 @@ Wideo Nie moÅŧna rozpocząć połączenia, sprÃŗbuj ponownie pÃŗÅēniej Ze względu na brak pewnych uprawnień, niektÃŗre funkcje mogą nie działaćâ€Ļ - Musisz być uprawniony, aby rozpocząć połączenie grupowe + Musisz posiadać uprawninenia, aby rozpocząć połączenie grupowe Nie moÅŧna rozpocząć połączenia Informacje o sesji Połączenia grupowe nie są obsługiwane w szyfrowanych pokojach - Wyślij mimo wszystko + Wyślij mimo to i Zaproś Offline - Wyloguj się Połączenie głosowe Połączenie wideo @@ -50,23 +48,18 @@ Zamknij Skopiowano do schowka Wyłącz - Potwierdzenie OstrzeÅŧenie - Home Ulubione Ludzie Pokoje - Filtruj nazwy pokojÃŗw Filtruj ulubione Filtruj ludzi Filtruj nazwy pokojÃŗw - Zaproszenia Niski priorytet - Rozmowy Lokalna ksiąÅŧka adresowa Katalog uÅŧytkownikÃŗw @@ -74,7 +67,6 @@ Brak rozmÃŗw Nie udzieliłeś(-aś) uprawnienia na dostęp do listy kontaktÃŗw Brak wynikÃŗw - Pokoje Katalog pokojÃŗw Brak pokojÃŗw @@ -84,7 +76,6 @@ %d uÅŧytkownikÃŗw %d uÅŧytkownikÃŗw - Wyślij dzienniki Wyślij dzienniki awarii Wyślij zrzut ekranu @@ -94,14 +85,11 @@ W celu zdiagnozowania problemÃŗw, logi z tego klienta zostaną wysłane wraz z tym raportem o błędzie. Ten raport o błędzie, w tym dzienniki i zrzut ekranu, nie będzie publicznie widoczny. Jeśli wolisz wysłać tylko powyÅŧszy tekst, odznacz: Wygląda na to, Åŧe potrząsasz telefonem ze zdenerwowania. Czy chcesz otworzyć ekran zgłaszania błędu\? Przy wcześniejszym uÅŧyciu aplikacja napotkała błąd. Czy chcesz zgłosić raport o nieoczekiwanym zamknięciu\? - Pomyślnie zgłoszono błąd Nie udało się zgłosić błędu (%s) Postęp (%s%%) - Wyślij do Przeczytano - Dołącz do pokoju Nazwa uÅŧytkownika StwÃŗrz konto @@ -109,18 +97,14 @@ Wyloguj Adres serwera Szukaj - Rozpocznij nową rozmowę Rozpocznij połączenie telefoniczne Rozpocznij połączenie wideo - pl PL - Adres serwera toÅŧsamości Wyślij pliki ZrÃŗb zdjęcie lub film - Zaloguj się StwÃŗrz konto Wyślij @@ -166,32 +150,25 @@ Nie udało się zarejestrować: Błąd sieci Nie udało się zarejestrować Proszę wprowadzić prawidłowy adres URL - Nieprawidłowa nazwa uÅŧytkownika/hasło Nie zawiera prawidłowego JSON Wysłano zbyt wiele Åŧądań Ta nazwa uÅŧytkownika jest juÅŧ uÅŧywana Nie kliknięto odnośnika z wiadomości e-mail - Przeczytaj listę odbiorcÃŗw - "Wyślij jako " Oryginalny DuÅŧy Średni Mały - Anulować pobieranie? Anulować wysyłanie? %d sek. %1$d min. %2$d sek. - Wczoraj Dzisiaj - Nazwa pokoju Temat pokoju - Połączono Łączenieâ€Ļ Zakończono połączenie @@ -200,13 +177,10 @@ Przychodzące połączenie wideo Przychodzące połączenie głosowe W trakcie połączeniaâ€Ļ - Połączenie multimedialne nie powiodło się Nie udało się zainicjalizować aparatu - ZrÃŗb zdjęcie lub nagraj film Nie moÅŧna nagrać filmu - Informacja Element wymaga uprawnienia, aby wysyłać i zapisywać pliki multimedialne. @@ -214,43 +188,34 @@ Przyznaj dostęp w następnym oknie. Element wymaga uprawnienia, aby wykonywać zdjęcia i nawiązywać połączenia wideo. Element wymaga uprawnienia, aby przeprowadzić połączenie audio. Nie moÅŧna wykonać operacji, ze względu na brak wymaganych uprawnień - Zapisano Zapisać do pobranych? TAK NIE Kontynuuj - Usuń Dołącz Podgląd Odrzuć - PrzejdÅē do pierwszej nieprzeczytanej wiadomości. - Zostałeś(-aś) zaproszony(-a) do tego pokoju przez %s PrÃŗbujesz uzyskać dostęp do %s. Czy chcesz dołączyć do pokoju, aby wziąć udział w dyskusji? pokÃŗj To jest podgląd pokoju. Interakcje zostały zablokowane. - Nowa rozmowa Dodaj członka 1 członek - Opuść pokÃŗj Czy na pewno chcesz opuścić pokÃŗj? Czy na pewno chcesz usunąć %s z rozmowy? UtwÃŗrz - Online Offline Bezczynny(-a) - NARZĘDZIA ADMINISTRACYJNE DZWOŃ WIADOMOŚCI BEZPOŚREDNIE SESJE - Zaproś Opuść pokÃŗj Usuń z pokoju @@ -265,16 +230,13 @@ Przyznaj dostęp w następnym oknie. Wspomnij PokaÅŧ listę sesji Czy na pewno chcesz zaprosić %s do tej rozmowy? - Zaproś przez ID LOKALNE KONTAKTY (%d) KATALOG UÅģYTKOWNIKÓW (%s) Tylko uÅŧytkownicy Matrixa - Zaproś uÅŧytkownikÃŗw po ID WprowadÅē jeden lub więcej adresÃŗw e-mail lub ID Matrix E-mail lub ID Matrix - Szukaj %s piszeâ€Ļ %1$s i %2$s pisząâ€Ļ @@ -288,28 +250,24 @@ Przyznaj dostęp w następnym oknie. Usuń niewysłane wiadomości Nie znaleziono pliku Nie masz uprawnień, aby pisać w tym pokoju - Ufaj Nie ufaj Wyloguj Ignoruj Odcisk palca (%s): Nie moÅŧna zweryfikować toÅŧsamości serwera. - SzczegÃŗły pokoju Ludzie Pliki Ustawienia ZAPROSZENI DOŁĄCZENI - PowÃŗd zgłoszenia zawartości Czy chcesz ukrywać wszystkie wiadomości od tego uÅŧytkownika? ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to trochę potrwać. Anuluj wysyłanie Anuluj pobieranie - Szukaj Filtruj członkÃŗw pokoju Brak wynikÃŗw @@ -317,7 +275,6 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t WIADOMOŚCI LUDZIE PLIKI - DOŁĄCZ KATALOG ULUBIONE @@ -329,23 +286,19 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Dołącz do pokoju Dołącz do pokoju WprowadÅē ID lub nazwę pokoju - Przeglądaj katalog Przeszukiwanie kataloguâ€Ļ - Dodaj do ulubionych Usuń z priorytetyzowanych Rozmawiaj bezpośrednio Opuść rozmowę Zapomnij - Wiadomości Ustawienia Wersja Warunki uÅŧytkowania Prawa autorskie Polityka prywatności - Obraz profilowy Wyświetlana nazwa E-mail @@ -353,21 +306,17 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Numer telefonu Dodaj numer telefonu Informacje o aplikacji - Włącz powiadomienia dla tego konta Włącz powiadomienia dla tej sesji Podświetl ekran na 3 sekundy - Wiadomości bezpośrednie Wiadomości w rozmowach grupowych Kiedy zostanę zaproszony(-a) do pokoju Zaproszenia do rozmÃŗw Wiadomości od botÃŗw - Rozpocznij przy uruchomieniu systemu Synchronizacja w tle Włącz synchronizację w tle - Wersja Zasady uÅŧytkowania Prawa autorskie @@ -387,7 +336,6 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Sesje PokaÅŧ czas wysłania dla wszystkich wiadomości Tryb oszczędzania danych - SzczegÃŗły o sesji ID Nazwa publiczna @@ -399,16 +347,13 @@ WprowadÅē hasło, aby kontynuować. Uwierzytelnianie Hasło: Wyślij - Zalogowany jako Interfejs uÅŧytkownika Język Wybierz język - Oczekiwanie na weryfikację Ten e-mail jest juÅŧ uÅŧywany. Ten numer telefonu jest juÅŧ uÅŧywany. - Zmień hasło BieÅŧące hasło Nowe hasło @@ -418,9 +363,7 @@ WprowadÅē hasło, aby kontynuować. Pokazywać wszystkie wiadomości od %s? ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to trochę potrwać. - Wybierz kraj - Kraj Wybierz kraj Numer telefonu @@ -428,17 +371,14 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t WprowadÅē kod aktywacyjny Wystąpił błąd podczas weryfikowania numeru telefonu Kod - 3 dni 1 tydzień 1 miesiąc Na zawsze - Obraz pokoju Nazwa pokoju Temat Tag pokoju - Ulubione Niski priorytet Nic @@ -448,11 +388,9 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Dostęp do historii pokoju Kto moÅŧe czytać historię? Kto moÅŧe uzyskać dostęp do pokoju? - KaÅŧdy Tylko dla zaproszonych Zablokowani uÅŧytkownicy - Zaawansowane Wewnętrzne ID tego pokoju Adresy @@ -461,18 +399,15 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Szyfrowanie End-to-End Szyfrowanie End-to-End jest aktywne Nowy adres (np. #foo:matrix.org) - Ustaw jako głÃŗwny adres Kopiuj ID pokoju Kopiuj adres pokoju - Szyfrowanie jest włączone w tym pokoju. Szyfrowanie jest wyłączone w tym pokoju. Włącz szyfrowanie (ostrzeÅŧenie: nie moÅŧe zostać wyłączone!) Katalog Motyw - ID uÅŧytkownika Algorytm ID sesji @@ -481,31 +416,25 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t ID Weryfikacja Odcisk palca Ed25519 - Eksportuj WprowadÅē hasło PotwierdÅē hasło Nie zweryfikowano Zweryfikowano Na czarnej liście - nieznana sesja brak - Weryfikuj Dodaj na czarną listę Usuń z czarnej listy - Weryfikuj sesję Te klucze są ze sobą zgodne - PokÃŗj zawiera nieznane sesje Wybierz katalog pokojÃŗw Serwer moÅŧe być wyłączony lub przeciąÅŧony Adres serwera domowego Wszystkie pokoje na serwerze %s Szukaj w archiwum - Rozmiar czcionki Bardzo mały Mały @@ -517,10 +446,8 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Jasny motyw Ciemny motyw Czarny motyw - Zadzwoń Awatar - PowÃŗd: %1$s Zostałeś zbanowany z %1$s przez %2$s Zostałeś wyrzucony z %1$s przez %2$s @@ -529,10 +456,8 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Ludzie Przykład przykład - Wiadomość zaszyfrowana - UtwÃŗrz Off @@ -541,50 +466,37 @@ ZauwaÅŧ, Åŧe ta czynność spowoduje ponowne uruchomienie aplikacji i moÅŧe to t Nasłuchiwanie zdarzeń Głośne powiadomienia Ciche powiadomienia - Zgłoś błąd Informacje o społeczności - Wczytywanieâ€Ļ - Opuść Działania Społeczności - Filtruj nazwy społeczności - Zaproś Społeczności Brak grup - Potrząśnij wściekle, aby zgłosić błąd - Czy jesteś pewien, Åŧe chcesz rozpocząć nową rozmowę z %s? Czy jesteś pewien, Åŧe chcesz rozpocząć rozmowę głosową? Czy jesteś pewien, Åŧe chcesz rozpocząć wideorozmowę? - ZrÃŗb zdjęcie Nagraj film - Rejestracja jednocześnie za pomocą numeru telefonu i adresu e-mail nie jest obsługiwana dopÃŗki nie pojawi się odpowiednie API. Tylko numer telefonu będzie brany pod uwagę. MoÅŧesz dodać adres e-mail do swojego profilu w ustawieniach. Serwer Domowy: Serwer ToÅŧsamości: Twoje hasło zostało zresetowane. Zostałeś wylogowany ze wszystkich sesji i nie będziesz więcej otrzymywać powiadomień push. Aby ponownie włączyć powiadomienia, zaloguj się ponownie na kaÅŧdym urządzeniu. - Wprowadzony token dostępu nie został rozpoznany Uszkodzony JSON - Lista grup - %d zmiana członkostwa %d zmiany członkostwa %d zmian członkostwa - + - RozmÃŗwca nie połączył się. @@ -599,7 +511,6 @@ Przyznaj dostęp w następnym oknie. Element wymaga dostępu do kontaktÃŗw, aby znajdywać innych uÅŧytkownikÃŗw Matrixa bazując na adresie e-mail i numerze telefonu. \n \nZezwolić Element na dostęp do kontaktÃŗw\? - Lista uczestnikÃŗw Otwarty nagłÃŗwek Synchronizacjaâ€Ļ @@ -609,57 +520,50 @@ Przyznaj dostęp w następnym oknie. Jeden aktywny członek Kilku aktywnych członkÃŗw %d aktywnych członkÃŗw - + 1 członek kilku członkÃŗw %d członkÃŗw - + - Nie będziesz w stanie cofnąć tej zmiany, poniewaÅŧ przyznajesz uÅŧytkownikowi uprawnienia rÃŗwne swoim. Jesteś pewien? - Czy chcesz zablokować tego uÅŧytkownika w tej rozmowie? - Nie udało się zarejestrować: błąd własności e-maila połączenie odebrane gdzie indziej - Wiadomość nie została wysłana. Czy %1$s lub %2$s teraz? Wiadomość niewysłana z powodu obecności nieznanych sesji. Czy %1$s lub %2$s teraz\? Nowa wiadomość Kilka nowych wiadomości %d nowych wiadomości - + - MoÅŧe to oznaczać Åŧe ktoś zakłÃŗca twoje połączenie, lub TwÃŗj telefon nie ufa certyfikatowi dostarczonemu przez zdalny serwer. Jeśli administrator serwera oświadczył, Åŧe jest to oczekiwane, upewnij się, Åŧe poniÅŧszy odcisk palca odpowiada odciskowi palca dostarczonemu przez niego. Certyfikat rÃŗÅŧni się od tego zaufanego w twoim telefonie. Serwer mÃŗgł odnowić certyfikat. Skontaktuj się z administratorem serwera w celu weryfikacji odcisku palca. Certyfikat zmienił stan z zaufanego na niezaufany. jest to NIEZWYKLE RZADKIE. Rekomendowane jest NIE AKCEPTOWANIE nowego certyfikatu. Akceptuj certyfikat tylko wtedy gdy administrator opublikował odcisk palca pasujący do tego powyÅŧej. Uszkodzony ID. Powinien być adres e-mail lub Matrix ID podobny do \'@localpart:domain\' - 1 pokÃŗj %d pokoje %d pokoi - + %1$s pokÃŗj znaleziony dla %2$s Kilka pokoi znalezionych dla %2$s %1$s pokoi znalezionych dla %2$s - + Wszystkie wiadomości (hałaśliwy) Wszystkie wiadomości Tylko wspomnienia Wycisz Dodaj skrÃŗt do ekranu domowego - Informacje o trzecich stronach PokaÅŧ informacje o aplikacji w ustawieniach systemu. DÅēwięk powiadomień @@ -670,69 +574,52 @@ Jesteś pewien? Wersja olm Informacje o stronach trzecich Zatrzymaj media - Kraj ksiąÅŧki adresowej Ekran domowy Podgląd zawartości URL PokaÅŧ czas w formacie 12-godzinnym Wibruj gdy ktoś wspomni o Tobie - Analityka - Serwer domowy Serwer ToÅŧsamości - SprawdÅē pocztę e-mail i kliknij odnośnik, ktÃŗry zawiera. Gdy to zrobisz, kliknij przycisk Kontynuuj. Nie udało się zweryfikować adresu e-mail. SprawdÅē swoją skrzynkę i kliknij w link. Gdy to zrobisz, kliknij kontynuuj. Adres e-mail nie został znaleziony. Czy na pewno chcesz usunąć %1$s %2$s? - Nieprawidłowy numer telefonu dla wybranego kraju Wysłaliśmy SMS z kodem aktywacyjnym. Podaj ten kod poniÅŧej. Otagowany jako: - Powiadomienia Tylko członkowie (od momentu włączenia tej opcji) Tylko członkowie (od kiedy zostali zaproszeni) Tylko członkowie (od kiedy dołączyli) - KaÅŧdy kto zna link pokoju, poza gośćmi KaÅŧdy kto zna link pokoju, razem z gośćmi - Musisz się wylogować aby uruchomić szyfrowanie. Szyfruj wiadomości tylko do zaufanych sesji Nigdy nie wysyłaj zaszyfrowanych wiadomości do niezweryfikowanych sesjiw tym pokoju z tego urządzenia. - Ten pokÃŗj nie ma adresu lokalnego Nowe ID społęczności (np. +foo:matrix.org) Niepoprawne ID społeczności \'%s\' jest niepoprawnym ID społeczności - - Nieznany format aliasu \'%s\' jest nieznanym formatem dla aliasu Nie będziesz mieć podanego głÃŗwnego adresu dla tego pokoju. OstrzeÅŧenia głÃŗwnego adresu - NIe ustawiaj jako głÃŗwny adres Błąd odszyfrowywania - Klucz sesji Wyeksportuj klucze pokoju Eksportuj klucze do pliku lokalnego Dołącz ponownie Zapomnij pokÃŗj - Pobierz Wyczyść Wyślij naklejkę Poproś ponownie o klucze szyfrujące z innych Twoich sesji. - Prośba o klucz wysłana. - Prośba wysłana Uruchom proszę Element na innym urządzeniu, ktÃŗre moÅŧe odszyfrować wiadomość, aby wysłać klucze do tej sesji. - Prywatność powiadomień Standardowa Zmniejszona prywatność @@ -742,97 +629,77 @@ Jesteś pewien? â€ĸ Treść powiadomienia jest bezpiecznie pobierana z domowego serwera Matrix â€ĸ Powiadomienia zawierają meta-dane oraz treść wiadomości â€ĸ Powiadomienia nie będą pokazywać treści wiadomości - Cele powiadomień Dezaktywuj konto Dezaktywuj moje konto - Prywatność powiadomień Element moÅŧe działać w tle aby bezpiecznie i prywatnie zarządzać Twoimi powiadomieniami. To moÅŧe mieć wpływ na zuÅŧycie baterii. Nadaj uprawnienie Wybierz inną opcję - Wysyłaj dane analityczne Element zbiera anonimowe informacje ktÃŗre pozwolą ulepszyć aplikację. Włącz proszę dane analityczne, aby pomÃŗc nam ulepszyć Element. Tak, chcę pomÃŗc! - Czy na pewno chcesz usunąć ten cel powiadomień? - Aby mÃŗc stworzyć link do pokoju musi on mieć swÃŗj adres. - %s prÃŗbował załadować konkretny punkt na osi czasu tego pokoju, ale nie był w stanie go znaleÅēć. - Informacje o szyfrowaniu end-to-end - Informacje zdarzenia Informacja o sesji nadawcy Eksportuj klucze E2E pokoju Klucze pokoju zostały zapisane w \'%s\' Uwaga: ten plik moÅŧe zostać usunięty, jeśli aplikacja zostanie odinstalowana. - Importuj klucze E2E pokoju Importuj klucze pokoju Importuj klucze z lokalnego pliku Importuj Szyfruj wiadomości tylko do zaufanych sesji Nigdy nie wysyłaj zaszyfrowanych wiadomości do niezweryfikowanych sesji w tym pokoju z tej sesji. - Usuń weryfikację Aby sprawdzić czy ta sesja jest zaufana, skontaktuj się z jej właścicielem uÅŧywając innych form (np. osobiście lub telefonicznie) i zapytaj czy klucz, ktÃŗry widzą w ustawieniach uÅŧytkownika dla tego urządzenia pasuje do klucza poniÅŧej: Jeśli klucz pasuje, potwierdÅē to przyciskiem poniÅŧej. Jeśli nie, to ktoś inny najprawdopodobniej przejmuje lub podszywa się pod tą sesję i powinieneś dodać tę sesję do czarnej listy. W przyszłości proces weryfikacji będzie bardziej skomplikowany. - Ten pokÃŗj zawiera nieznane sesje, ktÃŗre nie zostały zweryfikowane. Oznacza to brak gwarancji, Åŧe sesje naleÅŧą do uÅŧytkownikÃŗw do ktÃŗrych twierdzą, Åŧe naleÅŧą. Przed kontynuowaniem, zalecamy wykonanie procesu weryfikacji kaÅŧdego urządzenia, ale moÅŧesz ponownie wysłać wiadomość bez weryfikacji, jeśli wolisz. Nieznane sesje: - Wyślij naklejkę - Licencje osÃŗb trzecich - Niestety, nie znaleziono zewnętrznej aplikacji, ktÃŗra ukończy to działanie. - 1 pokÃŗj %d pokoje %d pokoi - + 1 aktywny widÅŧet %d aktywne widÅŧety %d aktywnych widÅŧetÃŗw - + - PokÃŗj %s nie jest widoczny. UÅŧyj natywnej kamery MÃŗw Wyślij głos - Nie masz obecnie włączonych Åŧadnych pakietÃŗw naklejek. Czy chcesz dodać teraz kilka? - zadziałaj poprzezâ€Ļ Klucz toÅŧsamości Curve25519 ZaÅŧądano klucza odcisku palca Ed25519 Wpisz serwer domowy, aby pobrać z niego listę publicznych pokoi Napisz tutajâ€Ļ - 1 nieprzeczytana wiadomość powiadomienia %d nieprzeczytane wiadomości powiadomienia %d nieprzeczytanych wiadomości powiadomienia - + 1 nieprzeczytana wiadomość powiadomienia %d nieprzeczytane wiadomości powiadomienia %d nieprzeczytanych wiadomości powiadomienia - + %1$s w %2$s - Potrzebujesz uprawnień do zarządzania widÅŧetami w tym pokoju Utworzenie widÅŧetu nie powiodło się UtwÃŗrz połączenia konferencyjne za pomocą jitsi @@ -843,7 +710,6 @@ Czy chcesz dodać teraz kilka? Nie jesteś w tym pokoju. Nie masz uprawnień, aby zrobić to w tym pokoju. WyrÃŗÅŧnik społeczności - Ten pokÃŗj nie wyświetla wyrÃŗÅŧnikÃŗw dla Åŧadnych społeczności Brakujące room_id w Åŧądaniu. Brakujące user_id w Åŧądaniu. @@ -851,45 +717,33 @@ Czy chcesz dodać teraz kilka? Parametr jest niepoprawny. Dodaj aplikacje Matrix Wyślij wiadomości głosowe - Dodałeś(-aś) nową sesję \'%s\', ktÃŗra Åŧąda kluczy szyfrujących. Twoje niezweryfikowana sesja \'%s\' Åŧąda kluczy szyfrujących. Rozpocznij weryfikację WspÃŗłdziel bez weryfikacji Zignoruj Åŧądanie - Połączenia konferencyjne są w stadium rozwoju i mogą nie być niezawodne. - Błąd polecenia Nierozpoznane polecenie: %s - Głośne - UtwÃŗrz społeczność Nazwa społeczności Identyfikator społeczności Strona startowa Brak uÅŧytkownikÃŗw - Pokoje Zaproszeni Filtrowanie członkÃŗw grupy Filtrowanie pokoi grupy - Administrator społeczności nie podał długiego opisu tej społeczności. - Dezaktywuj konto Wszystkie lokalne pokoje %s - Aby kontynuować korzystanie z serwera domowego %1$s, musisz przejrzeć i zaakceptować warunki korzystania z usługi. Przejrzyj teraz - Proszę zapomnieć o wszystkich wiadomościach, ktÃŗre wysłałem, gdy moje konto zostało dezaktywowane (OstrzeÅŧenie: spowoduje to, Åŧe przyszli uÅŧytkownicy zobaczą niepełny obraz rozmÃŗw) Aby kontynuować, wpisz swoje hasło: Dezaktywuj konto - Prosimy wpisać swoje hasło. - To sprawi, Åŧe Twoje konto stanie się na stałe niezdatne do uÅŧytku. Nie będziesz mÃŗgł się zalogować i nikt nie będzie mÃŗgł ponownie zarejestrować tego samego identyfikatora uÅŧytkownika. Spowoduje to, Åŧe Twoje konto opuści wszystkie pokoje, w ktÃŗrych uczestniczy, i usunie dane Twojego konta z serwera toÅŧsamości. Ta czynność jest nieodwracalna. Dezaktywacja konta domyślnie nie powoduje zapomnienia wysłanych przez Ciebie wiadomości. Jeśli chcesz, abyśmy zapomnieli o Twoich wiadomościach, zaznacz pole poniÅŧej. @@ -898,10 +752,8 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo Uzyskaj awatar Zamień awatar Błąd - %1$s teraz %1$s %2$s temu - "%1$s, " %1$s i %2$s Wyślij zaszyfrowaną odpowiedÅēâ€Ļ @@ -912,57 +764,49 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo 1 członek %d członkÃŗw - + - 1 pokÃŗj %d pokoje %d pokoi - + Kliknij tutaj, aby zobaczyć starsze wiadomości - Przepraszamy, wystąpił błąd - Motyw Status.im - Z powodu braku uprawnień to działanie nie jest moÅŧliwe. Alerty systemowe - JeÅŧeli to moÅŧliwe, proszę napisz opis w języku angielskim. 1 sekunda %d sek. - + 1 minuta %d min. - + 1 godzina %s godz. - + 1 dzień %d dni - + - 1 zaznaczone %d zaznaczone %d zaznaczonych - + Wersja %s Podgląd mediÃŗw przed wysłaniem - Nie jesteś obecnie członkiem Åŧadnej społeczności. - UtwÃŗrz hasło, aby zaszyfrować wyeksportowane klucze. Będziesz musiał wpisać to samo hasło, aby mÃŗc zaimportować klucze. UtwÃŗrz hasło Hasło musi się zgadzać @@ -977,49 +821,36 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo Wyrzuca uÅŧytkownika z podanym ID Zmienia twÃŗj wyświetlany nick Do naprawiania zarządzania aplikacjami Matrix - Ten pokÃŗj został zamieniony i nie jest juÅŧ aktywny Konwersacja jest kontynuowana tutaj Ten pokÃŗj jest kontynuacją innej rozmowy Limit pakietÃŗw został przekroczony Skontaktuj się z administratorem - Skontaktuj się z administratorem usług - Ten serwer przekroczył jeden z limitÃŗw, więc niektÃŗrzy uÅŧytkownicy nie będą mogli się zalogować. Ten serwer przekroczył jeden z limitÃŗw zasobÃŗw. - Ten serwer osiągnął miesięczny limit aktywnego uÅŧytkownika, więc niektÃŗrzy uÅŧytkownicy nie będą mogli się zalogować. Ten serwer osiągnął miesięczny limit aktywnego uÅŧytkownika. - Proszę %s, aby zwiększył ten limit. Proszę %s, aby kontynuować z tej usługi. - Zwiększ wydajność, ładując tylko członkÃŗw pokoju w pierwszym widoku. TwÃŗj serwer nie obsługuje jeszcze powolnego ładowania członkÃŗw pokoju. SprÃŗbuj pÃŗÅēniej. - Rozwiń Zwiń - Powolne ładowanie członkÃŗw pokojÃŗw %1$s %2$s - Dzwonek przychodzących połączeń Wybierz dzwonek dla połączeń: - PowÃŗd - Wyślij powiadomienia o pisaniu Hasło Markdown został włączony. Markdown został wyłączony. - Zawsze %1$s: %1$s: %2$s +%d %d+ - UÅŧyj domyślnego dzwonka Element dla przychodzących połączeń Zadzwoń mimo to Połączenia @@ -1028,7 +859,6 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo PokaÅŧ zdarzenia dołączenia i wyjścia Dla komunikatÃŗw i błędÃŗw Tylko dla błędÃŗw - Wyświetl potwierdzenia odczytu Obejmuje zmiany awatara i nazwy wyświetlania. PokaÅŧ zdarzenia konta @@ -1037,29 +867,22 @@ Widoczność wiadomości w Matrix jest podobna do wiadomości e-mail. Nasze zapo Komenda „%s” potrzebuje więcej parametrÃŗw lub niektÃŗre parametry są niepoprawne. PokaÅŧ obszar informacyjny Akceptuj - Przeczytaj i zaakceptuj zasady tego serwera domowego: - Ta opcja wymaga aplikacji osoby trzeciej do nagrywania wiadomości. - Uruchom Testy Ustawienia Systemowe. Powiadomienia są włączone w ustawieniach systemowych. OtwÃŗrz Ustawienia - Ustawienia Konta. Powiadomienia są właczone dla twojego konta. Włącz - Ustawienia Sesji. Powiadomienia są włączone dla tej sesji. Włącz - Token Firebase Rejestracja Tokena Rozpocznij przy uruchomieniu systemu Nadaj uprawnienie - Jeden lub więcej testÃŗw nie powiodło się, sprÃŗbuj sugerowaną poprawkę(-ki). Powiadomienia są wyłączone w ustawieniach systemowych. SprawdÅē ustawienia systemowe. @@ -1067,65 +890,50 @@ SprawdÅē ustawienia systemowe. SprawdÅē ustawienia konta. Powiadomienia nie są włączone dla tej sesji. Proszę sprawdÅē ustawienia Element. Dodatkowe informacje: %s - Wystąpił błąd podczas weryfikowania numeru telefonu. Wystąpił błąd podczas weryfikowania adresu e-mail. - Połączenie w tle Ignoruj Optymalizację - Optymalizacja Baterii Jeden lub więcej testÃŗw nie powiodło się, prosimy o przesłanie raportu o błędzie, aby pomÃŗc nam w zbadaniu problemu. - Uruchom Usługę - Usługa Powiadomień Usługa Powiadomień jest uruchomiona. Usługa Powiadomień nie jest uruchomiona. SprÃŗbuj uruchomić ponownie aplikację. Połączenie wideo trwaâ€Ļ - Kopia Zapasowa Klucza Kopia zapasowa kluczy nie jest zakończona, proszę czekaćâ€Ļ Pomiń Zaawansowane ustawienia powiadomień SprawdÅē ustawienia - Algorytm Stracisz zaszyfrowane wiadomości, jeśli się teraz wylogujesz Jesteś pewien? Przerwij - Czy na pewno chcesz się wylogować? Trwa tworzenie kopii zapasowej klucza. Jeśli wylogujesz się teraz utracisz dostęp do zaszyfrowanych wiadomości. Nie chcę moich zaszyfrowanych wiadomości Utracisz dostęp do zaszyfrowanych wiadomości, chyba Åŧe wykonasz kopię zapasową kluczy przed wylogowaniem się. - Zostań Ignoruj - Domyślna kompresja Konfiguruj głośne powiadomienia Konfiguruj ciche powiadomienia Ciche PrzywrÃŗć z kopii zapasowej Usuń kopię zapasową - Usuń kopię zapasową Wersja Zweryfikuj sesję - Oznacz jako przeczytane Zweryfikowano! Weryfikacja klucza Åģądanie weryfikacji %s chce zweryfikować twoją sesję - Nieznany błąd - UÅŧyj kopii zapasowej klucza Podpis - Nowa sesja Åŧąda kluczy szyfrujących. \nNazwa sesji: %1$s \nOstatnio widziana: %2$s @@ -1134,40 +942,33 @@ SprÃŗbuj uruchomić ponownie aplikację. \nNazwa sesji: %1$s \nOstatnio widziana: %2$s \nJeśli to nie Ty zalogowałeś(-aś) się na innej sesji, zignoruj to Åŧądanie. - Weryfikuj Udostępnij Åģądanie udostępnienia klucza Ignoruj - Udostępnij PrzywrÃŗcono kopię zapasową z %d kluczem. PrzywrÃŗcono kopię zapasową z %d kluczami. - + UÅŧyj kopii zapasowej klucza Uruchamianieâ€Ļ (%1$d z %2$d) Ustawienia niestandardowe. Zarządzaj kopią zapasową klucza - Udostępnij klucz odzyskiwania zâ€Ļ Usunąć klucze szyfrowania z serwera\? Nie będziesz mÃŗgł/mogła uÅŧywać klucza odzyskiwania do odczytywania historii zaszyfrowanych wiadomości. - Wszystkie klucze mają kopię zapasową Zaktualizuj hasło Zrobione Zrobione Edytuj Odpowiedz - Pokoje Dodaj reakcję UtwÃŗrz nowy pokÃŗj Wszystkie społeczności - Wiadomości Bezpośrednie - Nowy pokÃŗj STWÓRZ Nazwa pokoju @@ -1179,7 +980,6 @@ SprÃŗbuj uruchomić ponownie aplikację. Zmień sieć Pokoje Opublikuj pokÃŗj do spisu pokojÃŗw - Aby nie utracić dostępu do Twoich zaszyfrowanych wiadomości, powinienieś aktywować kopię zapasową klucza na wszystkich aktywnych sesjach. Tworzenie kopii zapasowej kluczyâ€Ļ UtwÃŗrz kopię zapasową @@ -1188,13 +988,11 @@ SprÃŗbuj uruchomić ponownie aplikację. Inicjalizacja usługi Zaloguj się za pomocą logowania jednorazowego WaÅŧność powiadomień ze względu na wydarzenie - Diagnostyka powiadomień Rozwiązywanie problemÃŗw Diagnostyka podstawowa nie wykazała problemÃŗw. JeÅŧeli wciąÅŧ nie otrzymujesz powiadomień, prosimy o przesłanie raportu o błędach, w celu ich rozwiązania. Aplikacja nie potrzebuje łączyć się z serwerem domowym w tle, powinno to zredukować uÅŧycie baterii JeÅŧeli nie pamiętasz swoich danych odzystkiwania, moÅŧesz %s. - Zgubiłeś (-łaś) swÃŗj klucz odzyskiwania\? MoÅŧesz ustawić nowy w ustawieniach. Kopia zapasowa posiada poprawną sygnaturę z niezweryfikowanej sesji %s Wykryto nową, bezpieczną kopię kluczy wiadomości. @@ -1205,24 +1003,18 @@ SprÃŗbuj uruchomić ponownie aplikację. UniewaÅŧnij Rozłącz Nie pytaj ponownie - To nie jest prawidłowy adres serwera Matrix PotwierdÅē swoje hasło Napraw Usługi Play - Dodaj Konto - Zarządzanie Kluczami Kryptograficznymi ZezwÃŗl na integracje MenadÅŧer Integracji - Hasło jest nieprawidłowe Hasła nie pasują do siebie - Wybierz Wybierz Odtwarzaj dÅēwięk migawki - Nazwa urządzenia (widoczna dla osÃŗb, z ktÃŗrymi się komunikujesz) Publiczna nazwa urządzenia jest widoczna dla ludzi, z ktÃŗrymi się komunikujesz nieznany adres ip @@ -1232,8 +1024,6 @@ SprÃŗbuj uruchomić ponownie aplikację. OtwÃŗrz w przeglądarce TwÃŗj motyw Identyfikator Pokoju - - ZezwÃŗl WprowadÅē nazwę uÅŧytkownika. WprowadÅē hasło @@ -1243,17 +1033,13 @@ SprÃŗbuj uruchomić ponownie aplikację. Twoje klucze są archiwizowane. Zastąp Zatrzymaj - Klucz Odzyskiwania Nieoczekiwany błąd Czy na pewno\? Pobieranie wersji kopii zapasowejâ€Ļ WprowadÅē Klucz Odzyskiwania - Odzyskiwanie Wiadomości - Błąd sieci: sprawdÅē połączenie i sprÃŗbuj ponownie. - Obliczanie klucza odzyskiwaniaâ€Ļ Pobieranie kluczyâ€Ļ Importowanie kluczyâ€Ļ @@ -1265,20 +1051,15 @@ SprÃŗbuj uruchomić ponownie aplikację. dodano %d nowe klucze do tej sesji. dodano %d nowych kluczy do tej sesji. - Niepowodzenie przy pobieraniu wersji kluczy (%s). Usuwanie kopii zapasowejâ€Ļ Sprawdzanie stanu kopii zapasowej Oczekiwanie na potwierdzenie partneraâ€Ļ - Sesja została z powodzeniem zweryfikowana. Druga strona odrzuciła weryfikację. \n%s Reakcje - Ostatnio zmieniony %2$s przez %1$s - - Brak sieci. SprawdÅē swoje połączenie z Internetem. Proszę czekaćâ€Ļ Tego pokoju nie moÅŧna podejrzeć @@ -1289,21 +1070,16 @@ SprÃŗbuj uruchomić ponownie aplikację. Wysyłanie miniatury (%1$s / %2$s) Szyfrowanie plikuâ€Ļ Wysyłanie pliku (%1$s / %2$s) - Pobieranie pliku %1$sâ€Ļ Plik %1$s został pobrany! - Tworzę pokÃŗjâ€Ļ Warunki Usługi Wyśli załącznik - UtwÃŗrz nowy pokÃŗj PokaÅŧ hasło Ukryj hasło Przewiń do dołu - Plik \'%1$s\' (%2$s) jest zbyt duÅŧy do przesłania. Limit wynosi %3$s. - Plik Kontakt Galeria @@ -1315,40 +1091,31 @@ SprÃŗbuj uruchomić ponownie aplikację. PowÃŗd zgłoszenia treści ZGŁOŚ ZABLOKUJ UÅģYTKOWNIKA - Treść zgłoszona Zgłoszone jako spam Weyfikacja zostaje anulowana. \nPowÃŗd: %s - Proszę napisz swoją sugestię poniÅŧej. Opisz swoją sugestię tutaj UtwÃŗrz nową rozmowę bezpośrednią Połączenie z serwerem zostało utracone - Proszę wykonać kopię Preferencje Głos i wideo Wiadomości Bezpośrednie - Filtruj rozmowyâ€Ļ Wyślij nową wiadomość bezpośrednią Dodaj przez matrix ID Filtruj wg nazwy uÅŧytkownika lub IDâ€Ļ - Wersja Matrix SDK Pomoc i o aplikacji - - Wszystkie wiadomości (hałaśliwy) Wszystkie wiadomości Tylko wspomnienia Wycisz Ustawienia Nie ignorujesz Åŧadnych uÅŧytkownikÃŗw - Widziany przez - Zaawansowane ustawienia Tryb programisty Ustawienia @@ -1360,7 +1127,6 @@ SprÃŗbuj uruchomić ponownie aplikację. Włącz szyfrowanie end-to-end Brak Brak skonfigurowanego serwera toÅŧsamości. - Poproś administratora serwera (%1$s) o skonfigurowanie usługi TURN, aby połączenia mogły działać prawidłowo. \n \nMoÅŧesz takÅŧe uÅŧyć publicznego serwera %2$s, choć nie będzie on tak niezawodny i pozna twÃŗj adres IP. WybÃŗr moÅŧesz zmienić w Ustawieniach. @@ -1370,8 +1136,6 @@ SprÃŗbuj uruchomić ponownie aplikację. Nie udało się połączyć z serwerem o podanym adresie URL, upewnij się, Åŧe wpisano go poprawnie Dodaj serwer toÅŧsamości w ustawieniach, aby mÃŗc wykonać tę akcję. Wymagane jest uwierzytelnienie - - NiektÃŗre rodzaje wiadomości będą ciche (wygenerują powiadomienie bez dÅēwięku). Nie udało się wczytać niestandardowych reguł, sprÃŗbuj ponowić. Weryfikacja Usług Google @@ -1386,10 +1150,8 @@ SprÃŗbuj uruchomić ponownie aplikację. Token FCM z powodzeniem zarejestrowany na serwerze domowym. Niepowodzenie przy rejestracji tokena FCM na serwerze domowym: \n%1$s - Usługa została zatrzymana i automatycznie uruchomiona ponownie. Usługa nie uruchomiła się ponownie - Usługa zostanie uruchomiona przy starcie urządzenia. Usługa nie zostanie uruchomiona przy starcie urządzenia, nie otrzymasz Åŧadnych powiadomień, dopÃŗki Element nie zostanie uruchomiony. Dla zwiększenia bezpieczeństwa, zalecamy aby wykonać ten krok osobiście lub przez inne zaufane środki komunikacji. @@ -1401,14 +1163,10 @@ SprÃŗbuj uruchomić ponownie aplikację. \nJeśli nie chcesz więcej widzieć treści tego uÅŧytkownika,moÅŧesz go zablokować by ukryć jego wiadomości SprawdÅē ograniczenia pracy w tle Wyłącz ograniczenia - Konfiguruj powiadomienia połączeń Wybierz kolor diody LED, wibrację, dÅēwiękâ€Ļ - - Integracje Latn - WprowadÅē adres e-mail, aby moÅŧliwe było odzyskiwanie konta. Opcjonalnie uÅŧyj adresu e-mail lub numeru telefonu aby mÃŗc zostać odkrytym przez znajomych. WprowadÅē adres e-mail, aby moÅŧliwe było odzyskiwanie konta. Opcjonalnie uÅŧyj adresu e-mail lub numeru telefonu aby mÃŗc zostać odkrytym przez znajomych. PozwÃŗl na awaryjny serwer wspomagania połączeń @@ -1418,7 +1176,6 @@ SprÃŗbuj uruchomić ponownie aplikację. [%1$s] \nBłąd jest poza kontrolą Element. MoÅŧe on występować z wielu powodÃŗw. Przypuszczalnie aplikacja powrÃŗci do normalnego stanu po sprÃŗbowaniu ponownie, chociaÅŧ moÅŧna sprawdzić takÅŧe w ustawieniach systemu uprawnienia Usług Google Play dotyczące dostępu do sieci, sprawdzić prawidłowość zegaru urządzenia lub teÅŧ, moÅŧe być to błąd niestandardowego oprogramowania systemowego. Aktywuj uruchamianie przy starcie systemu - Restrykcje dotyczące działania aplikacji w tle są wyłączone dla Element. Test powinen zostać uruchomiony uÅŧywając danych komÃŗrkowych (bez WIFI). \n%1$s "Restrykcje dotyczące działania aplikacji w tle są włączone dla Element. @@ -1436,8 +1193,6 @@ SprÃŗbuj uruchomić ponownie aplikację. Brak synchronizacji w tle Nie będziesz otrzymywać powiadomień o przychodzących wiadomościach gdy aplikacja będzie działać w tle. Niepowodzenie przy aktualizacji ustawień. - - Preferowany interwał synchronizacji %s \nSynchronizacja moÅŧe zostać opÃŗÅēniona w zaleÅŧności od zasobÃŗw (bateria) lub stanu urządzenia (hibernacja). @@ -1448,32 +1203,28 @@ SprÃŗbuj uruchomić ponownie aplikację. Nie wpływa to na zaproszenia, wyrzucenia oraz bany. Wysyłaj wiadomości za pomocą klawisza enter Przycisk enter na klawiaturze programowej wyśle wiadomość zamiast wprowadzania łamanania linii - ZnajdÅē Zarządzaj ustawieniami wyszukiwania. Element potrzebuje utrzymać mało wpływowe połączenie w tle, w celu otrzymywania wiarygodnych powiadomień. \nNa następnym ekranie zostanie się poproszonym o pozwolenie działania w tle dla Element, proszę zaakceptować. Tryb oszczędzania danych uÅŧyje filtra szczegÃŗłowego, w związku z czym aktualizacje o obecności i powiadomienia o pisaniu zostaną przefiltrowane. - Media Domyślne ÅērÃŗdło mediÃŗw Odzyskiwanie zaszyforwanych wiadomości %1$s: 1 wiadomość %1$s: %2$d wiadomości - + %d powiadomienie %d powiadomień - + - Nowe wydarzenie Nowe wiadomości Ja ** Nie udało się wysłać - proszę otworzyć pokÃŗj - WidÅŧet Załaduj widÅŧet UÅŧywając tego pliki cookies mogą zostać ustawione i dane wspÃŗldzielone z %s: @@ -1482,7 +1233,6 @@ SprÃŗbuj uruchomić ponownie aplikację. \n%s Przeładuj widÅŧet Cofnij dostęp dla mnie - Wyświetlana nazwa Adres URL awatara TwÃŗj ID uÅŧytkownika @@ -1493,25 +1243,19 @@ SprÃŗbuj uruchomić ponownie aplikację. UÅŧyj aparatu UÅŧyj mikrofonu Odczytaj media zabezpieczone DRM - Nie skonfigurowano menedÅŧera integracji. Uruchom systemową kamerę zamiast niestandardowego ekranu kamery w aplikacji. Aby kontynuować, musisz zaakceptować Warunki uÅŧytkowania dla tej usługi. - Nie znaleziono prawidłowej aplikacji Usługi Google Play. Powiadomienia mogą nie działać prawidłowo. - Hasło jest zbyt słabe - Proszę usunąć hasło, jeÅŧeli chcesz aby Element wygenerował klucz odzyskiwania. Brak dostępnych sesji Matrix - Nie utrać zaszyfrowanych wiadomości Wiadomości w pokojach zaszyfrowanych są bezpieczne dzięki szyfrowaniu end-to-end. Jedynie Ty i TwÃŗj odbiorca posiadają klucze dla tych wiadomości. \n \nBezpiecznie utwÃŗrz kopię zapasową, aby ich nie utracić. Zacznij uÅŧywać Kopii Zapasowej Kluczy Wyeksportuj klucze ręcznie - Zabezpiecz swoją kopię zapasową uÅŧywając hasła. Będziemy przechowywać zaszyfrowaną kopię Twoich kluczy na serwerze domowym. Chroń swoją kopię zapasową hasłem, aby pozostała bezpieczna. \n @@ -1528,72 +1272,54 @@ SprÃŗbuj uruchomić ponownie aplikację. "Klucz odzyskiwania został zapisany do \'%s\'. \n \nUwaga: plik moÅŧe zostać usunięty, jeÅŧeli aplikacja jest odinstalowana." - Kopia zapasowa juÅŧ istnieje na Twoim serwerze domowym Wygląda na to, iÅŧ kopia zapasowa kluczy została skonfigurowana za pomocą innej sesji. Czy chcesz zastąpić ją tą, ktÃŗrą tworzysz\? Generowanie Klucza Odzyskiwania uÅŧywając hasła, proces moÅŧe zająć kilka sekund. Kopia zapasowa uruchomiona Twoje klucze szyfrujące będą kopiowane do kopii zapasowej w tle przez TwÃŗj serwer domowy. Wstępna kopia zapasowa moÅŧe zająć kilka minut. - - Utracisz dostęp do swoich wiadomości jeÅŧeli wylogujesz się lub utracisz to urządzenie. - UÅŧyj kopii zapasowej klucza aby odblokować historię zaszyfrowanych wiadomości uÅŧyj klucza odzyskiwania UÅŧyj Klucza Odzyskiwania aby odblokować historię zaszyfrowanych wiadomości Kopia zapasowa nie moÅŧe zostać zdeszyfrowana za pomocą tego hasła: proszę upewnij się, czy wprowadzone hasło jest poprawne. Przywracanie kopii zapasowej: Kopia zapasowa nie moÅŧe zostać zdeszyfrowana za pomocą tego klucza odzyskiwania: proszę upewnij się, czy wprowadzony klucz odzyskiwania jest poprawny. - Szyfrowanie sesji nie jest aktywowane - - Kopia zapasowa klucza nie jest aktywna dla tej sesji. Twoje klucze nie są będą zapisywane w kopii zapasowej od tej sesji. - Kopia zapasowa posiada sygnaturę od nieznanej sesji z ID %s. Kopia zapasowa posiada prawidłową sygnaturę dla tej sesji. Kopia zapasowa posiada prawidłową sygnaturę z zweryfikowanej sesji %s. Kopia zapasowa posiada nieprawidłową sygnaturę ze zweryfikowej sesji %s Kopia zapasowa posiada niezweryfikową sygnaturę z nieznanej sesji %s Nie udało się uzyskać zaufanych informacji dla kopii zapasowej (%s). - Aby uÅŧyć Kopii Zapasowej Kluczy dla tej sesji, przywrÃŗć ją za pomocą hasła lub klucza odzyskiwania. Usuwanie kopii zapasowej nie powiodło się (%s) - Nowa kopia zapasowa kluczy To byłem(-łam) ja Nigdy nie utrać zaszyfrowanych wiadomości Zacznij korzystać z Kopii Zapasowej Kluczy - Nigdy nie utrać zaszyfrowanych wiadomości UÅŧyj Kopii Zapasowej Kluczy - Nowe klucze szyfrowanych wiadomości Zarządzaj w Kopii Zapasowej Kluczy - Tworzenei kopii zapasowej kluczyâ€Ļ - Kopiowanie %d kluczaâ€Ļ Kopiowanie %d kluczyâ€Ļ - + - Nieprawidłowa odpowiedÅē funkcji autoodkrywania serwera domowego Opcje automatycznego uzupełniania serwerÃŗw Element wykryło niestandardową konfigurację serwera dla Twojej domeny userID \"%1$s\": \n%2$s UÅŧyj Konfiguracji - Zostałeś(-łaś) wylogowana ze względu na nieprawidłowe lub wygasłe dane logowania. - Zweryfikuj porÃŗwnując krÃŗtki ciąg tekstowy. Rozpocznij weryfikację Przychodzące Åŧądanie weryfikacji Zweryfikuj tą sesję poprzez oznaczenie jej jako zaufanej. Zaufanie sesji innych osÃŗb przynosi spokÃŗj na umyśle gdy są to szyfrowane wiadomości end-to-end. Werfikacja tej sesji oznaczy ją jako zaufaną, a takÅŧe oznaczy Twoją sesję jako zaufaną dla rozmÃŗwcy. - Wyświetl Åŧądanie Bezpieczne wiadomości od tego uÅŧytkownika są zabezpeiczone za pomocą szyfrowania end-to-end i są nie do odczytania przez osoby trzecie. Połączenie nie powiodło się z powodu niewłaściwie skonfigurowanego serwera @@ -1603,13 +1329,10 @@ SprÃŗbuj uruchomić ponownie aplikację. Automatycznie uruchom ponownie usługę powiadomień PotwierdÅē, Åŧe następujące emoji pojawiły się na ekranie partnera PotwierdÅē, Åŧe następujące liczby pojawiły się na ekranie partnera - Otrzymano przychodzące Åŧądanie weryfikacji. Rozumiem - Nic się nie pojawiło\? Nie wszystkie aplikacje obsługują juÅŧ interaktywną weryfikację. SprÃŗbuj weryfikacji starszego typu. UÅŧyj weryfikacji starszego typu. - Weryfikacja Anulowana Interaktywna Weryfikacja Sesji UÅŧytkownik anulował weryfikację @@ -1620,60 +1343,40 @@ SprÃŗbuj uruchomić ponownie aplikację. SAS nie zgadza się Sesja otrzymała niespodziewaną wiadomość Otrzymano nieprawidłową wiadomość - Dołącz do pokoju, aby rozpocząć korzystanie z aplikacji. Zapoznaj się z nieprzeczytanymi wiadomościami tutaj Twoje rozmowy bezpośrednie będą wyświetlane tutaj Twoje pokoje będą wyświetlane tutaj - Nieprawidłowe zdarzenie, nie moÅŧna wyświetlić Podgląd globalnego, publicznego pokoju nie jest wciąÅŧ wspierany w Element - Wystąpił błąd podczas otrzymywania zaufanych informacji Wystąpił błąd podczas uzyskiwania danych kluczy kopii zapasowej - Importowanie kluczy E2E z pliku \"%1$s\". - Informacje o stronach trzecich JuÅŧ wyświetlasz ten pokÃŗj! - id_aplikacji: klucz_push: wyświetlana_nazwa_aplikacji: nazwa_sesji: Url: Format: - Zarejestruj token - Dziękujemy, sugestia została szczęśliwie wysłana Wysłanie sugestii nie powiodło się (%s) - Wyświetl ukryte wydarzenia na linii czasowej - (edytowano) - - Edycje wiadomości Nie znaleziono edycji - Aktywuj gest przesunięcia, aby odpowiedzieć na osi czasu - Link skopiowany do schowka - Nie znaleziono, uÅŧyj Dodaj poprzez ID Matrix aby wyszukać na serwerze. Zacznij pisać, aby uzyskać rezultaty Dołączanie do pokojuâ€Ļ - Wyświetl historię edycji - SprawdÅē Warunki BądÅē odkryty przez innych UÅŧywaj BotÃŗw, mostÃŗw, widÅŧetÃŗw i paczek naklejek - Czytaj na - - Obecnie uÅŧywasz %1$s aby odkrywać i być odkrytym przez kontakty, ktÃŗre znasz. Nie uÅŧywasz serwera toÅŧsamości. Aby odkrywać i być odkrywanym przez kontakty, ktÃŗre znasz, skonfiguruj jeden poniÅŧej. Rozpoznawalny adres e-mail @@ -1683,25 +1386,18 @@ SprÃŗbuj uruchomić ponownie aplikację. Rozpoznawalne numery telefonu Wysłaliśmy e-mail potwierdzający do %s, sprawdÅē swoją skrzynkę i naciśnij link potwierdzający Oczekiwanie - WprowadÅē nowy serwer toÅŧsamości Nie moÅŧna połączyć z serwerem toÅŧsamości WprowadÅē adres serwera toÅŧsamości Serwer toÅŧsamości nie posiada warunkÃŗw usługi Wybrany system toÅŧsamości nie posiada jakichkolwiek warunkÃŗw usługi. Kontynuuj jedynie, gdy ufasz właścicielowi usługi Wiadomość tekstowa wysłana do %s. Proszę wprowadzić kod weryfikacyjny w niej zawarty. - Udostępniasz adres e-mail lub numer telefonu serwerowi toÅŧsamości %1$s. Musisz ponownie połączyć się z %2$s aby ich nie udostępniać. Akceptuj Warunki Usługi serwera toÅŧsamości (%s) aby pozwolić na bycie odkrytym za pomocą adresu e-mail lub numeru telefonu. - Aktywuj szczegÃŗłowe dzienniki. Dzienniki szczegÃŗłowe pomogą twÃŗrcom poprzez udostępnianie większej ilości danych, ktÃŗre zostaną wysłane, gdy potrząśniesz wściekle. Nawet jeÅŧeli zostaną aktywowane, aplikacja nie zapisuje szczegÃŗłÃŗw wiadomości oraz innych danych prywatnych. - - SprÃŗbuj ponownie, gdy zaakceptujesz warunki usługi oraz warunki ogÃŗlne serwera domowego. - Wygląda na to, iÅŧ serwer potrzebuje wiele czasu aby odpowiedzieć i moÅŧe być to spowodowane zarÃŗwno słabą łącznością jak i problemem z serwerem. SprÃŗbuj ponownie za chwilę. - OtwÃŗrz panel nawigacji OtwÃŗrz menu tworzenia pokoju Zamknij menu tworzenia pokojuâ€Ļ @@ -1712,41 +1408,32 @@ SprÃŗbuj uruchomić ponownie aplikację. 1 uÅŧytkownik odczytał %d uÅŧytkownikÃŗw odczytało - + - Wystąpił błąd poczas otrzymywania załącznika. Audio Nie moÅŧna obsłuÅŧyć otrzymanych danych - Zgłoszono jako nieodpowiedni Zawartość została zgłoszona jako niewłaścwa. \n \nJeÅŧeli nie chcesz widzieć treści od tego uÅŧytkownika, moÅŧesz go zablokować aby ukryć jego wiadomości - Element potrzebuje uprawnień aby zapisywać klucze E2E na dysku. \n \nPozwÃŗl na dostęp w następnym oknie aby mÃŗc eksportować klucze ręcznie. - Opuść pokÃŗj %1$s nie dokona(-ła) zmian Wysyła wiadomość jako spoiler Spoiler WprowadÅē słowa kluczowe aby znaleÅēć reakcję. - Naciśnij długo na pokÃŗj aby wyświetlić więcej opcji - - %1$s ustawił(-a) pokÃŗj dostępnym publicznie dla kaÅŧdego, kto zna link. %1$s ustawił(-a) pokÃŗj tylko dla zaproszonych. Nieprzeczytane wiadomości - WyzwÃŗl swoją komunikację Czatuj z osobami bezpośrednio lub w grupach Pozostaw konwersacje prywatnymi za pomocą szyfrowania Rozszerz i dopasuj swoje doświadczenie Rozpocznij - Wybierz serwer Tak jak adres e-mail, konta mają jeden dom, aczkolwiek moÅŧesz rozmawiać ze wszystkimi Dołącz do milionÃŗw, za darmo, na największym publicznym serwerze @@ -1754,7 +1441,6 @@ SprÃŗbuj uruchomić ponownie aplikację. Dowiedz się więcej Inne Ustawienia niestandardowe i zaawansowane - Kontynuuj Połącz z %1$s Połącz z Element Matrix Services @@ -1763,13 +1449,11 @@ SprÃŗbuj uruchomić ponownie aplikację. Zarejestruj Zaloguj się Kontynuuj za pomocą logowania jednostopniowego - Adres Element Matrix Services Adres Hosting premium dla organizacji WprowadÅē adres Element Modular lub serwera ktÃŗrego chcesz uÅŧyć WprowadÅē adres serwera lub Element z ktÃŗrym chcesz się połączyć - Wystąpił błąd podczas ładowania strony: %1$s (%2$d) Aplikacja nie jest w stanie zalogować się do tego serwera domowego. Serwer domowy obsluguje następujące metody logowania: %1$s. \n @@ -1778,58 +1462,46 @@ SprÃŗbuj uruchomić ponownie aplikację. Aplikacja nie jest w stanie utworzyć konta na tym serwerze domowym. \n \nCzy chcesz zarejestrować się uÅŧywając klienta sieciowego\? - E-mail nie jest powiązany z kontem. - Zresetuj hasło na %1$s Wiadomość weryfikacyjna zostanie wysłana na adres e-mail aby potwierdzić ustawienie nowego hasła. Dalej E-mail Nowe hasło - Uwaga! Zmiana hasła zresetuje wszystkie klucze szyfrowania end-to-end dla wszystkich twoich sesji, czyniąc zaszyfrowaną historię czasu nie do odczytania. Ustaw Kopię Zapasową Kluczy lub wyeksportuj klucze pokoju do innej sesji przed resetowaniem hasła. Kontynuuj - Adres e-mail nie został połączony z kontem - SprawdÅē swoją skrzynkę E-mail weryfikacyjny został wysłany do %1$s. Naciśnij na link aby potwierdzić nowe hasło. Po naciśnięciu na link, ktÃŗry je zawiera, naciśnij poniÅŧej. Zweryfikowałem(-łam) swÃŗj adres e-mail - Sukces! Hasło zostało zresetowane. Zostałeś(-łaś) wylogowany(-na) ze wszystkich sesji i nie będziesz otrzymywać powiadomień push. Aby re-aktywować powiadomienia, zaloguj się ponownie na kaÅŧdym z urządzeń. PowrÃŗć do logowania - OstrzeÅŧenie Hasło wciąÅŧ nie zostało zmienione. \n \nZatrzymać proces zmiany hasła\? - Ustaw adres e-mail Ustaw e-mail aby odzyskać konto. PÃŗÅēniej, opcjonalnie, będziesz w stanie pozwolić na odkrycie Ciebie za pomocą Twojego adresu e-mail. E-mail E-mail (nieobowiązkowy) Dalej - Ustaw numer telefonu Ustaw numer telefonu, aby pozwolić innym na odkrycie Ciebie za pomocą numeru telefonu. UÅŧyj formatu międzynarodowego. Numer telefonu Numer telefonu (nieobowiązkowy) Dalej - PotwierdÅē numer telefonu Wysłaliśmy kod do %1$s. WprowadÅē go poniÅŧej, aby potwierdzić, Åŧe to Ty. WprowadÅē kod Wyślij ponownie Dalej - Międzynarodowe numery telefonÃŗw muszą zaczynać się od \'+\' Numer telefonu wydaje się być nieprawidłowy. SprawdÅē - Zaloguj się do %1$s Nazwa uÅŧytkownika lub e-mail Nazwa uÅŧytkownika @@ -1840,26 +1512,22 @@ SprÃŗbuj uruchomić ponownie aplikację. Twoje konto wciąÅŧ nie zostalo utworzone. \n \nZatrzymać proces rejestracji\? - Wybierz matrix.org Wybierz Element Matrix Services Wybierz niestandardowy serwer domowy Wypełnij zadanie Captcha Zaakceptuj warunki aby kontynuować - SprawdÅē swÃŗj e-mail Wysłaliśmy e-mail do %1$s. \nProszę nacisnąć na link ktÃŗry zawiera aby kontynuować tworzenie konta. Wprowadzony kod jest nieprawidłowy. SprawdÅē. Nieaktualny serwer domowy Ten serwer domowy pracuje pod kontrolą zbyt starej wersji, aby się z nim połączyć. Zapytaj administratora serwera domowego o aktualizację. - Zostało wysłane zbyt wiele Åŧądań. MoÅŧesz sprÃŗbować ponownie za %1$d sekundęâ€Ļ Zostało wysłane zbyt wiele Åŧądań. MoÅŧesz sprÃŗbować ponownie za %1$d sekundyâ€Ļ - + - Wylogowałeś(-łaś) się Mogło to się stać z wielu powodÃŗw: \n @@ -1869,7 +1537,6 @@ SprÃŗbuj uruchomić ponownie aplikację. \n \nâ€ĸ Administrator Twojego serwera uniewaÅŧnił dostęp ze względÃŗw bezpieczeństwa. Zaloguj ponownie - Wylogowałeś(-łaś) się Zaloguj się Administaror twojego serwera domowego (%1$s) wylogował cię z konta %2$s (%3$s). @@ -1881,7 +1548,6 @@ SprÃŗbuj uruchomić ponownie aplikację. \n \nWyczyść je, jeÅŧeli skończyłeś(-łaś) uÅŧywać tego urządzenia, lub chcesz zalogować się na inne konto. Wyczyść wszystkie dane - Wyczyść dane Wyczyścić wszystkie dane przechowywane na tym urządzeniu\? \nZaloguj się ponownie aby uzyskać dostęp do danych konta i wiadomości. @@ -1889,12 +1555,9 @@ SprÃŗbuj uruchomić ponownie aplikację. Wyczyść dane Aktualna sesja jest dla uÅŧytkownika %1$s, podajesz natomiast dane dla uÅŧytkownika %2$s. Nie jest to wspierane przez Element. \nNa początku usuń dane, następnie zaloguj ponownie na innym koncie. - Link matrix.to został zdeformowany Opis zbyt krÃŗtki - Synchronizacja wstępnaâ€Ļ - Zobacz wszystkie sesje Wściekłe potrząśnięcie PrÃŗg detekcji @@ -1902,26 +1565,19 @@ SprÃŗbuj uruchomić ponownie aplikację. Potrząśnięcie wykryte! Aktualna sesja Inne sesje - Wyświetlanie jedynie początkowych wynikÃŗw, wprowadÅē więcej znakÃŗwâ€Ļ - Bezproblemowy Element moÅŧe zawieszać się częściej gdy napotka na niespodziewany błąd - Preparuje ¯\\_(ツ)_/¯ dla zwykłej wiadomości tekstowej - Aktywuj szyfrowanie Odkąd zostanie włączone, szyfrowanie nie moÅŧe zostać wyłączone. - Twoja domena adresu e-mail nie została dopuszczona do rejestracji na tym serwerze - Niezaufane logowanie Zgadzają się Nie zgadzają się Zweryfikuj uÅŧytkownika poprzez potwierdzenie unikalnego ciągu emoji, w tym samym porządku na jego ekranie. Dla najlepszego bezpieczeństwa, uÅŧyj innych zaufanych form komunikacji lub zrÃŗb to osobiście. Patrz na zieloną tarczę, aby upewnić się czy uÅŧytkownik jest zaufany. Zaufaj wszystkim uÅŧytkownikom w pokoju, aby upewnić się, Åŧe pokÃŗj jest bezpieczny. - Nie jest bezpieczny Jeden z poniÅŧszych mogł zostać naraÅŧony: \n @@ -1929,12 +1585,10 @@ SprÃŗbuj uruchomić ponownie aplikację. \n- Serwer domowy uÅŧytkownika, z ktÃŗrym jest on połączony \n- Połączenie z Internetem Twoje lub innych uÅŧytkownikÃŗw \n- Urządzenie Twoje lub innych uÅŧytkownikÃŗw - Wideo. Zdjęcie. DÅēwięk Plik - Oczekiwanieâ€Ļ %s anulowana Anulowałeś(-łaś) @@ -1942,25 +1596,17 @@ SprÃŗbuj uruchomić ponownie aplikację. Zaakceptowałeś(-łaś) Åģądanie weryfikacji wysłane Åģądanie weryfikacji - - Zweryfikuj tą sesję Zweryfikuj ręcznie - Ty - Zeskanuj kod z urządzenia innego uÅŧytkownika aby bezpiecznie zweryfikować siebie nawzajem Zeskanuj ich kod Nie moÅŧna zeskanować JeÅŧeli nie jesteś z tą osobą, zamiast tego porÃŗwnaj emoji - Zweryfikuj porÃŗwnując emoji - Zweryfikuj za pomocą Emoji JeÅŧeli nie moÅŧesz zeskanować kodu powyÅŧej, zweryfikuj porÃŗwnując krÃŗtki, unikalny ciąg emoji. - Obraz kodu QR - Zweryfikuj %s Zweryfikowano %s Oczekiwanie na %sâ€Ļ @@ -1974,57 +1620,41 @@ SprÃŗbuj uruchomić ponownie aplikację. Jedna osoba %1$d osÃŗb - + Opuszczanie pokojuâ€Ļ - Administratorzy Moderatorzy Niestandardowy Zaproszenia UÅŧytkownicy - Administrator w %1$s Moderator w %1$s Niestandardowy (%1$d) w %2$s - Przeskocz do znacznika odczytania - Element nie obsługuje wydarzeń typu \'%1$s\' Element nie obsługuje wiadomości typu \'%1$s\' Element napotkał problem przy wyświetlaniu zawartości wydarzenia z ID \'%1$s\' - Nie ignoruj - Sesja nie jest w stanie podzielić się weryfikacją z innymi sesjami. \nWeryfikacja zostanie zapisana lokalnie i udostępniona w przyszłych wersjach aplikacji. - Ostatnie pokoje Inne pokoje - Wysyła wiadomość w odcieniach tęczy Wysyła emoji w odcieniach tęczy - Oś czasu - Edycja wiadomości - Odkąd zostanie włączone, szyfrowanie nie moÅŧe zostać wyłączone. - Aktywować szyfrowanie\? Odkąd zostanie włączone, szyfrowanie w pokoju nie moÅŧe zostać wyłączone. Wiadomości wysłane w zaszyfrowanym pokoju nie są widzane przez serwer, a jedynie przez uczestnikÃŗw w pokoju. \nAktywowanie szyfrowania moÅŧe uniemoÅŧliwić wielu botom i mostom prawidłowe działanie. Aktywuj szyfrowanie - Aby być bezpiecznym, zweryfikuj %s poprzez sprawdzenie jednorazowego kodu. Aby być bezpiecznym, zrÃŗb to osobiście lub uÅŧyj innej metody komunikacji. - PorÃŗwnaj unikalny ciąg emoji, upewniając się, Åŧe pojawiają się w identycznym porządku. PorÃŗwnaj kod wyświetlany na ekranie innego uÅŧytkownika. Wiadomości z uÅŧytkownikiem są szyfrowane end-to-end i nie mogą zostać odczytane przez osoby trzecie. Nowa sesja została zweryfikowana. Posiadasz dostęp do zaszyfrowanych wiadomości, a inni uÅŧytkownicy będą ją widzieć jako zaufaną. - - Podpis krzyÅŧowy Podpis krzyÅŧowy jest aktywowany. \nKlucze Prywatne znajdują się na urządzeniu. @@ -2034,108 +1664,81 @@ SprÃŗbuj uruchomić ponownie aplikację. Podpis krzyÅŧowy jest aktywowany. \nKlucze nie są zaufane Podpis krzyÅŧowy nie jest aktywowany - - Aktywne Sesje PokaÅŧ wszystkie Sesje Zarządzaj Sesjami Wyloguj z tej sesji - Brak dostępnej informacji o kryptografii - Ta sesja jest zaufana dla bezpiecznej wymiany wiadomości, poniewaÅŧ ją zweryfikowałeś(-łaś): Zweryfikuj tą sesję aby oznaczyć ją jako zaufaną i przyznać jej dostęp do zaszyfrowanych wiadomości. JeÅŧeli nie logowałeś(-łaś) się do tej sesji, twoje konto mogło zostać naruszone: - %d aktywna sesja %d aktywnych sesji - + - Zweryfikuj tą sesję Inni uÅŧytkownicy mogą jemu nie ufać Całkowite Bezpieczeństwo - OtwÃŗrz obecną sesję i uÅŧyj jej do zweryfikowania obecnej, przyznając jej dostęp do zaszyfrowanych wiadomości. - - Zweryfkuj Zweryfikowano OstrzeÅŧenie - Uzyskanie sesji nie powiodło się Sesje Zaufany Niezaufany - Sesja jest zaufana dla bezpiecznej wymiany wiadomości poniewaÅŧ %1$s (%2$s) zweryfikował(-a) ją: %1$s (%2$s) zalogował(-a) się uÅŧywając nowej sesji: DopÃŗki uÅŧytkownik ufa tej sesji, wiadomości wysłane do oraz od niej będą oznaczone ostrzeÅŧeniami. Ewentualnie, moÅŧesz zweryfikować je ręcznie. - - Inicjalizacja podpisu krzyÅŧowego Zresetuj Klucze - Kod QR - Tak Nie - Narzędzia programistyczne Dane konta %d głos %d głosÃŗw - + %d głos - wyniki końcowe %d głosÃŗw - wyniki końcowe - + Wybrana Opcja Tworzy prostą ankietę Nie masz dostępu do instniejącej sesji\? UÅŧyj klucza odzyskiwania lub hasła - Nowa rejestracja - Nie moÅŧna odnaleÅēć tajemnej przestrzeni w pamięci WprowadÅē hasło tajemnej przestrzeni OstrzeÅŧenie: Powinieneś(-nnaś) uzyskać dostęp do tajnej przestrzeni jedynie z zaufanego urządzenia - Usuńâ€Ļ Czy chcesz wysłać załącznik do %1$s\? Wyślij obraz w oryginalnym rozmiarze Wyślij obrazy w oryginalnym rozmiarze - + - PotwierdÅē Usunięcie Jesteś pewny(-na), Åŧe chcesz usunąć to wydarzenie\? JeÅŧeli usuniesz nazwę pokoju lub zmienisz temat, wciąÅŧ będzie moÅŧliwe cofnięcie zmiany. Podaj przyczynę Przyczyna reakcji - Wydarzenie usunięte przez uÅŧytkownika, przyczyna: %1$s Wydarzenie moderowane przez administratora pokoju, przyczyna: %1$s - Klucze są juÅŧ aktualne! - SprawdÅē Zrezygnuj - Niezgodność klucza Niezgodność uÅŧytkownikÃŗw Nie uÅŧywasz Serwera ToÅŧsamości Nie skonfigurowano serwera toÅŧszamości, ktÃŗry jest wymagany do resetowania hasła. - Wygląda na to, Åŧe prÃŗbujesz podłączyć się do innego serwera domowego. Czy chcesz się wylogować\? - Przysyła zaproszenie Zaproszono przez %s - Nie masz więcej nieprzeczytanych wiadomości Witaj w domu! Reakcje @@ -2146,39 +1749,44 @@ SprÃŗbuj uruchomić ponownie aplikację. Zdarzenie moderowane przez administratora pokoju Katalog Pokoi Szybkie Reakcje - OgÃŗlne Zasady push Brak zarejestrowanych bramek push - Szyfrowanie miniaturyâ€Ļ Nie moÅŧesz czegoś odnaleÅēć\? UtwÃŗrz nowy pokÃŗj OtwÃŗrz katalog pokoi - Nazwa lub ID (#przykład:matrix.org) - Serwer toÅŧszamości Odłącz od serwera toÅŧsamości Skonfiguruj serwer toÅŧsamości Zmień serwer toÅŧsamości Aparat Obecnie nie ma połączenia z siecią - Zablokuj uÅŧytkownika - ZłÃŗÅŧ sugestię Tryb programisty aktywuje ukryte funkcje i moÅŧe rÃŗwnieÅŧ spowodować, Åŧe aplikacja będzie mniej stabilna. Tylko dla programistÃŗw! Wiadomości w tym pokoju nie są szyfrowane end-to-end. Przesłane pliki Prośby o klucze - Odblokuj historię zaszyfrowanych wiadomości - Element Android - OdświeÅŧ - UÅŧyj tej sesji do weryfikacji nowej, nadając jej dostęp do zaszyfrowanych wiadomości. To nie ja - + Zamknij + Wstrzymaj + OdtwÃŗrz + Nie posiadasz wymaganych uprawnień do rozpoczęcia połaczenia w tym pokoju + Odbierz + Usuwanie widÅŧetu nie powiodło się + Dodawanie widÅŧetu nie powiodło się + Nie moÅŧna rozpocząć połączenia z samym sobą, poczekaj aÅŧ inni zaakceptują zaproszenie + Nie moÅŧna rozpocząć połączenia z samym sobą + Rozpocznij połączenie głosowe + Rozpocznij połączenie wideo + Połączenie grupowe juÅŧ trwa! + Nie posiadasz wymaganych uprawnień aby rozpocząć połączenie grupowe w tym pokoju + Nie posiadasz wymaganych uprawnień do rozpoczęcia połaczenia + Nie posiadasz wymaganych uprawnień aby rozpocząć połączenie grupowe + \ No newline at end of file From f82ee5efddd3cbecc197b42dfdbd3e51cb463a3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Priit=20J=C3=B5er=C3=BC=C3=BCt?= Date: Tue, 13 Oct 2020 05:01:17 +0000 Subject: [PATCH 261/278] Translated using Weblate (Estonian) Currently translated at 100.0% (190 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/et/ --- .../src/main/res/values-et/strings.xml | 64 +++++++------------ 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-et/strings.xml b/matrix-sdk-android/src/main/res/values-et/strings.xml index 2fbe263464..3c24ed8c2f 100644 --- a/matrix-sdk-android/src/main/res/values-et/strings.xml +++ b/matrix-sdk-android/src/main/res/values-et/strings.xml @@ -1,9 +1,8 @@ - + %1$s: %2$s %1$s saatis pildi. %1$s saatis kleepsu. - Kasutaja %s kutse %1$s kutsus kasutajat %2$s %1$s kutsus sind @@ -30,11 +29,9 @@ teadmata (%s). %1$s lÃŧlitas sisse läbiva krÃŧptimise (%2$s) %s uuendas seda jututuba. - %1$s saatis VoIP konverentsi kutse VoIP-konverents algas VoIP-konverents lÃĩppes - (samuti sai avatar muudetud) %1$s eemaldas jututoa nime %1$s eemaldas jututoa teema @@ -46,37 +43,25 @@ %1$s saatis jututoaga liitumiseks kutse kasutajale %2$s %1$s vÃĩttis tagasi jututoaga liitumise kutse kasutajalt %2$s %1$s vÃĩttis vastu kutse %2$s nimel - ** Ei Ãĩnnestu dekrÃŧptida: %s ** SÃĩnumi saatja seade ei ole selle sÃĩnumi jaoks saatnud dekrÃŧptimisvÃĩtmeid. - Ei saanud muuta sÃĩnumit SÃĩnumi saatmine ei Ãĩnnestunud - Faili Ãŧles laadimine ei Ãĩnnestunud - VÃĩrguÃŧhenduse viga Matrix\'i viga - Hetkel ei ole vÃĩimalik uuesti liituda tÃŧhja jututoaga. - KrÃŧptitud sÃĩnum - E-posti aadress Telefoninumber - Kutse kasutajalt %s Kutse jututuppa - %1$s ja %2$s - %1$s ja Ãŧks muu %1$s ja %2$d muud - TÃŧhi jututuba - Alglaadimine: \nImpordin kontotâ€Ļ Alglaadimine: @@ -93,10 +78,8 @@ \nImpordin kogukondi Alglaadimine: \nImpordin kontoandmeid - Saadan sÃĩnumitâ€Ļ TÃŧhjenda saatmisjärjekord - Kasutaja %1$s kutse. PÃĩhjus: %2$s %1$s kutsus kasutajat %2$s. PÃĩhjus: %3$s %1$s kutsus sind. PÃĩhjus: %2$s @@ -108,34 +91,25 @@ %1$s tÃŧhistas kasutajale %2$s saadetud kutse jututoaga liitumiseks. PÃĩhjus: %3$s %1$s vÃĩttis vastu kutse %2$s jututoaga liitumiseks. PÃĩhjus: %3$s %1$s vÃĩttis tagasi kasutajale %2$s saadetud kutse. PÃĩhjus: %3$s - %1$s lÃŧlitas sisse läbiva krÃŧptimise. %1$s lÃŧlitas sisse läbiva krÃŧptimise (tundmatu algoritm %2$s). - %1$s lisas %2$s selle jututoa aadressiks. %1$s lisas %2$s selle jututoa aadressideks. - %1$s eemaldas %2$s kui selle jututoa aadressi. %1$s eemaldas %2$s selle jututoa aadresside hulgast. - %1$s lisas %2$s ja eemaldas %3$s selle jututoa aadresside loendist. - %1$s seadistas selle jututoa pÃĩhiaadressiks %2$s. %1$s eemaldas selle jututoa pÃĩhiaadressi. - %1$s lubas kÃŧlalistel selle jututoaga liituda. %1$s seadistas, et kÃŧlalised ei vÃĩi selle jututoaga liituda. - %s soovib verifitseerida sinu vÃĩtmeid, kuid sinu kasutatav klient ei oska vestluse-sisest verifitseerimist teha. Sa pead kasutama traditsioonilist verifitseerimislahendust. - Kasutaja %1$s lÃĩi jututoa Sina saatsid pildi. Sina saatsid kleepsu. - Sinu kutse Sa lÃĩid jututoa Sina kutsusid kasutajat %1$s @@ -165,7 +139,6 @@ Sa seadistasid, et tulevane jututoa ajalugu on nähtav kasutajale %1$s Sa lÃŧlitasid sisse läbiva krÃŧptimise (%1$s) Sa uuendasid seda jututuba. - Sa algatasid VoIP rÃŧhmakÃĩne Sa eemaldasid jututoa nime Sa eemaldasid jututoa teema @@ -175,24 +148,20 @@ Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks Sina vÃĩtsid tagasi jututoaga liitumise kutse kasutajalt %1$s Sina vÃĩtsid vastu kutse %1$s nimel - %1$s lisas %2$s vidina Sina lisasid %1$s vidina %1$s eemaldas %2$s vidina Sina eemdaldasid %1$s vidina %1$s muutis %2$s vidinat Sa muutsid %1$s vidinat - Peakasutaja Moderaator Tavakasutaja Kohandatud kasutajaÃĩigused (%1$s) Kohandatud Ãĩigused - Sina muutsid kasutaja %1$s Ãĩigusi. %1$s muutis kasutaja %2$s Ãĩigusi. %1$s Ãĩiguste muutus %2$s -> %3$s - Sinu kutse. PÃĩhjus %1$s Sina kutsusid kasutajat %1$s. PÃĩhjus: %1$s Sina liitusid jututoaga. PÃĩhjus: %1$s @@ -207,26 +176,41 @@ Sina vÃĩtsid tagasi jututoaga liitumise kutse kasutajalt %1$s. PÃĩhjus: %2$s Sina vÃĩtsid vastu kutse %1$s nimel. PÃĩhjus: %2$s Sina vÃĩtsid tagasi kasutaja %1$s kutse. PÃĩhjus: %2$s - Sina lisasid %1$s selle jututoa aadressiks. Sina lisasid %1$s selle jututoa aadressideks. - Sina eemaldasid %1$s, kui selle jututoa aadressi. Sina eemaldasid %1$s selle jututoa aadresside hulgast. - Sina lisasid %1$s selle jututoa aadressiks ning eemaldasid %2$s aadresside hulgast. - Sina seadistasid selle jututoa pÃĩhiaadressiks %1$s. Sina eemaldasid selle jututoa pÃĩhiaadressi. - Sina lubasid kÃŧlalistel selle jututoaga liituda. Sina seadistasid, et kÃŧlalised ei vÃĩi selle jututoaga liituda. - Sa lÃŧlitasid sisse läbiva krÃŧptimise. Sa lÃŧlitasid sisse läbiva krÃŧptimise (kasutusel on tundmatu algoritm %1$s). - - + Sina seadistasid, et kÃŧlalised ei vÃĩi selle jututoaga liituda. + %1$s seadistas, et kÃŧlalised ei vÃĩi selle jututoaga liituda. + Sina lubasid kÃŧlalistel selle jututoaga liituda. + %1$s lubas kÃŧlalistel selle jututoaga liituda. + Sina lahkusid jututoast. PÃĩhjus: %1$s + %1$s lahkus jututoast. PÃĩhjus: %2$s + Sina liitusid jututoaga. PÃĩhjus: %1$s + %1$s liitus jututoaga. PÃĩhjus: %2$s + Sina vÃĩtsid tagasi jututoaga liitumise kutse kasutajalt %1$s + %1$s vÃĩttis tagasi jututoaga liitumise kutse kasutajalt %2$s + Sina kutsusid kasutajat %1$s + %1$s kutsus kasutajat %2$s + Sa uuendasid seda jututuba. + %s uuendas seda jututuba. + Sina seadistasid, et tulevased jututoa sÃĩnumid on nähtavad kasutajale %1$s + %1$s seadistas, et tulevased jututoa sÃĩnumid on nähtavad kasutajale %2$s + Sina lahkusid jututoast + %1$s lahkus jututoast + Sina liitusid + %1$s liitus + Sina alustasid vestlust + %1$s alustas vestlust + \ No newline at end of file From ba3500baf65dfed4928c3c2b3e01d6a691cea24f Mon Sep 17 00:00:00 2001 From: linsui Date: Wed, 14 Oct 2020 13:26:02 +0000 Subject: [PATCH 262/278] Translated using Weblate (Chinese (Simplified)) Currently translated at 97.8% (186 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/zh_Hans/ --- .../src/main/res/values-zh-rCN/strings.xml | 61 ++++++------------- 1 file changed, 20 insertions(+), 41 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml index 60322821d4..496bbe6bf8 100644 --- a/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml +++ b/matrix-sdk-android/src/main/res/values-zh-rCN/strings.xml @@ -1,7 +1,6 @@ - + %1$s 发送äē†ä¸€åŧ å›žį‰‡ã€‚ - %s įš„é‚€č¯ˇ %1$s é‚€č¯ˇäē† %2$s %1$s é‚€č¯ˇäē†æ‚¨ @@ -27,42 +26,30 @@ äģģäŊ•äēē。 æœĒįŸĨīŧˆ%sīŧ‰ã€‚ %1$s åŧ€å¯äē†įĢ¯åˆ°įĢ¯åŠ å¯†īŧˆ%2$sīŧ‰ - %1$s č¯ˇæą‚äē†ä¸€æŦĄ VoIP äŧščŽŽ VoIP äŧščŽŽåˇ˛åŧ€å§‹ VoIP äŧščŽŽåˇ˛įģ“束 - īŧˆå¤´åƒäšŸčĸĢ更攚īŧ‰ %1$s į§ģ除äē†čŠå¤ŠåŽ¤åį§° %1$s į§ģ除äē†čŠå¤ŠåŽ¤ä¸ģéĸ˜ ** 无æŗ•č§Ŗ密īŧš%s ** å‘é€č€…įš„čŽžå¤‡æ˛Ąæœ‰å‘æˆ‘äģŦ发送此æļˆæ¯įš„密é’Ĩ。 - 无æŗ•å‘送æļˆæ¯ - 上äŧ å›žåƒå¤ąč´Ĩ - įŊ‘įģœé”™č¯¯ Matrix é”™č¯¯ - į›Žå‰æ— æŗ•é‡æ–°åŠ å…Ĩ一ä¸ĒįŠēįš„čŠå¤ŠåŽ¤ã€‚ - åˇ˛åŠ å¯†æļˆæ¯ - į”ĩ子邎įŽąåœ°å€ 手æœēåˇį  - %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 发送äē†ä¸€åŧ č´´įē¸ã€‚ - įŠēčŠå¤ŠåŽ¤ æĨč‡Ē %s įš„é‚€č¯ˇ čŠå¤ŠåŽ¤é‚€č¯ˇ @@ -70,7 +57,6 @@ %1$s 与å…ļäģ– %2$d äŊ - æļˆæ¯åˇ˛čĸĢį§ģ除 æļˆæ¯åˇ˛čĸĢ %1$s į§ģ除 æļˆæ¯åˇ˛čĸĢį§ģ除 [原因: %1$s] @@ -91,14 +77,10 @@ \næ­Ŗ在å¯ŧå…Ĩį¤žåŒē 初始化同æ­Ĩīŧš \næ­Ŗ在å¯ŧå…Ĩč´Ļåˇæ•°æŽ - %s 升įē§äē†æ­¤čŠå¤ŠåŽ¤ã€‚ - æ­Ŗ在发送æļˆæ¯â€Ļ 清除æ­Ŗ在发送队列 - %1$s 撤回äē†å¯š %2$s 加å…ĨčŠå¤ŠåŽ¤įš„é‚€č¯ˇ - %1$s įš„é‚€č¯ˇã€‚į†į”ąīŧš%2$s %1$s é‚€č¯ˇäē† %2$s。į†į”ąīŧš%3$s %1$s é‚€č¯ˇäē†æ‚¨ã€‚į†į”ąīŧš%2$s @@ -112,32 +94,23 @@ %1$s 撤销äē† %2$s 加å…ĨčŠå¤ŠåŽ¤įš„é‚€čĢ‹ã€‚į†į”ąīŧš%3$s %1$s æŽĨ受 %2$s įš„é‚€čĢ‹ã€‚į†į”ąīŧš%3$s %1$s 撤回äē†å¯š %2$s įš„é‚€č¯ˇã€‚į†į”ąīŧš%3$s - %1$s 新åĸžäē† %2$s ä¸ēæ­¤čŠå¤ŠåŽ¤įš„地址。 - %1$s į§ģ除äē†æ­¤čŠå¤ŠåŽ¤įš„ %3$s 地址。 - %1$s ä¸ēæ­¤čŠå¤ŠåŽ¤æ–°åĸžäē† %2$s åšļį§ģ除 %3$s 地址。 - %1$s å°†æ­¤čŠå¤ŠåŽ¤įš„ä¸ģåœ°å€čŽžä¸ēäē† %2$s。 %1$s ä¸ēæ­¤čŠå¤ŠåŽ¤į§ģ除äē†ä¸ģ地址。 - %1$s åˇ˛å…čŽ¸čŽŋåŽĸ加å…ĨčŠå¤ŠåŽ¤ã€‚ %1$s åˇ˛įĻæ­ĸčŽŋåŽĸ加å…ĨčŠå¤ŠåŽ¤ã€‚ - %1$s åˇ˛åŧ€å¯įĢ¯åˆ°įĢ¯åŠ å¯†ã€‚ %1$s åˇ˛åŧ€å¯įĢ¯åˆ°įĢ¯åŠ å¯†īŧˆæ— æŗ•č¯†åˆĢįš„æŧ”įŽ—æŗ• %2$sīŧ‰ã€‚ - %s æ­Ŗåœ¨č¯ˇæą‚éĒŒč¯æ‚¨įš„密é’ĨīŧŒäŊ†æ‚¨įš„åŽĸæˆˇįĢ¯ä¸æ”¯æ´čŠå¤Šä¸­å¯†é’ĨéĒŒč¯ã€‚ 您将åŋ…éĄģäŊŋį”¨æ—§į‰ˆįš„密é’ĨéĒŒč¯æĨéĒŒč¯é‡‘é’Ĩ。 - %1$s 创åģēäē†čŋ™ä¸ĒčŠå¤ŠåŽ¤ 您发送äē†ä¸€åŧ å›žį‰‡ã€‚ 您发送äē†ä¸€åŧ č´´įē¸ã€‚ - 您įš„é‚€č¯ˇ 您创åģēäē†čŋ™ä¸ĒčŠå¤ŠåŽ¤ æ‚¨é‚€č¯ˇäē† %1$s @@ -165,7 +138,6 @@ æ‚¨åˇ˛čŽŠæœĒæĨįš„čŠå¤ŠåŽ¤čŽ°åŊ•å¯š %1$s å¯č§ 您åŧ€å¯äē†įĢ¯åˆ°įĢ¯åŠ å¯†īŧˆ%1$sīŧ‰ 您升įē§äē†æ­¤čŠå¤ŠåŽ¤ã€‚ - æ‚¨č¯ˇæą‚äē† VoIP äŧščŽŽ 您į§ģ除äē†čŠå¤ŠåŽ¤åį§° 您į§ģ除äē†čŠå¤ŠåŽ¤ä¸ģéĸ˜ @@ -175,24 +147,20 @@ 您向 %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 @@ -205,24 +173,35 @@ 您撤销äē† %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 åˇ˛įĻģåŧ€ã€‚į†į”ąīŧš%2$s + æ‚¨åˇ˛åŠ å…Ĩ。į†į”ąīŧš%1$s + %1$s åˇ˛åŠ å…Ĩ。į†į”ąīŧš%2$s + 您撤回äē†å¯š %1$s įš„é‚€č¯ˇ + %1$s 撤回äē†å¯š %2$s įš„é‚€č¯ˇ + æ‚¨é‚€č¯ˇäē† %1$s + %1$s é‚€č¯ˇäē† %2$s + 您在此处升įē§ã€‚ + %s 在此处升įē§ã€‚ + 您äŊŋæœĒæĨįš„æļˆæ¯å¯š %2$s å¯č§ + %1$s äŊŋæœĒæĨįš„æļˆæ¯å¯š %2$s å¯č§ + 您įĻģåŧ€äē†čŠå¤ŠåŽ¤ + %1$s įĻģåŧ€äē†čŠå¤ŠåŽ¤ + æ‚¨åˇ˛åŠ å…Ĩ + %1$s åˇ˛åŠ å…Ĩ + 您创åģēäē†čŽ¨čŽē + %1$s 创åģēäē†čŽ¨čŽē + \ No newline at end of file From 5cb46dba6c7bf2e4907c39a7c23d987b261d9143 Mon Sep 17 00:00:00 2001 From: Nikita Epifanov Date: Tue, 13 Oct 2020 14:29:26 +0000 Subject: [PATCH 263/278] Translated using Weblate (Russian) Currently translated at 98.9% (188 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/ru/ --- .../src/main/res/values-ru/strings.xml | 71 ++++++------------- 1 file changed, 23 insertions(+), 48 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-ru/strings.xml b/matrix-sdk-android/src/main/res/values-ru/strings.xml index a4d752782e..97643a34fe 100644 --- a/matrix-sdk-android/src/main/res/values-ru/strings.xml +++ b/matrix-sdk-android/src/main/res/values-ru/strings.xml @@ -1,9 +1,7 @@ - + - %1$s: %2$s %1$s ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģ(Đ°) иСОйŅ€Đ°ĐļĐĩĐŊиĐĩ. - %s ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ %1$s ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Đģ(Đ°) %2$s %1$s ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Đģ(Đ°) ваŅ @@ -31,67 +29,49 @@ вŅĐĩĐŧ. ĐŊĐĩиСвĐĩŅŅ‚ĐŊĐž (%s). %1$s вĐēĐģŅŽŅ‡Đ¸Đģ(Đ°) ŅĐēвОСĐŊĐžĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ (%2$s) - %1$s СаĐŋŅ€ĐžŅĐ¸Đģ(Đ°) VoIP ĐēĐžĐŊŅ„ĐĩŅ€ĐĩĐŊŅ†Đ¸ŅŽ VoIP-ĐēĐžĐŊŅ„ĐĩŅ€ĐĩĐŊŅ†Đ¸Ņ ĐŊĐ°Ņ‡Đ°Ņ‚Đ° VoIP-ĐēĐžĐŊŅ„ĐĩŅ€ĐĩĐŊŅ†Đ¸Ņ СавĐĩŅ€ŅˆĐĩĐŊĐ° - (аваŅ‚Đ°Ņ€ Ņ‚Đ°ĐēĐļĐĩ ĐąŅ‹Đģ иСĐŧĐĩĐŊĐĩĐŊ) %1$s ŅƒĐ´Đ°ĐģиĐģ(Đ°) ĐŊаСваĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ %1$s ŅƒĐ´Đ°ĐģиĐģ(Đ°) Ņ‚ĐĩĐŧŅƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ %1$s ОйĐŊОвиĐģ(Đ°) ŅĐ˛ĐžĐš ĐŋŅ€ĐžŅ„иĐģŅŒ %2$s %1$s ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģ(Đ°) ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ %2$s ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ %1$s ĐŋŅ€Đ¸ĐŊŅĐģ(Đ°) ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ ĐžŅ‚ %2$s - ** НĐĩвОСĐŧĐžĐļĐŊĐž Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ: %s ** ĐŖŅŅ‚Ņ€ĐžĐšŅŅ‚вО ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ĐĩĐģŅ ĐŊĐĩ ĐŋŅ€ĐĩĐ´ĐžŅŅ‚авиĐģĐž ĐŊĐ°Đŧ ĐēĐģŅŽŅ‡ Đ´ĐģŅ Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đēи ŅŅ‚ĐžĐŗĐž ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ. - НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ иСĐŧĐĩĐŊиŅ‚ŅŒ НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ - НĐĩ ŅƒĐ´Đ°ĐģĐžŅŅŒ СаĐŗŅ€ŅƒĐˇĐ¸Ņ‚ŅŒ иСОйŅ€Đ°ĐļĐĩĐŊиĐĩ - ĐĄĐĩŅ‚ĐĩваŅ ĐžŅˆĐ¸ĐąĐēĐ° ОŅˆĐ¸ĐąĐēĐ° Matrix - - - - В ĐŊĐ°ŅŅ‚ĐžŅŅ‰ĐĩĐĩ вŅ€ĐĩĐŧŅ ĐŊĐĩвОСĐŧĐžĐļĐŊĐž вĐŊОвŅŒ ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ĐŋŅƒŅŅ‚ОК ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ. - ЗаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ - АдŅ€ĐĩŅ ŅĐģĐĩĐēŅ‚Ņ€ĐžĐŊĐŊОК ĐŋĐžŅ‡Ņ‚Ņ‹ НоĐŧĐĩŅ€ Ņ‚ĐĩĐģĐĩŅ„ĐžĐŊĐ° - %1$s ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģ ŅŅ‚иĐēĐĩŅ€. - ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ ĐžŅ‚ %s ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ в ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ %1$s и %2$s ПŅƒŅŅ‚Đ°Ņ ĐēĐžĐŧĐŊĐ°Ņ‚Đ° - %1$s и 1 Đ´Ņ€ŅƒĐŗОК %1$s и %2$d Đ´Ņ€ŅƒĐŗиĐĩ %1$s и %2$d Đ´Ņ€ŅƒĐŗиŅ… - + - - ХООйŅ‰ĐĩĐŊиĐĩ ŅƒĐ´Đ°ĐģĐĩĐŊĐž %1$s ŅƒĐ´Đ°ĐģиĐģ(Đ°) ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ ХООйŅ‰ĐĩĐŊиĐĩ ŅƒĐ´Đ°ĐģĐĩĐŊĐž [ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %1$s] %1$s ŅƒĐ´Đ°ĐģиĐģ(Đ°) ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ [ĐŋŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %2$s] - НаŅ‡Đ°ĐģŅŒĐŊĐ°Ņ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņ: \nИĐŧĐŋĐžŅ€Ņ‚ ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸â€Ļ НаŅ‡Đ°ĐģŅŒĐŊĐ°Ņ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņ: @@ -108,12 +88,9 @@ \nИĐŧĐŋĐžŅ€Ņ‚ ŅĐžĐžĐąŅ‰ĐĩŅŅ‚в НаŅ‡Đ°ĐģŅŒĐŊĐ°Ņ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŊиСаŅ†Đ¸Ņ: \nИĐŧĐŋĐžŅ€Ņ‚ Đ´Đ°ĐŊĐŊŅ‹Ņ… ŅƒŅ‡ĐĩŅ‚ĐŊОК СаĐŋиŅĐ¸ - %s ОйĐŊОвиĐģ ŅŅ‚Ņƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. - ОŅ‚ĐŋŅ€Đ°Đ˛ĐēĐ° ŅĐžĐžĐąŅ‰ĐĩĐŊиŅâ€Ļ ОŅ‡Đ¸ŅŅ‚иŅ‚ŅŒ ĐžŅ‡ĐĩŅ€ĐĩĐ´ŅŒ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đēи - %1$s ĐžŅ‚ОСваĐģ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ %2$s ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ ПŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ %1$s. ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %2$s %1$s ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊ %2$s. ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %3$s @@ -128,36 +105,27 @@ %1$s ĐžŅ‚ОСваĐģ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ %2$s ĐŋŅ€Đ¸ŅĐžĐĩдиĐŊиŅ‚ŅŒŅŅ Đē ĐēĐžĐŧĐŊĐ°Ņ‚Đĩ. ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %3$s %1$s ĐŋŅ€Đ¸ĐŊŅĐģ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ Đ´ĐģŅ %2$s. ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %3$s %1$s ĐžŅ‚ОСваĐģ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ %2$s. ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %3$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 и ŅƒĐ´Đ°ĐģиĐģ(Đ°) %3$s Đ´ĐģŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹. - %1$s ŅĐ´ĐĩĐģĐ°Đģ(Đ°) %2$s ĐŗĐģавĐŊŅ‹Đŧ Đ°Đ´Ņ€ĐĩŅĐžĐŧ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹. %1$s ŅƒĐ´Đ°ĐģиĐģ(Đ°) ĐŗĐģавĐŊŅ‹Đš Đ°Đ´Ņ€ĐĩŅ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹. - %1$s Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ¸Đģ(Đ°) ĐŗĐžŅŅ‚ŅĐŧ вŅ…ОдиŅ‚ŅŒ в ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. %1$s СаĐŋŅ€ĐĩŅ‚иĐģ(Đ°) ĐŗĐžŅŅ‚ŅĐŧ вŅ…ОдиŅ‚ŅŒ в ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. - %1$s вĐēĐģŅŽŅ‡Đ¸Đģ(Đ°) ŅĐēвОСĐŊĐžĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ. %1$s вĐēĐģŅŽŅ‡Đ¸Đģ(Đ°) ŅĐēвОСĐŊĐžĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ (ĐŊĐĩиСвĐĩŅŅ‚ĐŊŅ‹Đš Đ°ĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ %2$s). - %s СаĐŋŅ€Đ°ŅˆĐ¸Đ˛Đ°ĐĩŅ‚ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ ваŅˆĐĩĐŗĐž ĐēĐģŅŽŅ‡Đ°, ĐŊĐž ваŅˆ ĐēĐģиĐĩĐŊŅ‚ ĐŊĐĩ ĐŋОддĐĩŅ€ĐļиваĐĩŅ‚ ĐŋОдŅ‚вĐĩŅ€ĐļĐ´ĐĩĐŊиĐĩ в Ņ‡Đ°Ņ‚Đĩ. ИŅĐŋĐžĐģŅŒĐˇŅƒĐšŅ‚Đĩ ŅƒŅŅ‚Đ°Ņ€ĐĩвŅˆŅƒŅŽ ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēŅƒ Đ´ĐģŅ ŅĐ˛ĐĩŅ€Đēи ĐēĐģŅŽŅ‡ĐĩĐš. - ВŅ‹ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи иСОйŅ€Đ°ĐļĐĩĐŊиĐĩ. ВŅ‹ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи ŅŅ‚иĐēĐĩŅ€. - ВаŅˆĐĩ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ ВŅ‹ ŅĐžĐˇĐ´Đ°Đģи ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ ВŅ‹ ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Đģи %1$s @@ -181,7 +149,6 @@ ВŅ‹ ŅĐ´ĐĩĐģĐ°Đģи ĐąŅƒĐ´ŅƒŅ‰ŅƒŅŽ иŅŅ‚ĐžŅ€Đ¸ŅŽ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ видиĐŧОК Đ´ĐģŅ %1$s ВŅ‹ вĐēĐģŅŽŅ‡Đ¸Đģи ŅĐēвОСĐŊĐžĐĩ ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ (%1$s) ВŅ‹ ОйĐŊОвиĐģи ŅŅ‚Ņƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. - ВŅ‹ ĐŊĐ°Ņ‡Đ°Đģи ĐŗŅ€ŅƒĐŋĐŋОвОК СвОĐŊĐžĐē ВŅ‹ ŅƒĐ´Đ°ĐģиĐģи ĐŊаСваĐŊиĐĩ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ВŅ‹ ŅƒĐ´Đ°ĐģиĐģи Ņ‚ĐĩĐŧŅƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ @@ -189,24 +156,20 @@ ВŅ‹ ĐžŅ‚ĐŋŅ€Đ°Đ˛Đ¸Đģи %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 @@ -219,35 +182,47 @@ ВŅ‹ ĐžŅ‚ОСваĐģи Ņƒ %1$s ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиĐĩ в ŅŅ‚Ņƒ ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ. ПŅ€Đ¸Ņ‡Đ¸ĐŊĐ°: %2$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 иСĐŧĐĩĐŊиĐģ(Đ°) аваŅ‚Đ°Ņ€ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ ВŅ‹ иСĐŧĐĩĐŊиĐģи аваŅ‚Đ°Ņ€ ĐēĐžĐŧĐŊĐ°Ņ‚Ņ‹ %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$s ĐŋŅ€Đ¸ĐŗĐģĐ°ŅĐ¸Đģ(Đ°) %2$s + ВŅ‹ ŅĐ´ĐĩĐģĐ°Đģи ĐąŅƒĐ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ видиĐŧŅ‹Đŧи Đ´ĐģŅ %1$s + %1$s ŅĐ´ĐĩĐģĐ°Đģ(Đ°) ĐąŅƒĐ´ŅƒŅ‰Đ¸Đĩ ŅĐžĐžĐąŅ‰ĐĩĐŊиŅ видиĐŧŅ‹Đŧи Đ´ĐģŅ %2$s + ВŅ‹ ĐŋĐžĐēиĐŊŅƒĐģи ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ + %1$s ĐŋĐžĐēиĐŊŅƒĐģ(Đ°) ĐēĐžĐŧĐŊĐ°Ņ‚Ņƒ + ВŅ‹ вОŅˆĐģи + %1$s вОŅˆĐĩĐģ(ĐģĐ°) + ВŅ‹ ŅĐžĐˇĐ´Đ°Đģи ОйŅŅƒĐļĐ´ĐĩĐŊиĐĩ + %1$s ŅĐžĐˇĐ´Đ°Đģ(Đ°) ОйŅŅƒĐļĐ´ĐĩĐŊиĐĩ + \ No newline at end of file From 72a7bf9e2388e24439a5812cfa80e62367feaab4 Mon Sep 17 00:00:00 2001 From: LinAGKar Date: Wed, 14 Oct 2020 18:18:34 +0000 Subject: [PATCH 264/278] Translated using Weblate (Swedish) Currently translated at 100.0% (190 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/sv/ --- .../src/main/res/values-sv/strings.xml | 56 ++++++++----------- 1 file changed, 24 insertions(+), 32 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-sv/strings.xml b/matrix-sdk-android/src/main/res/values-sv/strings.xml index 8f8ba5e306..25e51b69e5 100644 --- a/matrix-sdk-android/src/main/res/values-sv/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sv/strings.xml @@ -1,11 +1,10 @@ - + %1$s: %2$s %1$s skickade en bild. Du skickade en bild. %1$s skickade en dekal. Du skickade en dekal. - Inbjudan frÃĨn %s Inbjudan frÃĨn dig %1$s skapade rummet @@ -62,12 +61,10 @@ Du aktiverade totalsträckskryptering (%1$s) %s uppgraderade det här rummet. Du uppgraderade det här rummet. - %1$s begärde ett VoIP-gruppsamtal Du begärde ett VoIP-gruppsamtal VoIP-gruppsamtal startat VoIP-gruppsamtal avslutat - (avataren blev även bytt) %1$s tog bort rummets namn Du tog bort rummets namn @@ -87,54 +84,39 @@ Du drog tillbaka inbjudan fÃļr %1$s att gÃĨ med i rummet %1$s accepterade inbjudan fÃļr %2$s Du accepterade inbjudan fÃļr %1$s - %1$s lade till %2$s-widget Du lade till %1$s-widget %1$s tog bort %2$s-widget Du tog bort %1$s-widget %1$s modifierade %2$s-widget Du modifierade %1$s-widget - Admin Moderator Standard Anpassad (%1$d) Anpassad - Du ändrade behÃļrighetsnivÃĨ fÃļr %1$s. %1$s ändrade behÃļrighetsnivÃĨ fÃļr %2$s. %1$s frÃĨn %2$s till %3$s - ** Kan inte avkryptera: %s ** Avsändarens enhet har inte gett oss nycklarna fÃļr det här meddelandet. - Kunde inte dÃļlja Kunde inte skicka meddelandet - Misslyckades att ladda upp bilden - Nätverksfel Matrixfel - Det gÃĨr fÃļr närvarande inte att gÃĨ med i ett tomt rum igen. - Krypterat meddelande - E-postadress Telefonnummer - Inbjudan frÃĨn %s Rumsinbjudan - %1$s och %2$s - %1$s och en till %1$s och %2$d till - Tomt rum - Inledande synk: \nImporterar kontoâ€Ļ Inledande synk: @@ -151,10 +133,8 @@ \nImporterar gemenskaper Inledande synk: \nImporterar kontodata - Skickar meddelandeâ€Ļ Rensa sändningskÃļ - Inbjudan frÃĨn %1$s. Anledning: %2$s Inbjudan frÃĨn dig. Anledning: %1$s %1$s bjÃļd in %2$s. Anledning: %3$s @@ -180,45 +160,57 @@ Du accepterade inbjudan fÃļr %1$s. Anledning: %2$s %1$s drog tillbaka inbjudan fÃļr %2$s. Anledning: %3$s Du drog tillbaka inbjudan fÃļr %1$s. Anledning: %2$s - %1$s lade till %2$s som en adress fÃļr det här rummet. %1$s lade till %2$s som adresser fÃļr det här rummet. - Du lade till %1$s som en adress fÃļr det här rummet. Du lade till %1$s som adresser fÃļr det här rummet. - %1$s tog bort %2$s som en adress fÃļr det här rummet. %1$s tog bort %2$s som adresser fÃļr det här rummet. - Du tog bort %1$s som en adress fÃļr det här rummet. Du tog bort %2$s som adresser fÃļr det här rummet. - %1$s lade till %2$s och tog bort %3$s som adresser fÃļr det här rummet. Du lade till %1$s och tog bort %2$s som adresser fÃļr det här rummet. - %1$s satta huvudadressen fÃļr det här rummet till %2$s. Du satta huvudadressen fÃļr det här rummet till %1$s. %1$s tog bort huvudadressen fÃļr det här rummet. Du tog bort huvudadressen fÃļr det här rummet. - %1$s tillät gäster att gÃĨ med i rummet. Du tillät gäster att gÃĨ med i rummet. %1$s hindrade gäster frÃĨn att gÃĨ med i rummet. Du hindrade gäster frÃĨn att gÃĨ med i rummet. - %1$s aktiverade totalsträckskryptering. Du aktiverade totalsträckskryptering. %1$s aktiverade totalsträckskryptering (okänd algoritm %2$s). Du aktiverade totalsträckskryptering (okänd algoritm %1$s). - %s begär att verifiera din nyckel, men din klient stÃļder inte nyckelverifiering i chatten. Du behÃļver använda legacynyckelverifiering fÃļr att verifiera nycklar. - - + Du hindrade gäster frÃĨn att gÃĨ med i rummet. + %1$s hindrade gäster frÃĨn att gÃĨ med i rummet. + Du tillät gäster att gÃĨ med här. + %1$s tillät gäster att gÃĨ med här. + Du lämnade. Anledning: %1$s + %1$s Lämnade. Anledning: %2$s + Du gick med. Anledning: %1$s + %1$s gick med. Anledning: %2$s + Du drog tillbaka inbjudan fÃļr %1$s + %1$s drog tillbaka inbjudan fÃļr %2$s + Du bjÃļd in %1$s + %1$s bjÃļd in %2$s + Du uppgraderade här. + %s uppgraderade här. + Du gjorde framtida meddelanden synliga fÃļr %1$s + %1$s gjorde framtida meddelanden synliga fÃļr %2$s + Du lämnade rummet + %1$s lämnade rummet + Du gick med + %1$s gick med + Du skapade diskussionen + %1$s skapade diskussionen + \ No newline at end of file From 821b9dc187cb9ed20a73b5bd72ddacb201c4e9e0 Mon Sep 17 00:00:00 2001 From: random Date: Fri, 16 Oct 2020 08:00:21 +0000 Subject: [PATCH 265/278] Translated using Weblate (Italian) Currently translated at 100.0% (1918 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/it/ --- vector/src/main/res/values-it/strings.xml | 639 ++++------------------ 1 file changed, 95 insertions(+), 544 deletions(-) diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 9852e714a1..b1ff89ccef 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -1,18 +1,15 @@ - + - it IT - Messaggi Stanza Impostazioni Dettagli sui membri Cronologia - OK Annulla @@ -46,7 +43,6 @@ o Invita Disconnesso - Disconnetti Chiamata audio @@ -59,27 +55,22 @@ Chiudi Copiato negli appunti Disabilita - Conferma Attenzione - Home Preferiti Chat dirette Stanze - Cerca Cerca tra i preferiti Cerca tra le chat dirette Cerca tra le stanze - Inviti Bassa priorità - Conversazioni Rubrica locale @@ -88,17 +79,15 @@ Nessuna conversazione Element non ha avuto l\'autorizzazione ad accedere alla tua Rubrica locale Nessun risultato - Stanze Elenco stanze Nessuna stanza Nessuna stanza pubblica disponibile - 1 utente + %d utente %d utenti - Invia i registri Invia i registri di crash Invia schermata @@ -108,14 +97,11 @@ Per permettere una diagnosi del problema, oltre alla segnalazione errore verranno inviati anche i registri di Element. Rapporto, registri e schermata non saranno resi pubblici. Tuttavia, se preferisci inviare solamente la segnalazione, deseleziona: Sembra tu stia scuotendo il dispositivo con rabbia. Vuoi segnalare un errore\? L\'ultima volta l\'applicazione è andata in crash. Vuoi inviare una segnalazione\? - La segnalazione errore è stata spedita L\'invio della segnalazione errore è fallito (%s) Avanzamento (%s%%) - Invia file in Leggi - Entra Nome utente Crea account @@ -124,18 +110,14 @@ URL dell\'Home Server URL dell\'Identity Server Cerca - Avvia una nuova chat diretta Avvia chiamata audio Avvia chiamata video - Invia file Fai una foto o un video - Accetta Rifiuta Riaggancia - Accedi Crea account @@ -168,7 +150,9 @@ Hai dimenticato la password\? Usa opzioni server personalizzate (avanzate) Per favore controlla la tua email per proseguire la registrazione - La registrazione con email e numero di telefono in una volta sola non è ancora supportata. Sarà utilizzato solo il numero di telefono. Potrai aggiungere l\'indirizzo email al tuo profilo dalle impostazioni. + La registrazione con email e numero di telefono in una volta sola non è ancora supportata. Sarà utilizzato solo il numero di telefono. +\n +\nPotrai aggiungere l\'indirizzo email al tuo profilo dalle impostazioni. Questo Home Server vorrebbe assicurarsi che tu non sia un robot Nome utente già in uso Home Server: @@ -182,7 +166,6 @@ La tua password è stata reimpostata. \n \nSei stato disconnesso da tutte le sessioni e non riceverai piÚ alcuna notifica. Per ripristinare le notifiche, riconnettiti su ciascun dispositivo. - L\'URL deve iniziare con http[s]:// Impossibile accedere: errore di rete @@ -191,7 +174,6 @@ Impossibile registrarsi Impossibile registrarsi: difetto proprietà dell\'email Inserisci un URL valido - Nome utente/password non corretto Il Token di accesso specificato non è stato riconosciuto JSON malformato @@ -199,35 +181,27 @@ Sono state inviate troppe richieste Questo nome utente è già in uso Il link nella mail non è ancora stato cliccato - - Elenco ricevute lette - - Invia come Originario Grande Medio Piccolo - "Annullare il download? Annullare l\'upload? %d s %1$dm %2$ds - Ieri Oggi - Nome stanza Argomento stanza - Chiamata in corso Chiamata in connessioneâ€Ļ @@ -237,16 +211,13 @@ Chiamata video in arrivo Chiamata audio in arrivo Chiamata in corsoâ€Ļ - Ricezione fallita da parte del destinatario. La connessione al supporto multimediale è fallita Impossibile avviare la fotocamera chiamata risposta altrove - Fai una foto o un video Impossibile registrare video - Informazione Element deve essere autorizzato ad accedere alla tua Galleria di foto e video per poter inviare e salvare allegati. @@ -267,25 +238,20 @@ Element puÃ˛ usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. \n \nTi sta bene comunicare i dati di tutti i tuoi contatti per questo scopo\? - Purtroppo l\'azione non è stata eseguita poichÊ mancano i permessi - Salvato Salvare nei download? SÌ NO Continua - Rimuovi Unisciti Anteprima Rifiuta - Vai al primo messaggio non letto. - Sei stato invitato ad entrare in questa stanza da %s Questo invito è stato spedito a %s, che non è associato a questo account. @@ -293,27 +259,22 @@ Stai provando ad accedere a %s. Desideri entrare per partecipare alla discussione? una stanza Questa è l\'anteprima della stanza. Le interazioni sono disabilitate. - Nuova chat Aggiungi utente 1 utente - Esci dalla stanza Sei sicuro di voler uscire dalla stanza? Sei sicuro di voler rimuovere %s da questa chat? Crea - Online Offline Inattivo - STRUMENTI ADMIN CHIAMATA CHAT DIRETTE SESSIONI - Invita Esci da questa stanza Butta fuori da questa stanza @@ -329,19 +290,15 @@ Mostra l\'elenco delle sessioni La nomina non potrà essere annullata perchÊ darai a questo utente i tuoi stessi poteri. \nSicuro di voler procedere\? - Sicuro di voler invitare %s\? - Invita tramite ID utente CONTATTI LOCALI (%d) ELENCO UTENTI (%s) Solo utenti Matrix - Invita tramite ID utente Per favore inserisci uno o piÚ indirizzi email o ID utente Email o ID utente - Cerca %s sta scrivendoâ€Ļ @@ -358,7 +315,6 @@ Elimina i messaggi non inviati File non trovato Non hai il permesso di pubblicare in questa stanza - Fidati Non fidarti @@ -371,7 +327,6 @@ Il certificato è diverso da quello precedentemente contrassegnato sul tuo telefono come \"affidabile\". Questa cosa è MOLTO INSOLITA. Si raccomanda di NON ACCETTARE questo nuovo certificato. Il certificato del server è cambiato: quello precedente era stato contrassegnato come affidabile ma quello attuale no. PuÃ˛ darsi che il certificato precedente sia scaduto e sia stato semplicemente sostituito con uno nuovo. Contatta l\'amministratore del server per verificare l\'impronta digitale in uso. Contrassegna il certificato come affidabile solo se l\'mpronta digitale comunicata dall\'amministratore del server corrisponde a quella qua sopra. - Dettagli stanza Utenti @@ -380,7 +335,6 @@ ID malformato. Dovrebbe essere un indirizzo email o un ID utente come \'@localpart:domain\' INVITATI MEMBRI - Motivo per cui segnali questo contenuto Desideri nascondere tutti i messaggi di questo utente\? @@ -388,7 +342,6 @@ \nTieni presente che questa azione riavvierà l\'app e ciÃ˛ potrebbe richiedere molto tempo. Annulla l\'upload Annulla il download - Cerca Cerca tra i membri della stanza @@ -397,7 +350,6 @@ MESSAGGI UTENTI FILE - ENTRA ELENCO @@ -410,18 +362,15 @@ Entra nella stanza Entra in una stanza Digita l\'ID stanza o il suo nome - Esplora l\'elenco Ricerca negli elenchiâ€Ļ - Preferito Bassa priorità Chat diretta Esci dalla conversazione Dimentica - Messaggi Impostazioni @@ -430,9 +379,7 @@ Avvisi di terze parti Copyright Politica sulla privacy - - Immagine del profilo Nome visualizzato Email @@ -441,23 +388,19 @@ Aggiungi numero di telefono Mostra le informazioni dell\'App nelle Impostazioni di sistema. Informazioni sull\'App - Abilita le notifiche per questo account Attiva le notifiche per questa sessione Accendi lo schermo per 3 secondi alla notifica - Messaggi nelle chat dirette Messaggi nelle chat di gruppo Invito ad entrare in una stanza Invito ad una chiamata Messaggi inviati da bot - Esegui all\'avvio Sincronizzazione in background Abilita la sincronizzazione in background La richiesta di sincronizzazione sta impiegando troppo tempo Ritardo tra ogni sincronizzazione - Versione Versione olm Termini e condizioni @@ -467,7 +410,6 @@ Svuota la cache Svuota la cache dei file multimediali Conserva i file multimediali - Impostazioni utente Notifiche Utenti ignorati @@ -484,7 +426,6 @@ Sessioni Mostra data e ora di tutti i messaggi Modalità risparmio dati - Informazioni sulla sessione ID Nome pubblico @@ -495,22 +436,18 @@ Autenticazione Password: Invia - Autenticato come Home Server Server identità - Interfaccia utente Lingua Scegli una lingua - In attesa di verifica Controlla la tua email e clicca sul link che ti è stato spedito. Fatto questo, clicca su Continua. Impossibile verificare l\'indirizzo email. Controlla la tua email e clicca sul link che ti è stato spedito. Fatto questo, clicca su Continua. Questo indirizzo email è già in uso. Questo indirizzo email non è stato trovato. Questo numero di telefono è già in uso. - Cambia la password Password attuale Nuova password @@ -520,13 +457,9 @@ Mostrare tutti i messaggi di %s\? \n \nTieni presente che questa azione riavvierà l\'app e ciÃ˛ potrebbe richiedere molto tempo. - Sicuro di voler rimuovere questo target di notifica? - Sicuro di voler rimuovere %1$s %2$s? - Scegli un paese - Paese Per favore scegli un paese Numero di telefono @@ -536,27 +469,22 @@ Inserisci un codice di attivazione Errore durante la convalida del numero di telefono Codice - 3 giorni 1 settimana 1 mese Per sempre - - Icona della stanza Nome della stanza Argomento Etichetta Etichetta come: - Preferito Bassa priorità Nessuna etichetta - Accesso e visibilità Mostra questa stanza nell\'elenco delle stanze pubbliche @@ -564,22 +492,18 @@ Accesso alla Timeline Chi puÃ˛ leggere la Timeline\? Chi puÃ˛ entrare in questa stanza? - Chiunque Solo i membri (dal momento in cui questa opzione è stata selezionata) Solo i membri (dal momento in cui vengono invitati) Solo i membri (dal momento in cui entrano nella stanza) - Una stanza deve avere un indirizzo per poter essere linkata. Solo le persone che sono state invitate Chiunque conosca il link della stanza, eccetto gli ospiti Chiunque conosca il link della stanza, compresi gli ospiti - Utenti bannati - Avanzate ID interno della stanza @@ -591,35 +515,27 @@ Devi disconnetterti per abilitare la crittografia. Cripta solo per le sessioni verificate Non inviare mai da questa sessione messaggi cifrati verso sessioni in questa stanza non verificate. - Questa stanza non ha indirizzi locali Nuovo indirizzo stanza (es. #foo:matrix.org) - Il formato del nome della stanza non è corretto \'%s\' non è un formato valido per un nome di stanza Non avrai un indirizzo principale specifico per questa stanza. Avvisi per l\'indirizzo principale - Imposta come indirizzo principale Non usare piÚ come indirizzo principale Copia ID stanza Copia indirizzo stanza - Crittografia abilitata in questa stanza. Crittografia disabilitata in questa stanza. Abilita crittografia\n(attenzione: non puÃ˛ piÚ essere disabilitata!) - Elenco Tema - %s stava cercando di caricare un punto specifico tra i messaggi passati di questa stanza, ma non l\'ha trovato. - Informazioni sulla crittografia E2E - Informazioni sull\'evento ID utente Chiave identità Curve25519 @@ -627,7 +543,6 @@ Algoritmo ID sessione Errore di decriptazione - Informazioni sessione del mittente Nome pubblico Nome pubblico @@ -635,7 +550,6 @@ Chiave sessione Verifica Impronta digitale Ed25519 - Esporta le chiavi di crittografia delle stanze Esporta le chiavi delle stanze Esporta le chiavi in un file locale @@ -645,31 +559,25 @@ Le chiavi di crittografia della stanza sono state salvate su \'%s\'. \n \nAttenzione: se si disinstalla quest\'applicazione il file, viene eliminato. - Importa le chiavi di crittografia della stanza Importa le chiavi della stanza Importa le chiavi da un file locale Importa Cripta solo per le sessioni verificate Non inviare mai da questa sessione messaggi cifrati verso sessioni non verificate. - NON verificato Verificato Metti in lista nera - sessione sconosciuta niente - Conferma Rimuovi la conferma Lista nera Togli dalla lista nera - Verifica la sessione Conferma confrontando la seguente con le impostazioni utente della tua altra sessione: Se non corrispondono, la sicurezza delle tue comunicazioni potrebbe essere compromessa. Ho verificato che le chiavi corrispondono - La stanza contiene sessioni sconosciute Questa stanza contiene sessioni sconosciute che non sono state verificate. @@ -677,7 +585,6 @@ \nTi consigliamo di verificare ogni sessione prima di continuare, ma se lo preferisci, è comunque possibile inviare il messaggio anche senza la verifica. \n \nSessioni sconosciute: - Scegli un elenco di stanze Il server potrebbe essere non disponibile o sovraccarico @@ -685,10 +592,8 @@ URL dell\'Home Server Tutte le stanze sull\'Home Server %s Tutte le stanze native %s - Cerca tra i messaggi passati - Grandezza font Minuscolo @@ -701,14 +606,12 @@ Tema Chiaro Tema Scuro Tema Nero - Sincronizzazioneâ€Ļ Suono delle notifiche Mostra gli orari in formato 12 ore Devi avere il permesso per poter gestire i widget in questa stanza Avvia una conferenza usando Jitsi Vuoi davvero eliminare questo widget dalla stanza\? - Impossibile creare il widget. L\'invio della richiesta è fallito. @@ -719,61 +622,46 @@ Aggiungi un Widget Fai una foto Fai un video - Messaggi contenenti il nome mostrato Messaggi contenenti il nome utente - Notifiche silenziose - Notifiche audio Rilevazione eventi Segnalazione errore - Chiama Messaggio criptato - Dettagli sulla comunità - Caricamentoâ€Ļ - Esci Azioni Comunità - Cerca tra le e comunità - Invita Comunità Nessun gruppo - Per segnalare un errore agita il dispositivo con rabbia - Sicuro di voler avviare una nuova chat con %s\? Sicuro di voler fare una chiamata audio\? Sicuro di voler fare una chiamata video\? - Elenco gruppi - Elenco dei membri Apri descrizione Sincronizzazioneâ€Ļ - 1 utente attivo + %d utente attivo %d utenti attivi - 1 utente + %d utente %d utenti Bandire l\'utente lo espellerà dalla stanza e gli impedirà di rientrare. - - 1 nuovo messaggio + %d nuovo messaggio %d nuovi messaggi - - 1 stanza + %d stanza %d stanze @@ -784,101 +672,81 @@ Tutti i messaggi Solo le citazioni Silenzioso - Aggiungi scorciatoia sulla schermata iniziale - + Aggiungi alla schermata iniziale Anteprima degli URL Vibra quando menzionano un utente - Statistiche - Notifiche Nuovo ID della comunità (es. +foo:matrix.org) L\'ID comunità non è valido \'%s\' non è un ID comunità valido - - - 1 messaggio notificato non letto + %d messaggio notificato non letto %d messaggi notificati non letti - 1 messaggio notificato non letto + %d messaggio notificato non letto %d messaggi notificati non letti - 1 stanza + %d stanza %d stanze %1$s in %2$s - La creazione del widget è fallita - 1 widget attivo + %d widget attivo %d widget attivi - La stanza %s non è visibile. Usa la fotocamera di sistema - Hai aggiunto una nuova sessione \'%s\' che sta richiedendo le chiavi crittografiche. La tua sessione non verificata \'%s\' sta chiedendo le chiavi crittografiche. Avvia la verifica Condividi senza verificare Ignora la richiesta - Attenzione! Le conferenze sono in fase di sviluppo e potrebbero non essere affidabili. - Errore di comando Comando non riconosciuto: %s - Spento Rumoroso - Crea Crea una comunità Nome della comunità Esempio ID comunità esempio - Home Stanze Nessun utente - Stanze Si è unito Invitato Cerca tra i membri del gruppo Cerca tra le stanze del gruppo - L\'amministratore non ha fornito una descrizione estesa di questa comunità. - %2$s ti ha buttato fuori da %1$s %2$s ti ha bannato da %1$s Motivo: %1$s Rientra Dimentica la stanza - Avatar - Predisposizione - Questa stanza non mostra predisposizione per alcuna comunità Il livello di potere deve essere un intero positivo. Avatar di avviso Avatar di ricezione - 1 cambio d\'appartenenza + %d cambio d\'appartenenza %d cambi d\'appartenenza - Privacy delle notifiche Normale Privacy ridotta @@ -888,32 +756,25 @@ â€ĸ Il contenuto del messaggio di una notifica è emesso direttamente dall\'Home Server Matrix â€ĸ Le notifiche contengono metadati e contenuto del messaggio â€ĸ Le notifiche non mostreranno il contenuto del messaggio - Privacy delle notifiche Element puÃ˛ esser sempre attivo in background in modo da gestire le tue notifiche in modo costante e sicuro. CiÃ˛ puÃ˛ influire sulla durata della batteria. Concedi l\'autorizzazione Scegli un\'altra opzione - Invia uno sticker - Invia sticker Non ci sono pacchetti di sticker attivi. \n \nVuoi aggiungerne qualcuno\? - Disattiva l\'account Disattiva il mio account - Invia le statistiche di utilizzo Element raccoglie statistiche anonime per permettere il miglioramento dell\'applicazione. Attiva le statistiche per aiutare a migliorare Element. SÃŦ, voglio aiutare! - Manca un parametro indispensabile. Uno dei parametri non è valido. Per continuare ad usare l\'Home Server %1$s devi leggerne e accettarne i termini di servizio. Leggi ora - Disattiva l\'account CiÃ˛ renderà il tuo account inutilizzabile per l\'eternità. Non potrai piÚ accederci e nessuno potrà ri-registrare lo stesso ID utente. Il tuo account uscirà da tutte le stanze in cui si trova attualmente e di dettagli del tuo account saranno rimossi dall\'Identity Server. Questa azione è irreversibile. \n @@ -923,38 +784,26 @@ Per favore dimenticate tutti i messaggi che ho inviato fino al momento della disattivazione del mio account (Attenzione: in questo modo i nuovi utenti potrebbero vedere delle conversazioni incomplete) Per continuare, inserisci la tua password: Disattiva l\'account - Licenze di terze parti - Scarica Parla Svuota Richiedi di nuovo le chiavi di crittografia dalle tue altre sessioni. - La richiesta della chiave è stata inviata. - Richiesta inviata Avvia Element su un altro dispositivo che possa decifrare il messaggio, in modo che possa inviare le chiavi a questa sessione. - Digita quiâ€Ļ - Invia messaggio vocale - prosegui conâ€Ļ Spiacenti, ma non è stata trovata alcuna applicazione esterna per completare l\'azione. - Invia messaggi vocali - Persone Per favore, inserisci la tua password. - Se possibile, scrivi in inglese, grazie. Invia risposta criptataâ€Ļ Risposta non criptataâ€Ļ Mostra file multimediale prima dell\'invio - Al momento non fai parte di alcuna comunità. - Usa il tasto invio per spedire i messaggi Mostra l\'azione Banna utente con l\'ID specificato @@ -969,97 +818,77 @@ Cambia il tuo nome visualizzato Markdown attivo / spento Per correggere la gestione dei widget - Questa stanza è stata sostituita da un\'altra e non è piÚ attiva La conversazione continua qui Questa stanza contiene una conversazione cominciata altrove Clicca qui per vedere i messaggi precedenti - Non hai permessi sufficienti per effettuare questa azione. - 1s + %ds %ds - 1m + %dm %dm - 1o - %do + %dh + %dh - 1g - %dg + %dd + %dd - %1$s ora %1$s %2$s fa - "%1$s, " %1$s e %2$s %1$s %2$s - - 1 selezionato + %d selezionato %d selezionati - 1 membro - %d membri + %d utente + %d utenti - - 1 stanza + %d stanza %d stanze Avvisi di sistema - Limite di risorse superato Contatta l\'amministratore - contatta l\'amministratore del servizio - L\'Home Server ha superato uno dei limiti delle risorse, pertanto alcuni utenti non potranno accedere. L\'Home Server ha superato uno dei limiti delle risorse. - L\'Home Server ha raggiunto il limite mensile di utenti attivi, pertanto alcuni utenti non potranno accedere. L\'Home Server ha raggiunto il limite mensile di utenti attivi. - Per favore %s per aumentare questo limite. Per favore %s per continuare ad usare questo servizio. - Errore - Aumenta la performance caricando i dati dei membri della stanza solo quando questi si fan vedere. Il tuo Home Server non supporta ancora il caricamento differito dei membri delle stanze. Prova piÚ avanti. - Spiacente, si è verificato un errore - Caricamento differito dei membri della stanza Tema Status.im - Versione %s Crea una password per mettere al sicuro le chiavi esportate. La stessa password dovrà essere usata per poter importare le chiavi. Crea una password Le password devono corrispondere espandi riduci - Mostra l\'area informazioni Sempre Per messaggi ed errori Solo per gli errori - %1$s: %1$s: %2$s +%d %d+ - Chiama comunque Butta fuori Motivo - Se il tuo Home Server supporta questa funzione, all\'interno delle chat verrà visualizzata un\'anteprima dei link postati. Invia notifiche di digitazione Fai sapere agli altri utenti che stai scrivendo. @@ -1074,20 +903,15 @@ Password Avvia la fotocamera di sistema invece della fotocamera di Element. Questa opzione richiede un\'applicazione di terze parti per registrare i messaggi. - Il comando \"%s\" necessita di piÚ parametri, oppure alcuni parametri non sono corretti. Markdown è stato abilitato. Markdown è stato disabilitato. - Chiamate Usa la suoneria predefinita di Element per le chiamate in arrivo Suoneria delle chiamate in arrivo Scegli la suoneria per le chiamate: - Accetta - Per favore, leggi e accetta i termini di servizio di questo Home Server: - Diagnostica delle notifiche Diagnosi Esegui i test @@ -1095,56 +919,47 @@ La diagnostica di base risponde correttamente. Se continui a non ricevere notifiche, invia una segnalazione errore per aiutarci a indagare. Uno o piÚ test hanno fallito, prova le soluzioni suggerite. Uno o piÚ test hanno fallito, per favore invia un rapporto di errore per aiutarci a indagare. - Impostazioni di sistema. Le notifiche sono abilitate nelle Impostazioni di sistema. Le notifiche sono disabilitate nelle Impostazioni di sistema. \nControlla le Impostazioni di sistema. Apri le Impostazioni - Impostazioni account. Le notifiche sono abilitate per il tuo account. Le notifiche sono disabilitate per il tuo account. \nControlla le impostazioni dell\'account. Abilita - Impostazioni sessione. Le notifiche sono attive per questa sessione. Le notifiche non sono attive per questa sessione. \nControlla le impostazioni di Element. Abilita - Esegui un controllo dei servizi L\'APK Google Play Services è disponibile e aggiornato. Element usa Google Play Services per consegnare i messaggi a comparsa, ma sembra non sia stato configurato correttamente: \n%1$s Correggi i Play Services - Token di Firebase Token FCM recuperato con successo: -%1$s - Il recupero del Token FCM: %1$s è fallito - +\n%1$s + Recupero fallito del token FCM: +\n%1$s Registrazione Token Token FCM registrato con successo sull\'Home Server. E\'fallita la registrazione del Token FCM sull\'Home Server: \n %1$s - Servizio di notifiche Servizio di notifiche in esecuzione. Servizio di notifiche non in esecuzione. \nProva a riavviare l\'applicazione. Avvia il servizio - Auto riavvio del servizio di notifiche Il servizio è stato chiuso e si è riavviato automaticamente. L\'avvio del servizio è fallito - Esegui all\'avvio Il servizio inizierà quando il dispositivo sarà riavviato. Il servizio non partirà al riavvio del dispositivo. Non riceverai notifiche finchÊ Element non verrà aperto almeno una volta. Abilita l\'esecuzione all\'avvio - Verifica se Element sia stato configurato per funzionare in modo limitato quando lavora in background Element non funziona senza alcuna restrizione anche quando è eseguito in background. Questo test andrebbe eseguito usando dati mobili (non WIFI). \n%1$s @@ -1152,33 +967,24 @@ \nIl funzionamento dell\'App, quando è eseguita in background, è stato fortemente limitato e ciÃ˛ potrebbe influenzare la ricezione delle notifiche. \n%1$s Non limitare - Ottimizzazione della batteria Element non è influenzato dall\'ottimizzazione della batteria. Se si lascia un dispositivo scollegato, fermo e con lo schermo spento, dopo un certo tempo questo entra in modalità Doze. CiÃ˛ impedisce alle App di accedere alla rete e ritarda le attività, le sincronizzazioni e la ricezione dei normali allarmi. Ignora l\'ottimizzazione - Connessione in background Per poter ricevere le notifiche in tempo reale, Element deve potersi sempre connettere. Anche quando funziona in background. \nNella schermata successiva ti verrà chiesto di consentire a Element di funzionare anche quando è in background, accetta per favore. Concedi il permesso - Si è verificato un errore durante la verifica dell\'indirizzo email. - Si è verificato un errore durante la verifica del numero di telefono. Ulteriori informazioni: %s - Non è stato trovato nessun APK Google Play Services valido. Le notifiche non funzioneranno correttamente. - Chiamata video in corsoâ€Ļ - Backup delle chiavi Usa il Backup delle chiavi Il Backup delle chiavi non è concluso, attendere pregoâ€Ļ - Salta Fatto - Impostazioni di notifica avanzate Se ti disconnetti adesso perderai i tuoi messaggi cifrati Il Backup delle chiavi è in corso. Se ti disconnetti adesso perderai i tuoi messaggi cifrati. @@ -1189,23 +995,19 @@ Sei sicuro\? Backup Perderai l\'accesso ai tuoi messaggi cifrati a meno che tu non faccia il Backup delle chiavi prima di disconnetterti. - Rimani Interrompi Ignora - Sei sicuro di volerti disconnettere\? Accedi con single sign-on Questo URL è irraggiungibile. Per favore controllalo - "Il tuo dispositivo usa un protocollo di sicurezza TLS obsoleto e vulnerabile agli attacchi. Per la tua sicurezza, ti viene impedito di connetterti" + Il tuo dispositivo usa un protocollo di sicurezza TLS obsoleto e vulnerabile agli attacchi. Per la tua sicurezza, ti viene impedito di connetterti Importanza delle notifiche in base al tipo - Impostazioni personalizzate. Nota che alcuni tipi di messaggio sono impostati come silenziosi (ossia generano notifiche senza suono). Alcune notifiche sono disattivate nelle tue impostazioni personalizzate. Il caricamento delle regole personalizzate è fallito, riprova. Controlla le Impostazioni - [%1$s] \nQuesto errore non dipende da Element. Secondo Google dipende dal fatto che questo dispositivo ha troppe App registrate con FCM. L\'errore si verifica solo in casi in cui ci sia un numero estremo di app, quindi non dovrebbe affliggere l\'utente medio. [%1$s] @@ -1213,34 +1015,25 @@ [%1$s] \nQuesto errore non dipende da Element. Non c\'è alcun account Google nel telefono. Apri il gestore di account ed aggiungi un account Google. Aggiungi account - Configura le notifiche rumorose Configura le notifiche di chiamata Configura le notifiche silenziose Scegli il colore del LED, la vibrazione, il suonoâ€Ļ - - Gestione chiavi crittografiche Invia il messaggio col tasto Invio Il tasto Invio della tastiera, invece di andare a capo invierà il messaggio - La modalità risparmio dati applica un filtro specifico che esclude gli aggiornamenti di presenza e le notifiche di scrittura. - Aggiorna la password La password non è valida Le password non corrispondono - Ripristino dei messaggi cifrati Gestisci il Backup delle chiavi - Silenzioso Inserisci un nome utente. Inserisci una password La password è troppo debole - Cancella la password se vuoi che Element generi un codice di recupero. Non c\'è alcuna sessione Matrix disponibile - Non perdere mai i messaggi cifrati I messaggi nelle stanze cifrate sono protetti con crittografia E2E. Solo tu e il/i destinatario/i avete le chiavi crittografiche per leggere questi messaggi. \n @@ -1248,7 +1041,6 @@ Inizia ad usare il Backup delle chiavi crittografiche (Avanzato) Esporta manualmente le chiavi crittografiche - Proteggi il tuo backup con una password. Una copia cifrata delle tue chiavi crittografiche sarà salvata sul tuo Home Server. Proteggi il tuo Backup con una password per tenerlo al sicuro. \n @@ -1270,7 +1062,6 @@ Il codice di recupero è stato salvato in \'%s\'. \n \nAttenzione: se l\'applicazione su cui è salvato venisse disinstallata, il codice di recupero verrà perso. - Si prega di farne una copia Condividi il codice di recupero conâ€Ļ Generazione del codice di recupero usando la password. Questo processo puÃ˛ durare alcuni secondi. @@ -1278,25 +1069,18 @@ Errore inatteso Backup avviato Il tuo Home Server sta facendo il Backup delle tue chiavi crittografiche in background. Il primo Backup puÃ˛ impiegare diversi minuti. - - Sei sicuro\? Se ti disconnetti o perdessi questo dispositivo potresti perdere l\'accesso ai tuoi messaggi. - Verifica versione backupâ€Ļ Usa la tua password di recupero per sbloccare i messaggi cifrati usa il tuo codice di recupero Se non conosci la tua password di recupero, puoi %s. - Usa il tuo codice di recupero per sbloccare la Timeline dei messaggi cifrati Inserisci codice di recupero - Ripristino messaggio - Hai perso il codice di recupero\? Nelle Impostazioni puoi crearne uno nuovo. Impossibile decifrare il backup con questa password: verifica che la password di recupero inserita sia corretta. Errore di rete: controlla la tua connessione e riprova. - Ripristino Backup: Codice di recupero in elaborazioneâ€Ļ Download chiaviâ€Ļ @@ -1304,7 +1088,6 @@ Sblocca Timeline Inserisci un codice di recupero Impossibile decifrare il backup con questo codice di recupero: verifica di avere inserito il codice di recupero corretto. - Backup ripristinato %s ! Ripristinato un Backup con %d chiave. @@ -1314,18 +1097,13 @@ %d nuova chiave è stata aggiunta a questa sessione. %d nuove chiavi sono state aggiunte a questa sessione. - Rilevazione ultima versione codici di recupero fallita (%s). La cifratura della sessione non è stata attivata - - Ripristina da backup Elimina backup - Il backup delle chiavi è stato impostato correttamente per questa sessione. Il backup delle chiavi non è attivo su questa sessione. Questa sessione non sta facendo il backup delle chiavi. - Il backup ha una firma da una sessione sconosciuta con ID %s. Il backup ha una firma valida da questa sessione. Il backup ha una firma valida dalla sessione verificata %s. @@ -1333,14 +1111,11 @@ Il backup ha una firma non valida dalla sessione verificata %s Il backup ha una firma non valida dalla sessione non verificata %s Impossibile ottenere info di fiducia per il backup (%s). - Per usare il backup delle chiavi crittografiche su questa sessione, devi accedervi con la password o con il codice di recupero. Eliminazione backupâ€Ļ Eliminazione backup fallita (%s) - Elimina backup Eliminare il Backup delle chiavi crittografiche dall\'Home Server\? Non potrai piÚ usare il codice di recupero per leggere i messaggi cifrati. - Nuovo Backup delle chiavi È stato rilevato un nuovo Backup delle chiavi crittografiche. \n @@ -1348,31 +1123,24 @@ Sono stato io Non perdere mai i messaggi cifrati Inizia ad usare il Backup delle chiavi - Non perdere mai i messaggi cifrati Usa il Backup delle chiavi - Nuove chiavi per messaggi sicuri Gestisci nel Backup delle chiavi - Backup chiavi in corsoâ€Ļ - Il Backup delle chiavi è stato eseguito Backup di %d chiaveâ€Ļ Backup di %d chiaviâ€Ļ - Versione Algoritmo Firma - Risposta Home Server non valida Opzioni autocompletamento server Element ha rilevato una configurazione server personalizzata per il tuo dominio userId \"%1$s\": \n%2$s Usa configurazione - Inizializzazione del servizio Multimedia Compressione predefinita @@ -1380,29 +1148,24 @@ Sorgente multimediale predefinita Scegli Riproduci il suono dell\'otturatore - Segna come letto L\'app non ha bisogno di connettersi in background all\'Home Server. CiÃ˛ dovrebbe ridurre il consumo della batteria - %1$s: 1 messaggio + %1$s: %2$d messaggio %1$s: %2$d messaggi %d notifica %d notifiche - Nuovo evento Stanza Nuovi messaggi Nuovo invito Io ** Invio fallito - per favore apri la stanza - Purtroppo i vecchi dispositivi (quelli con Android precedenti al 5.0) non supportano le conferenze con Jitsi - Verifica sessione - IP sconosciuto Una nuova sessione sta chiedendo le chiavi crittografiche. Nome sessione: %1$s \nUltimo accesso: %2$s @@ -1411,45 +1174,36 @@ \nNome sessione: %1$s \nUltimo accesso: %2$s \nSe non hai effettuato l\'accesso da un\'altra sessione, ignora questa richiesta. - Verifica Condividi Richiesta condivisione chiavi crittografiche Ignora - Verifica confrontando una breve stringa. Per la massima sicurezza, consigliamo di farlo di persona o di utilizzare un altro metodo di comunicazione fidato. Inizia la verifica Richiesta di verifica in arrivo Verifica questa sessione per segnarla come fidata. Verificare le sessioni dei partner ti dà una maggiore tranquillità quando usi messaggi cifrati end-to-end. Verificare questa sessione la segnerà come fidata e segnerà anche la tua sessione come fidata per il tuo partner. - Verifica questa sessione confermando che le seguenti emoji appaiono sullo schermo del partner Verifica questa sessione confermando che i seguenti numeri appaiono sullo schermo del partner - Hai ricevuto una richiesta di verifica. Vedi la richiesta In attesa che il partner confermiâ€Ļ - Verificato! Hai verificato correttamente questa sessione. I messaggi sicuri con questo utente sono cifrati end-to-end e impossibili da leggere da parte di terze parti. Capito - Non compare nulla\? Non tutti i client supportano già la verifica interattiva. Usa la verifica classica. Usa la verifica classica. - Verifica chiave Richiesta annullata L\'altra parte ha annullato la verifica. \n%s La verifica è annullata. \nMotivo: %s - Verifica sessione interattiva Richiesta di verifica %s vuole verificare la tua sessione - L\'utente ha annullato la verifica Il processo di verifica è scaduto La sessione non sa della transazione @@ -1461,23 +1215,18 @@ Le chiavi non corrispondono Utente non corrispondente Errore sconosciuto - Esiste già un backup sul tuo Home Server Sembra tu abbia già impostato il backup delle chiavi crittografiche da un\'altra sessione. Vuoi sostituirlo con il backup che stai creando\? Sostituisci Ferma - Controllo stato del backup Sei stato disconnesso a causa di credenziali non valide o scadute. - Modifica Rispondi - Riprova Entra in una stanza per iniziare a usare l\'app. Ti ha inviato un invito Invitato da %s - Non hai piÚ messaggi non letti Benvenuti a casa! Recupera i messaggi non letti qui @@ -1485,19 +1234,15 @@ Le tue conversazioni dirette verranno mostrate qui Stanze Le tue stanze verranno mostrate qui - Reazioni D\'accordo Piace Aggiungi reazione Vedi le reazioni Reazioni - Evento eliminato dall\'utente Evento moderato da un admin della stanza Ultima modifica di %1$s il %2$s - - Evento malformato, impossibile visualizzarlo Crea nuova stanza Nessuna rete. Controlla la tua connessione internet. @@ -1505,13 +1250,10 @@ Cambia rete Attendere pregoâ€Ļ Tutte le comunità - Anteprima non disponibile per questa stanza L\'anteprima di stanze leggibili da tutti non è ancora supportata in Element - Stanze Messaggi diretti - Nuova stanza CREA Nome stanza @@ -1519,18 +1261,13 @@ Tutti potranno entrare in questa stanza Elenco stanze Pubblica questa stanza nell\'elenco stanze - Si è verificato un errore nell\'ottenere informazioni sulla fiducia Si è verificato un errore nell\'ottenere i dati dal Backup delle chiavi - Importa le chiavi di crittografia dal file \"%1$s\". - Versione SDK Matrix Altre note di terze parti Stai già visualizzando questa stanza! - Reazioni rapide - Generali Preferenze Sicurezza e privacy @@ -1538,102 +1275,75 @@ Regole di push Nessuna regola di push definita Nessun gateway di push registrato - id_app: chiave_push: nome_visualizzato_app: nome_sessione: Url: Formato: - Audio e Video Aiuto e informazioni - - Registra token - Suggerisci qualcosa Scrivi qua sotto il tuo suggerimento. Descrivi qui il tuo suggerimento Grazie, il suggerimento è stato inviato correttamente L\'invio del suggerimento è fallito (%s) - Mostra gli eventi nascosti nella Timeline - Non hai nulla di nuovo da vedere! Messaggi diretti - In attesaâ€Ļ Criptazione miniaturaâ€Ļ Invio miniatura (%1$s / %2$s) Criptazione fileâ€Ļ Invio file (%1$s / %2$s) - Scaricamento file %1$sâ€Ļ Il file %1$s è stato scaricato! - (modificato) - - Modifiche messaggio Nessuna modifica trovata - Filtra conversazioniâ€Ļ Non trovi quello che cerchi\? Crea un nuova stanza Invia un nuovo messaggio diretto Vedi l\'elenco delle stanze - Nome o ID stanza (#esempio:matrix.org) - Attiva swipe per rispondere nella timeline - Collegamento copiato negli appunti - Gestore dell\'integrazione - Non è stato configurato nessun Integration Manager. Aggiungi per ID utente Creare una stanza â€Ļ Nessun risultato trovato. Usa \"Aggiungi per ID utente\" per cercare sul server. Inizia a digitare per ottenere risultati Cerca per nome o ID utente â€Ļ - Sto entrando nella stanza â€Ļ - Visualizza Modifica Timeline - Leggi Rifiuta - Per continuare devi accettare i termini di servizio. - Termini di servizio Leggi i termini di servizio Fatti trovare dagli altri utenti Usa bot, bridge, widget e pacchetti di sticker - Leggi su - Nessuno Revoca Disconnetti Non è stato configurato alcun Identity Server. - Chiamata fallita a causa di un\'errata configurazione del server Chiedi all\'amministratore del tuo Home Server (%1$s) di configurare un server TURN affinchÊ le chiamate funzionino in modo affidabile. \n \nOppure puoi provare ad usare il server pubblico su %2$s, ma non sarà altrettanto affidabile e potrà vedere il tuo indirizzo IP. Puoi configurare tutto questo nelle Impostazioni. Prova ad usare %s Non chiedermelo piÚ - Imposta un\'email per il ripristino dell\'account in caso di problemi e, se vuoi, anche per farti trovare da chi conosce quell\'indirizzo email. Aggiungi un numero di telefono se vuoi farti trovare da chi lo conosce. Imposta un\'email per il ripristino dell\'account in caso di problemi. Email e telefono potranno essere usati anche per farti trovare dagli altri utenti. Imposta un\'email per il ripristino dell\'account in caso di problemi. Email e numero di telefono potranno essere usati, se lo vorrai, anche per permettere a chi li conosce di trovarti. Non è stato trovato alcun Home Server seguendo questo URL. Per favore, controllalo 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)" + 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 Ottimizzato per la batteria @@ -1645,8 +1355,6 @@ Nessuna sincronizzazione in background Quando l\'App è in background non ti verranno notificati i messaggi in arrivo. L\'aggiornamento delle impostazioni è fallito. - - Intervallo preferito tra le sincronizzazioni %s \nLa sincronizzazione puÃ˛ essere ritardata a seconda delle risorse (batteria) o dello stato del dispositivo (sospensione). @@ -1656,9 +1364,7 @@ Il nome pubblico di una sessione è visibile alle persone con cui comunichi Non stai usando alcun Identity Server Nessun Identity Server configurato. E\' necessario per poter ripristinare la tua password. - Pare che tu stia provando a connetterti ad un altro homeserver. Vuoi disconnetterti da qui\? - Identity Server Disconnetti Identity Server Configura Identity Server @@ -1672,28 +1378,20 @@ Numeri di telefono visibili pubblicamente Abbiamo inviato un\'email di conferma a %s, controlla l\'email e clicca sul link di conferma In attesa - Inserisci un URL di server di identità Impossibile connettersi all\'Identity Server Inserisci l\'URL dell\'Identity Server L\'Identity Server non ha reso noti i propri termini di servizio L\'Identity Server che hai scelto non ha freso noti i propri termini di servizio. Continua solo se ti fidi È stato inviato un messaggio a %s. Inserisci il codice di verifica che contiene. - In questo momento stai condividendo i tuoi indirizzi email o numeri di telefono sull\'Identity Server %1$s. Dovrai riconnetterti a %2$s per interromperne la condivisione. Accetta i termini di servizio dell\'Identity Server (%s) per permettere ad altri utenti di trovarti tramite la tua email o numero di telefono. Latn - Attiva i log dettagliati. I log dettagliati aiuteranno gli sviluppatori fornendo loro molte piÚ informazioni nelle segnalazioni che invii scuotendo il dispositivo. Anche se attivi i log dettagliati, Element non registra mai i contenuti dei messaggi o altri dati personali. - - Riprova dopo avere accettato i termini di servizio del tuo Home Server. - Sembra che il server stia impiegando troppo tempo a rispondere. CiÃ˛ puÃ˛ essere causato da una cattiva connessione o da un errore del server. Riprova fra qualche minuto. - Invia allegato - Apri il pannello di navigazione Apri il menu \"Crea nuova stanza\" Chiudi il menu di \"Crea nuova stanza\"â€Ļ @@ -1703,17 +1401,14 @@ Mostra password Nascondi password Salta in fondo - %1$s, %2$s e %3$s hanno letto %1$s e %2$s hanno letto %s ha letto - 1 utente ha letto + %d utente ha letto %d utenti hanno letto - Il file \'%1$s\' (%2$s) è troppo grande da inviare. Il limite è %3$s. - Si è verificato un errore ricevendo l\'allegato. File Contatto @@ -1722,7 +1417,6 @@ Galleria Adesivo Errore nella gestione dei dati condivisi - È spam È inappropriato Segnalazione personalizzataâ€Ļ @@ -1730,31 +1424,25 @@ Motivo della segnalazione SEGNALA IGNORA UTENTE - Contenuto segnalato - Questo contenuto è stato segnalato. -\n -\nSe non vuoi piÚ vedere contenuti da questo utente, puoi bloccarlo per nascondere i suoi messaggi + Questo contenuto è stato segnalato. +\n +\nSe non vuoi piÚ vedere contenuti da questo utente, puoi ignorarlo per nascondere i suoi messaggi. Segnalato come spam - Questo contenuto è stato segnalato come spam. -\n -\nSe non vuoi piÚ vedere contenuti da questo utente, puoi bloccarlo per nascondere i suoi messaggi + Questo contenuto è stato segnalato come spam. +\n +\nSe non vuoi piÚ vedere contenuti da questo utente, puoi ignorarlo per nascondere i suoi messaggi. Segnalato come inappropriato - Questo contenuto è stato segnalato come inappropriato. -\n -\nSe non vuoi piÚ vedere contenuti da questo utente, puoi bloccarlo per nascondere i suoi messaggi - + Questo contenuto è stato segnalato come inappropriato. +\n +\nSe non vuoi piÚ vedere contenuti da questo utente, puoi ignorarlo per nascondere i suoi messaggi. Element richiede l\'autorizzazione per salvare le tue chiavi crittografiche sul disco. \n \nPermetti l\'accesso nel prossimo pop-up per poter esportare le chiavi manualmente. - In questo momento non c\'è nessuna connessione di rete - Conferma la tua password Non puoi farlo da Element mobile E\'necessaria l\'autenticazione - - Integrazioni Usa un Integration Manager per gestire bot, bridge, widget e pacchetti di sticker. \nGli Integration Manager possono ricevere dati di configurazione, modificare widget, mandare inviti alle stanze e modificare permessi a tuo nome. @@ -1769,25 +1457,20 @@ Ricarica widget Apri nel browser Revoca l\'accesso per me - Il tuo nome visualizzato L\'URL del tuo avatar Il tuo ID utente Il tuo tema ID widget ID stanza - - Questo widget vuole usare le seguenti risorse: Permetti Blocca tutto Usare la fotocamera Usa il microfono Leggi media protetti da DRM - Questo non è un indirizzo di server Matrix valido Ignora utente - Tutti i messaggi (rumoroso) Tutti i messaggi Solo citazioni @@ -1798,22 +1481,16 @@ Invia il messaggio come spoiler Spoiler Digita parole chiave per trovare una reazione. - Non stai ignorando alcun utente - Tieni premuto su una stanza per altre opzioni - - %1$s ha reso pubblica la stanza a chiunque conosca il collegamento. %1$s ha reso la stanza solo ad invito. Messaggi non letti - È la tua conversazione. Tienitela. Chatta con persone direttamente o in gruppi Tieni private le conversazioni con la cifratura Estendi e personalizza la tua esperienza Inizia - Seleziona un server Proprio come le email, gli account hanno una sola origine, ma puoi parlare con chiunque Unisciti a milioni gratuitamente sul server pubblico piÚ grande @@ -1821,7 +1498,6 @@ Maggiori info Altro Impostazioni personalizzate ed avanzate - Continua Connetti a %1$s Connetti a Element Matrix Services @@ -1830,13 +1506,11 @@ Registrati Accedi Continua con SSO - Indirizzo Element Matrix Services Indirizzo Hosting premium per organizzazioni Inserisci l\'indirizzo del Element Modular o del server che vuoi usare Inserisci l\'indirizzo di un server o di un Element a cui vuoi connetterti - Si è verificato un errore caricando la pagina: %1$s (%2$d) L\'applicazione non riesce ad accedere a questo homeserver. L\'homeserver supporta i seguenti tipi di accesso: %1$s. \n @@ -1845,58 +1519,46 @@ L\'applicazione non riesce a creare un account su questo homeserver. \n \nVuoi registrarti usando un client web\? - Questa email non è associata ad alcun account. - Reimposta password su %1$s Verrà inviata un\'email di verifica nella tua posta per confermare l\'impostazione della nuova password. Avanti Email Nuova password - Attenzione! Cambiare la password reimposterà qualunque chiave di cifratura end-to-end su tutte le tue sessioni, rendendo illeggibile la cronologia delle chat criptate. Imposta il Backup Chiavi o esporta le tue chiavi della stanza da un\'altra sessione prima di reimpostare la password. Continua - Questa email non è collegata ad alcun account - Controlla la tua posta Un\'email di verifica è stata inviata a %1$s. Tocca il collegamento per confermare la tua nuova password. Una volta seguito il collegamento contenuto, clicca sotto. Ho verificato il mio indirizzo email - Successo! La tua password è stata reimpostata. Sei stato disconnesso da tutte le sessioni e non riceverai piÚ notifiche push. Per riattivare le notifiche, riaccedi su ogni dispositivo. Torna all\'accesso - Attenzione La tua password non è ancora cambiata. \n \nFermare il processo di cambio password\? - Imposta indirizzo email Imposta un\'email per recuperare il tuo account. PiÚ tardi potrai permettere facoltativamente alle persone che conosci di trovarti tramite la tua email. Email Email (facoltativa) Avanti - Imposta numero di telefono Imposta un numero di telefono per permettere facoltativamente alle persone che conosci di trovarti. Si prega di usare il formato internazionale. Numero di telefono Numero di telefono (facoltativo) Avanti - Conferma numero di telefono Abbiamo inviato un codice a %1$s. Inseriscilo sotto per verificare che sei tu. Inserisci codice Invia di nuovo Avanti - I numeri di telefono internazionali devono iniziare con \'+\' Il numero di telefono non sembra valido. Ricontrollalo - Registrati su %1$s Nome utente o email Password @@ -1906,27 +1568,22 @@ Il tuo account non è ancora stato creato. \n \nFermare il processo di registrazione\? - Seleziona matrix.org Seleziona Element Matrix Services Seleziona un server personalizzato Completa la verifica Captcha Accetta le condizioni per continuare - Controlla la tua email Abbiamo inviato un\'email a %1$s. \nClicca il collegamento contenuto per continuare la creazione dell\'account. Il codice inserito non è corretto. Ricontrollalo. Homeserver obsoleto Questo homerserver è di una versione troppo vecchia per connettersi. Chiedi all\'amministratore dell\'homeserver di aggiornarlo. - Sono state inviate troppe richieste. Puoi riprovare in %1$d secondoâ€Ļ Sono state inviate troppe richieste. Puoi riprovare in %1$d secondiâ€Ļ - Visto da - Sei disconnesso PuÃ˛ essere dovuto a vari motivi: \n @@ -1936,7 +1593,6 @@ \n \nâ€ĸ L\'amministratore del server ha bloccato il tuo accesso per motivi di sicurezza. Accedi di nuovo - Sei disconnesso Accedi L\'amministratore dell\'homeserver (%1$s) ti ha disconnesso dall\'account %2$s (%3$s). @@ -1948,7 +1604,6 @@ \n \nEliminali se hai finito di usare questo dispositivo, o se vuoi accedere ad un altro account. Elimina tutti i dati - Elimina i dati Eliminare tutti i dati attualmente presenti in questo dispositivo\? \nRiaccedi per avere accesso ai dati dell\'account e ai messaggi. @@ -1956,12 +1611,9 @@ Elimina i dati La sessione attuale è per l\'utente %1$s e hai fornito le credenziali per l\'utente %2$s. CiÃ˛ non è supportato da Element. \nPrima elimina i dati, poi accedi di nuovo con un altro account. - Il tuo collegamento matrix.to non è corretto La descrizione è troppo breve - Sync inizialeâ€Ļ - Vedi tutte le mie sessioni Impostazioni avanzate Modalità sviluppatore @@ -1973,25 +1625,19 @@ Impostazioni Sessione attuale Altre sessioni - Mostrati solo i primi risultati, digita piÚ lettereâ€Ļ - Crash facile Element potrebbe crashare piÚ spesso quando si verifica un errore imprevisto Antepone ¯\\_(ツ)_/¯ ad un messaggio testuale - Attiva la cifratura Una volta attivata, la cifratura non puÃ˛ essere disattivata. - Il dominio della tua email non è autorizzato alla registrazione in questo server - Accesso non fidato Corrispondono Non corrispondono Verifica questo utente confermando che le seguenti emoji appaiono sul suo schermo, nello stesso ordine. Per la massima sicurezza, usate un\'altra via di comunicazione fidata o fatelo di persona. Cerca lo scudo verde per garantire la fiducia dell\'utente. Fidati di tutti gli utenti in una stanza per garantire che essa sia sicura. - Non sicuro Uno dei seguenti potrebbe essere compromesso: \n @@ -1999,12 +1645,10 @@ \n - L\'homeserver al quale è connesso l\'utente che stai verificando \n - La tua connessione internet o quella dell\'altro utente \n - Il tuo dispositivo o quello dell\'altro utente - Video. Immagine. Audio File - In attesaâ€Ļ %s ha annullato Hai annullato @@ -2012,25 +1656,17 @@ Hai accettato Verifica inviata Richiesta di verifica - - Verifica questa sessione Verifica manualmente - Tu - Scansiona il codice con il dispositivo dell\'altro utente per verificarvi a vicenda Scansiona il suo codice Impossibile scansionare Se non siete di persona, confrontate invece le emoji - Verifica confrontando le emoji - Verifica via emoji Se non potete scansionare il codice sopra, verificate confrontando una breve selezione univoca di emoji. - Immagine codice QR - Verifica %s %s verificato In attesa di %sâ€Ļ @@ -2053,54 +1689,38 @@ File caricati Lascia stanza Uscita dalla stanzaâ€Ļ - Amministratori Moderatori Personalizzato Inviti Utenti - Amministratore in %1$s Moderatore in %1$s Personalizzato (%1$d) in %2$s - Vai alla ricevuta di lettura - Element non gestisce eventi del tipo \'%1$s\' Element non gestisce messaggi del tipo \'%1$s\' Element ha riscontrato un errore con il rendering del contenuto dell\'evento con id \'%1$s\' - Non ignorare - Questa sessione non riesce a condividere questa verifica con le tue altre sessioni. \nLa verifica sarà salvata in locale e condivisa in una versione futura dell\'app. - Stanze recenti Altre stanze - Invia il messaggio in questione colorato ad arcobaleno Invia l\'emoticon in questione colorata ad arcobaleno - Cronologia - Editor messaggi - Attiva cifratura end-to-end Una volta attivata, la cifratura non puÃ˛ essere disattivata. - Attivare la cifratura\? Una volta attivata, la cifratura di una stanza non puÃ˛ essere disattivata. I messaggi inviati in una stanza cifrata non possono essere visti dal server, solo dai partecipanti della stanza. L\'attivazione della cifratura puÃ˛ impedire il funzionamento di molti bot e bridge. Attiva cifratura - Per sicurezza, verifica %s controllando un codice univoco. Per sicurezza, fatelo di persona o usate un\'altra via di comunicazione. - Confronta le emoji, assicurandoti che appaiono nello stesso ordine. Confronta il codice con quello mostrato nello schermo dell\'altro utente. I messaggi con questo utente sono cifrati end-to-end e non possono essere letti da terze parti. La tua nuova sessione ora è verificata. Ha accesso ai messaggi cifrati e gli altri utenti la vedranno come fidata. - - Firma incrociata La firma incrociata è attiva \nChiavi private nel dispositivo. @@ -2110,53 +1730,37 @@ La firma incrociata è attiva. \nLe chiavi non sono fidate La firma incrociata non è attiva - - Sessioni attive Mostra tutte le sessioni Gestisci sessioni Disconnetti questa sessione - Nessuna informazione crittografica disponibile - Questa sessione è fidata per i messaggi sicuri perchÊ l\'hai verificata: Verifica questa sessione per segnarla come fidata e darle l\'accesso ai messaggi cifrati. Se non hai fatto l\'accesso a questa sessione il tuo account potrebbe essere compromesso: - %d sessione attiva %d sessioni attive - Verifica questo accesso Gli altri utenti potrebbero non fidarsi Completa la sicurezza - Usa una sessione esistente per verificare questa, dandole l\'accesso ai messaggi cifrati. - - Verifica Verificato Attenzione - Rilevazione sessioni fallita Sessioni Fidato Non fidato - Questa sessione è fidata per i messaggi sicuri perchÊ %1$s (%2$s) l\'ha verificata: %1$s (%2$s) ha fatto l\'accesso con una nuova sessione: FinchÊ questo utente non si fida di questa sessione, i messaggi inviati da e verso di essa sono etichettati con avvisi. In alternativa, puoi verificarlo manualmente. - - Inizializza la firma incrociata Reimposta chiavi - Codice QR - Quasi fatto! %s sta mostrando lo stesso scudo\? SÃŦ No - La connessione al server è stata persa Nome utente Strumenti Svil @@ -2173,49 +1777,36 @@ Crea un semplice sondaggio Usa una password o chiave di recupero Se non puoi accedere a una sessione esistente - Nuovo accesso - Impossibile trovare segreti nell\'archivio Inserisci la password dell\'archivio segreto Attenzione: Dovresti accedere all\'archivio segreto solo da un dispositivo fidato - Rimuoviâ€Ļ Vuoi inviare questo allegato a %1$s\? Invia immagine nella dimensione originale Invia immagini nella dimensione originale - Conferma rimozione Sei sicuro di volere rimuovere (eliminare) questo evento\? Nota che se elimini il nome della stanza o cambi l\'argomento, ciÃ˛ potrebbe annullare la modifica. Includi un motivo Motivo della revisione - Evento eliminato da un utente, motivo: %1$s Evento moderato da un admin della stanza, motivo: %1$s - Le chiavi sono già aggiornate! - Element Android - Richieste di chiavi - Sblocca la cronologia dei messaggi cifrati - Ricarica - Nuovo accesso. Eri tu\? Tocca per controllare e verificare Usa questa sessione per verificare quella nuova, dandole l\'accesso ai messaggi cifrati. Non ero io Il tuo account potrebbe essere compromesso - Se annulli, non potrai leggere i messaggi cifrati su questo dispositivo e altri utenti non si fideranno di esso Se annulli, non potrai leggere i messaggi cifrati sul tuo nuovo dispositivo e altri utenti non si fideranno di esso Non verificherai %1$s (%2$s) se annulli adesso. Ricomincia nel suo profilo utente. - Uno dei seguenti potrebbe essere compromesso: \n \n- La tua password @@ -2224,35 +1815,25 @@ \n- La connessione internet usata da uno dei dispositivi \n \nTi consigliamo di cambiare immediatamente la password e le chiavi di recupero nelle impostazioni. - Verifica i tuoi dispositivi dalle impostazioni. Verifica annullata - Password di ripristino chiave dei messaggi password dell\'account - Imposta una %s Genera una chiave dei messaggi - Conferma la %s - Inserisci la tua %s per continuare. - Proteggi e sblocca i messaggi cifrati e fidati con una %s. Inserisci la tua %s di nuovo per confermarla. Non riutilizzare la tua password dell\'account. - - Potrebbe impiegarci qualche secondo, porta pazienza. Inizializzazione del ripristino. La tua chiave di recupero Hai finito! Tienila al sicuro Fine - Usa questa %1$s come una rete di salvataggio in caso ti dimentichi la tua %2$s. - Pubblicazione delle chiavi di identità create Generazione della chiave sicura dalla password Definizione della chiave predefinita SSSS @@ -2260,37 +1841,26 @@ Sincronizzazione della chiave utente Sincronizzazione della chiave di auto-firma Inizializzazione del backup chiavi - - La tua %2$s e la %1$s sono ora impostate. \n \nTienile al sicuro! Ti serviranno per sbloccare i messaggi cifrati e informazioni sicure se perdi tutte le tue sessioni attive. - Stampala e conservala in un posto sicuro Salvala in una penna USB o disco di backup Copiala nella tua archiviazione online - Non puoi farlo da mobile - Impostare una password dei messaggi ti consente di proteggere e sbloccare i messaggi cifrati e di fidarti. \n \nSe non vuoi impostare una password dei messaggi, genera una chiave dei messaggi. Impostare una password di ripristino ti consente di proteggere e sbloccare i messaggi cifrati e di fidarti. - - Cifratura attiva I messaggi in questa stanza sono cifrati end-to-end. Maggiori info e verifica degli utenti nel loro profilo. Cifratura non attiva La cifratura usata da questa stanza non è supportata - %s ha creato e configurato la stanza. - Quasi fatto! L\'altro dispositivo sta mostrando lo stesso scudo\? Quasi fatto! In attesa della confermaâ€Ļ In attesa di %sâ€Ļ - Importazione chiavi fallita - Configurazione delle notifiche Messaggi contenenti @room Messaggi cifrati in conversazioni private @@ -2298,24 +1868,17 @@ Quando le stanze vengono aggiornate Risoluzione problemi Imposta l\'importanza della notifica per evento - Invia un messaggio come testo semplice, senza interpretarlo come markdown - Nome utente e/o password errati. La password inserita inizia o termina con spazi, controllala. - Messaggioâ€Ļ - Aggiornamento cifratura disponibile Verifica te stesso e gli altri per tenere al sicuro le chat - Inserisci la tua %s per continuare Usa file - Inserisci la %s Password di ripristino Non è una chiave di ripristino valida Inserisci una chiave di ripristino - Controllo della chiave di backup Controllo della chiave di backup (%s) Rilevazione chiave di curva ellittica @@ -2324,19 +1887,15 @@ Generazione chiave SSSS dalla chiave di ripristino Memorizzazione segreto della chiave in SSSS %1$s (%2$s) - Inserisci la password del backup chiavi per continuare. usare la chiave di ripristino del backup chiavi Non conosci la password del backup chiavi, puoi %s. Chiave di ripristino del backup chiavi - Impedisci la cattura di schermate dell\'app Attivandolo verrà aggiunto FLAG_SECURE a tutte le Activity. Riavvia l\'applicazione per applicare le modifiche. - File multimediale aggiunto alla galleria Impossibile aggiungere il file multimediale alla galleria Imposta una nuova password dell\'accountâ€Ļ - Usa l\'ultima versione di Element sui tuoi altri dispositivi, Element Web, Element Desktop, Element iOS, Element per Android o un altro client Matrix che supporti la firma incrociata Element Web \nElement Desktop @@ -2351,30 +1910,25 @@ Seleziona la tua chiave di recupero, oppure inseriscila a mano digitandola o incollando dagli appunti Impossibile decifrare il backup con questa chiave di recupero: verifica di avere inserito la chiave giusta. Accesso all\'archivio sicuro fallito - Non cifrato Cifrato da un dispositivo non verificato Controlla dove hai fatto l\'accesso Verifica tutte le tue sessioni per assicurarti che il tuo account e i messaggi siano protetti Verifica il nuovo accesso entrando nel tuo account: %1$s - Verifica manualmente con testo Verifica accesso Verifica interattivamente con emoji Conferma la tua identità verificando questo accesso da una delle tua altre sessioni, dandole l\'accesso ai messaggi cifrati. Segna come fidato - Scegli un nome utente. Scegli una password. Verifica questo collegamento Il collegamento %1$s ti sta portando ad un altro sito: %2$s. \n \nSei sicuro di volere continuare\? - Impossibile creare il messaggio diretto. Controlla gli utenti che vuoi invitare e riprova. %1$s: %2$s %1$s: %2$s %3$s - Aggiungi membri INVITA Invito utentiâ€Ļ @@ -2386,19 +1940,16 @@ Inviti spediti a %1$s e ad altri %2$d Impossibile invitare gli utenti. Controlla gli utenti che vuoi invitare e riprova. - Messaggio eliminato Mostra messaggi rimossi Mostra un segnaposto per i messaggi rimossi Ti abbiamo inviato un\'email di conferma a %s, prima controlla la tua posta e clicca sul link di conferma Il codice di verifica non è corretto. - MEDIA Non ci sono file multimediali in questa stanza FILE %1$s alle %2$s Non ci sono file in questa stanza - In alternativa, se hai già un account e conosci il tuo identificativo e password di Matrix, puoi usare questo metodo: Accedi con il mio identificativo di Matrix Accedi @@ -2406,13 +1957,10 @@ Identificativo utente Non è un identificativo valido. Formato previsto: \'@utente:homeserver.org\' Impossibile trovare un homeserver valido. Controlla il tuo identificativo - Modalità aereo attiva - Lingua attuale Altre lingue disponibili Caricamento lingue disponibiliâ€Ļ - Apri condizioni di %s Disconnettere dal server di identitià %s\? Questo server di identità è obsoleto. Element supporta solo API V2. @@ -2422,26 +1970,20 @@ Per la tua privacy, Element supporta solo l\'invio di email utente e numeri di telefono in formato hash. L\'associamento è fallito. Non c\'è alcun associamento attuale con questo identificativo. - Il tuo homeserver (%1$s) propone di usare %2$s come tuo server di identità Usa %1$s In alternativa, puoi inserire un qualsiasi altro URL di server di identità Inserisci l\'URL di un server di identità Invia - Riproduci Pausa Annulla - - Copia Completato - Notifiche Telefonata di Element fallita Connessione in tempo reale fallita. \nChiedi all\'amministratore del tuo homeserver di configurare un server TURN per fare funzionare le chiamate. - Seleziona dispositivo audio Telefono Altoparlante @@ -2452,18 +1994,14 @@ Posteriore Disattiva l\'HD Attiva l\'HD - Errore SSL: l\'identità del peer non è stata verificata. Errore SSL. Telefonata attiva (%s) Torna alla telefonata - Annulla invito Vuoi declassarti\? Non potrai annullare questa modifica dato che ti stai declassando, se sei l\'ultimo utente privilegiato nella stanza sarà impossibile ottenere di nuovo i privilegi. Declassa - - Ignora utente Ignorando questo utente verranno rimossi i suoi messaggi dalle stanze che condividete. \n @@ -2481,7 +2019,6 @@ Motivo del ban Togli il ban dell\'utente Togliere il ban dell\'utente gli permetterà di rientrare nella stanza. - Backup Sicuro Gestisci Imposta il Backup Sicuro @@ -2490,53 +2027,37 @@ Proteggiti contro la perdita dell\'accesso ai messaggi e dati cifrati facendo un backup delle chiavi crittografiche sul tuo server. Genera una nuova chiave di sicurezza o imposta una nuova frase di sicurezza per il backup esistente. CiÃ˛ sostituirà la tua attuale chiave o frase. - Le integrazioni sono disattivate Attiva \'Permetti integrazioni\' nelle impostazioni per continuare. - %d utente bandito %d utenti banditi - Chiavi esportate correttamente - VEDI Widget attivi - - La chiave di recupero è stata salvata. - Backup Sicuro Proteggiti dalla perdita dei messaggi e dati crittografati - Imposta il Backup Sicuro - Aggiungi una scheda dedicata per le notifiche non lette nella schermata principale. - Aggiungi ai preferiti Rimuovi dai preferiti Non hai fatto modifiche Hai reso pubblica la stanza a chiunque conosca il link. Hai reso la stanza solo su invito. Inserisci l\'indirizzo del server che vuoi usare - Se non sai la tua password, torna indietro per reimpostarla. Adesivo - Azioni amministratore Predefinito in %1$s L\'amministratore del server ha disattivato la crittografia end-to-end in modo predefinito nelle stanze private e nei messaggi diretti. Inserisci una frase di sicurezza che conosci solo tu, usata per proteggere i segreti nel tuo server. - Se annulli ora, potresti perdere i messaggi e dati cifrati se perdi l\'accesso ai tuoi login. \n \nPuoi anche configurare il backup sicuro e gestire le tue chiavi nelle impostazioni. - Hai creato e configurato la stanza. - Questo account è stato disattivato. - Attiva la firma incrociata Impossibile salvare il file multimediale Imposta ruolo @@ -2546,9 +2067,7 @@ Accendi il microfono Ferma la fotocamera Avvia la fotocamera - Imposta il Backup Sicuro - Backup sicuro Proteggiti contro la perdita dell\'accesso ai messaggi e dati cifrati facendo un backup delle chiavi crittografiche sul tuo server. Configura @@ -2556,22 +2075,17 @@ Genera una chiave di sicurezza da conservare in qualche posto sicuro, come un gestore di password o una cassaforte. Usa una frase di sicurezza Inserisci una frase segreta che conosci solo tu e genera una chiave per backup. - Salva la chiave di sicurezza Conserva la chiave di sicurezza in qualche posto sicuro, come un gestore di password o una cassaforte. - Imposta una frase di sicurezza Inserisci una frase di sicurezza che conosci solo tu, usata per proteggere i segreti nel tuo server. Frase di sicurezza Inserisci la frase di sicurezza di nuovo per confermarla. - Salva la chiave di sicurezza Conserva la chiave di sicurezza in qualche posto sicuro, come un gestore di password o una cassaforte. - Nome stanza Argomento Hai cambiato le impostazioni della stanza correttamente - Non puoi accedere a questo messaggio In attesa del messaggio, potrebbe volerci un po\' Impossibile decifrare @@ -2580,17 +2094,12 @@ Non puoi accedere a questo messaggio perchÊ la tua sessione non è fidata dal mittente Non puoi accedere a questo messaggio perchÊ il mittente non ha inviato le chiavi di proposito In attesa della cronologia di crittografia - Riot ora si chiama Element! Siamo entusiasti di annunciare che abbiamo cambiato nome! La tua app è aggiornata e hai fatto l\'accesso al tuo account. CAPITO MAGGIORI INFO - element - - Salva chiave di ripristino in - Aggiungi dalla mia rubrica La tua rubrica è vuota Rubrica @@ -2598,13 +2107,10 @@ Rilevazione dei tuoi contattiâ€Ļ Il tuo elenco di contatti è vuoto Elenco contatti - Revoca invito Revocare l\'invito a %1$s\? - Bandito da %1$s Rimozione ban fallita - Le notifiche push sono disattivate Verifica le tue impostazioni per attivare le notifiche push Scegli un PIN di sicurezza @@ -2633,13 +2139,11 @@ %1$d/%2$d chiave importata correttamente. %1$d/%2$d chiavi importate correttamente. - Gestisci integrazioni Nessun widget attivo La stanza è stata creata, ma alcuni inviti non sono stati spediti per il seguente motivo: \n \n%s - %1$s, %2$s e %3$d altro hanno letto %1$s, %2$s e altri %3$d hanno letto @@ -2657,15 +2161,12 @@ Numeri di telefono Rimuovere %s\? Assicurati di avere cliccato il link nell\'email che ti abbiamo inviato. - Email e numeri di telefono Gestisci le email e i numeri di telefono collegati al tuo account Matrix - Codice Si prega di usare il formato internazionale (il numero deve iniziare con \'+\') Conferma la tua identità verificando questo accesso, dandogli l\'accesso ai messaggi cifrati. Spiacente, questa operazione non è ancora possibile per gli account connessi tramite Single Sign-On. - 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 @@ -2673,17 +2174,67 @@ %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 - + Mostra solo il numero di messaggi non letti in una semplice notifica. + Mostra dettagli come il nome delle stanze e il contenuto dei messaggi. + Mostra il contenuto nelle notifiche + Il codice PIN è l\'unico modo per sbloccare Element. + Attiva la biometria specifica del dispositivo, come impronte e riconoscimento facciale. + Attiva la biometria + Configura protezione + Proteggi l\'accesso usando un PIN e la biometria. + Proteggi accesso + + Mostra il dispositivo con cui puoi verificare ora + Mostra %d dispositivi con cui puoi verificare ora + + Ricomincerai senza cronologia, messaggi, dispositivi o utenti fidati + Se reimposti tutto + Fallo solo se non hai altri dispositivi con cui verificare questo. + Reimposta tutto + Dimenticato o perso tutte le opzioni di recupero\? Reimposta tutto + Sei entrato. + I messaggi in questa stanza sono cifrati end-to-end. + Esci + Impostazioni + I messaggi qui sono cifrati end-to-end. +\n +\nI tuoi messaggi sono protetti con lucchetti e solo tu e il destinatario avete le chiavi univoche per sbloccarli. + I messaggi qui non sono cifrati end-to-end. + L\'homeserver gira su una versione vecchia. Chiedi al tuo amministratore di aggiornare. Puoi continuare, ma alcune funzionalità potrebbero non funzionare correttamente. + L\'hai resa solo su invito. + %1$s l\'ha resa solo su invito. + Mostra la cronologia completa nelle stanze cifrate + %1$s e %2$s + %1$s in %2$s e %3$s + + %d invito + %d inviti + + La notifica è stata cliccata! + Clicca la notifica. Se non la vedi, controlla le impostazioni di sistema. + Visualizzazione notifica + Stai vedendo la notifica! Cliccami! + Ricezione push fallita. La soluzione puÃ˛ essere di reinstallare l\'applicazione. + L\'applicazione sta ricevendo il PUSH + Prova push + La ricerca in stanze cifrate non è ancora supportata. + Filtra utenti banditi + Non hai il permesso di avviare una chiamata + Non hai il permesso di avviare una chiamata di gruppo + Reimposta + Il codice PIN è richiesto ogni volta che apri Element. + È necessario il codice PIN dopo 2 minuti di inattività con Element. + Richiedi il PIN dopo 2 minuti + %s è entrato. + L\'applicazione è in attesa del PUSH + \ No newline at end of file From 021c23cd19a6b35485d51e358584cdfa189488c7 Mon Sep 17 00:00:00 2001 From: Marcelo Filho Date: Tue, 13 Oct 2020 16:53:56 +0000 Subject: [PATCH 266/278] Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (1918 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/pt_BR/ --- vector/src/main/res/values-pt-rBR/strings.xml | 582 +++--------------- 1 file changed, 71 insertions(+), 511 deletions(-) diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 97da7a8a82..c50be8c20f 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -1,21 +1,18 @@ - + pt BR - Mensagens Sala ConfiguraçÃĩes Detalhes do participante HistÃŗrico - Aceitar Recusar Encerrar - OK Cancelar @@ -48,7 +45,6 @@ Enviar mesmo assim ou Convidar - Sair Chamada de voz @@ -61,27 +57,22 @@ Fechar Copiado para a ÃĄrea de transferÃĒncia Desativar - ConfirmaçÃŖo AtençÃŖo - Início Favoritos Pessoas Salas - Filtrar nomes de salas Filtrar favoritos Filtrar pessoas Filtrar nomes de salas - Convites Baixa prioridade - Conversas Agenda de endereços local @@ -89,7 +80,6 @@ Nenhuma conversa VocÃĒ nÃŖo permitiu que o Element acesse seus contatos locais Nenhum resultado - Salas Lista de salas @@ -99,7 +89,6 @@ %d usuÃĄrio %d usuÃĄrios - Enviar registros Enviar registros da falha Enviar recorte de tela @@ -112,10 +101,8 @@ Falha ao enviar o relatÃŗrio de erro (%s) Andamento (%s%%) O aplicativo encerrou inesperadamente da Ãēltima vez. Gostaria de abrir a tela de relatÃŗrios de erros\? - Enviar para Leitura: - Entrar na sala Nome de usuÃĄrio Criar conta @@ -124,14 +111,11 @@ Endereço do servidor principal Endereço do servidor de identidade Pesquisar - Iniciar nova conversa Iniciar chamada de voz Iniciar chamada de vídeo - Enviar arquivos Tirar uma foto ou gravar vídeo - Entrar Criar conta @@ -180,7 +164,6 @@ Sua senha foi alterada. \n \nVocÃĒ foi desconectado de todas as sessÃĩes e nÃŖo receberÃĄ mais notificaçÃĩes. Para reativar as notificaçÃĩes, faça login novamente em cada aparelho. - O endereço precisa começar com http[s]:// NÃŖo foi possível fazer login: erro de rede @@ -189,7 +172,6 @@ NÃŖo foi possível criar conta NÃŖo foi possível criar conta: falha na verificaçÃŖo de posse do e-mail Por favor, digite um endereço vÃĄlido - Nome de usuÃĄrio ou senha invÃĄlido O token de acesso especificado nÃŖo foi reconhecido JSON mal formatado @@ -197,54 +179,43 @@ Muitas solicitaçÃĩes foram enviadas Este nome de usuÃĄrio jÃĄ estÃĄ em uso O link no e-mail ainda nÃŖo foi clicado - - Lista de confirmaçÃĩes de leitura - - Enviar como Original Grande MÊdio Pequeno - Cancelar o download? Cancelar o envio\? %d s %1$dm %2$ds - Ontem Hoje - Nome da sala DescriçÃŖo da sala - Chamada aceita - Chamandoâ€Ļ + Iniciando chamadaâ€Ļ Chamada encerrada Chamandoâ€Ļ Recebendo chamada Recebendo chamada de vídeo Recebendo chamada de voz Chamada em andamentoâ€Ļ - A pessoa nÃŖo atendeu a chamada. A conexÃŖo à mídia falhou NÃŖo foi possível iniciar a cÃĸmera chamada atendida em outro lugar - Tirar uma foto ou gravar vídeo NÃŖo Ê possível gravar vídeo - InformaçÃŖo Element precisa de permissÃŖo para acessar sua galeria de fotos e vídeos para enviar e salvar anexos. @@ -265,25 +236,20 @@ Element precisa de permissÃŖo para acessar os seus contatos para poder encontrar outros usuÃĄrios a partir de seus e-mails e nÃēmeros de telefone. \n \nVocÃĒ concorda em usar a sua lista de contatos para esse propÃŗsito\? - Desculpe. A açÃŖo nÃŖo foi realizada, por falta de permissÃŖo - Salvo Salvar nos downloads? SIM NÃO Continuar - Apagar Entrar Visualizar Recusar - Ir para a primeira mensagem nÃŖo lida. - VocÃĒ foi convidada(o) a entrar nesta sala por %s Este convite foi enviado a %s, que nÃŖo estÃĄ associado com esta conta. @@ -291,27 +257,22 @@ VocÃĒ estÃĄ tentando acessar %s. Quer entrar na sala para poder participar da conversa? uma sala Esta Ê uma prÊ-visualizaçÃŖo desta sala. InteraçÃĩes com esta sala estÃŖo desativadas. - Nova conversa Adicionar uma pessoa 1 participante - Sair da sala Tem certeza de que deseja sair da sala\? Deseja remover %s desta conversa\? Criar - Online Offline Ocioso - FERRAMENTAS DE ADMINISTRAÇÃO CHAMADA Conversas SESSÕES - Convidar Sair da sala Remover desta sala @@ -327,18 +288,14 @@ Mostrar lista de sessÃĩes VocÃĒ nÃŖo poderÃĄ desfazer esta alteraçÃŖo, jÃĄ que vocÃĒ estÃĄ promovendo este usuÃĄrio para ter o mesmo nível de permissÃĩes que vocÃĒ. \nTem certeza\? - "VocÃĒ tem certeza que quer convidar %s para esta conversa?" - Convidar por ID CONTATOS LOCAIS (%d) Apenas usuÃĄrios Matrix - Convidar pessoa por sua ID Por favor, digite um ou mais endereços de e-mail ou ID Matrix E-mail ou ID Matrix - Pesquisar %s estÃĄ digitandoâ€Ļ @@ -355,7 +312,6 @@ Apagar mensagens nÃŖo enviadas Arquivo nÃŖo encontrado VocÃĒ nÃŖo tem permissÃŖo para digitar nesta sala - Confiar NÃŖo confiar @@ -368,7 +324,6 @@ VocÃĒ tinha um certificado confiÃĄvel para o seu telefone, mas ele mudou. Isso Ê ALTAMENTE INCOMUM. É recomendÃĄvel que vocÃĒ NÃO ACEITE este novo certificado. O certificado foi alterado de um anteriormente confiÃĄvel para um que nÃŖo Ê confiÃĄvel. O servidor pode ter renovado seu certificado. Entre em contato com o administrador do servidor para obter a impressÃŖo digital esperada. Apenas aceite o certificado se o administrador do servidor publicou uma impressÃŖo digital que Ê idÃĒntica a que estÃĄ acima. - Detalhes da sala Pessoas @@ -377,7 +332,6 @@ ID mal formatado. Precisa ser um endereço de e-mail ou um ID Matrix, como \'@participantelocal:dominio\' CONVIDADOS ENTRARAM - Motivo de denunciar este conteÃēdo Deseja ocultar todas as mensagens deste usuÃĄrio\? @@ -385,7 +339,6 @@ \nEsta açÃŖo irÃĄ reiniciar o aplicativo e poderÃĄ demorar um pouco. Cancelar envio Cancelar download - Pesquisar Pesquisar participantes da sala @@ -394,7 +347,6 @@ MENSAGENS PESSOAS ARQUIVOS - ENTRAR LISTA PÚBLICA @@ -407,18 +359,15 @@ Entrar na sala Entrar em uma sala Digite o ide ou o apelido de uma sala - Pesquisar na lista pÃēblica Buscando no diretÃŗrioâ€Ļ - Favoritar Despriorizar Conversa direta Sair da conversa Esquecer - Mensagens ConfiguraçÃĩes @@ -427,9 +376,7 @@ Licenças de terceiros Direito autoral Política de privacidade - - Foto de perfil Nome e sobrenome E-mail @@ -438,22 +385,18 @@ Adicionar nÃēmero de telefone Mostrar informaçÃĩes do aplicativo nas configuraçÃĩes do sistema. InformaçÃĩes sobre o aplicativo - Receba notificaçÃĩes de novas mensagens Ativar notificaçÃĩes nesta sessÃŖo Acender a tela por 3 segundos - Mensagens em conversas individuais Mensagens em salas Quando eu for convidada(o) a uma sala Recebendo chamada Mensagens enviadas por bots - SincronizaçÃŖo em segundo plano Ativar a sincronizaçÃŖo em segundo plano Tempo expirado na solicitaçÃŖo de sincronizaçÃŖo Demora entre cada solicitaçÃŖo - VersÃŖo VersÃŖo do olm Termos e condiçÃĩes @@ -462,8 +405,6 @@ Política de privacidade Limpar cache e recarregar - - ConfiguraçÃĩes de usuÃĄrio NotificaçÃĩes UsuÃĄrios bloqueados @@ -488,19 +429,15 @@ AutenticaçÃŖo Senha: Enviar - Conectado como Servidor Principal (Home Server) Servidor de identidade - ConfirmaçÃŖo pendente Por favor, verifique o seu e-mail e clique no link que estÃĄ lÃĄ. Feito isso, clique em continuar. NÃŖo nÃŖo foi possível confirmar o seu endereço de e-mail. Por favor, verifique o seu e-mail e clique no link que ele contÊm. Feito isso, clique em continuar. - Este endereço de e-mail jÃĄ estÃĄ em uso. Este endereço de e-mail nÃŖo foi encontrado. Este nÃēmero de telefone jÃĄ estÃĄ em uso. - Alterar senha Senha atual Nova senha @@ -510,13 +447,9 @@ Mostrar todas as mensagens de %s\? \n \nNote que esta açÃŖo irÃĄ reiniciar o aplicativo e pode levar algum tempo. - Deseja deixar de notificar este aparelho\? - Deseja remover o %1$s %2$s\? - Escolha um país - País Por favor, escolha um país NÃēmero de telefone @@ -526,21 +459,17 @@ Digite o cÃŗdigo de ativaçÃŖo Erro ao validar o seu nÃēmero de telefone CÃŗdigo - - Foto da sala Nome da sala DescriçÃŖo Etiqueta da sala Etiquetada como: - Favoritar Baixa prioridade Nenhuma - Acesso e visibilidade Exibir esta sala na lista pÃēblica de salas @@ -548,22 +477,18 @@ Legibilidade do histÃŗrico da sala Quem pode ler o histÃŗrico de mensagens? Quem pode acessar esta sala? - Qualquer pessoa Apenas participantes (a partir do momento em que esta opçÃŖo foi escolhida) Apenas participantes (desde que foram convidados) Apenas participantes (desde que entraram na sala) - Para fazer um link para uma sala, ela precisa ter um endereço. Apenas as pessoas que foram convidadas Qualquer pessoa que saiba o link da sala, exceto visitantes Qualquer pessoa que saiba o link da sala, incluindo visitantes - UsuÃĄrios banidos - Avançado ID interno desta sala @@ -575,36 +500,27 @@ VocÃĒ precisa desconectar para poder ativar a criptografia. Criptografar apenas para sessÃĩes confirmadas Nunca enviar mensagens criptografadas para sessÃĩes nÃŖo confirmadas nesta sala, a partir desta sessÃŖo. - Esta sala nÃŖo tem endereços locais Novo endereço (p.ex: #foo:matrix.org") - Formato invÃĄlido de alias \'%s\' nÃŖo Ê um formato vÃĄlido para um alias VocÃĒ nÃŖo terÃĄ endereço principal especificado para esta sala. Alertas do endereço principal - Definir como Endereço Principal Retirar este endereço como principal Copiar o ID desta sala Copiar o endereço desta sala - A criptografia estÃĄ ativada nesta sala. A criptografia estÃĄ desativada nesta sala. Ativar criptografia¡ \n(atençÃŖo: nÃŖo Ê possível desativar depois!) - DiretÃŗrio - %s tentou carregar um trecho específico da conversa desta sala, mas nÃŖo conseguiu. - - InformaçÃŖo sobre a criptografia de ponta a ponta - InformaçÃŖo do evento ID de usuÃĄria/o Chave de identidade curve25519 @@ -612,7 +528,6 @@ Algoritmo ID de SessÃŖo Erro de descriptografia - InformaçÃŖo sobre a sessÃŖo do remetente Nome pÃēblico do aparelho Nome @@ -620,7 +535,6 @@ Chave da sessÃŖo ConfirmaçÃŖo ImpressÃŖo digital ed25519 - Exportar chaves de sala E2E Exportar chaves de sala Exportar as chaves para um arquivo local @@ -630,31 +544,25 @@ As chaves de sala E2E foram salvas em \'%s\' AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado. - Importar chaves de sala E2E Importar chaves de sala Importar as chaves de um arquivo local Importar Criptografar apenas para sessÃĩes confirmadas Nunca enviar mensagens criptografadas para sessÃĩes nÃŖo confirmadas, a partir desta sessÃŖo. - NÃŖo confirmado Confirmado Na lista negra - sessÃŖo desconhecida nenhuma - Confirmar Marcar como nÃŖo confirmado Colocar na lista negra Retirar da lista negra - Confirmar sessÃŖo Compare as seguintes informaçÃĩes com aquelas na sessÃŖo do outro usuÃĄrio e confirme: Se nÃŖo corresponderem, a segurança da sua comunicaçÃŖo pode estar comprometida. Eu confirmo que as chaves sÃŖo iguais - Esta sala contÊm sessÃĩes desconhecidas Esta sala contÊm sessÃĩes desconhecidas que nÃŖo foram confirmadas. @@ -662,7 +570,6 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado. - Escolha uma lista pÃēblica de salas O servidor pode estar indisponível ou sobrecarregado @@ -670,31 +577,24 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.Endereço do servidor principal Todas as salas com o servidor %s Todas as salas nativas em %s - Pesquisar no histÃŗrico Desconectado - Lista de usuÃĄrios LISTA DE USUÁRIAS(OS) (%s) Iniciar com o sistema Esvaziar o cache de mídia Manter mídia - Mostrar a hora para todas as mensagens Modo de economia de dados - AparÃĒncia Idioma Escolha o idioma - 3 dias 1 semana 1 mÃĒs Para sempre - Tema - Tamanho da fonte MinÃēsculo Pequeno @@ -706,67 +606,49 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.Tema claro Tema escuro Tema preto - Sincronizandoâ€Ļ Escutando eventos NotificaçÃĩes com som NotificaçÃĩes silenciosas - Relatar um erro Detalhes da comunidade - Carregandoâ€Ļ - Sair Comunidades - Filtrar nomes de comunidades - Convidar Comunidades Nenhuma comunidade - Tem certeza de que deseja iniciar uma nova conversa com %s\? Tem certeza de que deseja iniciar uma chamada de voz\? Tem certeza de que deseja iniciar uma chamada de vídeo\? - Tirar foto Gravar vídeo - Lista de comunidades - Chamada de voz Banir o usuÃĄrio resultarÃĄ em sua remoçÃŖo desta sala, impedindo-o de entrar nela novamente. - Todas as mensagens novas (com som) Todas as mensagens novas Apenas @mençÃĩes Silenciar - Adicionar atalho na tela inicial - + Adicionar o Element na tela inicial Som de notificaçÃŖo Mensagens que contenham o meu nome e sobrenome Mensagens que contenham o meu nome de usuÃĄrio VisualizaçÃŖo prÊvia do endereço Mostrar a hora no formato de 12 horas Vibrar ao mencionar um usuÃĄrio - Estatísticas de uso - Ícone - NotificaçÃĩes Esta sala nÃŖo estÃĄ mostrando ícones de nenhuma comunidade Nova ID da comunidade (p.ex: +foo:matrix.org) ID de comunidade invÃĄlido \'%s\' nÃŖo Ê um ID de comunidade vÃĄlido - - VocÃĒ necessita ter permissÃĩes para poder gerenciar os widgets desta sala A criaçÃŖo do widget falhou Crie chamadas em grupo com jitsi VocÃĒ tem certeza que quer apagar este widget desta sala? - Impossível criar o widget. O envio do pedido falhou. @@ -778,28 +660,22 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.A sala %s nÃŖo estÃĄ visível. Adicionar aplicativos Matrix Usar a cÃĸmera nativa - VocÃĒ adicionou uma nova sessÃŖo \'%s\', que estÃĄ solicitando as chaves de criptografia. Sua sessÃŖo nÃŖo confirmada \'%s\' estÃĄ solicitando as chaves de criptografia. Iniciar a confirmaçÃŖo Compartilhar sem confirmar Ignorar a solicitaçÃŖo - AtençÃŖo! Chamadas em grupo estÃŖo em desenvolvimento, portanto podem nÃŖo ser estÃĄveis. - Erro de comando Comando desconhecido: %s - Desativado Ativado com som - Mensagem criptografada - Criar Criar comunidade @@ -807,21 +683,17 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.Exemplo ID da comunidade exemplo - Início Pessoas Salas Sem ninguÊm - Salas Entrou em que foi convidada/o Pesquisar participantes da comunidade Filtrar salas da comunidade - O(A) administrador(a) desta comunidade nÃŖo definiu uma descriçÃŖo longa da mesma. - VocÃĒ foi removido da sala %1$s por %2$s VocÃĒ foi banido da sala %1$s devido à %2$s Motivo: %1$s @@ -842,7 +714,6 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.%d nova mensagem %d novas mensagens - %d sala %d salas @@ -852,92 +723,75 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.%1$s salas encontradas para %2$s - 1 alteraçÃŖo na filiaçÃŖo + %d alteraçÃŖo na filiaçÃŖo %d alteraçÃĩes na filiaçÃŖo - Lista de participantes - %d mensagem notificada nÃŖo lida - %d mensagens notificadas nÃŖo lidas + %d mensagem nÃŖo lida + %d mensagens nÃŖo lidas - %d mensagem notificada nÃŖo lida - %d mensagens notificadas nÃŖo lidas + %d mensagem nÃŖo lida + %d mensagens nÃŖo lidas %d sala %d salas %1$s em %2$s - %d widget ativo %d widgets ativos - Foto de perfil para a confirmaçÃŖo de leitura Foto de perfil para avisos Foto de perfil - Agite rapidamente para relatar um erro - Normal Privacidade reduzida O app necessita de permissÃŖo para rodar em segundo plano Enviar uma figurinha - Licenças de terceiros - Baixar Falar Limpar Devido à falta de permissÃĩes, essa açÃŖo nÃŖo Ê possível. Alertas do sistema - Se possível, escreva a descriçÃŖo em inglÃĒs, por favor. Enviar ÃĄudio - Enviar uma figurinha No momento, vocÃĒ nÃŖo tem nenhum pacote de figurinhas ativado. \n \nQuer adicionar alguns agora\? - continuar comâ€Ļ Desculpe, nenhum aplicativo externo foi encontrado para concluir esta açÃŖo. - Solicitar novamente as chaves de criptografia das suas outras sessÃĩes.Pedir novamente as chaves de criptografia de seus outros dispositivos. - RequisiçÃŖo de chave enviada. - RequisiçÃŖo enviada Por favor, inicie o Element em outro aparelho que possa descriptografar a mensagem, de modo que ele possa enviar as chaves para esta sessÃŖo. - - 1s + %ds %ds - 1m + %dm %dm - 1h + %dh %dh %d dia %d dias - %1$s agora hÃĄ %1$s %2$s - "%1$s, " %1$s e %2$s %1$s %2$s - Digite sua resposta criptografadaâ€Ļ Digite sua resposta (nÃŖo criptografada)â€Ļ @@ -950,31 +804,23 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.â€ĸ O conteÃēdo das mensagens da notificaçÃŖo Ê armazenado de forma segura diretamente no servidor Matrix â€ĸ As notificaçÃĩes contÊm metadados e os dados da mensagem â€ĸ As notificaçÃĩes nÃŖo exibirÃŖo o conteÃēdo da mensagem - PrÊ-visualizar a mídia antes de enviÃĄ-la - Desativar minha conta Desativar minha conta - Privacidade das notificaçÃĩes Element pode funcionar em segundo plano para gerenciar as suas notificaçÃĩes de forma segura e confidencial. Isso poderÃĄ impactar o uso da bateria. Conceder a permissÃŖo Escolha outra opçÃŖo - Enviar dados de uso Element coleta dados de uso anônimos para nos ajudar a melhorar o aplicativo. Por favor, ative o envio de dados de uso para nos ajudar a melhorar o Element. Sim, eu quero ajudar! - VocÃĒ nÃŖo faz parte de alguma comunidade, no momento. - Escreva aquiâ€Ļ - Um parÃĸmetro obrigatÃŗrio estÃĄ faltando. Um parÃĸmetro nÃŖo Ê vÃĄlido. Use a tecla Enter do teclado para enviar a mensagem Enviar mensagens de voz - Mostra a açÃŖo Bane o usuÃĄrio com a ID fornecida Remove o banimento do usuÃĄrio com a ID fornecida @@ -988,19 +834,16 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.Altera o seu nome e sobrenome Ativar/Desativar a formataçÃŖo de texto Reparar a gestÃŖo de aplicativos Matrix - %d participante %d participantes - %d sala %d salas Para continuar usando o Servidor de Base %1$s, vocÃĒ precisa revisar e aceitar os termos e condiçÃĩes de uso. Revisar agora - Desativar minha conta Isso tornarÃĄ sua conta permanentemente inutilizÃĄvel. VocÃĒ nÃŖo conseguirÃĄ efetuar login e ninguÊm poderÃĄ registrar novamente o mesmo ID de usuÃĄrio. Isso farÃĄ com que sua conta saia de todas as salas das quais estÃĄ participando e removerÃĄ os detalhes de sua conta do servidor de identidade. Esta açÃŖo Ê irreversível. \n @@ -1010,43 +853,30 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.Quando minha conta for desativada, apague todas as mensagens que eu enviei (AtençÃŖo: isso farÃĄ com que futuros usuÃĄrios tenham uma visÃŖo incompleta das conversas) Para continuar, entre com sua senha: Desativar minha conta - Por favor, digite sua senha. Esta sala foi substituída e nÃŖo estÃĄ mais ativa A conversa continua aqui Esta sala Ê a continuaçÃŖo de outra conversa Clique aqui para ver as mensagens anteriores - Limite de recursos excedido Entre em contato com o(a) administrador(a) - entre em contato com o administrador do seu serviço - Este servidor local excedeu um dos seus limites de recursos, portanto alguns usuÃĄrios nÃŖo conseguirÃŖo fazer login. Este servidor local excedeu um de seus limites de recursos. - Este homeserver atingiu o seu limite mensal de usuÃĄrios ativos, portanto alguns usuÃĄrios nÃŖo conseguirÃŖo fazer login. Este homeserver atingiu o seu limite mensal de usuÃĄrios ativos. - Por favor, %s para que este limite seja aumentado. Por favor, %s para seguir usando este serviço. - Crie uma frase secreta para criptografar as chaves exportadas. VocÃĒ precisarÃĄ inserir essa frase secreta para importar chaves criptografadas. Tema Status.im - Aceitar - Erro - Por favor, revise e aceite as políticas deste servidor local: - Chamadas Use o toque padrÃŖo do Element para chamadas recebidas Toque de chamadas recebidas Selecione o toque de chamadas: - Motivo - VersÃŖo %s Resolver problemas nas notificaçÃĩes DiagnÃŗstico de resoluçÃŖo de problemas @@ -1055,65 +885,53 @@ AtençÃŖo: este arquivo poderÃĄ ser apagado se o aplicativo for desinstalado.O diagnÃŗstico bÃĄsico estÃĄ ok. Se vocÃĒ ainda nÃŖo recebe notificaçÃĩes, por favor relate um erro para nos ajudar a investigar. Um ou mais testes falharam, tente as correçÃĩes sugeridas. Um ou mais testes falharam, por favor relate um erro para nos ajudar a investigar. - ConfiguraçÃĩes do sistema NotificaçÃĩes estÃŖo ativadas nas configuraçÃĩes do sistema. NotificaçÃĩes estÃŖo desativadas nas configuraçÃĩes do sistema. Por favor, revise as configuraçÃĩes do sistema. Abra as ConfiguraçÃĩes - ConfiguraçÃĩes da conta NotificaçÃĩes estÃŖo ativadas para sua conta. NotificaçÃĩes estÃŖo desativadas para sua conta. \nPor favor, revise as configuraçÃĩes da conta. Ativar - ConfiguraçÃĩes da sessÃŖo NotificaçÃĩes estÃŖo ativadas nesta sessÃŖo. Remover da sala NotificaçÃĩes nÃŖo estÃŖo ativadas nesta sessÃŖo. \nPor favor, revise as configuraçÃĩes do Element. Ativar - VersÃŖo do Google Play Services Google Play Services APK estÃĄ disponível e atualizado. Element usa Google Play Services para entregar mensagens push, mas isto nÃŖo parece estÃĄ configurado corretamente: %1$s Consertar Play Services - Token do Firebase Token FCM recuperado com sucesso: %1$s Ligar mesmo assim Falha ao recuperar o token do FCM: %1$s - Registro do token do Firebase Token FCM registrado com sucesso no HomeServer. Falha ao registrar o token FCM no HomeServer: %1$s - Serviço de NotificaçÃĩes Serviço de NotificaçÃĩes estÃĄ em execuçÃŖo. Serviço de NotificaçÃĩes nÃŖo estÃĄ em execuçÃŖo. Tente reiniciar a aplicaçÃŖo. Iniciar Serviço - O serviço foi encerrado e reiniciado automaticamente. Falha ao reiniciar Serviço - Começar na inicializaçÃŖo O serviço iniciarÃĄ quando o aparelho for reiniciado. O serviço nÃŖo iniciarÃĄ enquanto o aparelho nÃŖo for reiniciado. VocÃĒ nÃŖo receberÃĄ notificaçÃĩes atÊ que o Element for aberto ao menos uma vez. Iniciar com o sistema - Revisar restriçÃĩes de segundo plano OtimizaçÃŖo de bateria Element nÃŖo Ê afetado pela OtimizaçÃŖo de Bateria. ReinicializaçÃŖo AutomÃĄtica do Serviço de NotificaçÃĩes Desativar restriçÃĩes - Ignorar a otimizaçÃŖo - PrÊvia de links dentro do chat quando seu homeserver suporta este recurso. Permitir que saibam quando eu estiver digitando Deixe outros usuÃĄrios saberem quando vocÃĒ estiver digitando. @@ -1134,49 +952,36 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr FormataçÃŖo de texto Formatar o texto das mensagens a serem enviadas. Por exemplo: inserir asteriscos antes e depois do texto, mostrarÃĄ o texto em itÃĄlico. Conceder permissÃŖo - Ocorreu um erro ao confirmar seu endereço de e-mail. - Senha Ocorreu um erro ao confirmar seu nÃēmero de telefone. InformaçÃŖo adicional: %s - Inicie a cÃĸmera do sistema em vez da cÃĸmera personalizada. Esta opçÃŖo requer um aplicativo de terceiros para gravar mensagens de voz. - O comando \"%s\" precisa de mais parÃĸmetros ou alguns parÃĸmetros estÃŖo incorretos. A formataçÃŖo de texto foi ativada. A formataçÃŖo de texto foi desativada. - Aumente o desempenho apenas carregando os participantes da sala na primeira exibiçÃŖo. Seu servidor principal ainda nÃŖo suporta o carregamento Lazy de participantes da sala. Tente depois. - Desculpe, ocorreu um erro - expandir colapsar - Mostrar a ÃĄrea de informaçÃĩes Sempre Para mensagens e erros Somente para erros - %1$s: %1$s: %2$s +%d %d+ Nenhum APK do Google Play Services vÃĄlido foi encontrado. NotificaçÃĩes podem nÃŖo funcionar corretamente. - Se um usuÃĄrio deixar um aparelho desconectado por um período de tempo, com a tela desligada, o aparelho entrarÃĄ no modo Soneca. Isso impede que os aplicativos acessem a rede, adiando seus trabalhos, sincronizaçÃĩes e alarmes padrÃŖo. Criar frase secreta A frase secreta estÃĄ errada Carregamento Lazy dos participantes das salas - Chamada de vídeo em andamentoâ€Ļ - Backup da chave Usar Backup da chave - 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. @@ -1187,28 +992,22 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Tem certeza\? Fazer o backup VocÃĒ perderÃĄ o acesso às suas mensagens criptografadas, a menos que faça backup das suas chaves antes de sair. - Assinatura - Ficar Pular Fechar Abortar - Deseja mesmo sair\? Configurar notificaçÃĩes Configurar notificaçÃĩes por evento - ConfiguraçÃĩes personalizadas Observe que alguns tipos de mensagens estÃŖo configurados para serem silenciosos (produzirÃŖo uma notificaçÃŖo sem som). Algumas notificaçÃĩes estÃŖo desativadas nas suas configuraçÃĩes personalizadas. Falha ao carregar regras personalizadas, tente novamente. Verifique as configuraçÃĩes - [%1$s] \nEste erro estÃĄ fora do controle do Element e, de acordo com o Google, esse erro indica que o aparelho tem muitos aplicativos registrados com FCM. O erro sÃŗ ocorre nos casos em que hÃĄ nÃēmeros extremos de aplicativos, portanto, isso nÃŖo deve afetar o usuÃĄrio comum. Bloquear - Entre com o login Ãēnico Este endereço nÃŖo estÃĄ acessível. Por favor, verifique-o Seu aparelho estÃĄ usando um protocolo de segurança TLS desatualizado, vulnerÃĄvel a ataques. Para sua segurança, vocÃĒ nÃŖo poderÃĄ se conectar @@ -1218,48 +1017,36 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr [%1$s] \nEste erro estÃĄ fora de controle do Element. NÃŖo hÃĄ conta do Google no celular. Por favor, abra o gerenciador de contas e adicione uma conta do Google. Adicionar Conta - Configurar notificaçÃĩes com som Configurar notificaçÃĩes de chamada Configurar notificaçÃĩes silenciosas Escolha a cor do LED, vibraçÃŖo, somâ€Ļ - - Gerenciamento de Chaves de Criptografia Enviar mensagem com a tecla enter Latn - Confirmar sessÃŖo - Nenhuma Revogar Desconectar Revisar Recusar - Marcar como lida Nenhum servidor de identidade estÃĄ configurado. - A chamada falhou por conta de mÃĄ configuraçÃŖo no servidor Reproduzir Pausar Descartar - - Copiar Pronto - NotificaçÃĩes Peça ao administrador do seu servidor principal (%1$s) que configure um servidor TURN para que as chamadas funcionem de maneira confiÃĄvel. \n \nAlternativamente, vocÃĒ pode tentar usar o servidor pÃēblico em %2$s. No entanto, ele nÃŖo Ê tÃŖo confiÃĄvel e compartilharÃĄ o seu IP com esse servidor. VocÃĒ tambÊm pode configurar isso nas ConfiguraçÃĩes. Tente usar %s NÃŖo pergunte novamente - A chamada falhou Falha ao estabelecer conexÃŖo em tempo real. \nPor favor, peça ao administrador do seu servidor para configurar um servidor TURN, de modo que as chamadas funcionem de maneira estÃĄvel. - Selecione a caixa de som Celular Alto-falante @@ -1270,7 +1057,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Traseira Desativar vídeo de alta definiçÃŖo Ativar vídeo de alta definiçÃŖo - Defina um e-mail para recuperaçÃŖo da conta. Posteriormente, vocÃĒ pode permitir que as pessoas encontrem vocÃĒ atravÊs dele. Defina um nÃēmero de telefone. Posteriormente, vocÃĒ pode permitir que as pessoas encontrem vocÃĒ atravÊs dele. Defina um e-mail para a recuperaçÃŖo da conta. Posteriormente, um endereço de e-mail ou nÃēmero de telefone pode ser usado para ser encontrado por outras pessoas. @@ -1283,14 +1069,11 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Permitir a assistÃĒncia do servidor de chamadas reserva %s quando seu servidor nÃŖo oferecer este serviço (seu endereço IP serÃĄ transmitido quando vocÃĒ ligar) Chamada em andamento (%s) Retornar à chamada - Adicione um servidor de identidade nas suas configuraçÃĩes para executar esta açÃŖo. Cancelar convite Reduzir privilÊgios\? VocÃĒ nÃŖo poderÃĄ desfazer essa alteraçÃŖo, jÃĄ que estÃĄ reduzido seus privilÊgios. Se vocÃĒ for a Ãēltima pessoa nesta sala, serÃĄ impossível recuperar a permissÃŖo atual. Reduzir privilÊgio - - Bloquear usuÃĄrio Ao bloquear este usuÃĄrio, as mensagens dele serÃŖo ocultadas de vocÃĒ em todas as salas. \n @@ -1308,12 +1091,9 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Motivo do banimento Remover banimento do usuÃĄrio Remover o banimento do usuÃĄrio permitirÃĄ que ele entre novamente na sala. - Confirme sua senha NÃŖo pode fazer isto pelo Element app AutenticaçÃŖo exigida - - 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 Optimizado para bateria @@ -1325,8 +1105,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Sem sincronizaçÃŖo em segundo plano VocÃĒ nÃŖo serÃĄ notificado sobre mensagens recebidas quando o Element estiver em segundo plano. NÃŖo foi possível actualizar a configuraçÃŖo. - - Intervalo de sincronizaçÃŖo preferido %s \nA sincronizaçÃŖo pode ser adiada dependendo dos recursos (bateria) ou do estado do aparelho (modo de suspensÃŖo). @@ -1334,7 +1112,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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 online Gerenciar Configurar backup online @@ -1343,50 +1120,40 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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. Isto irÃĄ substituir a sua Chave ou Frase actual. - Encontrar Gerencie suas configuraçÃĩes de descoberta. O modo de baixo uso de dados desativa a atualizaçÃŖo de presença e a animaçÃŖo de que alguÊm estÃĄ digitando. - Permitir integraçÃĩes Gerenciador de IntegraçÃĩes - As integraçÃĩes estÃŖo desativadas Ative \'Permitir integraçÃĩes\' nas ConfiguraçÃĩes para fazer isso. - Atualizar Senha A senha nÃŖo Ê vÃĄlida As senhas nÃŖo sÃŖo iguais - MÊdia CompressÃŖo predefinida Escolher Fonte de mídia por padrÃŖo Escolher Tocar o som da cÃĸmera - %d usuÃĄrio banido %d usuÃĄrios banidos - O nome pÃēblico (visível para as pessoas com quem vocÃĒ se comunica) O nome pÃēblico de uma sessÃŖo Ê visível para as pessoas com quem vocÃĒ se comunica Chaves exportadas com sucesso - RecuperaçÃŖo de mensagens criptografadas Configurar backup das chaves - IP desconhecido - %1$s: 1 mensagem + %1$s: %2$d mensagem %1$s: %2$d mensagens %d notificaçÃŖo %d notificaçÃĩes - Novo Evento Sala Novas Mensagens @@ -1395,11 +1162,8 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr ** NÃŖo foi possível enviar - por favor abra a sala %1$s: %2$s %1$s: %2$s %3$s - VISTA Widgets Ativos - - Widget Carregar widget Widget adicionado por: @@ -1410,15 +1174,12 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Recarregar widget Abrir no navegador Remover para mim - O seu nome e sobrenome Link da sua foto de perfil Sua ID de usuÃĄrio Seu tema ID do widget ID da sala - - Desculpe, as chamadas em grupo com o Jitsi nÃŖo sÃŖo suportadas em aparelhos antigos (com versÃĩes do Android anteriores a 5.0) Este wigdet deseja utilizar os seguintes recursos: Permitir @@ -1426,10 +1187,8 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Usar a cÃĸmera Usar o microfone Ler as mídias protegidos por DRM - O gerenciador de integraçÃĩes nÃŖo estÃĄ configurado. Para continuar, vocÃĒ precisa aceitar os termos de serviço. - Uma nova sessÃŖo estÃĄ solicitando chaves de criptografia. Nome da sessÃŖo: %1$s \nVisto por Ãēltimo às: %2$s \nSe vocÃĒ nÃŖo fez login em outra sessÃŖo, ignore essa solicitaçÃŖo. @@ -1437,20 +1196,16 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr \nNome da sessÃŖo: %1$s \nVisto por Ãēltimo às: %2$s \nSe vocÃĒ nÃŖo fez login em outra sessÃŖo, ignore essa solicitaçÃŖo. - Confirmar Compartilhar Pedido de compartilhamento das Chaves Ignorar - Ativado Digite o nome de usuÃĄrio. Digite a sua frase secreta A frase secreta Ê muito fraca - Por favor, apague a frase secreta se desejar que o Element gere uma chave de recuperaçÃŖo. 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 @@ -1458,7 +1213,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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 @@ -1481,12 +1235,10 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr \n \nAtençÃŖo: este arquivo pode ser removido se o aplicativo for desinstalado. A chave de recuperaçÃŖo foi guardada. - 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 - Faça uma cÃŗpia Compartilhar chave de recuperaçÃŖo comâ€Ļ Gerando Chave de RecuperaçÃŖo usando a frase secreta, este processo pode levar alguns segundos. @@ -1494,25 +1246,18 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Erro inesperado 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 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. - Use a sua Chave de RecuperaçÃŖo para desbloquear o seu histÃŗrico de mensagens criptografadas Digite a chave de recuperaçÃŖo - 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 corretamente a frase secreta de recuperaçÃŖo. Erro de rede: verifique a sua conexÃŖo e tente de novo, por favor. - Restaurando o backup: Processando a chave de recuperaçÃŖoâ€Ļ Baixando as chavesâ€Ļ @@ -1520,7 +1265,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Desbloquear HistÃŗrico Digite uma chave de recuperaçÃŖo O backup nÃŖo pôde ser descriptografado com essa chave de recuperaçÃŖo: verifique se vocÃĒ digitou a chave de recuperaçÃŖo correta. - Backup restaurado %s ! O backup restaurou %d chave. @@ -1530,18 +1274,13 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr %d nova chave foi adicionada a esta sessÃŖo. %d novas chaves foram adicionadas a esta sessÃŖo. - NÃŖo foi possível obter a versÃŖo mais recente das chaves de recuperaçÃŖo (%s). A sessÃŖo criptografada nÃŖo estÃĄ activa - - Restaurar do backup Remover backup - 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 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. @@ -1549,44 +1288,32 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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 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. Removendo o backupâ€Ļ NÃŖo foi possível remover o backup (%s) - Verificando a situaçÃŖo do 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 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 fazer o backup da chave - Backup online Proteja-se contra a perda de acesso a mensagens e dados criptografados - Nunca perca mensagens criptografadas Fazer o backup da chave - Novas chaves de mensagens seguras Configurar o backup das chaves - Fazendo backup das chaves. Isso pode demorar vÃĄrios minutosâ€Ļ - - Configurar o backup online - O backup de todas as chaves foi concluído Fazendo o backup de %d chaveâ€Ļ Fazendo o backup de %d chavesâ€Ļ - VersÃŖo Algoritmo Resposta de descoberta invÃĄlida no servidor local @@ -1594,42 +1321,33 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Element detectou uma configuraçÃŖo personalizada do servidor para a sua ID de usuÃĄrio \"%1$s\": \n%2$s Usar a ConfiguraçÃŖo - VocÃĒ foi desligado devido as credenciais invÃĄlidas ou caducadas. - Confirmar comparando um texto curto. Para mÃĄxima segurança, recomendamos que vocÃĒ faça isso pessoalmente ou use outro meio de comunicaçÃŖo confiÃĄvel. Iniciar a confirmaçÃŖo Recebendo solicitaçÃŖo de confirmaçÃŖo Confirme se esta sessÃŖo Ê sua. Confirmar sessÃĩes fornece segurança adicional, ao usar mensagens criptografadas de ponta a ponta. Ao confirmar se esta sessÃŖo Ê sua, vocÃĒ tambÊm a tornarÃĄ confirmada para o seu contato. - Confirme esta sessÃŖo, comparando os emojis a seguir que serÃŖo exibidos para vocÃĒ e seu contato Confirme esta sessÃŖo, comparando os nÃēmeros a seguir que serÃŖo exibidos para vocÃĒ e seu contato - VocÃĒ recebeu uma solicitaçÃŖo de confirmaçÃŖo. Ver pedido Aguardando seu contato confirmarâ€Ļ - Confirmado! VocÃĒ confirmou essa sessÃŖo com ÃĒxito. As mensagens com este usuÃĄrio estÃŖo criptografadas de ponta a ponta e nÃŖo podem ser lidas por terceiros. Ok, entendi - NÃŖo aparece nada\? Nem todos os clientes suportam a confirmaçÃŖo interativa. Use a confirmaçÃŖo tradicional. Use a confirmaçÃŖo tradicional. - VerificaçÃŖo da chave Pedido Cancelado Seu contato cancelou a confirmaçÃŖo. \n%s A confirmaçÃŖo foi cancelada. \nMotivo: %s - ConfirmaçÃŖo interativa da sessÃŖo SolicitaçÃŖo de confirmaçÃŖo %s quer confirmar a sua sessÃŖo - O contato cancelou a confirmaçÃŖo O tempo de confirmaçÃŖo expirou A sessÃŖo nÃŖo sabe sobre essa transaçÃŖo @@ -1641,20 +1359,15 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Chave incorreta Contato nÃŖo corresponde Erro Desconhecido - VocÃĒ nÃŖo estÃĄ usando algum servidor de identidade Nenhum servidor de identidade estÃĄ configurado. É necessÃĄrio usar um para redefinir sua senha. - Parece que vocÃĒ estÃĄ tentando se conectar com outro servidor local. Deseja sair\? - Editar Responder - Tentar novamente Conecta-se a uma sala para começar a usar o aplicativo. Enviou um convite Convidado por %s - Tudo em dia! VocÃĒ nÃŖo tem mais mensagens nÃŖo lidas Boas-vindas! @@ -1663,22 +1376,18 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Suas conversas serÃŖo exibidas aqui Salas Seus salas serÃŖo exibidas aqui - ReaçÃĩes Concordo Curtir Adicionar reaçÃŖo Veja as reaçÃĩes ReaçÃĩes - Mensagem apagada Mostrar mensagens apagadas Mostrar um espaço reservado para mensagens apagadas Evento apagado pelo usuÃĄrio Evento moderado pelo administrador da sala Última ediçÃŖo por %1$s em %2$s - - Evento malformado, nÃŖo pode ser exibido Criar Nova Sala Sem rede. Por favor, verifique sua conexÃŖo de internet. @@ -1686,13 +1395,10 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Alterar a rede Por favor, aguardeâ€Ļ Todas as comunidades - Esta sala nÃŖo pode ser visualizada A visualizaçÃŖo da sala global ainda nÃŖo Ê suportada por Element - Salas Conversas - Nova Sala CRIAR Nome da sala @@ -1700,18 +1406,13 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Qualquer pessoa poderÃĄ entrar nesta sala Lista de Salas Publicar esta sala na lista das salas - Ocorreu um erro ao receber informaçÃĩes de confiança Ocorreu um erro ao obter dados de backup de chaves - Importar as chaves de arquivo \"%1$s\". - VersÃŖo do SDK da Matrix Outras licenças de terceiros VocÃĒ jÃĄ estÃĄ vendo esta sala! - ReaçÃĩes rÃĄpidas - Geral PreferÃĒncias Segurança e Privacidade @@ -1719,75 +1420,53 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Regras do Push Nenhuma regra Push definida Nenhuma entrada Push registrada - app_id: chave_push: nome_da_ tela_ do_app: nome_da_sessÃŖo: Link: Formato: - Voz e vídeo Ajuda e Sobre - - Registrar token - Faça uma sugestÃŖo Por favor, escreva sua sugestÃŖo abaixo. Descreva aqui sua sugestÃŖo Obrigado, a sugestÃŖo foi enviada com ÃĒxito A sugestÃŖo nÃŖo foi enviada (%s) - Mostrar eventos ocultos nas conversas - Conversas - Aguardandoâ€Ļ Criptografando imagem miniaturaâ€Ļ Enviando imagem miniatura (%1$s / %2$s) Criptografando arquivoâ€Ļ Enviando arquivo (%1$s / %2$s) - Baixando arquivo %1$sâ€Ļ O arquivo %1$s foi baixado! - (editado) - EdiçÃĩes na mensagem Nenhuma ediçÃŖo encontrada - Filtrar conversasâ€Ļ NÃŖo consegue encontrar o que vocÃĒ estÃĄ procurando\? Criar uma sala nova Enviar nova mensagem Veja lista das salas - Nome ou ID (#example:matrix.org) - Ativar o recurso de deslizar para responder nas conversas Adicione uma aba dedicada para notificaçÃĩes nÃŖo lidas na tela principal. - Link copiado para a memÃŗria - Adicionar por ID do Matrix Criando a salaâ€Ļ Nenhum resultado encontrado, use adicionar por ID do Matrix para pesquisar no servidor. Comece a digitar para obter resultados Filtrar por nome do usuÃĄrio ou IDâ€Ļ - Entrando na salaâ€Ļ - Veja HistÃŗrico das EdiçÃĩes - Termos de serviço Revisar termos Seja descoberto por outros Use bots, integraçÃĩes, widgets e pacotes de figurinhas - Leia em - - Servidor de identidade Desconectar servidor de identidade Configurar servidor de identidade @@ -1802,7 +1481,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Enviamos um e-mail de confirmaçÃŖo para %s, verifique seu e-mail e clique no link de confirmaçÃŖo Enviamos um e-mail de confirmaçÃŖo para %s. Por favor, verifique seu e-mail e clique no link de confirmaçÃŖo Aguardando - Digite o endereço de um servidor de identidade NÃŖo foi possível conectar-se ao servidor de identidade Digite o endereço do servidor de identidade @@ -1810,20 +1488,13 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr O servidor de identidade que vocÃĒ escolheu nÃŖo possui termos de serviço. Continue apenas se vocÃĒ confiar no proprietÃĄrio do servidor Uma mensagem de texto foi enviada para %s. Por favor, digite o cÃŗdigo de confirmaçÃŖo que ela contÊm. O cÃŗdigo de confirmaçÃŖo nÃŖo estÃĄ correto. - Atualmente, vocÃĒ estÃĄ compartilhando endereços de e-mail ou nÃēmeros de telefone no servidor de identidade %1$s. VocÃĒ precisarÃĄ reconectar-se a %2$s para parar de compartilhÃĄ-los. Concorde com os Termos de Serviço do servidor de identidade (%s), para que vocÃĒ possa ser descoberto por endereço de e-mail ou por nÃēmero de telefone. - Ativar registros detalhados Os registros detalhados ajudarÃŖo os desenvolvedores, ao fornecerem mais registros quando vocÃĒ usar sacudir o aparelho. Mesmo quando ativado, o aplicativo nÃŖo registra o conteÃēdo da mensagem ou qualquer outro dado privado. - - Por favor, tente novamente quando tiver aceitado os termos e condiçÃĩes de seu servidor. - Parece que o servidor estÃĄ demorando muito para responder, isto pode ser causado ou por mÃĄ conectividade ou por um erro com o servidor. Por favor, tente novamente daqui a pouco. - Enviar anexo - Abra a gaveta de navegaçÃŖo Abra o menu de criar a sala Fecha o menu de criar a salaâ€Ļ @@ -1833,17 +1504,14 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Mostrar senha Esconder senha Saltar para parte inferior - %1$s, %2$s e %3$s leu %1$s e %2$s lÃĒ %s lÃĒ - 1 usuÃĄrio leu + %d usuÃĄrio leu %d usuÃĄrios leram - O arquivo \'%1$s\' (%2$s) Ê muito grande para ser carregado. O limite Ê de %3$s. - Ocorreu um erro durante a recuperaçÃŖo do anexo. Arquivo Contato @@ -1852,13 +1520,11 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Galeria Figurinha NÃŖo conseguia lidar com dados compartilhados - MÍDIA Nenhuma mídia nesta sala ARQUIVOS %1$s em %2$s Nenhum arquivo nesta sala - É spam É inapropriado RelatÃŗrio personalizadoâ€Ļ @@ -1866,28 +1532,23 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Motivo para denÃēnciar este conteÃēdo RELATÓRIO BLOQUEAR USUÁRIO - ConteÃēdo relatado - Este conteÃēdo foi relatado. + Este conteÃēdo foi reportado. \n -\nSe vocÃĒ nÃŖo quiser ver mais conteÃēdo deste usuÃĄrio, vocÃĒ pode bloqueÃĄ-lo para esconder suas mensagens +\nSe vocÃĒ nÃŖo quiser ver mais mensagens deste usuÃĄrio, vocÃĒ pode bloqueÃĄ-lo para esconder suas mensagens. Denunciado como spam Este conteÃēdo foi reportado como spam. \n -\nSe vocÃĒ nÃŖo quiser ver mais conteÃēdo deste usuÃĄrio, vocÃĒ pode bloqueÃĄ-lo para esconder suas mensagens +\nSe vocÃĒ nÃŖo quiser ver mais mensagens deste usuÃĄrio, vocÃĒ pode bloqueÃĄ-lo para esconder suas mensagens. Denunciado como inadequado Este conteÃēdo foi relatado como inadequado. \n -\nSe vocÃĒ nÃŖo quiser ver mais conteÃēdo deste usuÃĄrio, vocÃĒ pode bloqueÃĄ-lo para esconder suas mensagens - +\nSe vocÃĒ nÃŖo quiser ver mais mensagens deste usuÃĄrio, vocÃĒ pode bloqueÃĄ-lo para esconder suas mensagens. Element precisa de permissÃŖo para salvar suas chaves E2E no aparelho. \n \nPermita o acesso na prÃŗxima janela para poder exportar suas chaves manualmente. - NÃŖo hÃĄ conexÃŖo de rede no momento - Bloquear usuÃĄrio - Todas as mensagens novas (com som) Todas as mensagens novas Apenas @mençÃĩes @@ -1901,24 +1562,18 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Envia esta mensagem como um spoiler Estraga-Surpresa Digite palavras-chave para encontrar uma reaçÃŖo. - Nenhum usuÃĄrio bloqueado - Clique longo sobre uma sala para ver mais opçÃĩes - - %1$s tornou a sala pÃēblica para quem conhece o link. VocÃĒ tornou a sala pÃēblica para quem conhece o link. %1$s tornou a sala acessível somente com convite. VocÃĒ tornou a sala acessível somente com convite. Mensagens nÃŖo lidas - É a sua conversa. Vira um admin. Converse com as pessoas diretamente ou em comunidades Manter conversas privadas com criptografia Amplie e personalize sua experiÃĒncia Comece agora - Selecione um servidor Assim como o e-mail, as contas tÃĒm uma casa, embora vocÃĒ possa falar com qualquer pessoa Junte-se gratuitamente aos milhÃĩes no maior servidor pÃēblico @@ -1926,7 +1581,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Saiba mais Outros ConfiguraçÃĩes avançadas e preferÃĒncias - Continuar Conecte-se a %1$s Conecte-se aos serviços de Element no Matrix @@ -1935,14 +1589,12 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Cadastre-se Entrar Continuar com ID Ãēnico - Endereço de serviço Element no Matrix Endereço Hospedagem Premium para organizaçÃĩes Digite o endereço de Element Modular ou Servidor que vocÃĒ deseja usar Digite o endereço do Servidor ou o servidor do Element que vocÃĒ quer entrar Digite o endereço do servidor que vocÃĒ deseja usar - Ocorreu um erro ao carregar a pÃĄgina: %1$s (%2$d) O aplicativo nÃŖo pode entrar neste servidor. O servidor suporta os seguintes tipos de login: %1$s. \n @@ -1951,58 +1603,46 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr O aplicativo nÃŖo pode criar uma conta neste servidor. \n \nDeseja criar uma conta no servidor usando o Element Web\? - Este e-mail nÃŖo estÃĄ associado a nenhuma conta. - Redefinir senha em %1$s Um e-mail de confirmaçÃŖo serÃĄ enviado para sua caixa de entrada, para vocÃĒ confirmar a definiçÃŖo de sua nova senha. PrÃŗximo E-mail 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 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 - Verifique sua caixa de entrada no e-mail Um e-mail de confirmaçÃŖo foi enviado para %1$s. Toque no link para confirmar sua nova senha. Uma vez que vocÃĒ tenha clicado o link que ele contÊm, clique abaixo. Verifiquei meu endereço de e-mail - ParabÊns! Sua senha foi alterada. VocÃĒ foi desconectado de todas as sessÃĩes e nÃŖo receberÃĄ mais notificaçÃĩes pop-up. Para reativar as notificaçÃĩes, faça o login novamente em cada aparelho. Voltar para Entrar - AtençÃŖo Sua senha ainda nÃŖo foi alterada. \n \nInterromper a alteraçÃŖo de senha\? - Defina um endereço de e-mail Defina um e-mail para recuperar sua conta. Mais tarde, vocÃĒ pode, opcionalmente, permitir que as pessoas que vocÃĒ conhece o descubram por seu e-mail. E-mail E-mail (opcional) PrÃŗximo - Defina nÃēmero de telefone Defina um nÃēmero de telefone para, opcionalmente, permitir que as pessoas que vocÃĒ conhece o encontram. Por favor, use o formato internacional. NÃēmero de telefone NÃēmero de telefone (opcional) PrÃŗximo - Confirme o nÃēmero de telefone Acabamos de enviar um cÃŗdigo para %1$s. Digite-o abaixo para confirmar se Ê vocÃĒ. Digite o cÃŗdigo Enviar novamente PrÃŗximo - Os nÃēmeros de telefone internacionais devem começar com \'+\' O nÃēmero de telefone parece invÃĄlido. Favor verificÃĄ-lo - Registar em %1$s Nome de usuÃĄrio ou e-mail Nome de usuÃĄrio @@ -2014,25 +1654,21 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr \n \n \nParar o processo de registro\? - Selecione matrix.org Selecione Element nos Serviços de Matrix Selecione um servidor personalizado Por favor, realize o desafio de Captcha Aceitar termos para continuar - Por favor, verifique seu e-mail Acabamos de enviar um e-mail para %1$s. \nPor favor, clique no link que ele contÊm para continuar a criaçÃŖo da conta. O cÃŗdigo digitado nÃŖo estÃĄ correto. Por favor, verifique-o. Servidor desatualizado Este servidor tem uma versÃŖo muito antiga que nÃŖo Ê compatível com nosso servidor. Peça ao administrador para fazer atualizaçÃŖo. - Recebemos demasiado pedidos. VocÃĒ pode tentar novamente em %1$d segundoâ€Ļ Recebemos demasiado pedidos. VocÃĒ pode tentar novamente em %1$d segundosâ€Ļ - Alternativamente, se vocÃĒ jÃĄ tem uma conta e conhece a sua ID de usuÃĄrio na Matrix e a senha, vocÃĒ pode usar este mÊtodo: Entre com ID do Matrix Entre com ID do Matrix @@ -2041,9 +1677,7 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Se vocÃĒ nÃŖo souber sua senha, volte para redefinir-a. Este nÃŖo Ê um identificador de usuÃĄrio vÃĄlido. Formato esperado: \'@user:homeserver.org\' Incapaz de encontrar um servidor vÃĄlido. Por favor, verifique seu identificador - Lida por - VocÃĒ estÃĄ desconectada/o Isso pode ser devido à vÃĄrios motivos: \n @@ -2053,7 +1687,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr \n \nâ€ĸ O administrador do seu servidor invalidou seu acesso por motivos de segurança. Entrar novamente - VocÃĒ estÃĄ desconectada/o Entrar Administrador do seu servidor (%1$s) invalidou seu acesso %2$s (%3$s). @@ -2065,7 +1698,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr \n \nApague-os quando nÃŖo usar mais este aparelho, ou se quiser entrar em outra conta. Limpar todos os dados - Limpar dados Limpar todos os dados atualmente armazenados neste aparelho\? \nEntre novamente para acessar os dados e mensagens da sua conta. @@ -2074,12 +1706,9 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr A sessÃŖo atual Ê para o usuÃĄrio %1$s e vocÃĒ fornece credenciais para o usuÃĄrio %2$s. Isto nÃŖo Ê suportado por Element. \n \nPor favor, primeiro limpe os dados, depois faça o login novamente em outra conta. - Seu link do matrix.to foi malformado A descriçÃŖo Ê curta demais - Sincronia Inicialâ€Ļ - Veja todas as minhas sessÃĩes ConfiguraçÃĩes avançadas Modo desenvolvedor @@ -2091,26 +1720,19 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr ConfiguraçÃĩes SessÃŖo atual Outras sessÃĩes - Mostrando apenas os primeiros resultados, digite mais letrasâ€Ļ - Relatar imediatamente as falhas Element poderÃĄ quebrar com mais frequÃĒncia quando ocorrer um erro inesperado - Adiciona ¯\\_(ツ)_/¯ a uma mensagem de texto - Ativar criptografia Uma vez ativada, a criptografia nÃŖo poderÃĄ ser desativada. - Seu domínio de e-mail nÃŖo estÃĄ permitido a se registrar neste servidor - Entrada nÃŖo confiÃĄvel Correspondem NÃŖo correspondem Confirme este usuÃĄrio, comparando os emojis a seguir que serÃŖo exibidos na tela dele, na mesma ordem. Para maior segurança, use outro meio de comunicaçÃŖo confiÃĄvel ou faça isso pessoalmente. Procure o escudo verde para garantir que um usuÃĄrio seja confiÃĄvel. Confie em todos os usuÃĄrios numa sala para garantir que a sala Ê segura. - NÃŖo seguro Um dos seguintes casos pode estar comprometido: \n @@ -2118,13 +1740,11 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr \n¡- O servidor do usuÃĄrio que vocÃĒ estÃĄ verificando \n¡- A sua, ou a conexÃŖo de outros usuÃĄrios à internet \n¡- O seu, ou o aparelho dos outros usuÃĄrios - Vídeo. Imagem. Áudio Arquivo Figurinha - Aguardandoâ€Ļ %s cancelado VocÃĒ cancelou @@ -2134,21 +1754,15 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr SolicitaçÃŖo de confirmaçÃŖo Confirmar esta sessÃŖo Confirmar manualmente - VocÃĒ - Escaneie o cÃŗdigo com a cÃĸmera do aparelho do outro usuÃĄrio para confirmar a segurança entre vocÃĒs Escanea o cÃŗdigo do seu contato NÃŖo pode escanear Se vocÃĒ nÃŖo estÃĄ presente, alternativamente compare emoji - Confirmar comparando emojis - Confirmar por emojis Se vocÃĒ nÃŖo consegue escanear o cÃŗdigo acima, confirme via comparaçÃŖo de emojis. - Imagem em cÃŗdigo QR - Confirmar %s Confirmou %s Aguardando por %sâ€Ļ @@ -2172,54 +1786,39 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Mídia e arquivos Sair da sala Deixando a salaâ€Ļ - Administradores Moderadores Personalizado Convites UsuÃĄrios - Administrador em %1$s Moderador em %1$s PadrÃŖo em %1$s Personalizado (%1$d) em %2$s - Ir para a confirmaçÃŖo de leitura - Element nÃŖo lida com eventos do tipo \'%1$s\' Element nÃŖo lida com mensagens do tipo \'%1$s\' Element encontrou um problema ao render o conteÃēdo de um evento com \'%1$s\' ID - Desbloquear - Esta sessÃŖo nÃŖo pode compartilhar essa confirmaçÃŖo com suas outras sessÃĩes. \nA confirmaçÃŖo serÃĄ salvada localmente e serÃĄ compartilhada em uma versÃŖo futura do aplicativo. - Salas recentes Outras salas - Envia a mensagem colorida como arco-íris Envia o emoji colorido como um arco-íris - Conversas - Campo de texto - Ativar a criptografia de ponta a ponta 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 integraçÃĩes funcionem corretamente. Ativar criptografia - Para ficar seguro, confirme %s comparando um cÃŗdigo Ãēnico. Para sua segurança, faça isso pessoalmente ou use outra forma confiÃĄvel de comunicaçÃŖo. - Compare os emoji Ãēnicos, assegurando que eles apareçam na mesma ordem. Compare o cÃŗdigo com o exibido na tela do outro usuÃĄrio. As mensagens com este usuÃĄrio estÃŖo criptografadas de ponta a ponta e nÃŖo podem ser lidas por terceiros. Sua nova sessÃŖo agora estÃĄ confirmada. Ela tem acesso às suas mensagens criptografadas, e outros usuÃĄrios a verÃŖo como confirmada. - AutoverificaçÃŖo A autoverificaçÃŖo estÃĄ ativada \nChaves privadas estÃŖo no aparelho. @@ -2229,56 +1828,40 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr A autoverificaçÃŖo estÃĄ ativada. \nAs chaves nÃŖo sÃŖo confiÃĄveis A autoverificaçÃŖo nÃŖo estÃĄ ativada - O administrador do servidor desativou a criptografia de ponta a ponta por padrÃŖo em salas privadas e em conversas. SessÃĩes ativas Veja todas as sessÃĩes Gerenciar sessÃĩes Sair desta sessÃŖo - NÃŖo hÃĄ informaçÃĩes criptogrÃĄficas disponíveis - Esta sessÃŖo Ê confiÃĄvel para o envio de mensagens seguras porque vocÃĒ a confirmou: Confirme esta sessÃŖo para conceder para ela o acesso a mensagens criptografadas. Se vocÃĒ nÃŖo entrou nesta sessÃŖo, sua conta pode estar comprometida: - %d sessÃŖo ativa %d sessÃĩes ativas - Confirmar este acesso Outros usuÃĄrios podem nÃŖo confiar nela Segurança completa - Use uma sessÃŖo existente para confirmar a nova sessÃŖo, dando a ela acesso às mensagens criptografadas. - - Confirmar Confirmado AtençÃŖo - Falha em obter sessÃĩes SessÃĩes ConfiÃĄvel NÃŖo confiÃĄvel - Esta sessÃŖo estÃĄ confirmada para trocar mensagens seguras porque %1$s (%2$s) a confirmou: %1$s (%2$s) entrou usando uma nova sessÃŖo: AtÊ que este usuÃĄrio confirme esta sessÃŖo, as mensagens enviadas de e para ela sÃŖo etiquetadas com avisos. Alternativamente, Ê possível confirmar a sessÃŖo manualmente. - - Ativar a autoverificaçÃŖo Reiniciar Chaves - CÃŗdigo QR - Quase lÃĄ! Este escudo tambÊm aparece para %s\? Sim NÃŖo - A conexÃŖo com o servidor foi perdida O modo de AviÃŖo estÃĄ ativo - Ferramentas do Desenvolvedor Dados da Conta @@ -2293,49 +1876,36 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Cria uma pesquisa simples Use a Chave ou a Frase Secreta de RecuperaçÃŖo Se vocÃĒ nÃŖo pode entrar numa sessÃŖo existente - Entrar de Novo - NÃŖo Ê possível encontrar segredos no armazenamento Digite a frase secreta de armazenamento AtençÃŖo: VocÃĒ sÃŗ deveria entrar no armazenamento secreto a partir de um aparelho confiÃĄvel - Apagar Deseja enviar este anexo para %1$s\? Enviar imagem no tamanho original Enviar imagens no tamanho original - Confirmar a exclusÃŖo Tem certeza de que deseja apagar este evento\? Observe que, se vocÃĒ apagar a alteraçÃŖo do nome ou descriçÃŖo de uma sala, isso reverterÃĄ a alteraçÃŖo. Incluir o motivo Motivo da ediçÃŖo - Evento apagado pelo usuÃĄrio, motivo: %1$s Evento moderado pelo administrador da sala, motivo: %1$s - As chaves jÃĄ estÃŖo atualizadas! - Element para Android - A chave pede - Desbloquear histÃŗrico de mensagens criptografadas - Recarregar - Novo login. Foi vocÃĒ\? Toque para revisar e confirmar Use esta sessÃŖo para confirmar a sua nova sessÃŖo, dando a ela acesso às mensagens criptografadas. NÃŖo foi eu Sua conta pode estar comprometida - Se vocÃĒ cancelar, nÃŖo serÃĄ capaz de ler mensagens criptografadas neste aparelho, e outros usuÃĄrios nÃŖo confiarÃŖo nele Se vocÃĒ cancelar, vocÃĒ nÃŖo poderÃĄ ler mensagens criptografadas em seu novo aparelho, e outros usuÃĄrios nÃŖo confiarÃŖo nele VocÃĒ nÃŖo confirmarÃĄ %1$s (%2$s) se cancelar agora. PrecisarÃĄ começar novamente no perfil dele. - Um dos seguintes casos pode estar comprometido: \n \n- Sua senha @@ -2344,36 +1914,26 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr \n- A conexÃŖo à internet de qualquer um dos aparelhos que vocÃĒ estÃĄ usando \n \nRecomendamos que vocÃĒ altere imediatamente a sua senha e a chave de recuperaçÃŖo em ConfiguraçÃĩes. - Confirme seus aparelhos em ConfiguraçÃĩes. ConfirmaçÃŖo cancelada - Digite a frase secreta de recuperaçÃŖo Chave da Mensagem Senha da Conta - Definir o %s Gerar uma Chave de Mensagem - Confirme %s - Digite sua %s para continuar. - Proteja e desbloqueie mensagens criptografadas e confia com um %s. Digite novamente seu %s para confirmar. NÃŖo use a senha da sua conta. - Digite uma frase de segurança que sÃŗ vocÃĒ conheça, usada para proteger os segredos em seu servidor. - Isto pode levar vÃĄrios segundos, seja paciente. CriaçÃŖo de recuperaçÃŖo. Sua chave de recuperaçÃŖo Tudo pronto! Guarde num local seguro Encerrar - Use isto %1$s como uma rede de segurança caso vocÃĒ esqueça sua %2$s. - Publicando as chaves de identidade criadas Gerando uma chave segura a partir de uma frase secreta Definindo a chave padrÃŖo SSSS @@ -2381,28 +1941,20 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr SincronizaçÃŖo da chave do UsuÃĄrio Sincronizando a chave de Auto-Assinatura Criando o backup da chave - - Suas %2$s & %1$s estÃŖo agora definidas. \n \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 Salve isto em uma chave USB ou unidade de backup Copia para sua nuvem pessoal - VocÃĒ nÃŖo pode fazer isso por celular - Criptografia ativada Criptografia desativada Aguardando por %sâ€Ļ - ConfiguraçÃŖo de notificaçÃĩes SoluçÃŖo de problemas Digite uma mensagemâ€Ļ - Use Arquivo - Digite %s Frase Secreta de RecuperaçÃŖo Verificando o backup de chave @@ -2413,36 +1965,27 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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 - %s criou e configurou a sala. VocÃĒ criou e configurou a sala. - Quase lÃĄ! O outro aparelho estÃĄ mostrando o mesmo escudo\? Quase lÃĄ! Aguardando confirmaçÃŖoâ€Ļ Falha na importaçÃŖo de chaves - Mensagens contendo @room Mensagens criptografadas em conversas individuais Mensagens criptografadas em salas Quando a versÃŖo da sala Ê atualizada Ajustar as notificaçÃĩes por evento - Envia uma mensagem como texto simples, sem formatar o texto - Nome de usuÃĄrio e/ou senha incorretos. A senha digitada começa ou termina com espaços, favor verificÃĄ-la. Esta conta foi desativada. - AtualizaçÃŖo de criptografia disponível Ativar a autoverificaçÃŖo Verifique-se e os outros para manter suas conversas seguras - Digite sua %s para continuar NÃŖo Ê uma chave de recuperaçÃŖo vÃĄlida Digite uma chave de recuperaçÃŖo - Verificando o backup da chave (%s) Obtendo a chave da curva Gerando a chave SSSS a partir de uma frase secreta @@ -2450,20 +1993,16 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Gerando a chave SSSS a partir da chave de recuperaçÃŖo 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 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. - Arquivo de mídia adicionado à Galeria NÃŖo foi possível adicionar o arquivo de mídia à Galeria NÃŖo foi possível salvar o arquivo de mídia Definir uma nova senha da contaâ€Ļ - Use o Element mais recente em seus outros aparelhos: Element Web, Element para Computador, Element para iOS, Element para Android, ou outro cliente Matrix capaz de fazer autoverificaçÃŖo Element Web \nElement para Computador @@ -2478,28 +2017,23 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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 corretamente a Chave de RecuperaçÃŖo. Falha ao acessar o armazenamento seguro - NÃŖo criptografado Criptografado por um aparelho nÃŖo confirmado Revisar onde vocÃĒ estÃĄ logado Verifique todas as suas sessÃĩes para garantir que sua conta e mensagens estÃŖo seguras Verifique o novo login acessando sua conta: %1$s - ConfirmaçÃŖo manual por texto Confirmar o login Confirme interativamente por emojis Confirme sua identidade verificando este login a partir de uma de suas outras sessÃĩes, concedendo-lhe acesso às mensagens criptografadas. Marcar como ConfiÃĄvel - Escolha um nome de usuÃĄrio. Escolha uma senha. Verificar este link O link %1$s redirecionarÃĄ vocÃĒ para outro site: %2$s. \n \nDeseja continuar\? - NÃŖo foi possível criar sua DM. Por favor, verifique os usuÃĄrios que vocÃĒ deseja convidar e tente novamente. - Adicionar participantes CONVITE Convidando os usuÃĄriosâ€Ļ @@ -2511,11 +2045,9 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Convites enviados para %1$s e %2$s e mais NÃŖo foi possível convidar os usuÃĄrios. Por favor, verifique os usuÃĄrios que vocÃĒ deseja convidar e tente novamente. - Idioma atual Outros idiomas disponíveis Carregando os idiomas disponíveisâ€Ļ - Abra termos de %s Desconectar-se do servidor de identidade %s\? Este servidor de identidade estÃĄ desatualizado. Element suporta apenas API V2. @@ -2525,7 +2057,6 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Pela sua privacidade, Element apenas suporta o envio dos e-mails e nÃēmeros de telefone de usuÃĄrios em hash. A associaçÃŖo falhou. NÃŖo hÃĄ nenhuma associaçÃŖo atual com este identificador. - Seu servidor domÊstico (%1$s) propÃĩe o uso de %2$s para seu servidor de identidade Use %1$s Como alternativa, vocÃĒ pode digitar o endereço de outro servidor de identidade @@ -2538,9 +2069,7 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Ativar o microfone Desligue a cÃĸmera Ativar a cÃĸmera - Configure o backup online - Backup online Previna-se contra perda de acesso a mensagens e dados criptografados, fazendo backup das chaves de criptografia no seu servidor. Configure @@ -2548,22 +2077,17 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Gere uma chave de segurança para armazenar num local seguro, como um gerenciador de senhas ou um cofre. Use uma Frase de Segurança Digite uma frase secreta que sÃŗ vocÃĒ conhece, e gere uma chave para backup. - Salve sua Chave de Segurança Armazene sua Chave de Segurança num local seguro, como um gerenciador de senhas ou um cofre. - Defina uma Frase de Segurança Digite uma frase de segurança que sÃŗ vocÃĒ conheça, usada para proteger os segredos no seu servidor. Frase de Segurança Digite sua Frase de Segurança novamente para confirmÃĄ-la. - Salve sua Chave de Segurança Armazene sua Chave de Segurança num local seguro, como um gerenciador de senhas ou um cofre. - Nome da sala DescriçÃŖo VocÃĒ alterou as configuraçÃĩes da sala com ÃĒxito - VocÃĒ nÃŖo pode acessar esta mensagem Aguardando esta mensagem. Pode demorar um pouco NÃŖo Ê possível decifrar @@ -2572,17 +2096,12 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr VocÃĒ nÃŖo pode acessar esta mensagem porque a sessÃŖo nÃŖo foi definida como confiÃĄvel pelo remetente VocÃĒ nÃŖo pode acessar esta mensagem porque o remetente intencionalmente nÃŖo enviou as chaves Aguardando o histÃŗrico de criptografia - Riot agora Ê Element! Estamos felizes em anunciar que mudamos de nome! Seu aplicativo estÃĄ atualizado e vocÃĒ estÃĄ conectado à sua conta. OK, ENTENDI APRENDA MAIS - Element - - Salvar chave de recuperaçÃŖo em - Adicionar da minha lista de contatos Sua lista de contatos estÃĄ vazia Lista de Contatos @@ -2590,13 +2109,10 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr Extraindo seus contatosâ€Ļ Sua lista de contatos estÃĄ vazia Lista de contatos - Revogar o convite Revogar o convite para %1$s\? - Banido por %1$s NÃŖo foi possível remover o banimento do usuÃĄrio - As notificaçÃĩes Push estÃŖo desativadas Revise suas configuraçÃĩes para permitir notificaçÃĩes Push Escolha um PIN de segurança @@ -2625,13 +2141,11 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr %1$d/%2$d chave importada com ÃĒxito. %1$d/%2$d chaves importadas com ÃĒxito. - Gerenciar integraçÃĩes Nenhum widget ativo A sala foi criada, mas alguns convites nÃŖo foram enviados pelo seguinte motivo: \n \n%s - %1$s, %2$s e %3$d outro leu %1$s, %2$s e %3$d outros leram @@ -2649,22 +2163,18 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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 Este nÃēmero de telefone jÃĄ foi adicionado. Mostrar eventos de status dos integrantes da sala @@ -2672,11 +2182,61 @@ Na prÃŗxima tela, vocÃĒ serÃĄ solicitado a permitir que o Element funcione sempr 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. - - + O cÃŗdigo PIN Ê solicitado todas as vezes que vocÃĒ abre o Element. + O cÃŗdigo PIN Ê solicitado apÃŗs 2 minutos sem usar o Element. + Solicitar o PIN depois de 2 minutos + Exibir apenas o nÃēmero de mensagens nÃŖo lidas em uma notificaçÃŖo. + Exibir o nome das salas e o conteÃēdo das mensagens. + Exibir o conteÃēdo das mensagens nas notificaçÃĩes + O cÃŗdigo PIN Ê a Ãēnica maneira de desbloquear o Element. + Ativa a biometria específica do dispositivo, como impressÃĩes digitais e reconhecimento de rosto. + Ativar a biometria + Configurar a proteçÃŖo + Proteger o acesso usando PIN e biometria. + Acesso restrito + + Exibir o aparelho com o qual vocÃĒ pode se verificar + Exibir %d aparelhos com os quais vocÃĒ pode se verificar + + VocÃĒ nÃŖo terÃĄ mais o histÃŗrico de mensagens, aparelhos confiÃĄveis e contatos confirmados + Se vocÃĒ redefinir tudo + Apenas faça isso se vocÃĒ nÃŖo tiver outro aparelho para confirmar este aparelho. + Redefinir tudo + Esqueceu as senhas ou perdeu todas as opçÃĩes de recuperaçÃŖo\? Redefina tudo + VocÃĒ entrou. + As mensagens nesta sala estÃŖo criptografadas de ponta a ponta. + Sair + ConfiguraçÃĩes + As mensagens nesta conversa estÃŖo criptografadas de ponta a ponta. +\n +\nSuas mensagens estÃŖo protegidas, pois sÃŗ vocÃĒ e seu contato tÃĒm as chaves Ãēnicas para desbloqueÃĄ-las. + As mensagens nesta sala nÃŖo estÃŖo criptografadas de ponta a ponta. + Este servidor local estÃĄ executando uma versÃŖo antiga do Element. Peça ao administrador do servidor para atualizÃĄ-lo. VocÃĒ pode prosseguir, mas alguns recursos poderÃŖo nÃŖo funcionar corretamente. + Exibir histÃŗrico completo em salas criptografadas + %1$s e %2$s + %1$s em %2$s e %3$s + VocÃĒ clicou na notificaçÃŖo! + Clique na notificaçÃŖo, por favor. Se vocÃĒ nÃŖo receber uma notificaçÃŖo, verifique as configuraçÃĩes do seu aparelho. + ExibiçÃŖo de notificaçÃĩes + VocÃĒ estÃĄ vendo a notificaçÃŖo! Clique aqui! + Houve uma falha ao receber a notificaçÃŖo. Reinstalar o aplicativo pode ser a soluçÃŖo. + O aplicativo estÃĄ recebendo a notificaçÃŖo + O aplicativo estÃĄ aguardando a notificaçÃŖo + Ainda nÃŖo Ê possível buscar mensagens em salas criptografadas. + VocÃĒ nÃŖo tem permissÃŖo para iniciar uma chamada + VocÃĒ nÃŖo tem permissÃŖo para iniciar uma chamada em grupo + Redefinir + %1$s tornou a sala acessível somente com convite. + VocÃĒ definiu que a sala sÃŗ receberÃĄ integrantes com convite. + %s entrou. + Buscar usuÃĄrios banidos + Testar o recebimento de notificaçÃĩes + + %d convite + %d convites + + \ No newline at end of file From 003bffe463244bd923eec3460f7bad3947773752 Mon Sep 17 00:00:00 2001 From: Samu Voutilainen Date: Fri, 16 Oct 2020 04:41:17 +0000 Subject: [PATCH 267/278] Translated using Weblate (Finnish) Currently translated at 80.3% (1541 of 1918 strings) Translation: Element Android/Element Android App Translate-URL: https://translate.element.io/projects/element-android/element-app/fi/ --- vector/src/main/res/values-fi/strings.xml | 544 +++------------------- 1 file changed, 72 insertions(+), 472 deletions(-) diff --git a/vector/src/main/res/values-fi/strings.xml b/vector/src/main/res/values-fi/strings.xml index 07a5d3f84a..3a2e76e8da 100644 --- a/vector/src/main/res/values-fi/strings.xml +++ b/vector/src/main/res/values-fi/strings.xml @@ -1,17 +1,15 @@ - + fi FI - Viestit Huone Asetukset Jäsenen tiedot Historiallinen - OK Peruuta @@ -19,7 +17,8 @@ Poistu Lähetä Lähetä uudelleen - Poista + Poista + Lainaa Jaa MyÃļhemmin @@ -27,7 +26,6 @@ Pysyvä linkki Lähdekoodi Näytä salaamaton lähde - Poista @@ -47,7 +45,6 @@ Lähetä silti tai Kutsu - Kirjaudu ulos Äänipuhelu @@ -60,27 +57,22 @@ Sulje Kopioitu leikepÃļydälle Poista käytÃļstä - Vahvistus Varoitus - Koti Suosikit Ihmiset Huoneet - Suodata huoneista Suodata suosikeista Suodata henkilÃļistä Suodata huoneista - Kutsut Matala prioriteetti - Keskustelut Paikalliset yhteystiedot @@ -88,17 +80,15 @@ Ei keskusteluita Et ole sallinut Elementille pääsyä paikallisiin yhteystietoihisi Ei tuloksia - Huoneet Huoneluettelo Ei huoneita Ei julkisia huoneita saatavilla - 1 käyttäjä + yksi käyttäjä %d käyttäjää - Lähetä lokit Lähetä kaatumislokit Lähetä näytÃļnkaappauskuva @@ -111,31 +101,25 @@ Virheraporttia ei voitu lähettää (%s) Lähetetään (%s%%) Sovellus kaatui viime kerralla. Haluatko tehdä kaatumisesta virheilmoituksen\? - Lähetä Luettu - Liity huoneeseen Käyttäjätunnus Luo tili Kirjaudu sisään Kirjaudu ulos Kotipalvelimen URL-osoite - Identiteettipalvelimen URL-osoite - Etsi - + Identiteettipalvelimen URL-osoite + + Etsi - Aloita uusi keskustelu Aloita puhelu Aloita videopuhelu - - Lähetä tiedostoja Ota kuva tai video - Kirjaudu sisään Luo tili @@ -172,15 +156,16 @@ Varmista ettet ole robotti Käyttäjätunnus on jo käytÃļssä Kotipalvelin: - Identiteettipalvelin: + Identiteettipalvelin: + Olen varmistanut sähkÃļpostiosoitteeni Palauttaaksesi salasanasi, anna tiliisi liitetty sähkÃļpostiosoite: Anna tiliisi liitetty sähkÃļpostiosoite. Anna uusi salasana. - Osoitteeseen %s on lähetetty sähkÃļposti. Kun olet avannut siinä olevan linkin, paina alla olevaa nappia. + Osoitteeseen %s on lähetetty sähkÃļposti. Kun olet avannut siinä olevan linkin, paina alla olevaa nappia. + SähkÃļpostiosoitteesi vahvistaminen epäonnistui. Varmista, että klikkasit sähkÃļpostissa olevaa linkkiä Salasanasi on vaihdettu.\n\nSinut on kirjauduttu ulos kaikista laitteistasi, etkä enää saa viesti-ilmoituksia. Ottaaksesi käyttÃļÃļn ilmoitukset uudelleen, kirjaudu sisään uudelleen kaikilla laitteillasi. - URL-osoitteen on alettava seuraavasti: http[s]:// Kirjautuminen epäonnistui: Verkkovirhe @@ -190,43 +175,35 @@ RekisterÃļityminen epäonnistui: sähkÃļpostin varmistaminen epäonnistui SyÃļtäthän toimivan osoitteen - Väärä käyttäjätunnus tai salasana Annettua tunnistetta ei hyväksytty Epämuotoinen JSON Ei sisällä kelvollista JSON:ia Liian monta pyyntÃļä Käyttäjänimi on jo käytÃļssä - SähkÃļpostiisi lähetetty linkki, jota ei ole vielä klikattu - + SähkÃļpostiisi lähetetty linkki, jota ei ole vielä klikattu + - Lukukuittaukset - - Valitse koko Alkuperäinen Iso Keskikokoinen Pieni - Peru lataus? Peru lähetys? %d s %1$d min %2$d s - Eilen Tänään - Huoneen nimi Huoneen aihe - Yhdistetty Yhdistetäänâ€Ļ @@ -236,19 +213,17 @@ Saapuva videopuhelu Saapuva puhelu Puhelu käynnissäâ€Ļ - - Toinen puoli ei vastannut. + Toinen puoli ei vastannut. + Mediayhteys epäonnistui Kameran alustus epäonnistui puheluun vastattiin muualta - - Ota kuva tai video" - Videointi epäonnistui - + Videointi epäonnistui + Huomio Element tarvitsee käyttÃļluvan mediagalleriaasi lähettäkseen liitteitä.\n\nSalli tiedostojen käyttÃļ seuraavalla näytÃļllä liittääksesi kuvia ja muita tiedostoja viesteihin. @@ -264,55 +239,47 @@ \n \nSalli mikrofonin ja kameran käyttÃļ seuraavilla näytÃļillä aloittaaksesi tämän puhelun. Element voi tarkistaa yhteystietosi lÃļytääkseen muita Matrixin käyttäjiä sähkÃļpostiosoitteiden ja puhelinnumeroiden perusteella. Jos suostut jakamaan yhteystietosi tätä tarkoitusta varten, salli yhteystietojen käyttÃļ seuraavassa ponnahdusikkunassa. - Element voi tarkistaa yhteystietosi lÃļytääkseen muita Matrixin käyttäjiä sähkÃļpostiosoitteiden sekä puhelinnumeroiden perusteella. -\nAnnatko Elementin käyttää yhteystietojasi tätä varten\? - + Element pystyy käyttämään yhteystietojasi, etsiäkseen muita Matrix-käyttäjiä sähkÃļpostiosoitteiden sekä puhelinnumeroiden perusteella. +\n +\nSaako Element käyttää yhteystietojasi tätä varten\? Toimenpide epäonnistui puuttuvien käyttÃļlupien takia - Tallennettu Tallenna latauskansioon\? KYLLÄ EI Jatka - Poista Liity Esikatsele Hylkää - Siirry ensimmäiseen lukemattomaan viestiin. - %s on kutsunut sinut huoneeseen Tämä kutsu lähetettiin osoitteeseen %s, jota ei ole liitetty tiliisi. \nVoit kirjautua sisään toisella tilillä tai lisätä tämän sähkÃļpostiosoitteen tiliisi. Olet avaamassa huonetta %s. Haluatko liittyä huoneeseen osallistuaksesi keskusteluun? - huone + huone + Tämä on huoneen esikatselu. Liity huoneeseen osallistuaksesi keskusteluun. - Uusi keskustelu Lisää jäsen yksi jäsen - Poistu huoneesta Haluatko varmasti poistua huoneesta? Haluatko varmasti poistaa käyttäjän %s tästä keskustelusta\? Luo - kirjautuneena sisään saavuttamattomissa toimettomana - YLLÄPITÄJÄN TYÖKALUT PUHELUT YKSITYISKESKUSTELUT ISTUNNOT - Kutsu Poistu huoneesta Poista huoneesta @@ -327,23 +294,20 @@ Mainitse Näytä istuntolista Olet ylentämässä käyttäjää samalle tasolle kuin oma käyttäjätasosi. Et voi perua tätä toimintoa.\nOletko varma? - Haluatko kutsua käyttäjän %s tähän keskusteluun\? - Kutsu tunnisteella PAIKALLISET YHTEYSTIEDOT (%d) Vain Matrix-käyttäjät - Kutsu käyttäjä tunnisteella SyÃļtä yksi tai useampi sähkÃļpostiosoite tai Matrix-tunniste SähkÃļposti tai Matrix-tunniste - Etsi %s kirjoittaaâ€Ļ %1$s ja %2$s kirjoittavatâ€Ļ - %1$s, %2$s ja muita kirjoittaaâ€Ļ + %1$s, %2$s ja muita kirjoittaaâ€Ļ + Lähetä salattu viestiâ€Ļ Lähetä viesti (salaamaton)â€Ļ Yhteys palvelimeen katkesi. @@ -355,30 +319,28 @@ Poista lähettämättÃļmät viestit Tiedostoa ei lÃļydy Sinulla ei ole oikeutta lähettää viestejä tähän huoneeseen - Luota Älä luota Kirjaudu ulos - Jätä huomiotta + Jätä huomiotta + Sormenjälki (%s): - Palvelimen identiteettiä ei voitu vahvistaa. + Palvelimen identiteettiä ei voitu vahvistaa. + Tämä voi tarkoittaa että joku yrittää kaapata sinun viestintääsi tai että laitteesi ei luota palvelimen varmenteeseen. Jos palvelimen ylläpitäjä on ilmoittanut, että tämä on odotettua, varmista että alla oleva sormenjälki on sama kuin hänen antamansa. Sertifikaatti johon laitteesi luotti aikaisemmin on vaihtunut. Tämä on HYVIN EPÄTAVALLISTA. On suositeltavaa, että ET hyväksy tätä uutta sertifikaattia. Sertifikaatti on vaihtunut ennestään luotetusta ei-luotettuun. Palvelin on voinut uusia sertifikaattinsa. Kysy palvelimen ylläpitäjältä, mikä sormenjäljen pitäisi olla. Hyväksy sertifikaatti vain, jos palvelimen ylläpitäjä on julkaissut sormenjäljen, joka täsmää yllä olevan kanssa. - Huoneen tiedot HenkilÃļt Tiedostot Asetukset - Epämuotoinen tunnus. Anna sähkÃļpostiosoite tai Matrix-tunnus (esim. \'@tunnus:verkkotunnus\') KUTSUTUT JÄSENET - Syy sisällÃļn ilmoittamiseen Haluatko piilottaa kaikki tämän käyttäjän viestit\? @@ -386,7 +348,6 @@ \nHuomaa, että tämä toiminto käynnistää sovelluksen uudelleen ja siinä saattaa kestää jonkin aikaa. Peru lähetys Peru lataus - Etsi Etsi huoneen jäsenistä @@ -395,31 +356,28 @@ VIESTIT HENKILÖT TIEDOSTOT - LIITY LUETTELO SUOSIKIT HUONEET - MATALA TÄRKEYS + MATALA TÄRKEYS + KUTSUT Aloita keskustelu Luo huone Liity huoneeseen Liity huoneeseen SyÃļtä huonetunniste tai -alias - Selaa luetteloa Haetaan luettelostaâ€Ļ - Suosikki Matala tärkeys Yksityiskeskustelu Poistu keskustelusta Unohda - Viestit Asetukset @@ -428,9 +386,7 @@ Kolmannen osapuolen tiedot Tekijänoikeustiedot TietosuojakäytäntÃļ - - Profiilikuva Nimi SähkÃļposti @@ -439,22 +395,18 @@ Lisää puhelinnumero Näytä sovelluksen tiedot järjestelmän asetuksissa. Sovelluksen tiedot - Ota ilmoitukset käyttÃļÃļn tällä tilillä Ota ilmoitukset käyttÃļÃļn tässä istunnossa NäyttÃļ päälle kolmeksi sekunniksi - Viestit yksityiskeskusteluissa Viestit ryhmäkeskusteluissa Kun minut kutsutaan huoneeseen Saapuvat puhelut Bottien lähettämät viestit - Taustasynkronointi Käytä taustasynkronointia SynkronointipyynnÃļn aikakatkaisu Viive synkronointien välillä - Versio olm-versio KäyttÃļehdot @@ -463,8 +415,6 @@ TietosuojakäytäntÃļ Tyhjennä välimuisti - - Käyttäjäasetukset Ilmoitukset Piilotetut henkilÃļt @@ -490,19 +440,16 @@ Tunnistautuminen Salasana: Lähetä - Kirjautuneena nimellä Kotipalvelin - Identiteettipalvelin - + Identiteettipalvelin + Odotetaan vahvistusta Tarkista sähkÃļpostisi ja klikkaa sinne saamaasi linkkiä. Kun olet tehnyt tämän, paina jatka. SähkÃļpostin vahvistaminen epäonnistui. Tarkista sähkÃļpostisi ja avaa lähettämässämme viestissä oleva linkki. Tämän jälkeen paina painiketta ”jatka”. - Tämä sähkÃļpostiosoite on jo käytÃļssä. Tätä sähkÃļpostiosoitetta ei lÃļytynyt. Tämä puhelinnumero on jo käytÃļssä. - Vaihda salasana Nykyinen salasana Uusi salasana @@ -512,13 +459,10 @@ Näytä kaikki viestit käyttäjältä %s\? \n \nHuomaa, että tämä toiminto käynnistää sovelluksen uudelleen ja siinä saattaa kestää jonkin aikaa. - Haluatko poistaa tämän ilmoituskohteen? - - Are you sure you want to remove the %1$s %2$s? - + Haluatko varmasti poistaa kohteen %1$s %2$s\? + Valitse maa - Maa Valitse maa Puhelinnumero @@ -528,21 +472,17 @@ Anna aktivointikoodi Puhelinnumeron validointi epäonnistui Aktivointikoodi - - Huoneen kuva Huoneen nimi Aihe Huoneen luokittelu Luokiteltu: - Suosikki Matala tärkeys Ei mikään - Näkyvyys ja pääsy Listaa tämä huone huoneluettelossa @@ -550,22 +490,18 @@ Huoneen historian luettavuus Kuka voi lukea huoneen historiaa\? Kuka pääsee tähän huoneeseen\? - Kuka tahansa Vain jäsenet (tämän asetuksen valitsemisesta alkaen) Vain jäsenet (heidän kutsumisestaan alkaen) Vain jäsenet (heidän liittymisestään alkaen) - Linkittääksesi huoneeseen, sillä pitää olla osoite. Vain kutsutut henkilÃļt Kaikki, jotka tietävät huoneen osoitteen (paitsi vieraat) Kaikki jotka tietävät huoneen osoitteen, mukaanlukien vieraat - Porttikiellon saaneet käyttäjät - Lisäasetukset Tämän huoneen sisäinen ID @@ -577,35 +513,29 @@ Kirjaudu ulos salauksen aktivoimiseksi. Lähetä salatut viestit vain vahvistetuille laitteille Älä lähetä tältä laitteelta salattuja viestejä tämän huoneen vahvistamattomille laitteille. - Huoneella ei ole paikallisia osoitteita Uusi osoite (esim. #foo:matrix.org") - Virheellinen aliaksen muoto \'%s\' ei ole kelvollinen muoto aliakselle Tälle huoneelle ei ole määritetty pääosoitetta. Pääosoitevaroitus - Aseta pääosoitteeksi Poista pääosoite Kopioi huoneen tunniste Kopioi huoneen osoite - Tämä huone on salattu. Tämä huone ei käytä salausta. Ota salaus käyttÃļÃļn \n(varoitus: salausta ei voi poistaa käytÃļstä!) - Luettelo - - %s yritti ladata tietyn kohdan huoneen historiassa, mutta sitä ei lÃļytynyt. - + %s yritti ladata tietyn kohdan huoneen historiassa, mutta sitä ei lÃļytynyt. + - Päästä päähän -salauksen lisätiedot - + Päästä päähän -salauksen lisätiedot + Tapahtuman tiedot Käyttäjän Matrix-ID Curve25519-ID-avain @@ -613,15 +543,13 @@ Algoritmi Sessio-ID Salauksenpurkuvirhe - Lähettäjän istunnon tiedot Julkinen nimi Julkinen nimi - Tunnus + Istunnon tunnus Istunnon avain Vahvistus Ed25519-sormenjälki - Vie salatun huoneen avaimet Vie huoneen avaimet Vie avaimet paikalliseen tiedostoon @@ -631,36 +559,29 @@ Huoneen osapuolten välisen salauksen avaimet tallennettiin tiedostoon \'%s\' \n \nVaroitus: tämä tiedosto saatetaan poistaa, mikäli Element poistetaan. - Tuo päästä päähän -salatun huoneen avaimet Tuo huoneen avaimet Tuo avaimet paikallisesta tiedostosta Tuo Lähetä salatut viestit vain vahvistetuille laitteille Älä lähetä salattuja viestejä vahvistamattomille laitteille tästä laitteesta. - Vahvistamaton Vahvistettu Kielletty - tuntematon istunto ei mitään - Vahvista Poista vahvistus Kiellä Poista kielto - Vahvista laite - Vahvistaaksesi, että tähän laitteeseen voi luottaa, ota yhteyttä sen omistajaan jollain muulla tavalla (esimerkiksi soittamalla tai tapaamalla) ja varmista että hänen laitteensa avain on sama kuin alla oleva: - Jos avain täsmää, paina painiketta \"vahvista\". Jos avain ei täsmää, se tarkoittaa, että jokin tuntematon osapuoli lukee keskustelujanne. Tässä tapauksessa paina painiketta \"kiellä\". -\nTulevaisuudessa tämä varmennusprosessi tulee olemaan hienostuneempi. + Vahvistaaksesi, että tähän laitteeseen voi luottaa, ota yhteyttä sen omistajaan jollain muulla tavalla (esimerkiksi soittamalla tai tapaamalla) ja varmista että hänen laitteensa avain on sama kuin alla oleva: + + Jos avaimet eivät täsmää, keskustelusi eivät luultavasti ole turvassa. Vahvistan, että avaimet täsmäävät - Huoneessa on tuntemattomia istuntoja Huoneessa on tuntemattomia laitteita joita ei ole vahvistettu.\nLaitteet eivät välttämättä kuulu väitetyille omistajilleen.\nJokainen uusi laite kannattaa vahvistaa ennen kuin jatkat, mutta voit myÃļs lähettää viestit vahvistamattomille laitteille.\n\nTuntemattomat laitteet: - Valitse huoneluettelo Palvelin saattaa olla tavoittamattomissa tai ylikuormitettu @@ -668,7 +589,6 @@ Kotipalvelimen URL-osoite Kaikki huoneet palvelimella %s Kaikki alkuperäiset %s huoneet - Etsi historiasta Käyttäjäluettelo @@ -676,21 +596,16 @@ Käynnistä automaattisesti Tyhjennä mediavälimuisti Säilytä media - Näytä aikaleimat kaikille viesteille DatansäästÃļtila - KäyttÃļliittymä Kieli Valitse kieli - 3 päivää 1 viikko 1 kuukausi Ikuisesti - Teema - Kirjaisinkoko Erittäin pieni Pieni @@ -700,36 +615,28 @@ Isoin Valtava Offline - Vaalea teema Tumma teema Musta teema - Synkronoidaanâ€Ļ Kuunnellaan tapahtumia Korostetut ilmoitukset Hiljaiset ilmoitukset - Virheraportti - Ota kuva Kaappaa video - Puhelu Ilmoitusääni Viesti sisältää näyttÃļnimeni Viesti sisältää käyttäjänimeni Näytä aikaleimat 12 tunnin muodossa - Analytiikka - Tarvitse oikeudet pienoissovellusten hallintaan tässä huoneessa Pienoissovelluksen luonti epäonnistui Luo konferenssipuheluita jitsin avulla Haluatko varmasti poistaa pienoissovelluksen tästä huoneesta\? - - Pienoissovellusta ei voitu luoda. + Sovelmaa ei voitu luoda. PyynnÃļn lähetys epäonnistui. Oikeustason täytyy olla positiivinen luku. Et ole tässä huoneessa. @@ -739,87 +646,64 @@ Huone %s ei ole näkyvillä. Lisää Matrix-sovelluksia Käytä järjestelmän kamerasovellusta - Lisäsit uuden istunnon \'%s\', joka pyytää salausavaimia. Vahvistamaton laitteesi \'%s\' pyytää salausavaimia. Aloita varmennus Jaa ilman varmennusta Hylkää pyyntÃļ - Varoitus! Konferenssipuhelut ovat kehitysvaiheessa eivätkä välttämättä luotettavia. - Komentovirhe Tuntematon komento: %s - Off Äänekäs - Salattu viesti - YhteisÃļn tiedot - Ladataanâ€Ļ - Poistu YhteisÃļt - Suodata yhteisÃļistä - Kutsu YhteisÃļt Ei ryhmiä - Haluatko varmasti aloittaa uuden keskustelun käyttäjän %s kanssa\? Haluatko varmasti aloittaa äänipuhelun\? Haluatko varmasti aloittaa videopuhelun\? - Ryhmälistaus - - Haluatko varmasti antaa tälle käyttäjälle porttikiellon tähän keskusteluun\? - + Käyttäjän estäminen poistaa hänet tästä huoneesta ja estää häntä liittymästä huoneeseen uudelleen. Kaikki viestit (äänekäs) Kaikki viestit Vain maininnat Vaimenna - Lisää pikakuvake aloitusruudulle - + Lisää aloitusruudulle Osoitteen esikatselu Värise, kun käyttäjä mainitaan - Tyyli - Ilmoitukset Uusi yhteisÃļtunnus (esim. +foo:matrix.org) Virheellinen yhteisÃļtunnus \'%s\' ei ole sallittu yhteisÃļtunnus - - Luo Luo yhteisÃļ YhteisÃļn nimi Esimerkki YhteisÃļn ID esimerkki - Koti Ihmiset Huoneet Ei käyttäjiä - Huoneet Jäsenet Kutsuttu Rajaa jäsenlistaa Rajaa huonelistaa - YhteisÃļn pääkäyttäjä ei ole antanut pitkää kuvausta yhteisÃļlle. - Sinut poistettiin %1$s käyttäjän %2$s toimesta Sinut estettiin %1$s käyttäjän %2$s toimesta Syy: %1$s @@ -829,53 +713,41 @@ Markdown-muotoilu Markdown on käytÃļssä. Markdown on pois käytÃļstä. - Puhelut Valitse soittoääni puheluille: - Versio %s Salasana Kirjoita salasanasi jatkaaksesi: Kirjoita salasanasi. Status.im-teema - Lähetä kirjoitusilmoitukset Näytä lukukuittaukset Näytä liittymiset ja poistumiset Näytä tilin tapahtumat Esikatsele media ennen lähettämistä - Lähetä ääniviestejä Lähetä analytiikkatietoja Ravista raivokkaasti ilmoittaaksesi ongelmasta - Deaktivoi tili Deaktivoi tilini - Deaktivoi tili Deaktivoi tili - Lähetä tarra Oletko varma? Kolmannen osapuolen lisenssit - Lataa Hyväksy Ohita Oletko varma, että haluat kirjautua ulos? Virhe - Jos mahdollista, kirjoita kuvaus englanniksi. Lähetä tarra Sinulla ei ole yhtään tarrapakettia käytÃļssä. - -Haluatko lisätä paketteja? - +\n +\nHaluatko lisätä paketteja\? Lue ja hyväksy tämän kotipalvelimen käytännÃļt: - Avainten varmuuskopiointi Käytä avainten varmuuskopiointia - Avainten varmuuskopio ei ole valmis, odotathan hetkenâ€Ļ Menetät salatut viestisi, jos kirjaudut ulos nyt Avainten varmuuskopio on meneillään. Jos kirjaudut ulos, menetät pääsyn salattuihin viesteihisi. @@ -885,7 +757,6 @@ Haluatko lisätä paketteja? Käytä avainten varmuuskopiointia Varmuuskopioi Menetät pääsyn salattuihin viesteihisi, ellet varmuuskopioi avaimiasi ennen uloskirjautumista. - Pysy Puhu Tyhjennä @@ -893,31 +764,22 @@ Haluatko lisätä paketteja? Soita silti Valmis Keskeytä - Toiminnot Järjestelmähälytykset - Lähetä ääntä - jatka sovelluksellaâ€Ļ Yhtään ulkopuolista sovellusta tämän toiminnon suorittamiseksi ei lÃļytynyt. - Pyydä salausavaimia uudelleen muista istunnoistasi. - AvainpyyntÃļ lähetetty. - PyyntÃļ lähetetty Käynnistä Element toisella laitteella, joka voi purkaa viestin, jotta se voi lähettää avaimet tähän istuntoon. - yksi jäsenyysmuutos %d jäsenyysmuutosta - Käytä Elementin oletussoittoääntä saapuville puheluille Saapuvien puheluiden soittoääni Videopuhelu menossaâ€Ļ - Käyttäjälista Avaa otsikko Synkronoidaanâ€Ļ @@ -945,24 +807,19 @@ Haluatko lisätä paketteja? 1 pv %d pv - Nyt %1$s Oli %1$s %2$s sitten - Poista huoneesta Syy - "%1$s, " %1$s ja %2$s %1$s %2$s - Lähetä salattu vastausâ€Ļ Lähetä vastaus (salaamaton)â€Ļ yksi uusi viesti %d uutta viestiä - yksi valittu %d valittu @@ -977,7 +834,6 @@ Haluatko lisätä paketteja? Yksityiskohtaiset ilmoitusasetukset Ilmoituksen tärkeys kohteittain - Ilmoitusten yksityisyys Ratkaise ilmoituksien ongelmia Vianmääritys @@ -986,70 +842,59 @@ Haluatko lisätä paketteja? Vianmäärityksessä ei lÃļytynyt ongelmia. Jos et edelleenkään saa ilmoituksia, lähetä virheraportti, jotta meidän on helpompi tutkia ongelmaa. Yksi tai useampi testi epäonnistui, kokeile ehdotettuja korjauksia. Yksi tai useampi testi epäonnistui. Lähetäthän virheraportin, jotta meidän on helpompi tutkia ongelmaa. - - Järjestelmäasetukset + Järjestelmäasetukset. Ilmoitukset ovat käytÃļssä järjestelmäasetuksissa. Ilmoitukset ovat pois käytÃļstä järjestelmäasetuksissa. \nTarkistathan järjestelmäasetukset. Avaa asetukset - Tilin asetukset. Ilmoitukset ovat käytÃļssä tililläsi. Ilmoitukset eivät ole käytÃļssä tililläsi. \nTarkista tilisi asetukset. Ota käyttÃļÃļn - Istunnon asetukset. Ilmoitukset ovat käytÃļssä tässä istunnossa. Ilmoitukset eivät ole käytÃļssä tässä istunnossa. \nTarkista Elementin asetukset. Ota käyttÃļÃļn - Mukautetut asetukset. Huomaathan, että osa viestityypeistä on asetettu olemaan hiljaisia (tuottavat ilmoituksen ilman ääntä). Osa ilmoituksista on otettu pois käytÃļstä mukautetuissa asetuksissasi. Mukautettujen sääntÃļjen lataaminen epäonnistui. Yritä uudelleen. Tarkista asetukset - Play Services -palvelun tarkistus Google Play Services APK on saatavilla ja ajan tasalla. Element käyttää Google Play Services -palvelua ilmoitusten välittämiseen, mutta se ei näytä olevan määritetty oikein: \n%1$s Korjaa Play Services -palvelu - Firebase-tunniste FCM-tunniste haettu onnistuneesti: \n%1$s FCM-tunnisteen haku epäonnistui: \n%1$s - [%1$s] -\nTämä virhe ei ole Elementin hallinnassa ja Googlen mukaan tämä virhe tarkoittaa, että tällä laitteella on liikaa FCM:ään liittyneitä sovelluksia. Tämä virhe ilmenee vain tapauksissa, jossa on on erittäin paljon sovelluksia asennettuna, joten sen ei pitäisi vaikuttaa normaaliin käyttäjään. + [%1$s] +\nElement ei voi vaikuttaa tähän virheeseen, ja Googlen mukaan tämä virhe tarkoittaa, että tällä laitteella on liikaa FCM:ään rekisterÃļityjä sovelluksia. Tämä virhe ilmenee vain tapauksissa, joissa on erittäin paljon FCM:ään rekisterÃļityjä sovelluksia asennettuna, joten tätä ei pitäisi tapahtua normaalisti. [%1$s] \nTämä virhe ei ole Elementin ratkaistavissa. Se voi johtua useasta eri syystä. Ehkä tämä toimii, jos yrität myÃļhemmin. Voit myÃļs tarkistaa, että Google Play Services -palvelu ei ole rajoitettuna järjestelmäasetuksissa, ja että laitteesi kello on oikein. Tämä voi tapahtua myÃļs mukautetun käyttÃļjärjestelmän kanssa. [%1$s] \nTämä virhe ei ole Elementin ratkaistavissa. Tässä puhelimessa ei ole Google-tiliä. Lisää laitteeseesi Google-tili tätä toimintoa varten. Lisää tili - Tunnisteen rekisterÃļinti FCM-tunniste rekisterÃļity onnistuneesti kotipalvelimelle. FCM-tunnisteen rekisterÃļinti kotipalvelimelle epäonnistui: \n%1$s - Ilmoituspalvelu Ilmoituspalvelu on käynnissä. Ilmoituspalvelu ei ole käynnissä. \nKokeile Elementin uudelleenkäynnistystä. Käynnistä palvelu - Ilmoituspalvelun automaattinen uudelleenkäynnistys Palvelu suljettiin ja se käynnistyi uudelleen automaattisesti. Palvelun uudelleenkäynnistäminen epäonnistui - Käynnistä laitteen käynnistyessä Palvelu käynnistetään, kun laite käynnistetään uudelleen. Palvelua ei käynnistetä laitteen uudelleenkäynnistyksen yhteydessä. Et tule saamaan ilmoituksia ennen kuin Element on käynnistetty uudelleen. Ota käyttÃļÃļn automaattinen käynnistys - Tarkista taustapalveluiden rajoitukset Taustapalveluiden rajoitukset ovat pois käytÃļstä. Tämä testi tulee ajaa mobiilidatayhteydellä (ilman wlania). \n%1$s @@ -1057,12 +902,10 @@ Haluatko lisätä paketteja? \nTyÃļtä, jota Element yrittää tehdä, rajoitetaan aggressiivisesti, kun se on taustalla, mikä saattaa vaikuttaa ilmoituksiin. \n%1$s Poista rajoitukset - AkunkäytÃļn optimointi AkunkäytÃļn optimointi ei vaikuta Elementin toimintaan. Jos käyttäjä jättää laitteen paikalleen ilman latausjohtoa niin, että näyttÃļ on pois päältä, laite siirtyy torkkutilaan. Tämä estää sovelluksia käyttämästä verkkoyhteyksiä ja lykkää niiden tÃļitä, synkronointeja ja perushälytyksiä. Jätä optimointi huomiotta - Normaali Heikentynyt yksityisyys Tämä sovellus tarvitsee oikeuden ajaakseen taustapalveluaan @@ -1071,13 +914,10 @@ Haluatko lisätä paketteja? â€ĸ ilmoituksessa olevan viestin sisältÃļ haetaan turvallisesti suoraan Matrix-kotipalvelimelta â€ĸ ilmoitus sisältää metadataa ja itse viestin â€ĸ ilmoitus ei näytä viestin sisältÃļä - Mukauta äänekkäitä ilmoituksia Mukauta soittoilmoituksia Mukauta hiljaisia ilmoituksia Valitse Ledin väri, värinä ja ääniâ€Ļ - - Salausavainten hallinta Esikatsele linkkejä keskustelussa (vaatii tuen kotipalvelimelta). Ilmoita muille, että olet kirjoittamassa viestiä. @@ -1089,31 +929,22 @@ Haluatko lisätä paketteja? Element voi ajaa itseään taustalla hallitakseen sinulle näytettäviä ilmoituksia turvallisesti ja yksityisesti. Tämä voi vaikuttaa akunkäyttÃļÃļn. Anna oikeus Valitse toinen vaihtoehto - Taustayhteys Elementin tarvitsee käyttää taustayhteyttä, jotta se voi näyttää luotettavia ilmoituksia. \nSeuraavalla ruudulla sinulta kysytään lupaa, jotta Element voi pitää itsensä käynnissä taustalla. Anna oikeus - Element kerää anonyymiä analytiikkaa sovelluksen parantamiseksi. Otathan analytiikan käyttÃļÃļn Elementin parantamiseksi. Kyllä, haluan auttaa! - DatansäästÃļtila ottaa käyttÃļÃļn erityisen suodattimen, joka poistaa paikallaoloilmoitukset ja kirjoittamisen ilmoitukset. - SähkÃļpostiasi varmennettaessa tapahtui virhe. - Puhelinnumeroasi varmennettaessa tapahtui virhe. Lisätietoa: %s - Et ole yhdenkään yhteisÃļn jäsen. - Luo salalause salataksesi viedyt avaimet. Tarvitset saman salalauseen avainten tuomiseen. Salattujen viestien palautus Hallitse avainten varmuuskopiointia - Kirjoita tähänâ€Ļ - yksi lukematon ilmoitettu viesti %d lukematonta ilmoitettua viestiä @@ -1130,13 +961,11 @@ Haluatko lisätä paketteja? yksi aktiivinen sovelma %d aktiivista sovelmaa - Vaadittu parametri puuttuu. Parametri ei ole kelvollinen. Käynnistä järjestelmän kamera Elementin kameraruudun sijaan. Käytä näppäimistÃļn rivinvaihtopainiketta viestin lähettämiseen Tämä valinta vaatii kolmannen osapuolen sovelluksen viestien tallennukseen. - Komento ”%s” vaatii enemmän parametreja, tai jotkin parametrit ovat virheellisiä. Näyttää toiminnon Estää käyttäjän annetulla id:llä @@ -1151,13 +980,11 @@ Haluatko lisätä paketteja? Vaihtaa näytettävän nimimerkkisi Markdown päällä/pois Matrix-sovellusten hallinnan korjaamiseen - Hiljainen yksi jäsen %d jäsentä - yksi huone %d huonetta @@ -1165,10 +992,8 @@ Haluatko lisätä paketteja? Kuittauksen hahmokuva Ilmoituksen hahmokuva Hahmokuva - Jatkaaksesi kotipalvelimen %1$s käyttÃļä, sinun täytyy hyväksyä palvelun käyttÃļehdot. Näytä ehdot - Tämä tekee tilistäsi lopullisesti käyttÃļkelvottoman. Et voi kirjautua sisään eikä kukaan pysty rekisterÃļitymään samalla käyttäjätunnuksella. Tämä saa tilisi poistumaan kaikista huoneista, joissa se on osallisena, ja poistaa tilin tiedot identiteettipalvelimelta. Tämä toiminto on peruuttamaton. \n \nTilin deaktivointi ei oletuksena saa meitä unohtamaan lähettämiäsi viestejä. Jos haluat meidän unohtavan viestisi, merkitse alapuolella oleva valintaruutu. @@ -1180,49 +1005,36 @@ Haluatko lisätä paketteja? Keskustelu jatkuu täällä Tämä huone on jatkoa toiselle keskustelulle Paina tästä nähdäksesi vanhemmat viestit - Resurssiraja saavutettu Ota yhteys ylläpitäjään - ota yhteys palvelun ylläpitäjään - Tämä kotipalvelin on ylittänyt yhden resurssirajoistaan, joten osa käyttäjistä ei pysty kirjautumaan sisään. Tämä kotipalvelin on ylittänyt yhden resurssirajoistaan. - Tämä kotipalvelin on saavuttanut kuukausittaisten aktiivisten käyttäjien rajansa, joten osa käyttäjistä ei pysty kirjautumaan sisään. Tämä kotipalvelin on saavuttanut kuukausittaisten aktiivisten käyttäjien rajansa. - Tee %s saadaksesi tätä rajaa korotettua. Tee %s jatkaaksesi palvelun käyttÃļä. - Lataa huoneen käyttäjät laiskasti Paranna suorituskykyä lataamalla huoneen jäsenet vasta, kun huone näytetään ensimmäisen kerran. Kotipalvelimesi ei tue huoneen jäsenten laiskaa latausta. Yritä myÃļhemmin. - TÃļrmäsimme virheeseen - laajenna supista - Näytä infoalue Aina Viesteille ja virheille Vain virheille - %1$s: %1$s: %2$s +%d %d+ Kelvollista Google Play Services APK:ta ei lÃļytynyt. Ilmoitukset eivät ehkä toimi oikein. - Luo salalause Salalause ei täsmää SyÃļtä salalause Salalause on liian heikko - Poista salalause, jos haluat Element generoivan palautusavaimen. Matrix-istuntoa ei ole saatavilla - Älä koskaan menetä salattuja viestejä Salatuissa huoneissa viestit ovat suojattuna osapuolten välisellä salauksella. Vain sinä ja vastaanottaja(t) omistavat avaimet näiden viestien lukemiseen. \n @@ -1230,7 +1042,6 @@ Haluatko lisätä paketteja? Aloita avainten varmuuskopioinnin käyttÃļ (Edistynyt) Tallenna avaimet käsin - Turvaa varmuuskopiosi salalauseella. Tallennamme salatun kopion avaimistasi kotipalvelimellesi. Suojaa varmuuskopiosi salalauseella pitääksesi sen turvattuna. \n @@ -1252,7 +1063,6 @@ Haluatko lisätä paketteja? Palautusavain on tallennettu kohteeseen \'%s\'. \n \nVaroitus: tämä tiedosto saatetaan poistaa, mikäli Element poistetaan. - Teethän kopion Jaa palautusavain kohteelleâ€Ļ Luodaan palautusavainta käyttäen salalausetta. Tässä saattaa kestää useampi sekunti. @@ -1260,25 +1070,18 @@ Haluatko lisätä paketteja? Odottamaton virhe Varmuuskopiointi aloitettu Salausavaimiasi siirretään kotipalvelimellesi tausta-ajona. Ensimmäisessä varmuuskopioinnissa saattaa mennä useampi minuutti. - - Oletko varma\? Saatat menettää pääsyn viesteihisi jos kirjaudut ulos tai menetät tämän laitteen. - Haetaan varmuuskopion versiotaâ€Ļ Käytä palautuksen salalausetta ottaaksesi käyttÃļÃļn salatun viestihistoriasi käyttää palautusavaintasi Jos et tiedä palautuksen salalausettasi, voit %s. - Käytä palautusavainta ottaaksesi salatun viestihistoriasi käyttÃļÃļn SyÃļtä palautusavain - Viestien palautus - MenetitkÃļ palautusavaimesi\? Voit asettaa uuden asetuksissa. Varmuuskopiota ei pystytty purkamaan tällä salalauseella. Tarkista, että syÃļtit oikean palautuksen salalauseen. Verkkovirhe: tarkista yhteytesi ja yritä uudelleen. - Palautetaan varmuuskopiota: Lasketaan palautusavaintaâ€Ļ Ladataan avaimiaâ€Ļ @@ -1286,7 +1089,6 @@ Haluatko lisätä paketteja? Otetaan historia käyttÃļÃļn SyÃļtä palautusavain Varmuuskopiota ei pystytty purkamaan tällä palautusavaimella. Tarkista, että olet syÃļttänyt oikean palautusavaimen. - Varmuuskopio palautettu %s ! Varmuuskopio palautettiin yhdellä avaimella. @@ -1296,18 +1098,13 @@ Haluatko lisätä paketteja? Yksi uusi avain lisätty tähän istuntoon. %d uutta avainta lisätty tähän listuntoon. - Uusimman palautusavaimen version hakeminen epäonnistui (%s). Istunnon kryptografia ei ole aktivoitu - - Palauta varmuuskopiosta Poista varmuuskopio - Avaimien varmuuskopiointi on käytÃļssä tällä laitteella. Avaimien varmuuskopiointi ei ole käytÃļssä tässä istunnossa. Avaimiasi ei varmuuskopioida tästä istunnosta. - Varmuuskopiossa on allekirjoitus tuntemattomasta laitteesta ID:llä %s. Varmuuskopiossa on pätevä allekirjoitus tästä istunnosta. Varmuuskopiossa on pätevä allekirjoitus varmennetulta laitteelta %s. @@ -1315,51 +1112,38 @@ Haluatko lisätä paketteja? Varmuuskopiossa on epäkelpo allekirjoitus varmennetulta laitteelta %s Varmuuskopiossa on epäkelpo allekirjoitus tuntemattomalta laitteelta %s Varmuuskopion luotettavuustietojen hakeminen epäonnistui (%s). - Käyttääksesi avainten varmuuskopiointia tällä laitteella, palauta salalauseellasi tai palautusavaimella nyt. Poistetaan varmuuskopiotaâ€Ļ Varmuuskopion poisto epäonnistui (%s) - Poista varmuuskopio Poista varmuuskopioidut salausavaimesi palvelimelta\? Et voi sen jälkeen käyttää palautusavaintasi lukeaksesi salattuja viestejäsi. - Uusi avainvarmuuskopio Se oli minä Älä koskaan menetä salattuja viestejäsi Aloita avainten varmuuskopioinnin käyttÃļ - Älä koskaan menetä salattuja viestejäsi Käytä avainten varmuuskopiointia - Uudet salattujen viestien avaimet Hallinnoi avainten varmuuskopioinnissa - Varmuuskopioidaan avaimiaâ€Ļ - Kaikki avaimet varmuuskopioitu Varmuuskopioidaan yhtä avaintaâ€Ļ Varmuuskopioidaan %d avaintaâ€Ļ - Versio Algoritmi Allekirjoitus - Jätä huomiotta - Kirjaudu sisään kertakirjautumisella Tämä osoite ei ole saavutettavissa. Tarkistathan osoitteen Laitteesi käyttää vanhentunutta, haavoittuvaista TLS-protokollan versiota. Turvallisuutesi tähden et voi muodostaa yhteyttä Lähetä viesti enter-näppäimellä NäppäimistÃļn enter-näppäin lähettää viestin sen sijaan, että se lisäisi rivinvaihdon - Päivitä salasana Salasana ei ole kelvollinen Salasanat eivät täsmää - %1$s -> %2$s - Uusi avainvarmuuskopio lÃļydetty. \n \nJos et asettanut uutta palautustapaa, hyÃļkkääjä saattaa yrittää päästä käsiksi tiliisi. Vaihda tilisi salasana ja aseta uusi palautustapa asetuksissa välittÃļmästi. @@ -1368,7 +1152,6 @@ Haluatko lisätä paketteja? Element lÃļysi mukautetun palvelinasetuksen userId:si domainille ”%1$s”: \n%2$s Käytä asetuksia - Alustetaan palvelua Media Oletuksena oleva pakkauksen määrä @@ -1376,7 +1159,6 @@ Haluatko lisätä paketteja? Oletuksena oleva medialähde Valitse Toista sulkimen ääni - Merkitse luetuksi Sovelluksen ei tarvitse pitää yhteyttä kotipalvelimeen taustalla, minkä pitäisi vähentää akunkäyttÃļä @@ -1387,51 +1169,42 @@ Haluatko lisätä paketteja? yksi ilmoitus %d ilmoitusta - Uusi tapahtuma Huone Uusia viestejä Uusi kutsu Minä ** Lähetys epäonnistui — avaathan huoneen - Valitettavasti konferenssipuhelut Jitsin kanssa eivät toimi vanhoissa laitteissa (laitteet, joissa on Android 5.0 tai vanhempi) - tuntematon IP-osoite - Uusi laite pyytää salausavaimia. -\nLaitteen nimi: %1$s -\nViimeksi nähty: %2$s -\nJos et kirjautunut toisella laitteella, voit jättää tämän pyynnÃļn huomiotta. + Uusi istunto pyytää salausavaimia. +\nIstunnon nimi: %1$s +\nNähty viimeksi: %2$s +\nJos et kirjautunut toisessa paikkaa, jätä tämä pyyntÃļ huomiotta. Jaa Parhaan turvallisuuden takaamiseksi suosittelemme, että teet tämän kasvotusten tai muun luotetun viestintäkeinon avulla. Näytä pyyntÃļ Selvä - PyyntÃļ peruttu Istunto vastaanotti odottamattoman viestin Virheellinen viesti vastaanotettu Avain ei täsmää Käyttäjä ei täsmää Tuntematon virhe - Kotipalvelimellasi on jo varmuuskopio Näyttää, että olet jo asettanut avainten varmuuskopioinnin toisesta istunnosta. Halutatko korvata sen tällä\? Korvaa Seis - Tarkistetaan varmuuskopion tilaa Odotetaan vastapuolen varmistustaâ€Ļ - Istunto ei ole tietoinen kyseisestä transaktiosta SAS ei täsmännyt Muokkaa Vastaa - Yritä uudelleen Aloita sovelluksen käyttÃļ liittymällä huoneeseen. Lähetti sinulle kutsun %s kutsui - Sinulla ei ole enempää lukemattomia viestejä Tervetuloa kotiin! LÃļydät täältä lukemattomat viestit @@ -1439,14 +1212,12 @@ Haluatko lisätä paketteja? Tässä näytetään yksityiset keskustelusi Huoneet Huoneesi näytetään tässä - Reaktiot Samaa mieltä Tykkää Lisää reaktio Näytä reaktiot Reaktiot - Käyttäjä poisti tapahtuman Huoneen ylläpitäjä moderoi tapahtuman Epämuotoinen tapahtuma, ei voida näyttää @@ -1454,13 +1225,10 @@ Haluatko lisätä paketteja? Ei verkkoa. Tarkista internet-yhteytesi. Odotaâ€Ļ Kaikki yhteisÃļt - Tätä huonetta ei voi esikatsella Element ei vielä tue täysin julkisen huoneen esikatselua - Huoneet Yksityisviestit - Uusi huone LUO Huoneen nimi @@ -1468,68 +1236,47 @@ Haluatko lisätä paketteja? Kuka tahansa voi liittyä tähän huoneeseen Luottamustietoa haettaessa tapahtui virhe Avainten varmuuskopioinnin tietoja haettaessa tapahtui virhe - Tuntematon laite pyytää salausavaimia \nLaitteen nimi: %1$s \nViimeksi nähty: %2$s \nJos et kirjautunut toisella laitteella, voit jättää tämän pyynnÃļn huomiotta. - Matrix SDK:n versio Muut kolmansien osapuolten huomautukset Pikareaktiot - Asetukset Tietoturva ja yksityisyys Olet ajan tasalla! Viimeksi muokannut %1$s %2$s - - Vaihda verkkoa Katselet jo tätä huonetta! - Yleiset Ääni ja video Ohje ja tietoa - - Tee ehdotus Kirjoita ehdotuksesi alle. Kuvaile ehdotuksesi tässä Kiitos, ehdotus on lähetetty Ehdotuksen lähettäminen epäonnistui (%s) - Näytä piilotetut tapahtumat aikajanalla - Yksityisviestit - Odotetaanâ€Ļ Salataan tiedostoaâ€Ļ Lähetetään tiedostoa (%1$s / %2$s) - Ladataan tiedostoa %1$sâ€Ļ Tiedosto %1$s ladattu! - (muokattu) - - Muokkauksia ei lÃļytynyt - Suodata keskustelujaâ€Ļ EtkÃļ lÃļydä, mitä etsit\? Luo uusi huone Lähetä uusi yksityisviesti Näytä huoneluettelo - Linkki kopioitu leikepÃļydälle - Luodaan huonettaâ€Ļ Näet tuloksia kirjoittamalla jotain Liitytään huoneeseenâ€Ļ - Näytä muokkaushistoria - Vahvista istunto - Vahvista Avaimen jakopyyntÃļ Aloita vahvistaminen @@ -1542,55 +1289,40 @@ Haluatko lisätä paketteja? \n%s Vahvistus on peruttu. \nSyy: %s - Vuorovaikutteinen laitteen vahvistus VahvistuspyyntÃļ %s haluaa vahvistaa laitteesi - Käyttäjä perui vahvistuksen Vahvistustoimenpide aikakatkaistiin Huoneluettelo Julkaise tämä huone huoneluettelossa - Viesti-ilmoitusten säännÃļt Katkaise yhteys Kieltäydy - Identiteettipalvelinta ei ole määritetty. - Puhelu epäonnistui väärin määritetyn palvelimen takia Älä kysy uudestaan - Kotipalvelinta ei voi tavoittaa tästä URL-osoitteesta, tarkista osoite Lisää identiteettipalvelin asetuksissasi, jotta voit tehdä tämän toiminnon. - Taustasynkronointitila (kokeellinen) + Taustasynkronointitila Ei taustasynkronointia Et saa ilmoituksia saapuvista viesteistä, kun sovellus on taustalla. Asetusten päivittäminen epäonnistui. - - Haluttu synkronointiväli %s \nSynkronointia saatetaan lykätä resursseista (akusta) tai laitteen tilasta (virransäästÃļ) riippuen. Julkinen nimi (näkyy ihmisille, joihin olet yhteydessä) Istunnon julkinen nimi näkyy ihmisille, joihin olet yhteydessä Jatkaaksesi sinun täytyy hyväksyä palvelun käyttÃļehdot. - Et käytä identiteettipalvelinta Identiteettipalvelinta ei ole määritetty, salasanan palautus vaaditaan. - Näyttää, että yrität yhdistää toiseen kotipalvelimeen. Haluatko kirjautua ulos\? - URL-osoite: Ota käyttÃļÃļn pyyhkäisemällä vastaaminen aikajanalla - KäyttÃļehdot Lue ehdot Käytä botteja, siltoja, sovelmia ja tarrapaketteja - Lue osoitteessa - - Identiteettipalvelin Katkaise yhteys identiteettipalvelimeen Määritä identiteettipalvelin @@ -1598,7 +1330,6 @@ Haluatko lisätä paketteja? Käytät palvelinta %1$s lÃļytääksesi tuntemiasi ihmisiä ja ollaksesi heidän lÃļydettävissään. Et käytä tällä hetkellä identiteettipalvelinta. Jotta voit lÃļytää tuntemiasi ihmisiä ja jotta he lÃļytävät sinut, määritä identiteettipalvelin alla. Odottaa - SyÃļtä uusi identiteettipalvelin Identiteettipalvelimeen ei saatu yhteyttä SyÃļtä identiteettipalvelimen URL-osoite @@ -1612,24 +1343,19 @@ Haluatko lisätä paketteja? Lähetimme sinulle vahvistussähkÃļpostin osoitteeseen %s, tarkista sähkÃļpostisi ja klikkaa vahvistuslinkkiä Ota yksityiskohtaiset lokit käyttÃļÃļn. Yritä uudelleen, kun olet hyväksynyt kotipalvelimesi käyttÃļehdot. - Palvelimen vastaus näyttäisi olevan liian hidas. Tämä voi johtua kehnosta yhteydestä tai palvelimella olevasta ongelmasta. Yritä hetken kuluttua uudelleen. - Lähetä liite - Luo uusi huone Näytä salasana Piilota salasana Siirry loppuun - %1$s, %2$s ja %3$s lukivat %1$s ja %2$s lukivat %s luki - 1 käyttäjä luki - %d käyttäjää luki + 1 käyttäjä on lukenut + %d käyttäjää on lukenut - Liitettä noudettaessa tapahtui virhe. Tiedosto Kamera @@ -1638,7 +1364,6 @@ Haluatko lisätä paketteja? Se on roskapostia Se on sopimaton Verkkoyhteyttä ei ole juuri nyt - Ei mitään Pyydä kotipalvelimesi (%1$s) ylläpitäjää määrittämään TURN-palvelin, jotta puhelut toimivat luotettavasti. \n @@ -1654,11 +1379,9 @@ Haluatko lisätä paketteja? Viestimuokkaukset Ole lÃļydettävissä Tekstiviesti on lähetetty numeroon %s. SyÃļtä sen sisältämä varmistuskoodi. - Viesti-ilmoitusten sääntÃļjä ei ole määritetty Luo uusi yksityiskeskustelu Latn - Kumoa Tarkasta Aseta puhelinnumerosi, ja voit myÃļhemmin antaa muiden lÃļytää sinut puhelinnumerosi perusteella. @@ -1667,8 +1390,6 @@ Haluatko lisätä paketteja? Vahvista salasanasi Et voi tehdä tätä mobiili-Elementista Tunnistautuminen vaaditaan - - Integraatiot Käytä integraatioiden lähdettä bottien, siltojen ja tarrapakettien hallintaan. \nIntegraatioiden lähteet vastaanottavat asetusdataa ja voivat muokata sovelmia, lähettää kutsuja huoneeseen ja muokata oikeustasoja puolestasi. @@ -1676,7 +1397,6 @@ Haluatko lisätä paketteja? Muokkaa etsinnän asetuksia. Salli integraatiot Integraatioiden lähde - Sovelma Lataa sovelma Sovelman lisäsi: @@ -1687,107 +1407,82 @@ Haluatko lisätä paketteja? Lataa sovelma uudelleen Avaa selaimessa Kumoa minun pääsy - NäyttÃļnimesi Profiilikuvasi osoite Käyttäjätunnisteesi Teemasi Sovelman tunniste Huoneen tunniste - - Tämä sovelma haluaa käyttää seuraavia resursseja: Salli Estä kaikki Käytä kameraa Käytä mikrofonia Lue DRM-suojattua mediaa - Ei integraatioiden lähteitä asetettuna. Huomiotta - Olet kirjautunut ulos epäkelpojen tai vanhentuneiden pääsytietojen takia. - Varmenna vertaamalla lyhyttä tekstijonoa. Varmenna tämä laite merkkaamalla se luotetuksi. Kumppaneiden laitteisiin luottaminen antaa sinulle ylimääräistä mielenrauhaa, kun käytät osapuolten välistä salausta. Tämän laitteen varmentaminen merkkaa sen luotetuksi, ja samoin sinun laitteesi merkataan luotetuksi kumppanisi näkÃļkulmasta. - Varmenna tämä laite varmistamalla, että seuraava emoji ilmestyy kumppanisi näytÃļlle Varmenna tämä laite varmistamalla, että seuraavat numerot ilmestyvät kumppanisi näytÃļlle - Turvalliset viestit tämän käyttäjän kanssa ovat salattuja päästä päähän, eivätkä kolmannet osapuolet voi lukea niitä. Mitään ei tule näytÃļlle\? Kaikki asiakasohjelmat eivät vielä tue interaktiivista varmennusta. Käytä vanhaa varmennustapaa. Käytä vanhaa varmennustapaa. - Laitteet eivät pysty sopimaan avaimista, tiivisteestä, MAC:sta tai SAS-metodista Tiivisteet eivät täsmänneet - Muuta - Tuo osapuolten välisen salauksen avaimet tiedostosta ”%1$s”. - Edistynyt Ei rekisterÃļityjä viesti-ilmoitusten yhdyskäytäviä - app_id: push_key: app_display_name: device_name: Formaatti: - RekisterÃļi tunniste - Salataan pikkukuvaaâ€Ļ Lähetetään pikkukuvaa (%1$s / %2$s) Nimi tai tunniste (#example:matrix.org) - Lisää Matrix-tunnisteella Tuloksia ei lÃļytynyt. Käytä ”Lisää Matrix-tunnisteella” etsiäksesi palvelimelta. Suodata käyttäjätunnuksella tai tunnisteellaâ€Ļ - Etsittävät sähkÃļpostiosoitteet Vaihtoehdot ilmestyvät, kunhan olet lisännyt sähkÃļpostiosoitteen. Vaihtoehdot ilmestyvät, kunhan olet lisännyt puhelinnumeron. Etsittävät puhelinnumerot Runsassanaiset lokit auttavat antamalla enemmän tietoa kehittäjille, kun lähetät virheilmoituksen. Vaikka runsaammat lokit ovat käytÃļssä, sovellus ei lähetä viestien sisältÃļjä tai mitään muuta yksityistä tietoa. - - Avaa navigaatiovalikko Avaa huoneen luontivalikko Sulje huoneen luontivalikkoâ€Ļ Sulje avainten varmuuskopion mainos Tiedosto ”%1$s” (%2$s) on liian iso lähetettäväksi. Raja on %3$s. - Yhteystieto Ääni Jakotiedon käsittely epäonnistui - Muokattu ilmiantoâ€Ļ Ilmianna tämä sisältÃļ SisällÃļn ilmiannon syy ILMIANNA - ESTÄ KÄYTTÄJÄ - + JÄTÄ KÄYTTÄJÄ HUOMIOTTA SisältÃļ ilmiannettu - Tämä sisältÃļ on ilmiannettu. -\n -\nJos et halua nähdä enempää sisältÃļä tältä käyttäjältä, voit estää hänet piilottaaksesi hänen viestit + Tämä sisältÃļ on ilmiannettu. +\n +\nJos et halua nähdä enempää sisältÃļä tältä käyttäjältä, voit estää hänet piilottaaksesi hänen viestit. Ilmiannettu roskapostina - Tämä sisältÃļ on ilmiannettu roskapostina. -\n -\nJos et halua nähdä enempää sisältÃļä tältä käyttäjältä, voit estää hänet piilottaaksesi hänen viestit + Tämä sisältÃļ on ilmiannettu roskapostina. +\n +\nJos et halua nähdä enempää sisältÃļä tältä käyttäjältä, voit estää hänet piilottaaksesi hänen viestit. Ilmiannettu epäsopivana - Tämä sisältÃļ on ilmiannettu epäsopivana. -\n -\nJos et halua nähdä enempää sisältÃļä tältä käyttäjältä, voit estää hänet piilottaaksesi hänen viestit - + Tämä sisältÃļ on ilmiannettu epäsopivana. +\n +\nJos et halua nähdä enempää sisältÃļä tältä käyttäjältä, voit estää hänet piilottaaksesi hänen viestit. Element tarvitsee oikeuden tallentaakseen osapuolten välisen salauksen avaimesi talteen. \n \nSalli pääsy tiedostoihin seuraavassa ponnahdusikkunassa, jotta voit viedä avaimesi käsin. - Tämä ei ole kelvollinen Matrix-palvelimen osoite - Estä käyttäjä - + Jätä käyttäjä huomiotta Kaikki viestit (äänekäs) Kaikki viestit Vain maininnat @@ -1798,22 +1493,16 @@ Haluatko lisätä paketteja? Lähettää annetun viestin ilonpilaajana Ilonpilaaja SyÃļtä avainsanat lÃļytääksesi reaktion. - Et jätä yhtään käyttäjää huomiotta - Tee pitkä klikkaus huoneelle nähdäksesi lisää asetuksia - - %1$s asetti huoneen julkiseksi kelle tahansa, joka tietää huoneen osoitteen. %1$s muutti huoneeseen liittymisen vaatimaan kutsua. Lukemattomia viestejä - - Vapauta keskustelusi + Sinun keskustelusi. Pidä ne hallussasi. Keskustele kaksistaan tai ryhmissä Pidä keskustelut yksityisinä ja salattuina Laajenna ja muokkaa kokemustasi Aloita - Valitse palvelin Kuten sähkÃļpostissa, tunnuksilla on yksi koti, mutta voit keskustella koko maailman kanssa Liity miljoonien joukkoon suurimmalla julkisella palvelimella @@ -1821,7 +1510,6 @@ Haluatko lisätä paketteja? Lue lisää Muut Mukautetut ja monimutkaiset asetukset - Jatka Yhdistä palvelimeen %1$s Yhdistä Element Matrix Services @@ -1830,7 +1518,6 @@ Haluatko lisätä paketteja? RekisterÃļidy Kirjaudu sisään Jatka kertakirjautumiseen - Element Matrix Services in osoite Osoite Korkealuokkaista isännÃļintiä organisaatioille @@ -1843,58 +1530,46 @@ Haluatko lisätä paketteja? Sovellus ei pysty luomaan uusia tunnuksia tälle kotipalvelimelle. \n \nHaluatko rekisterÃļityä web-klientillä\? - Tämä sähkÃļpostiosoite ei ole liitettynä mihinkään tunnukseen. - Palauta salasana palvelimella %1$s SähkÃļpostiisi lähetetään viesti uuden salananan asettamiseksi. Seuraava SähkÃļposti Uusi salasana - Varoitus! Salasanan vaihtaminen nollaa kaikki osapuolten välisen salauksen avaimet kaikilla laitteillasi, joka estää sinua lukemasta vanhoja viestejä. Ota käyttÃļÃļn avainten varmuuskopiointi tai vie huoneen avaimet toiselta laitteelta ennen kuin vaihdat salasanasi. Jatka - Tämä sähkÃļposti ei ole liitettynä mihinkään tunnukseen - Tarkista sähkÃļpostisi Vahvistusviesti lähetettiin osoitteeseen %1$s. Näpäytä linkkiä vahvistaaksesi uuden salasanasi. Seurattuasi siinä olevaa linkkiä, klikkaa alapuolelta. Olen vahvistanut sähkÃļpostiosoitteeni - Valmis! Salasanasi on vaihdettu. Olet kirjautunut ulos kaikilta laitteilta, etkä saa enää viesti-ilmoituksia. Ottaaksesi viesti-ilmoitukset uudelleen käyttÃļÃļn, kirjaudu sisään jokaisella laitteellasi. Takaisin sisäänkirjautumiseen - Varoitus Salasanaasi ei ole vielä vaihdettu. \n \nPeru salasananvaihtoprosessi\? - Aseta sähkÃļpostiosoite Aseta sähkÃļpostiosoite palauttaaksesi tunnuksesi. MyÃļhemmin, voit antaa muiden lÃļytää sinut sähkÃļpostillasi. SähkÃļposti SähkÃļposti (vapaaehtoinen) Seuraava - Aseta puhelinnumero Aseta puhelinnumero antaaksesi muiden lÃļytää sinut puhellinumerosi perusteella. Käytä maailmanlaajuista puhelinnumeron muotoa. Puhelinnumero Puhelinnumero (vapaaehtoinen) Seuraava - Vahvista puhelinnumero Lähetimme sinulle koodin numeroon %1$s. SyÃļtä se alapuolelle vahvistaaksesi numeron. SyÃļtä koodi Lähetä uudelleen Seuraava - Kansainvälisten puhelinnumeroiden pitää alkaa merkillä ”+” Puhelinnumero vaikuttaa epäkelvolta. Tarkista numero - RekisterÃļidy palvelimelle %1$s Käyttäjätunnus tai sähkÃļpostiosoite Salasana @@ -1904,30 +1579,24 @@ Haluatko lisätä paketteja? Tunnustasi ei ole vielä luotu. \n \nPeru rekisterÃļintiprosessi\? - Valitse matrix.org Valitse Element Matrix Services Valitse muu kotipalvelin Ratkaise seuraava kuvavarmennushaaste Hyväksy ehdot jatkaaksesi - Tarkista sähkÃļpostisi Lähetimme sähkÃļpostin osoitteeseen %1$s. \nKlikkaa siinä olevaa linkkiä jatkaaksesi tunnuksen luontia. SyÃļttämäsi koodi ei ole kelvollinen. Tarkista se. Vanhentunut kotipalvelin Tämä kotipalvelin pyÃļrii liian vanhalla versiolla, jotta pystyisimme yhdistämään siihen. Pyydä kotipalvelimesi ylläpitäjää päivittämään palvelimensa. - Liian monta pyyntÃļä lähetettiin. Voit yrittää uudelleen 1 sekunnissaâ€Ļ Liian monta pyyntÃļä lähetettiin. Voit yrittää uudelleen %1$d sekunnissaâ€Ļ - Nähty toimesta - Olet kirjautunut ulos Kirjaudu sisään uudelleen - Olet kirjautunut ulos Kirjaudu sisään Kotipalvelimen (%1$s) ylläpitäjä on kirjannut sinut ulos tunnukseltasi %2$s (%3$s). @@ -1938,7 +1607,6 @@ Haluatko lisätä paketteja? \n \nPoista ne jos olet lopettanut tämän laitteen käytÃļn, tai haluat kirjautua sisään toiselle tunnukselle. Poista kaikki tiedot - Poista tiedot Poista kaikki tälle laitteelle tallennetut tiedot\? \nKirjaudu sisään päästäksesi käsiksi tunnuksesi tietoihin ja viesteihin. @@ -1946,12 +1614,9 @@ Haluatko lisätä paketteja? Poista tiedot Nykyinen istunto on käyttäjälle %1$s, ja yritit kirjautuas isään käyttäjälle %2$s. Element ei tue tätä. \nPoista ensin tietosi ja kirjaudu sen jälkeen toisella tunnuksella. Voit vaihtoehtoisesti käyttää Elementin selainversiota. - matrix.to-linkkisi oli epämuodostunut Kuvaus on liian lyhyt - SyÃļtä palvelin tai sen Elementin osoite, mihin haluat yhdistää - Se voi johtua monesta eri syystä: \n \nâ€ĸ olet vaihtanut salasanasi toisella laitteella @@ -1965,17 +1630,14 @@ Haluatko lisätä paketteja? Asetukset Nykyinen istunto Muut istunnot - Ota salaus käyttÃļÃļn Salausta ei voi poistaa käytÃļstä, kun se on kerran otettu käyttÃļÃļn. - Odotetaanâ€Ļ %s peruutti Sinä peruutit %s hyväksyi Sinä hyväksyit Sinä - Lue lisää Ilmoitukset @@ -1984,10 +1646,8 @@ Haluatko lisätä paketteja? Poistu huoneesta Poistutaan huoneestaâ€Ļ - Käyttäjätunnus Synkronoidaan tietoja ensimmäistä kertaaâ€Ļ - Kehittäjämoodi Kehittäjämoodi aktivoi piilotettuja ominaisuuksia, mutta voi tehdä sovelluksesta epävakaan. Vain kehittäjille! Raivoravistus @@ -1995,13 +1655,9 @@ Haluatko lisätä paketteja? Ravista puhelintasi testataksesi tunnistusrajan Ravistus tunnistettu! Näytetään vain ensimmäiset tulokset, kirjoita lisää kirjaimiaâ€Ļ - Element voi kaatuilla tavallista useammin odottamattomien virheiden vuoksi - Lisää ¯\\_(ツ)_/¯ tavallisen viestin alkuun - Käyttämäsi sähkÃļpostipalvelun ei ole sallittu rekisterÃļityä tälle palvelimelle - Täsmäävät Eivät täsmää Vahvista käyttäjä tarkastamalla että seuraavat emojit vastaavat täysin heidän ruudullaan näkyviä. @@ -2015,29 +1671,20 @@ Haluatko lisätä paketteja? \n - Varmentamasi toisen käyttäjän kotipalvelin \n - Sinun tai toisen käyttäjän Internet-yhteys \n - Sinun tai toisen käyttäjän käyttämä laite - Äänitiedosto Tiedosto - Varmennus lähetetty VarmennuspyyntÃļ - - Varmenna istunto Varmenna manuaalisesti - Lue koodi toisen käyttäjän laitteesta varmentaaksenne toisenne tietoturvallisesti Lue toisen käyttäjän koodi Lukeminen ei onnistu Vertailkaa emojeilla jos et ole toisen käyttäjän luona - Varmenna vertaamalla emojeja - Varmenna emojeilla Jos koodin lukeminen ei onnistu, varmenna vertaamalla lyhyttä sarjaa emojeja. - QR-koodi - Varmenna %s Varmennettu %s Odotetaan käyttäjää %sâ€Ļ @@ -2055,79 +1702,56 @@ Haluatko lisätä paketteja? Ylläpitäjät Moderaattorit Käyttäjät - Ylläpitäjä %1$s:ssä Moderaattori %1$s:ssä Siirry lukukuittaukseen - Element ei osaa käsitellä tapahtumia joiden tyyppi on \'%1$s\' Element ei osaa käsitellä viestejä joiden tyyppi on \'%1$s\' Element ei osannut piirtää tapahtuman jonka tunniste on \'%1$s\' sisältÃļä - Viimeaikaiset huoneet Muut huoneet - Lähettää annetun viestin väritettynä sateenkaaren väreillä Ota käyttÃļÃļn osapuolten välinen salaus Salausta ei voi enää poistaa käytÃļstä sen jälkeen kun se on otettu käyttÃļÃļn. - Otetaanko salaus käyttÃļÃļn\? Salausta ei voi ottaa pois käytÃļstä sen jälkeen kun se on otettu käyttÃļÃļn. Salattuja viestejä ei pysty lukemaan edes palvelin, vain ainoastaan huoneessa olijat. Salauksen käyttÃļÃļnotto voi estää bottien ja siltojen toiminnan huoneessa. Ota salaus käyttÃļÃļn - Salauksen mahdollistamiseksi varmenna %s tarkastamalla kertakäyttÃļinen koodi. Tee tämä toisen käyttäjän ollessa läsnä tai käyttäkää toista viestintävälinettä tietoturvan varmistamiseksi. - Verratkaa emojeja ja varmistakaa että ne ovat samassa järjestyksessä kummallakin. Vertaa koodia joka näkyy toisen käyttäjän ruudulla. Tämän käyttäjän kanssa käyty viestintä on nyt päästä päähän salattu ja sitä ei pysty kukaan ulkopuolinen vakoilemaan. Istuntosi on nyt vahvistettu. Sillä on pääsy salattuihin viesteihisi ja muut käyttäjät näkevät sen luotettuna. - - Aktiiviset istunnot Näytä kaikki istunnot Istuntojen hallinta Kirjaudu ulos tästä istunnosta - Ei salaukseen liittyvää tietoa - Istunto on luotettu, koska olet vahvistanut sen: Vahvista tämä istunto jotta se merkitään luotetuksi ja se saa pääsyn salattuihin viesteihin. Jos et ole kirjautunut tähän istuntoon, tunnuksesi on saattanut vuotaa hyÃļkkääjälle: - %d käynnissä oleva istunto %d käynnissä olevaa istuntoa - Varmenna tämä kirjautuminen Muut käyttäjät eivät välttämättä luota siihen Käytä olemassaolevaa istuntoa tämän istunnon varmentamiseksi jotta se saa oikeudet salattuihin viesteihin. - - Varmenna Varmennettu Varoitus - Ei saatu istuntoja Istunnot Luotettu Ei luotettu - - "Tämä istunto on luotettu salattuun viestintään koska %1$s (%2$s) varmisti sen:" + "Tähän istuntoon luotetetaan salatussa viestinnässä, koska %1$s (%2$s) varmisti sen:" %1$s (%2$s) kirjautui sisään uuteen istuntoon: Tämän käyttäjän kanssa käyty viestintä merkitään virheiksi kunnes käyttäjä luottaa tähän istuntoon. Voit vaihtoehtoisesti käsin varmentaa sen. - - Nollaa avaimet - QR-koodi - Melkein valmis! Näkyykä %s:lla sama kilven kuva\? Kyllä Ei - Yhteys kotipalvelimeen on poikki - Kehittäjän tyÃļkalut %d ääni @@ -2139,9 +1763,7 @@ Haluatko lisätä paketteja? Luo yksinkertaisen äänestyksen Jos et pääse käsiksi olemassaolevaan istuntoon - Uusi sisäänkirjautuminen - Varoitus: Poistaâ€Ļ Haluatko lähettää tämän liitteen %1$s\?:lle\? @@ -2149,53 +1771,38 @@ Haluatko lisätä paketteja? Lähetä kuva alkuperäisessä koossa Lähetä kuvat alkuperäisessä koossa - Vahvista poisto Haluatko varmasti poistaa tämän tapahtuman\? Huomaa, että jos poistat huoneen nimen tai otsikon muutostapahtuman, se voi perua muutoksen. Anna syy Käyttäjä poistanut tapahtuman, syynä: %1$s Tapahtuma moderoitu huoneen ylläpitäjän toimesta, syynä: %1$s - Avaimet ovat jo ajan tasalla! - Element Android - AvainpyynnÃļt - Päivitä - Uusi kirjautuminen. Olitko se sinä\? Paina tarkastellaksesi ja varmentaaksesi En ollut Tilillesi saatetaan olla murtauduttu - Jos perut, et voi lukea salattuja viestejäsi tällä laitteella eivätkä muut käyttäjät luota siihen Jos perut, et voi lukea salattuja viestejäsi uudella laitteellasi eivätkä muut käyttäjät luota siihen Varmenna laitteesi ohjelman asetuksista. Vahvistus peruttu - Palautussalasana Tilin salasana - Aseta %s Vahvista %s - Anna %s jatkaaksesi. - - Pura ja salaa salatut viestit ja luottamukset asettamalla %s + Pura ja salaa salatut viestit ja luottamukset asettamalla %s. Anna %s uudestaan vahvistaaksesi sen. Älä käytä tilisi salasanaa muualla. - - Odota hetki, kiitos. Alustetaan palautusta. Palautusavaimesi Valmista! Pidä se turvassa Lopeta - Käytä %1$s:tä turvaverkkona jos onnistut unohtamaan %2$s:n. - Julkaistaan luodut identiteettiavaimet Luodaan salausavain salasanasta Määritetään SSSS-oletusavain @@ -2203,22 +1810,15 @@ Haluatko lisätä paketteja? Synkronoidaan käyttäjän avain Synkronoidaan allekirjoitusavain Alustetaan avainten varmuuskopiointi - - %2$s ja %1$s asetettu. \n \nPidä ne tallessa. Tarvitset ne salattujen viestiesi ja tietojesi avaamiseen, jos suljet kaikki istuntosi. - Tulosta se jos mahdollista ja säilytä tuloste turvallisessa paikassa Tallenna se muistitikulle tai varmuuskopiolevylle talteen Kopioi se henkilÃļkohtaiseen pilvitallennustilaasi - Tätä ei pysty tekemään kännykällä - Mukautettu Mukautettu (%1$d) %2$s:ssä - Syy poistoon - Viestin avain - + \ No newline at end of file From 9bf615e90c15d6610a1ce2327498c2ec0b9d7b13 Mon Sep 17 00:00:00 2001 From: ganfra Date: Fri, 16 Oct 2020 11:02:29 +0200 Subject: [PATCH 268/278] Fix composer: update constraints layout and fix some glitches --- CHANGES.md | 1 + vector/build.gradle | 3 +- .../room/detail/composer/TextComposerView.kt | 61 ++++++++----------- ...onstraint_set_composer_layout_expanded.xml | 13 ++-- 4 files changed, 33 insertions(+), 45 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 3441af2f71..0d3bc066fd 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -35,6 +35,7 @@ Bugfix 🐛: - Don't set presence when handling a push notification or polling (#2156) - Be robust against `StrandHogg` task injection - Clear alerts if user sign out + - Fix rows are hidden in Textinput (#2234) Translations đŸ—Ŗ: - Move store data to `/fastlane/metadata/android` (#812) diff --git a/vector/build.gradle b/vector/build.gradle index 00f3f26545..bfd50117d1 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -313,8 +313,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.2.0' implementation "androidx.fragment:fragment:$fragment_version" implementation "androidx.fragment:fragment-ktx:$fragment_version" - // Keep at 2.0.0-beta4 at the moment, as updating is breaking some UI - implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4' + implementation 'androidx.constraintlayout:constraintlayout:2.0.2' implementation "androidx.sharetarget:sharetarget:1.0.0" implementation 'androidx.core:core-ktx:1.3.2' diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerView.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerView.kt index 9266186a59..f4b14571c0 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerView.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/TextComposerView.kt @@ -28,9 +28,11 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintSet import androidx.core.text.toSpannable import androidx.core.view.isVisible -import androidx.transition.AutoTransition +import androidx.transition.ChangeBounds +import androidx.transition.Fade import androidx.transition.Transition import androidx.transition.TransitionManager +import androidx.transition.TransitionSet import butterknife.BindView import butterknife.ButterKnife import im.vector.app.R @@ -113,29 +115,7 @@ class TextComposerView @JvmOverloads constructor(context: Context, attrs: Attrib return } currentConstraintSetId = R.layout.constraint_set_composer_layout_compact - if (animate) { - val transition = AutoTransition() - transition.duration = animationDuration - transition.addListener(object : Transition.TransitionListener { - override fun onTransitionEnd(transition: Transition) { - transitionComplete?.invoke() - } - - override fun onTransitionResume(transition: Transition) {} - - override fun onTransitionPause(transition: Transition) {} - - override fun onTransitionCancel(transition: Transition) {} - - override fun onTransitionStart(transition: Transition) {} - } - ) - TransitionManager.beginDelayedTransition((parent as? ViewGroup ?: this), transition) - } - ConstraintSet().also { - it.clone(context, currentConstraintSetId) - it.applyTo(this) - } + applyNewConstraintSet(animate, transitionComplete) } fun expand(animate: Boolean = true, transitionComplete: (() -> Unit)? = null) { @@ -144,10 +124,28 @@ class TextComposerView @JvmOverloads constructor(context: Context, attrs: Attrib return } currentConstraintSetId = R.layout.constraint_set_composer_layout_expanded + applyNewConstraintSet(animate, transitionComplete) + } + + private fun applyNewConstraintSet(animate: Boolean, transitionComplete: (() -> Unit)?) { if (animate) { - val transition = AutoTransition() - transition.duration = animationDuration - transition.addListener(object : Transition.TransitionListener { + configureAndBeginTransition(transitionComplete) + } + ConstraintSet().also { + it.clone(context, currentConstraintSetId) + // in case shield is hidden, we will have glitch without this + it.getConstraint(R.id.composer_shield).propertySet.visibility = composerShieldImageView.visibility + it.applyTo(this) + } + } + + private fun configureAndBeginTransition(transitionComplete: (() -> Unit)? = null) { + val transition = TransitionSet().apply { + ordering = TransitionSet.ORDERING_SEQUENTIAL + addTransition(ChangeBounds()) + addTransition(Fade(Fade.IN)) + duration = animationDuration + addListener(object : Transition.TransitionListener { override fun onTransitionEnd(transition: Transition) { transitionComplete?.invoke() } @@ -159,14 +157,9 @@ class TextComposerView @JvmOverloads constructor(context: Context, attrs: Attrib override fun onTransitionCancel(transition: Transition) {} override fun onTransitionStart(transition: Transition) {} - } - ) - TransitionManager.beginDelayedTransition((parent as? ViewGroup ?: this), transition) - } - ConstraintSet().also { - it.clone(context, currentConstraintSetId) - it.applyTo(this) + }) } + TransitionManager.beginDelayedTransition((parent as? ViewGroup ?: this), transition) } fun setRoomEncrypted(isEncrypted: Boolean, roomEncryptionTrustLevel: RoomEncryptionTrustLevel?) { diff --git a/vector/src/main/res/layout/constraint_set_composer_layout_expanded.xml b/vector/src/main/res/layout/constraint_set_composer_layout_expanded.xml index cd4d48c056..dba996309e 100644 --- a/vector/src/main/res/layout/constraint_set_composer_layout_expanded.xml +++ b/vector/src/main/res/layout/constraint_set_composer_layout_expanded.xml @@ -62,7 +62,7 @@ @@ -126,9 +124,7 @@ app:layout_constraintEnd_toStartOf="@+id/composerEditText" app:layout_constraintBottom_toBottomOf="@id/composer_avatar_view" app:layout_constraintStart_toEndOf="@+id/composer_avatar_view" - tools:src="@drawable/ic_shield_black" - tools:visibility="visible" - /> + tools:src="@drawable/ic_shield_black" /> @@ -162,7 +158,6 @@ app:tint="?attr/colorAccent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toEndOf="@id/composerEditText" app:layout_constraintTop_toBottomOf="@id/composer_preview_barrier" app:layout_constraintVertical_bias="1" tools:ignore="MissingPrefix" /> @@ -176,8 +171,8 @@ android:nextFocusUp="@id/composerEditText" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/sendButton" - app:layout_constraintStart_toEndOf="@id/composer_avatar_view" + app:layout_constraintStart_toEndOf="@id/composer_shield" app:layout_constraintTop_toBottomOf="@id/composer_preview_barrier" - tools:text="@tools:sample/lorem" /> + tools:text="@tools:sample/lorem/random" /> \ No newline at end of file From e19af47b7710b6902b2d3e324a8ba06a553ac0f7 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 14:00:57 +0000 Subject: [PATCH 269/278] Translated using Weblate (Italian) Currently translated at 100.0% (190 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/it/ --- matrix-sdk-android/src/main/res/values-it/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matrix-sdk-android/src/main/res/values-it/strings.xml b/matrix-sdk-android/src/main/res/values-it/strings.xml index 7aa2169b1f..d4479be674 100644 --- a/matrix-sdk-android/src/main/res/values-it/strings.xml +++ b/matrix-sdk-android/src/main/res/values-it/strings.xml @@ -176,7 +176,7 @@ Hai mandato un invito a %1$s a unirsi alla stanza. Motivo: %2$s Hai revocato l\'invito a %1$s a unirsi alla stanza. Motivo: %2$s Hai accettato l\'invito per %1$s. Motivo: %2$s - Hai ritirato l\'invito di %2$s. Motivo: %2$s + Hai ritirato l\'invito di %1$s. Motivo: %2$s Hai aggiunto %1$s come indirizzo per questa stanza. Hai aggiunto %1$s come indirizzi per questa stanza. From d314c8ae587337efb1ef07fdd78164feb6ac50db Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 13:58:52 +0000 Subject: [PATCH 270/278] Translated using Weblate (Bengali (India)) Currently translated at 88.4% (168 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/bn_IN/ --- .../src/main/res/values-bn-rIN/strings.xml | 37 ++----------------- 1 file changed, 3 insertions(+), 34 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml b/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml index 5d38f0b3ee..8d31488283 100644 --- a/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml +++ b/matrix-sdk-android/src/main/res/values-bn-rIN/strings.xml @@ -1,8 +1,7 @@ - + %1$s āĻāĻ•āĻŸāĻŋ āĻĢāĻŸā§‹ āĻĒāĻžāĻ āĻŋā§Ÿā§‡āĻ›ā§‡āĨ¤ %1$s āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ¤āĻŋāĻ•āĻžāĻ° āĻĒāĻžāĻ āĻŋā§Ÿā§‡āĻ›ā§‡āĨ¤ - %s āĻāĻ° āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ %1$s %2$s āĻ•ā§‡ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡āĻ›ā§‡ %1$s āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§‡āĻ›ā§‡ @@ -24,7 +23,6 @@ %1$s: %2$s āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ›āĻŦāĻŋ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ¤āĻŋāĻ•āĻžāĻ° āĻĒāĻžāĻ āĻŋā§Ÿā§‡āĻ›ā§‡āĻ¨āĨ¤ - āĻ†āĻĒāĻ¨āĻžāĻ° āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ %1$s āĻ•āĻ•ā§āĻˇāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻ•ā§āĻˇāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ @@ -63,12 +61,10 @@ āĻ†āĻĒāĻ¨āĻŋ āĻļā§‡āĻˇ-āĻĨā§‡āĻ•ā§‡-āĻļā§‡āĻˇ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ (%1$s) %s āĻāĻ‡ āĻ•āĻ•ā§āĻˇāĻŸāĻŋāĻ•ā§‡ āĻ†āĻĒāĻ—ā§āĻ°ā§‡āĻĄ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ•āĻ•ā§āĻˇāĻŸāĻŋ āĻ†āĻĒāĻ—ā§āĻ°ā§‡āĻĄ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ - %1$s āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ¸āĻŽā§āĻŽā§‡āĻ˛āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°ā§‡āĻ›ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ¸āĻŽā§āĻŽā§‡āĻ˛āĻ¨ā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ¸āĻŽā§āĻŽā§‡āĻ˛āĻ¨ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ­āĻŋāĻ“āĻ†āĻ‡āĻĒāĻŋ āĻ¸āĻŽā§āĻŽā§‡āĻ˛āĻ¨ āĻļā§‡āĻˇ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ - (āĻ†āĻŦāĻ¤āĻžāĻ°āĻŸāĻŋāĻ“ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻž āĻšā§Ÿā§‡āĻ›āĻŋāĻ˛) %1$s āĻ•āĻ•ā§āĻˇā§‡āĻ° āĻ¨āĻžāĻŽ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻ•ā§āĻˇā§‡āĻ° āĻ¨āĻžāĻŽ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨ @@ -88,54 +84,39 @@ āĻ†āĻĒāĻ¨āĻŋ %1$s āĻāĻ° āĻ•āĻ•ā§āĻˇā§‡ āĻ¯ā§‹āĻ—āĻĻāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻŸāĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ %1$s %2$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 āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ - ** āĻĄāĻŋāĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻ…āĻ•ā§āĻˇāĻŽ: %s ** āĻĒā§āĻ°ā§‡āĻ°āĻ•ā§‡āĻ° āĻĄāĻŋāĻ­āĻžāĻ‡āĻ¸ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻ‡ āĻŦāĻžāĻ°ā§āĻ¤āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•ā§€āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°ā§‡āĻ¨āĻŋāĨ¤ - āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĻŋ āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒāĻžāĻ āĻžāĻ¤ā§‡ āĻ…āĻ•ā§āĻˇāĻŽ - āĻšāĻŋāĻ¤ā§āĻ° āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻ°ā§āĻĨ - āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻŽā§āĻ¯āĻžāĻŸā§āĻ°āĻŋāĻ•ā§āĻ¸ āĻ¤ā§āĻ°ā§āĻŸāĻŋ - āĻ–āĻžāĻ˛āĻŋ āĻ•āĻ•ā§āĻˇā§‡ āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ¯ā§‹āĻ—āĻĻāĻžāĻ¨ āĻ•āĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻ¸āĻŽā§āĻ­āĻŦ āĻ¨āĻ¯āĻŧāĨ¤ - āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ•āĻ°āĻž āĻŦāĻžāĻ°ā§āĻ¤āĻž - āĻ‡āĻŽā§‡āĻ˛ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻĢā§‹āĻ¨ āĻ¨āĻŽā§āĻŦāĻ° - %s āĻĨā§‡āĻ•ā§‡ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻ•āĻ°ā§āĻ¨ āĻ•āĻ•ā§āĻˇ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ - %1$s āĻāĻŦāĻ‚ %2$s - %1$s āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯ ā§§ āĻœāĻ¨ %1$s āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ %2$d āĻœāĻ¨ - āĻ–āĻžāĻ˛āĻŋ āĻ•āĻ•ā§āĻˇ - āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻ¸āĻŋāĻ™ā§āĻ•: \nāĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻ†āĻŽāĻĻāĻžāĻ¨āĻŋ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡â€Ļ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻ¸āĻŋāĻ™ā§āĻ•: @@ -152,10 +133,8 @@ \nāĻ¸āĻŽā§āĻĒā§āĻ°āĻĻāĻžāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋ āĻ†āĻŽāĻĻāĻžāĻ¨āĻŋ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ• āĻ¸āĻŋāĻ™ā§āĻ•: \nāĻ…ā§āĻ¯āĻžāĻ•āĻžāĻ‰āĻ¨ā§āĻŸ āĻĄā§‡āĻŸāĻž āĻ†āĻŽāĻĻāĻžāĻ¨āĻŋ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ - āĻŦāĻžāĻ°ā§āĻ¤āĻž āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ â€Ļ āĻĒā§āĻ°ā§‡āĻ°āĻŖ āĻ¸āĻžāĻ°āĻŋ āĻĒāĻ°āĻŋāĻˇā§āĻ•āĻžāĻ° āĻ•āĻ°ā§āĻ¨ - %1$s āĻāĻ° āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĨ¤ āĻ•āĻžāĻ°āĻŖ: %2$s āĻ†āĻĒāĻ¨āĻžāĻ° āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĨ¤ āĻ•āĻžāĻ°āĻŖ: %1$s %1$s āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ %2$s āĻ•ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ: %3$s @@ -167,7 +146,7 @@ āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻ•ā§āĻˇ āĻ›ā§‡ā§œā§‡ āĻĻāĻŋā§Ÿā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ•āĻžāĻ°āĻŖ: %1$s %1$s āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ•āĻžāĻ°āĻŖ: %2$s āĻ†āĻĒāĻ¨āĻŋ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻŸāĻŋ āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ•āĻžāĻ°āĻŖ: %1$s - %1$s %2$s āĻ•ā§‡ āĻ•āĻŋāĻ• āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ: %2$s + %1$s %2$s āĻ•ā§‡ āĻ•āĻŋāĻ• āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ: %3$s āĻ†āĻĒāĻ¨āĻŋ %1$s āĻ•ā§‡ āĻ•ā§€āĻ• āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ•āĻžāĻ°āĻŖ: %2$s %1$s %2$s āĻ•ā§‡ āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĨā§‡āĻ•ā§‡ āĻŽā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ: %3$s āĻ†āĻĒāĻ¨āĻŋ %1$s āĻ•ā§‡ āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§ āĻŽā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ•āĻžāĻ°āĻŖ: %2$s @@ -181,45 +160,35 @@ āĻ†āĻĒāĻ¨āĻŋ %1$s āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖāĻŸāĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ•āĻžāĻ°āĻŖ: %2$s %1$s %2$s āĻāĻ° āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻĢā§‡āĻ°āĻ¤ āĻ¨āĻŋā§Ÿā§‡āĻ›ā§‡āĨ¤ āĻ•āĻžāĻ°āĻŖ: %3$s āĻ†āĻĒāĻ¨āĻŋ %1$s āĻāĻ° āĻ†āĻŽāĻ¨ā§āĻ¤ā§āĻ°āĻŖ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ•āĻžāĻ°āĻŖ: %2$s - %1$s āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ %2$s āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ %1$s āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻ—ā§āĻ˛āĻŋ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ %2$s āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ - āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ•āĻ•ā§āĻˇā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ %1$s āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ•āĻ•ā§āĻˇā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ %1$s āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ - %1$s āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ %2$s āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ %1$s %3$s āĻ•ā§‡ āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ - āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ %1$s āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ %2$s āĻ—ā§āĻ˛āĻŋ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ - %1$s %2$s āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ %3$s āĻ—ā§āĻ˛āĻŋ āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ°āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ %1$s āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻāĻŦāĻ‚ %2$s āĻ•ā§‡ āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ - %1$s āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻŽā§‚āĻ˛ āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻŸāĻŋ %2$s āĻ¤ā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻŽā§‚āĻ˛ āĻ āĻŋāĻ•āĻžāĻ¨āĻžāĻŸāĻŋ %1$s āĻ¤ā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ %1$s āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻŽā§‚āĻ˛ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ˜āĻ°ā§‡āĻ° āĻŽā§‚āĻ˛ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻ¸āĻ°āĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ - %1$s āĻ…āĻ¤āĻŋāĻĨāĻŋāĻĻā§‡āĻ° āĻ˜āĻ°ā§‡ āĻ¯ā§‹āĻ—āĻĻāĻžāĻ¨ā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¤āĻŋāĻĨāĻŋāĻĻā§‡āĻ° āĻ˜āĻ°ā§‡ āĻ¯ā§‹āĻ—āĻĻāĻžāĻ¨ā§‡āĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ %1$s āĻ…āĻ¤āĻŋāĻĨāĻŋāĻĻā§‡āĻ° āĻ˜āĻ°ā§‡ āĻ¯ā§‹āĻ—āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻžāĻ§āĻž āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¤āĻŋāĻĨāĻŋāĻĻā§‡āĻ° āĻ˜āĻ°ā§‡ āĻ¯ā§‹āĻ—āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻžāĻ§āĻž āĻĻāĻŋāĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨āĨ¤ - %1$s āĻāĻ¨ā§āĻĄ-āĻŸā§-āĻāĻ¨ā§āĻĄ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĻ›ā§‡āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻļā§‡āĻˇ āĻĨā§‡āĻ•ā§‡ āĻļā§‡āĻˇ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨āĨ¤ %1$s āĻāĻ¨ā§āĻĄ-āĻŸā§-āĻāĻ¨ā§āĻĄ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĻ›ā§‡ (āĻ…āĻœāĻžāĻ¨āĻž āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ %2$s)āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻļā§‡āĻˇ-āĻĨā§‡āĻ•ā§‡-āĻļā§‡āĻˇ āĻāĻ¨āĻ•ā§āĻ°āĻŋāĻĒāĻļāĻ¨ āĻšāĻžāĻ˛ā§ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ (āĻ…āĻœāĻžāĻ¨āĻž āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ %1$s )āĨ¤ - %s āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§€āĻŸāĻŋ āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻ›ā§‡, āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ‡āĻ¨-āĻšā§āĻ¯āĻžāĻŸ āĻ•ā§€ āĻ¯āĻžāĻšāĻžāĻ‡āĻ•āĻ°āĻŖ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§‡ āĻ¨āĻžāĨ¤ āĻ•ā§€āĻ—ā§āĻ˛āĻŋ āĻ¯āĻžāĻšāĻžāĻ‡ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ˛āĻŋāĻ—ā§āĻ¯āĻžāĻ¸āĻŋ āĻ•ā§€ āĻ¯āĻžāĻšāĻžāĻ‡āĻ•āĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ - - + \ No newline at end of file From 31e73b2f8c2f66e70ebf5dd021724ece4c2e5aec Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 14:00:19 +0000 Subject: [PATCH 271/278] Translated using Weblate (Estonian) Currently translated at 100.0% (190 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/et/ --- matrix-sdk-android/src/main/res/values-et/strings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-et/strings.xml b/matrix-sdk-android/src/main/res/values-et/strings.xml index 3c24ed8c2f..71ee50f075 100644 --- a/matrix-sdk-android/src/main/res/values-et/strings.xml +++ b/matrix-sdk-android/src/main/res/values-et/strings.xml @@ -119,7 +119,7 @@ Sina mÃŧksasid %1$s välja %1$s taastas %2$s ligipääsu Sina taastasid %1$s ligipääsu - %1$s keelas %1$s ligipääsu + %1$s keelas %2$s ligipääsu Sina keelasid %1$s ligipääsu Sina vÃĩtsid tagasi %1$s kutse Sina muutsid oma tunnuspilti @@ -157,13 +157,13 @@ Peakasutaja Moderaator Tavakasutaja - Kohandatud kasutajaÃĩigused (%1$s) + Kohandatud kasutajaÃĩigused (%1$d) Kohandatud Ãĩigused Sina muutsid kasutaja %1$s Ãĩigusi. %1$s muutis kasutaja %2$s Ãĩigusi. %1$s Ãĩiguste muutus %2$s -> %3$s Sinu kutse. PÃĩhjus %1$s - Sina kutsusid kasutajat %1$s. PÃĩhjus: %1$s + Sina kutsusid kasutajat %1$s. PÃĩhjus: %2$s Sina liitusid jututoaga. PÃĩhjus: %1$s Sina lahkusid jututoast. PÃĩhjus: %1$s Sina lÃŧkkasid kutse tagasi. PÃĩhjus: %1$s From dce60d0061597b0ced08806c15c6df25dca3e285 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 14:01:31 +0000 Subject: [PATCH 272/278] Translated using Weblate (Kabyle) Currently translated at 88.4% (168 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/kab/ --- .../src/main/res/values-kab/strings.xml | 47 ++++--------------- 1 file changed, 8 insertions(+), 39 deletions(-) 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 ec498256f2..e557a7c824 100644 --- a/matrix-sdk-android/src/main/res/values-kab/strings.xml +++ b/matrix-sdk-android/src/main/res/values-kab/strings.xml @@ -1,4 +1,4 @@ - + %1$s: %2$s %1$s t.yuzen tugna. @@ -23,16 +23,11 @@ AseÉŖyad Amezwer Sagen - %1$s seg %2$s ÉŖer %3$s - Tegguma ad d-tali tugna - Tansa n yimayl - %1$s azen astiker. Tuzneḍ amenáš­aḍ. - %1$s yekkes agdal i %2$s Tekkseḍ agdal i %1$s %1$s igdel %2$s @@ -46,12 +41,12 @@ Tbeddleḍ isem-ikâ€ĸim i d-ittuseknen seg %1$s ÉŖer %2$s %1$s yekkes isem-is i d-ittuseknen (yella %2$s) Tekkseḍ isem-ik¡im yettwaskanen (d %1$s) - %1$S isnifel asentel s: %2$S - Tesnifleḍ asentel s: %2$S + %1$s isnifel asentel s: %2$s + Tesnifleḍ asentel s: %1$s %1$s ibeddel avaáš­ar n texxamt Tbeddleḍ avaáš­ar n texxamt %1$s ibeddel isem n texxamt s: %2$s - Tbeddleḍ isem n texxamt s: %2$s + Tbeddleḍ isem n texxamt s: %1$s %s isɛedda siwel s tvidyut. Tesɛeddaḍ siwel s tvidyut. %s isɛedda asiwel s taÉŖect. @@ -68,15 +63,13 @@ yal yiwen. arussin (%s). %1$s isermed awgelhen seg yixef ÉŖer yixef (%2$s) - Tesremdeḍ awgelhen seg yixef ÉŖer yixef (%2$s) + Tesremdeḍ awgelhen seg yixef ÉŖer yixef (%1$s) %s ileqqem taxxamt-a. Tleqqmeḍ taxxamt-a. - %1$s isuter-d asarag VoIP Tsutreḍ-d asarag VoIP Asarag VoIP yebda Asarag VoIP yekfa - (avatar daÉŖen ibeddel) %1$s yekkes isem n texxamt Tekkseḍ isem n texxamt @@ -94,51 +87,37 @@ Tuzneḍ tinubga i %1$s akken ad yeddu ÉŖer texxamt %1$s iqbel tinubga i %2$s Tqebleḍ tinubga i %1$s - %1$s yerna awiĮ§it %2$s Terniḍ awiĮ§it %1$s %1$s yekkes awiĮ§it %2$s Tekkseḍ awiĮ§it %1$s %1$s ibeddel awiĮ§it %2$s Tbeddleḍ awiĮ§it %1$s - - Sagen (%1$) + Sagen (%1$d) Tbeddleḍ aswir n tezmert n %1$s. %1$s ibeddel aswir n tezmert n %2$s. ** Awgelhen d awezÉŖi: %s ** Ibenk n umazan ur aÉŖ-d-yuzin ara tisura i yizen-a. - Tuzna n yizen d tawezÉŖit - Tuccḍa deg uáē“eáš­áš­a Tuccḍa deg Matrix - %1$s iga amazray n texxamyt i d-iteddun yettban i %2$s Tgiḍ amazray n texxamyt i d-iteddun yettban i %1$s %1$s issefsax tinubga i %2$s i wakken ad d-yekcem ÉŖer texxamt Tesfesxeḍ tinubga i %1$s i wakken ad d-yernu ÉŖer texxamt D awezÉŖi tura ad nales ad nuÉŖal ÉŖer texxamt tilemt. - Izen yettwawgelhen - Uáš­áš­un n tiliÉŖri - Tinubga sÉŖur %s Tinubga ÉŖer texxamt - %1$s d %2$s - %1$s d 1 wayeḍ %1$s d %2$d wiyaḍ - Tremdeḍ awgelhen seg yixef ÉŖer yixef (alguritm %1$s ur yettwassen ara). - %s isuter-d ad isenqed tasarut-ik¡im, maca amsaÉŖ-ik¡im ur issefrak ara asenqed n tsura deg yidiwenniyen. Ilaq-ak¡am useqdec asenqed iqdim n tsura i usenqed n tsura. - Taxxamt tilemt - Amtawi n tazwara: \nAktar n umiḍanâ€Ļ Amtawi n tazwara: @@ -155,7 +134,6 @@ \nAktar n tmezdagnutin Amtawi n tazwara: \nAktar n yisefka n umiḍan - Tuzzna n yizenâ€Ļ Tinubga n %1$s. Tamentilt: %2$s Tinubga-kâ€ĸm. Tamentilt: %1$s @@ -180,46 +158,37 @@ Tqebleḍ tinubga i %1$s. Tamentilt: %2$s %1$s issefsex tinubga n %2$s. Tamentilt: %3$s Tesfesxeḍ tinubga n %1$s. Tamentilt: %2$s - %1$s yerna %2$s d tansa i texxamt-a. %1$s yerna %2$s d tansiwin i texxamt-a. - Terniḍ %1$s d tansa i texxamt-a. Terniḍ %1$s d tansiwin i texxamt-a. - %1$s yekkes %2$s am tansa i texxamt-a. %1$s yekkes %3$s am tansiwin i texxamt-a. - Tekkseḍ %1$s am tansa i texxamt-a. Tekkseḍ %2$s 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. Tesbaduḍ %1$s am tansa tagejdant i texxamt-a. %1$s yekkes tansa tagejdant i texxamt-a. Tekkseḍ tansa tagejdant i texxamt-a. - %1$s isireg inebgawen ad ddun ÉŖer texxamt. Tsirgeḍ inebgawen ad ddun ÉŖer texxamt. %1$s issewá¸Ĩel inebgawen iwakken ur tteddun ara ÉŖer texxamt. Tesweá¸Ĩleḍ inebgawen iwakken ur tteddun ara ÉŖer texxamt. - %1$s yermed awgelhen seg yixef ÉŖer yixef. Tremdeḍ awgelhen seg yixef ÉŖer yixef. %1$s yermed awgelhen seg yixef ÉŖer yixef (alguritm %2$s ur yettwassen ara). Sfeḍ tabdart n uraĮ§u n tuzzna - - %1$s issefsex tinubga n %2$s i tmerniwt ÉŖer texxamt. Tamentilt: %2$s + %1$s issefsex tinubga n %2$s i tmerniwt ÉŖer texxamt. Tamentilt: %3$s Tesfesxeḍ tinubga n %1$s i tmerna ÉŖer texxamt. Tamentilt: %2$s Yegguma ad yaru - + \ No newline at end of file From 3bf11d1a0b9666cc3e88d9f71702470bde44bbf4 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 14:02:02 +0000 Subject: [PATCH 273/278] Translated using Weblate (Slovak) Currently translated at 86.3% (164 of 190 strings) Translation: Element Android/Element Android Sdk Translate-URL: https://translate.element.io/projects/element-android/element-sdk/sk/ --- .../src/main/res/values-sk/strings.xml | 48 ++----------------- 1 file changed, 5 insertions(+), 43 deletions(-) diff --git a/matrix-sdk-android/src/main/res/values-sk/strings.xml b/matrix-sdk-android/src/main/res/values-sk/strings.xml index da869eacc2..c75c8b4832 100644 --- a/matrix-sdk-android/src/main/res/values-sk/strings.xml +++ b/matrix-sdk-android/src/main/res/values-sk/strings.xml @@ -1,8 +1,7 @@ - + %1$s: %2$s %1$s poslal/a obrÃĄzok. - Pozvanie od %s %1$s pozval/a %2$s %1$s vÃĄs pozval/a @@ -30,58 +29,42 @@ pre kaÅždÊho. neznÃĄmym (%s). %1$s povolil/a E2E ÅĄifrovanie (%2$s) - %1$s poÅžiadal/a o VoIP konferenciu Začala sa VoIP konferencia Skončila sa VoIP konferencia - (aj obrÃĄzok v profile) %1$s odstrÃĄnil/a nÃĄzov miestnosti %1$s odstrÃĄnil/a tÊmu miestnosti %1$s aktualizoval/a svoj profil %2$s %1$s pozval/a %2$s vstÃēpiÅĨ do miestnosti %1$s prijal/a pozvanie pre %2$s - ** Nie je moÅžnÊ deÅĄifrovaÅĨ: %s ** Zo zariadenia odosieÄžateÄža nebolo moÅžnÊ získaÅĨ kÄžÃēče potrebnÊ na deÅĄifrovanie tejto sprÃĄvy. - Nie je moÅžnÊ vymazaÅĨ Nie je moÅžnÊ odoslaÅĨ sprÃĄvu - Nepodarilo sa nahraÅĨ obrÃĄzok - Chyba siete Chyba Matrix - V sÃēčasnosti nie je moÅžnÊ znovu vstÃēpiÅĨ do prÃĄzdnej miestnosti. - Å ifrovanÃĄ sprÃĄva - EmailovÃĄ adresa TelefÃŗnne číslo - %1$s poslal/a nÃĄlepku. - Pozvanie od %s Pozvanie do miestnosti %1$s a %2$s PrÃĄzdna miestnosÅĨ - %1$s a 1 ďalÅĄÃ­ %1$s a %2$d ďalÅĄÃ­ %1$s a %2$d ďalÅĄÃ­ch - + - - %s aktualizoval/a tÃēto miestnosÅĨ. - OdstrÃĄnenÃĄ sprÃĄva OdstrÃĄnenÃĄ sprÃĄva pouŞívateÄžom %1$s OdstrÃĄnenÃĄ sprÃĄva [dôvod: %1$s] OdstrÃĄnenÃĄ sprÃĄva pouŞívateÄžom %1$s [dôvod: %2$s] - ÚvodnÃĄ synchronizÃĄcia: \nPrebieha import Ãēčtuâ€Ļ ÚvodnÃĄ synchronizÃĄcia: @@ -98,10 +81,8 @@ \nPrebieha import komunít ÚvodnÃĄ synchronizÃĄcia: \nPrebieha import Ãēdajov Ãēčtu - Odosielanie sprÃĄvyâ€Ļ VymazaÅĨ sprÃĄvy na odoslanie - %1$s zamietol/a pozvanie pouŞívateÄža %2$s vstÃēpiÅĨ do miestnosti Pozvanie od %1$s. Dôvod: %2$s %1$s pozval/a %2$s. Dôvod: %3$s @@ -116,28 +97,22 @@ %1$s zamietol/a pozvanie pouŞívateÄža %2$s vstÃēpiÅĨ do miestnosti. Dôvod: %3$s %1$s prijal/a pozvanie pre %2$s. Dôvod: %3$s %1$s vzal/a späÅĨ pozvanie %2$s. Dôvod: %3$s - %1$s pridal/a adresu %2$s pre tÃēto miestnosÅĨ. %1$s pridal/a adresy %2$s pre tÃēto miestnosÅĨ. %1$s pridal/a adresy %2$s pre tÃēto miestnosÅĨ. - %1$s odstrÃĄnil/a adresu %2$s pre tÃēto miestnosÅĨ. %1$s odstrÃĄnil/a adresy %3$s pre tÃēto miestnosÅĨ. %1$s odstrÃĄnil/a adresy %3$s pre tÃēto miestnosÅĨ. - %1$s pridal/a adresy %2$s a odstrÃĄnil/a adresy %3$s pre tÃēto miestnosÅĨ. - %1$s nastavil/a hlavnÃē adresu tejto miestnosti %2$s. %1$s odstrÃĄnil/a hlavnÃē adresu tejto miestnosti. - %1$s povolil/a hosÅĨom///nÃĄvÅĄtevníkom prístup do tejto miestnosti. Poslali ste obrÃĄzok. Poslali ste nÃĄlepku. - Pozvanie od vÃĄs %1$s vytvoril/a miestnosÅĨ Vytvorili ste miestnosÅĨ @@ -166,7 +141,6 @@ Sprístupnili ste budÃēcu histÃŗriu miestnosti %1$s Povolili ste E2E ÅĄifrovanie (%1$s) Aktualizovali ste tÃēto miestnosÅĨ. - PoÅžiadali ste o VoIP konferenciu OdstrÃĄnili ste nÃĄzov miestnosti OdstrÃĄnili ste tÊmu miestnosti @@ -174,26 +148,22 @@ OdstrÃĄnili ste obrÃĄzok miestnosti Aktualizovali ste svoj profil %1$s Pozvali ste %1$s vstÃēpiÅĨ do miestnosti - Zamietli ste pozvanie pouŞívateÄža %2$s vstÃēpiÅĨ do miestnosti + Zamietli ste pozvanie pouŞívateÄža %1$s vstÃēpiÅĨ do miestnosti Prijali ste pozvanie pre %1$s - %1$s pridal/a widget %2$s Pridali ste widget %1$s %1$s odstrÃĄnil/a widget %2$s OdstrÃĄnili ste widget %1$s %1$s upravil/a widget %2$s Upravili ste widget %1$s - SprÃĄvca ModerÃĄtor PredvolenÃŊ VlastnÃĄ Ãēroveň (%1$d) VlastnÃĄ Ãēroveň - Zmenili ste Ãēroveň moci pouŞívateÄža %1$s. %1$s zmenil Ãēroveň moci pouŞívateÄža %2$s. %1$s z %2$s na %3$s - Pozvanie od vÃĄs. Dôvod: %1$s Pozvali ste %1$s. Dôvod: %2$s VstÃēpili ste do miestnosti. Dôvod: %1$s @@ -206,33 +176,25 @@ Zamietli ste pozvanie pouŞívateÄža %1$s vstÃēpiÅĨ do miestnosti. Dôvod: %2$s Prijali ste pozvanie pre %1$s. Dôvod: %2$s Vzali ste späÅĨ pozvanie %1$s. Dôvod: %2$s - Pridali ste adresu %1$s pre tÃēto miestnosÅĨ. Pridali ste adresy %1$s pre tÃēto miestnosÅĨ. Pridali ste adresy %1$s pre tÃēto miestnosÅĨ. - OdstrÃĄnili ste adresu %1$s pre tÃēto miestnosÅĨ. OdstrÃĄnili ste adresy %2$s pre tÃēto miestnosÅĨ. OdstrÃĄnili ste adresy %2$s pre tÃēto miestnosÅĨ. - Pridali ste %1$s a odstrÃĄnili adresy %2$s pre tÃēto miestnosÅĨ. - - Nastavili ste hlavnÃē adresu tejto miestnosti %2$s. + Nastavili ste hlavnÃē adresu tejto miestnosti %1$s. OdstrÃĄnili ste hlavnÃē adresu tejto miestnosti. - Povolili ste hosÅĨom///nÃĄvÅĄtevníkom prístup do tejto miestnosti. %1$s zakÃĄzal/a hosÅĨom///nÃĄvÅĄtevníkom prístup do tejto miestnosti. ZakÃĄzali ste hosÅĨom///nÃĄvÅĄtevníkom prístup do tejto miestnosti. - %1$s povolil/a E2E ÅĄifrovanie. Povolili ste E2E ÅĄifrovanie. %1$s povolil/a E2E ÅĄifrovanie (NerozpoznanÃŊ algorytmus %2$s). Povolili ste E2E ÅĄifrovanie (NerozpoznanÃŊ algorytmus %1$s). - %s poÅžaduje overenie vaÅĄich ÅĄifrovacích kÄžÃēčov, ale vÃĄÅĄ klient nepodporuje overenie kÄžÃēčov v konverzÃĄcii. Budete musieÅĨ pouÅžiÅĨ zastaralÃē metÃŗdu overenia. - - + \ No newline at end of file From b07e7a4a36336d49c4121ceb6d4019706e20cf42 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 16:10:50 +0200 Subject: [PATCH 274/278] Use file.length if cursor returns -1 as file size. Author: Onuray (squashed) --- CHANGES.md | 1 + .../session/content/UploadContentWorker.kt | 57 ++++++++++++------- 2 files changed, 36 insertions(+), 22 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0d3bc066fd..d7c700a0c9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -36,6 +36,7 @@ Bugfix 🐛: - Be robust against `StrandHogg` task injection - Clear alerts if user sign out - Fix rows are hidden in Textinput (#2234) + - Uploading a file to a room caused it to have a info.size of -1 (#2141) Translations đŸ—Ŗ: - Move store data to `/fastlane/metadata/android` (#812) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt index 03827b90e2..e133d9226b 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt @@ -48,10 +48,10 @@ import java.io.File import java.util.UUID import javax.inject.Inject -private data class NewImageAttributes( - val newWidth: Int?, - val newHeight: Int?, - val newFileSize: Int +private data class NewAttachmentAttributes( + val newWidth: Int? = null, + val newHeight: Int? = null, + val newFileSize: Long ) /** @@ -145,7 +145,11 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter return try { val fileToUpload: File - var newImageAttributes: NewImageAttributes? = null + var newAttachmentAttributes = NewAttachmentAttributes( + params.attachment.width?.toInt(), + params.attachment.height?.toInt(), + params.attachment.size + ) if (attachment.type == ContentAttachmentData.Type.IMAGE && params.compressBeforeSending) { fileToUpload = imageCompressor.compress(context, workingFile, MAX_IMAGE_SIZE, MAX_IMAGE_SIZE) @@ -154,8 +158,8 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter compressedFile.inputStream().use { val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } val bitmap = BitmapFactory.decodeStream(it, null, options) - val fileSize = bitmap?.byteCount ?: 0 - newImageAttributes = NewImageAttributes( + val fileSize = bitmap?.byteCount?.toLong() ?: compressedFile.length() + newAttachmentAttributes = NewAttachmentAttributes( options.outWidth, options.outHeight, fileSize @@ -200,12 +204,17 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter Timber.e(failure, "## FileService: Failed to update file cache") } + // Fix: OpenableColumns.SIZE may return -1 or 0 + if (params.attachment.size <= 0) { + newAttachmentAttributes = newAttachmentAttributes.copy(newFileSize = fileToUpload.length()) + } + handleSuccess(params, contentUploadResponse.contentUri, uploadedFileEncryptedFileInfo, uploadThumbnailResult?.uploadedThumbnailUrl, uploadThumbnailResult?.uploadedThumbnailEncryptedFileInfo, - newImageAttributes) + newAttachmentAttributes) } catch (t: Throwable) { Timber.e(t, "## FileService: ERROR ${t.localizedMessage}") handleFailure(params, t) @@ -285,10 +294,10 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter encryptedFileInfo: EncryptedFileInfo?, thumbnailUrl: String?, thumbnailEncryptedFileInfo: EncryptedFileInfo?, - newImageAttributes: NewImageAttributes?): Result { + newAttachmentAttributes: NewAttachmentAttributes): Result { notifyTracker(params) { contentUploadStateTracker.setSuccess(it) } params.localEchoIds.forEach { - updateEvent(it.eventId, attachmentUrl, encryptedFileInfo, thumbnailUrl, thumbnailEncryptedFileInfo, newImageAttributes) + updateEvent(it.eventId, attachmentUrl, encryptedFileInfo, thumbnailUrl, thumbnailEncryptedFileInfo, newAttachmentAttributes) } val sendParams = MultipleEventSendingDispatcherWorker.Params( @@ -306,14 +315,14 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter encryptedFileInfo: EncryptedFileInfo?, thumbnailUrl: String? = null, thumbnailEncryptedFileInfo: EncryptedFileInfo?, - newImageAttributes: NewImageAttributes?) { + newAttachmentAttributes: NewAttachmentAttributes) { localEchoRepository.updateEcho(eventId) { _, event -> val messageContent: MessageContent? = event.asDomain().content.toModel() val updatedContent = when (messageContent) { - is MessageImageContent -> messageContent.update(url, encryptedFileInfo, newImageAttributes) + is MessageImageContent -> messageContent.update(url, encryptedFileInfo, newAttachmentAttributes) is MessageVideoContent -> messageContent.update(url, encryptedFileInfo, thumbnailUrl, thumbnailEncryptedFileInfo) - is MessageFileContent -> messageContent.update(url, encryptedFileInfo) - is MessageAudioContent -> messageContent.update(url, encryptedFileInfo) + is MessageFileContent -> messageContent.update(url, encryptedFileInfo, newAttachmentAttributes.newFileSize) + is MessageAudioContent -> messageContent.update(url, encryptedFileInfo, newAttachmentAttributes.newFileSize) else -> messageContent } event.content = ContentMapper.map(updatedContent.toContent()) @@ -326,14 +335,14 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter private fun MessageImageContent.update(url: String, encryptedFileInfo: EncryptedFileInfo?, - newImageAttributes: NewImageAttributes?): MessageImageContent { + newAttachmentAttributes: NewAttachmentAttributes?): MessageImageContent { return copy( url = if (encryptedFileInfo == null) url else null, encryptedFileInfo = encryptedFileInfo?.copy(url = url), info = info?.copy( - width = newImageAttributes?.newWidth ?: info.width, - height = newImageAttributes?.newHeight ?: info.height, - size = newImageAttributes?.newFileSize ?: info.size + width = newAttachmentAttributes?.newWidth ?: info.width, + height = newAttachmentAttributes?.newHeight ?: info.height, + size = newAttachmentAttributes?.newFileSize?.toInt() ?: info.size ) ) } @@ -353,18 +362,22 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter } private fun MessageFileContent.update(url: String, - encryptedFileInfo: EncryptedFileInfo?): MessageFileContent { + encryptedFileInfo: EncryptedFileInfo?, + size: Long): MessageFileContent { return copy( url = if (encryptedFileInfo == null) url else null, - encryptedFileInfo = encryptedFileInfo?.copy(url = url) + encryptedFileInfo = encryptedFileInfo?.copy(url = url), + info = info?.copy(size = size) ) } private fun MessageAudioContent.update(url: String, - encryptedFileInfo: EncryptedFileInfo?): MessageAudioContent { + encryptedFileInfo: EncryptedFileInfo?, + size: Long): MessageAudioContent { return copy( url = if (encryptedFileInfo == null) url else null, - encryptedFileInfo = encryptedFileInfo?.copy(url = url) + encryptedFileInfo = encryptedFileInfo?.copy(url = url), + audioInfo = audioInfo?.copy(size = size) ) } From aa91c410825a3bf92bad8619ca58c82f4ac05942 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 16:36:09 +0200 Subject: [PATCH 275/278] Fix lint issue --- 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 e8912c0640..ac7ba642bd 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -2259,7 +2259,7 @@ ХООйŅ‰ĐĩĐŊиŅ СдĐĩŅŅŒ ĐŊĐĩ СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊŅ‹. На ŅŅ‚ĐžĐŧ Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŧ ŅĐĩŅ€Đ˛ĐĩŅ€Đĩ Ņ€Đ°ĐąĐžŅ‚Đ°ĐĩŅ‚ ŅŅ‚Đ°Ņ€Đ°Ņ вĐĩŅ€ŅĐ¸Ņ. ПоĐŋŅ€ĐžŅĐ¸Ņ‚Đĩ Đ°Đ´ĐŧиĐŊиŅŅ‚Ņ€Đ°Ņ‚ĐžŅ€Đ° ваŅˆĐĩĐŗĐž Đ´ĐžĐŧĐ°ŅˆĐŊĐĩĐŗĐž ŅĐĩŅ€Đ˛ĐĩŅ€Đ° вŅ‹ĐŋĐžĐģĐŊиŅ‚ŅŒ ОйĐŊОвĐģĐĩĐŊиĐĩ. ВŅ‹ ĐŧĐžĐļĐĩŅ‚Đĩ ĐŋŅ€ĐžĐ´ĐžĐģĐļиŅ‚ŅŒ, ĐŊĐž ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸ ĐŧĐžĐŗŅƒŅ‚ Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐŊĐĩĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊĐž. ВŅ‹ ŅĐ´ĐĩĐģĐ°Đģи Đ´ĐžŅŅ‚ŅƒĐŋ Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅŽ. - %@ ŅĐ´ĐĩĐģĐ°Đģ(Đ°) Đ´ĐžŅŅ‚ŅƒĐŋ Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅŽ. + %1$s ŅĐ´ĐĩĐģĐ°Đģ(Đ°) Đ´ĐžŅŅ‚ŅƒĐŋ Ņ‚ĐžĐģŅŒĐēĐž ĐŋĐž ĐŋŅ€Đ¸ĐŗĐģĐ°ŅˆĐĩĐŊиŅŽ. ПоĐēаСаŅ‚ŅŒ ĐŋĐžĐģĐŊŅƒŅŽ иŅŅ‚ĐžŅ€Đ¸ŅŽ в СаŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Ņ… ĐēĐžĐŧĐŊĐ°Ņ‚Đ°Ņ… %1$s и %2$s %1$s в %2$s и %3$s From ca0af0f34203bbcfaaa128ab72d8a58475cfd5cd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 16:38:33 +0200 Subject: [PATCH 276/278] Fix bad cases --- vector/src/main/res/values-kab/strings.xml | 4 ++-- vector/src/main/res/values-ru/strings.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/vector/src/main/res/values-kab/strings.xml b/vector/src/main/res/values-kab/strings.xml index e213ae3f03..27e8259efd 100644 --- a/vector/src/main/res/values-kab/strings.xml +++ b/vector/src/main/res/values-kab/strings.xml @@ -729,8 +729,8 @@ %dwussan - %1$S tura - Seg %1$S %2$S + %1$s tura + Seg %1$s %2$s IFECKA N UNEDBAL SIWEL diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index ac7ba642bd..7375bc6293 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -862,7 +862,7 @@ ĐĄĐĩĐšŅ‡Đ°Ņ %1$s %1$s %2$s ĐŊаСад - "%1$S " + "%1$s " %1$s и %2$s %1$s %2$s From 0ffe20d863fc1d1172ebef2b3c086cab05566404 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 16:31:32 +0200 Subject: [PATCH 277/278] Small changes --- .../session/content/UploadContentWorker.kt | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt index e133d9226b..4a30d6c1e6 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/content/UploadContentWorker.kt @@ -157,18 +157,21 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter // Get new Bitmap size compressedFile.inputStream().use { val options = BitmapFactory.Options().apply { inJustDecodeBounds = true } - val bitmap = BitmapFactory.decodeStream(it, null, options) - val fileSize = bitmap?.byteCount?.toLong() ?: compressedFile.length() + BitmapFactory.decodeStream(it, null, options) newAttachmentAttributes = NewAttachmentAttributes( - options.outWidth, - options.outHeight, - fileSize + newWidth = options.outWidth, + newHeight = options.outHeight, + newFileSize = compressedFile.length() ) } } .also { filesToDelete.add(it) } } else { fileToUpload = workingFile + // Fix: OpenableColumns.SIZE may return -1 or 0 + if (params.attachment.size <= 0) { + newAttachmentAttributes = newAttachmentAttributes.copy(newFileSize = fileToUpload.length()) + } } val contentUploadResponse = if (params.isEncrypted) { @@ -204,11 +207,6 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter Timber.e(failure, "## FileService: Failed to update file cache") } - // Fix: OpenableColumns.SIZE may return -1 or 0 - if (params.attachment.size <= 0) { - newAttachmentAttributes = newAttachmentAttributes.copy(newFileSize = fileToUpload.length()) - } - handleSuccess(params, contentUploadResponse.contentUri, uploadedFileEncryptedFileInfo, @@ -320,7 +318,8 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter val messageContent: MessageContent? = event.asDomain().content.toModel() val updatedContent = when (messageContent) { is MessageImageContent -> messageContent.update(url, encryptedFileInfo, newAttachmentAttributes) - is MessageVideoContent -> messageContent.update(url, encryptedFileInfo, thumbnailUrl, thumbnailEncryptedFileInfo) + is MessageVideoContent -> messageContent.update(url, encryptedFileInfo, thumbnailUrl, thumbnailEncryptedFileInfo, + newAttachmentAttributes.newFileSize) is MessageFileContent -> messageContent.update(url, encryptedFileInfo, newAttachmentAttributes.newFileSize) is MessageAudioContent -> messageContent.update(url, encryptedFileInfo, newAttachmentAttributes.newFileSize) else -> messageContent @@ -350,13 +349,15 @@ internal class UploadContentWorker(val context: Context, params: WorkerParameter private fun MessageVideoContent.update(url: String, encryptedFileInfo: EncryptedFileInfo?, thumbnailUrl: String?, - thumbnailEncryptedFileInfo: EncryptedFileInfo?): MessageVideoContent { + thumbnailEncryptedFileInfo: EncryptedFileInfo?, + size: Long): MessageVideoContent { return copy( url = if (encryptedFileInfo == null) url else null, encryptedFileInfo = encryptedFileInfo?.copy(url = url), videoInfo = videoInfo?.copy( thumbnailUrl = if (thumbnailEncryptedFileInfo == null) thumbnailUrl else null, - thumbnailFile = thumbnailEncryptedFileInfo?.copy(url = thumbnailUrl) + thumbnailFile = thumbnailEncryptedFileInfo?.copy(url = thumbnailUrl), + size = size ) ) } From ff84319e59f5cac9aa7e4819670b1a8c24414bbe Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Fri, 16 Oct 2020 17:09:31 +0200 Subject: [PATCH 278/278] Prepare release 1.0.9 --- CHANGES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index d7c700a0c9..99058117b6 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,4 +1,4 @@ -Changes in Element 1.0.9 (2020-XX-XX) +Changes in Element 1.0.9 (2020-10-16) =================================================== Features ✨: