diff --git a/.github/ISSUE_TEMPLATE/release.yml b/.github/ISSUE_TEMPLATE/release.yml index 4fecde2e90..903c05c5d3 100644 --- a/.github/ISSUE_TEMPLATE/release.yml +++ b/.github/ISSUE_TEMPLATE/release.yml @@ -1,7 +1,7 @@ name: Release checklist description: Checklist for each release. This template is only for the core team. title: "[Release] Element Android v" -labels: [\U0001F680 Release] +labels: [🚀 Release] assignees: - bmarty diff --git a/CHANGES.md b/CHANGES.md index a0b3e7e2ca..8d4899e6fb 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,13 @@ +Changes in Element v1.3.1 (2021-09-29) +====================================== + +Bugfixes 🐛 +---------- + - Verifying exported E2E keys to provide user feedback when the output is malformed ([#4082](https://github.com/vector-im/element-android/issues/4082)) + - Fix settings crash when accelerometer not available ([#4103](https://github.com/vector-im/element-android/issues/4103)) + - Crash while rendering failed message warning ([#4110](https://github.com/vector-im/element-android/issues/4110)) + + Changes in Element v1.3.0 (2021-09-27) ====================================== diff --git a/changelog.d/240.feature b/changelog.d/240.feature new file mode 100644 index 0000000000..ee4d07a975 --- /dev/null +++ b/changelog.d/240.feature @@ -0,0 +1 @@ +Android Auto notification support diff --git a/changelog.d/3898.bugfix b/changelog.d/3898.bugfix new file mode 100644 index 0000000000..49cab4adad --- /dev/null +++ b/changelog.d/3898.bugfix @@ -0,0 +1,2 @@ +Fixes the passphrase screen being incorrectly shown when pressing back on the key verification screen. +When the user doesn't have a passphrase set we don't show the passphrase screen. \ No newline at end of file diff --git a/changelog.d/3935.bugfix b/changelog.d/3935.bugfix new file mode 100644 index 0000000000..f4b1d309b4 --- /dev/null +++ b/changelog.d/3935.bugfix @@ -0,0 +1 @@ +Save button for adding rooms to a space is hidden when scrolling through list of rooms \ No newline at end of file diff --git a/changelog.d/4027.feature b/changelog.d/4027.feature new file mode 100644 index 0000000000..fa45d07ef9 --- /dev/null +++ b/changelog.d/4027.feature @@ -0,0 +1 @@ +Add client base url config to customize permalinks \ No newline at end of file diff --git a/changelog.d/4082.bugfix b/changelog.d/4082.bugfix deleted file mode 100644 index 9ec8d4db97..0000000000 --- a/changelog.d/4082.bugfix +++ /dev/null @@ -1 +0,0 @@ -Verifying exported E2E keys to provide user feedback when the output is malformed \ No newline at end of file diff --git a/changelog.d/4092.bugfix b/changelog.d/4092.bugfix new file mode 100644 index 0000000000..68ce518060 --- /dev/null +++ b/changelog.d/4092.bugfix @@ -0,0 +1,4 @@ +Added changes that will make SearchView in search bar focused by default on opening reaction picker. + +When tapping close icon of SearchView, the SearchView did not collapse therefore added the on close listener +which will collapse the SearchView on close. diff --git a/changelog.d/4103.bugfix b/changelog.d/4103.bugfix deleted file mode 100644 index 6b4b965540..0000000000 --- a/changelog.d/4103.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix settings crash when accelerometer not available \ No newline at end of file diff --git a/changelog.d/4113.misc b/changelog.d/4113.misc new file mode 100644 index 0000000000..a5faa57b92 --- /dev/null +++ b/changelog.d/4113.misc @@ -0,0 +1 @@ +Fix release label in the release issue template diff --git a/dependencies.gradle b/dependencies.gradle index f19c1d3539..6a70486530 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -9,8 +9,8 @@ ext.versions = [ def gradle = "7.0.2" // Ref: https://kotlinlang.org/releases.html -def kotlin = "1.5.30" -def kotlinCoroutines = "1.5.1" +def kotlin = "1.5.31" +def kotlinCoroutines = "1.5.2" def dagger = "2.38.1" def retrofit = "2.9.0" def arrow = "0.8.2" diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40102010.txt b/fastlane/metadata/android/cs-CZ/changelogs/40102010.txt new file mode 100644 index 0000000000..ca75c6b5d8 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Hlavní změny v této verzi: Mnohá vylepšení VoIP a prostorů (stále v beta verzi). +Úplný seznam změn: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/de-DE/changelogs/40102000.txt b/fastlane/metadata/android/de-DE/changelogs/40102000.txt index 9375289279..cfa9f725f2 100644 --- a/fastlane/metadata/android/de-DE/changelogs/40102000.txt +++ b/fastlane/metadata/android/de-DE/changelogs/40102000.txt @@ -1,2 +1,2 @@ Hauptänderungen: Sprachnachrichten standardmäßig aktiviert. -Ganze Änderungsliste: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +Ganze Änderungsliste: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/de-DE/changelogs/40102010.txt b/fastlane/metadata/android/de-DE/changelogs/40102010.txt new file mode 100644 index 0000000000..2635704a81 --- /dev/null +++ b/fastlane/metadata/android/de-DE/changelogs/40102010.txt @@ -0,0 +1,2 @@ +VoIP und Spaces verbessert +Vollständige Änderungsliste: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/en-US/changelogs/40103010.txt b/fastlane/metadata/android/en-US/changelogs/40103010.txt new file mode 100644 index 0000000000..e3760f1882 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/40103010.txt @@ -0,0 +1,2 @@ +Main changes in this version: Organize your rooms using Spaces! v1.3.1 is fixing a crash which can occurs in v1.3.0. +Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.3.1 \ No newline at end of file diff --git a/fastlane/metadata/android/et/changelogs/40102000.txt b/fastlane/metadata/android/et/changelogs/40102000.txt index 678ad05309..57f28039c5 100644 --- a/fastlane/metadata/android/et/changelogs/40102000.txt +++ b/fastlane/metadata/android/et/changelogs/40102000.txt @@ -1,2 +1,2 @@ Põhilised muutused selles versioonis: häälsõnumid on nüüd vaikimisi kasutusel. -Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/et/changelogs/40102010.txt b/fastlane/metadata/android/et/changelogs/40102010.txt new file mode 100644 index 0000000000..0dc70c90af --- /dev/null +++ b/fastlane/metadata/android/et/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Põhilised muutused selles versioonis: palju täiendusi kõnede ja veel testjärgus olevas kogukonnakeskuste loogikas. +Kogu ingliskeelne muudatuste logi: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/fa/changelogs/40102000.txt b/fastlane/metadata/android/fa/changelogs/40102000.txt index c7e159bf2b..9c9a7c51d0 100644 --- a/fastlane/metadata/android/fa/changelogs/40102000.txt +++ b/fastlane/metadata/android/fa/changelogs/40102000.txt @@ -1,2 +1,2 @@ تغییرهای اصلی در این نگارش: پیام صوتی به صورت پیشگزیده به کار افتاده. -گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/fa/changelogs/40102010.txt b/fastlane/metadata/android/fa/changelogs/40102010.txt new file mode 100644 index 0000000000..a2cc27d1b5 --- /dev/null +++ b/fastlane/metadata/android/fa/changelogs/40102010.txt @@ -0,0 +1,2 @@ +تغییرات اصلی در این نگارش: چندین بهبود در ویپ و فضاها (همچنان در حالت آزمایشی). +گزارش دگرگونی کامل: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/hu-HU/changelogs/40102000.txt b/fastlane/metadata/android/hu-HU/changelogs/40102000.txt index 1e708b1c7b..87824693f7 100644 --- a/fastlane/metadata/android/hu-HU/changelogs/40102000.txt +++ b/fastlane/metadata/android/hu-HU/changelogs/40102000.txt @@ -1,2 +1,2 @@ Fő változás ebben a verzióban: Hangüzenetek alapértelmezetten engedélyezettek. -Teljes változásnapló: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +Teljes változásnapló: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/hu-HU/changelogs/40102010.txt b/fastlane/metadata/android/hu-HU/changelogs/40102010.txt new file mode 100644 index 0000000000..1ccd51aa8a --- /dev/null +++ b/fastlane/metadata/android/hu-HU/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Fő változás ebben a verzióban: Sok fejlesztés a VoIP és Terek kapcsán (még béta) +Teljes változásnapló: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/it-IT/changelogs/40102000.txt b/fastlane/metadata/android/it-IT/changelogs/40102000.txt index 3ba7f8ceb3..e10007a7b7 100644 --- a/fastlane/metadata/android/it-IT/changelogs/40102000.txt +++ b/fastlane/metadata/android/it-IT/changelogs/40102000.txt @@ -1,2 +1,2 @@ Modifiche principali in questa versione: i messaggi vocali sono attivi in modo predefinito. -Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/it-IT/changelogs/40102010.txt b/fastlane/metadata/android/it-IT/changelogs/40102010.txt new file mode 100644 index 0000000000..33c2d998a7 --- /dev/null +++ b/fastlane/metadata/android/it-IT/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Modifiche principali in questa versione: molti miglioramenti nel VoIP e negli Spazi (ancora in beta). +Cronologia completa: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/pt-BR/changelogs/40102000.txt b/fastlane/metadata/android/pt-BR/changelogs/40102000.txt index 3c600baeed..c6d01391da 100644 --- a/fastlane/metadata/android/pt-BR/changelogs/40102000.txt +++ b/fastlane/metadata/android/pt-BR/changelogs/40102000.txt @@ -1,2 +1,2 @@ Principais mudanças nesta versão: Mensagem de Voz está habilitada por default. -Changelog completo: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +Changelog completo: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/pt-BR/changelogs/40102010.txt b/fastlane/metadata/android/pt-BR/changelogs/40102010.txt new file mode 100644 index 0000000000..0894dd2022 --- /dev/null +++ b/fastlane/metadata/android/pt-BR/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Principais mudanças nesta versão: Muitas melhorias em VoIP e Espaços (ainda em beta). +Changelog completo: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/ru-RU/changelogs/40102000.txt b/fastlane/metadata/android/ru-RU/changelogs/40102000.txt index ab0dd0237d..af0a444afa 100644 --- a/fastlane/metadata/android/ru-RU/changelogs/40102000.txt +++ b/fastlane/metadata/android/ru-RU/changelogs/40102000.txt @@ -1,2 +1,2 @@ Основные изменения в этой версии: Голосовое сообщение включено по умолчанию. -Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/ru-RU/changelogs/40102010.txt b/fastlane/metadata/android/ru-RU/changelogs/40102010.txt new file mode 100644 index 0000000000..167af260d5 --- /dev/null +++ b/fastlane/metadata/android/ru-RU/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Основные изменения в этой версии: Множество улучшений в VoIP и пространствах (все еще в бета-версии). +Полный список изменений: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/sq/changelogs/40100100.txt b/fastlane/metadata/android/sq/changelogs/40100100.txt new file mode 100644 index 0000000000..aba7bebd5a --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100100.txt @@ -0,0 +1,2 @@ +Ky version i ri përmban kryesisht ndreqje të metash dhe përmirësime. Dërgimi i një mesazhi tani është shumë i shpejtë. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.10 diff --git a/fastlane/metadata/android/sq/changelogs/40100110.txt b/fastlane/metadata/android/sq/changelogs/40100110.txt new file mode 100644 index 0000000000..d1b8e9f9d3 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100110.txt @@ -0,0 +1,2 @@ +Ky version i ri përmban kryesisht përmirësime të ndërfaqes dhe punimit të përdoruesit. Tani mund të ftoni shokë, dhe të krijoni MD shumë shpejt, përmes skanimit të kodesh QR. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.11 diff --git a/fastlane/metadata/android/sq/changelogs/40100120.txt b/fastlane/metadata/android/sq/changelogs/40100120.txt new file mode 100644 index 0000000000..d7d9998e0b --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100120.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Paraparje URL-sh, tastierë e re për emoji, aftësi të reja për rregullime dhome, dhe dëborë për Krishtlindje! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.12 diff --git a/fastlane/metadata/android/sq/changelogs/40100130.txt b/fastlane/metadata/android/sq/changelogs/40100130.txt new file mode 100644 index 0000000000..5d50ff531d --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100130.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Paraparje URL-sh, tastierë e re për emoji, aftësi të reja për rregullime dhome, dhe dëborë për Krishtlindje! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.13 diff --git a/fastlane/metadata/android/sq/changelogs/40100140.txt b/fastlane/metadata/android/sq/changelogs/40100140.txt new file mode 100644 index 0000000000..bdab3841b0 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100140.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Përpunim lejesh dhome, temë e çelët/e errët e automatizuar, dhe një dorë ndreqjesh të metash. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.14 diff --git a/fastlane/metadata/android/sq/changelogs/40100150.txt b/fastlane/metadata/android/sq/changelogs/40100150.txt new file mode 100644 index 0000000000..045f2369b6 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100150.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Mbulim Hyrjesh nga rrjete shoqërorë. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.15 diff --git a/fastlane/metadata/android/sq/changelogs/40100160.txt b/fastlane/metadata/android/sq/changelogs/40100160.txt new file mode 100644 index 0000000000..ece7bbd2a6 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100160.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Mbulim Hyrjesh nga rrjete shoqërorë. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.15 dhe https://github.com/vector-im/element-android/releases/tag/v1.0.16 diff --git a/fastlane/metadata/android/sq/changelogs/40100170.txt b/fastlane/metadata/android/sq/changelogs/40100170.txt new file mode 100644 index 0000000000..76cf7a9ffa --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40100170.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Ndreqje të metash! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.0.17 diff --git a/fastlane/metadata/android/sq/changelogs/40101000.txt b/fastlane/metadata/android/sq/changelogs/40101000.txt new file mode 100644 index 0000000000..b4424f55bc --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101000.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Përmirësime për VoIP (thirrje audio dhe video në DM) dhe ndreqje të metash! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.0 diff --git a/fastlane/metadata/android/sq/changelogs/40101010.txt b/fastlane/metadata/android/sq/changelogs/40101010.txt new file mode 100644 index 0000000000..20b35d3439 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101010.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përmirësime funksionimi dhe ndreqje të metash! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.1 diff --git a/fastlane/metadata/android/sq/changelogs/40101020.txt b/fastlane/metadata/android/sq/changelogs/40101020.txt new file mode 100644 index 0000000000..6f53ec219e --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101020.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përmirësime funksionimi dhe ndreqje të metash! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.2 diff --git a/fastlane/metadata/android/sq/changelogs/40101030.txt b/fastlane/metadata/android/sq/changelogs/40101030.txt new file mode 100644 index 0000000000..9dbc4f142a --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101030.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përmirësime funksionimi dhe ndreqje të metash! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.3 diff --git a/fastlane/metadata/android/sq/changelogs/40101040.txt b/fastlane/metadata/android/sq/changelogs/40101040.txt new file mode 100644 index 0000000000..949fa629b9 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101040.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përmirësime funksionimi dhe ndreqje të metash! +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.4 diff --git a/fastlane/metadata/android/sq/changelogs/40101050.txt b/fastlane/metadata/android/sq/changelogs/40101050.txt new file mode 100644 index 0000000000..28e2852356 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101050.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: ndreqje të metash për 1.1.4 +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.5 diff --git a/fastlane/metadata/android/sq/changelogs/40101060.txt b/fastlane/metadata/android/sq/changelogs/40101060.txt new file mode 100644 index 0000000000..ab01eede45 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101060.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: ndreqje të metash për 1.1.5 +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.6 diff --git a/fastlane/metadata/android/sq/changelogs/40101070.txt b/fastlane/metadata/android/sq/changelogs/40101070.txt new file mode 100644 index 0000000000..8d23bb5b94 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101070.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: mbulim për Hapësira, në fazë beta. Ngjeshje videosh, përpara dërgimi. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.7 diff --git a/fastlane/metadata/android/sq/changelogs/40101080.txt b/fastlane/metadata/android/sq/changelogs/40101080.txt new file mode 100644 index 0000000000..f9282142cb --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101080.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përmirësime për Hapësira. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.8 diff --git a/fastlane/metadata/android/sq/changelogs/40101090.txt b/fastlane/metadata/android/sq/changelogs/40101090.txt new file mode 100644 index 0000000000..069ab4954d --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101090.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: shtim mbulimi për rrjetin gitter.im. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.9 diff --git a/fastlane/metadata/android/sq/changelogs/40101100.txt b/fastlane/metadata/android/sq/changelogs/40101100.txt new file mode 100644 index 0000000000..bf5079bc9a --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101100.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përditësime teme dhe stili dhe veçori të reja për hapësira. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.10 diff --git a/fastlane/metadata/android/sq/changelogs/40101110.txt b/fastlane/metadata/android/sq/changelogs/40101110.txt new file mode 100644 index 0000000000..44d03bb8cb --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101110.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përditësime teme dhe stili dhe veçori të reja për hapësira (ndreqje të mete për 1.1.10) +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.11 diff --git a/fastlane/metadata/android/sq/changelogs/40101120.txt b/fastlane/metadata/android/sq/changelogs/40101120.txt new file mode 100644 index 0000000000..aecede8d91 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101120.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përditësime teme dhe stili dhe ndreqje e një vithisjeje pas një thirrjeje video +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.12 diff --git a/fastlane/metadata/android/sq/changelogs/40101130.txt b/fastlane/metadata/android/sq/changelogs/40101130.txt new file mode 100644 index 0000000000..535ccd7518 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101130.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: përditësim kryesisht për qëndrueshmërinë dhe ndreqje të metash. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.13 diff --git a/fastlane/metadata/android/sq/changelogs/40101140.txt b/fastlane/metadata/android/sq/changelogs/40101140.txt new file mode 100644 index 0000000000..2dc279e1f7 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101140.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: ndreqje e një problemi rreth mesazhesh të fshehtëzuar. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.14 diff --git a/fastlane/metadata/android/sq/changelogs/40101150.txt b/fastlane/metadata/android/sq/changelogs/40101150.txt new file mode 100644 index 0000000000..1fbf2bae7a --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101150.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: sendërtim mesazhesh zanore, nën mjedis laboratori. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.15 diff --git a/fastlane/metadata/android/sq/changelogs/40101160.txt b/fastlane/metadata/android/sq/changelogs/40101160.txt new file mode 100644 index 0000000000..ecb9a83918 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40101160.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Ndreqje gabimi, kur dërgohet mesazh i fshehtëzuar, nëse dikush nga dhoma bën dalje prej saj. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.1.16 diff --git a/fastlane/metadata/android/sq/changelogs/40102000.txt b/fastlane/metadata/android/sq/changelogs/40102000.txt new file mode 100644 index 0000000000..c1f2333f1c --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40102000.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Mesazh Zanor është i aktivizuar, si parazgjedhje. +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/sq/changelogs/40102010.txt b/fastlane/metadata/android/sq/changelogs/40102010.txt new file mode 100644 index 0000000000..6ffe456bd4 --- /dev/null +++ b/fastlane/metadata/android/sq/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Ndryshimet kryesore në këtë version: Mjaft përmirësime në VoIP dhe Hapësira (ende në beta). +Regjistër i plotë ndryshimesh: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/sq/full_description.txt b/fastlane/metadata/android/sq/full_description.txt new file mode 100644 index 0000000000..96cf102272 --- /dev/null +++ b/fastlane/metadata/android/sq/full_description.txt @@ -0,0 +1,39 @@ +Element-i është si aplikacion shkëmbyes i sigurt mesazhesh, ashtu edhe bashkëpunimi prodhimtar ekipi, i cili është ideal për fjalosje në grup, teksa punohet së largët. Ky aplikacion fjalosjeje përdor fshehtëzim skaj-më-skaj për të furnizuar konferencë video, shkëmbim kartelash dhe thirrje me zë të fuqishme. + +<b>Në veçoritë e Element-it përfshihen:</b> +- Mjete të thelluara komunikimi internetor +- Mesazhe plotësisht të fshehtëzuar, për të lejuar komunikim në nivel korporate, madje edhe për punonjës së largëti +- Fjalosje e decentralizuar, bazuar në platformën me burim të hapët Matrix +- Shkëmbim i sigurt kartelash, me të dhëna të fshehtëzuara, teksa administrohen projekte +- Fjalosje video të llojit VoIP dhe tregim ekrani +- Integrim i kollajtë me mjetet tuaja të parapëlqyera të bashkëpunimit internetor, mjete administrimi projektesh, shërbime VoIP dhe aplikacione të tjera shkëmbimi mesazhesh në ekip + +Element-i është plotësisht i ndryshëm nga aplikacione të tjera shkëmbimi mesazhesh dhe bashkëpunimi. Funksionimi i tij bazohet në Matrix, një rrjet i hapët për mesazhe të siguruar dhe komunikim të decentralizuar. Lejon vetëstrehim, për t’u lejuar përdoruesve pronësi dhe kontroll maksimal të të dhënave dhe mesazheve të tyre. + +<b>Privatësi dhe shkëmbim mesazhesh të fshehtëzuar</b> +Element-i ju mbron nga reklama të padëshiruara, shfrytëzim të dhënash dhe vatha dixhitale. Ai siguron gjithashtu krejt të dhënat tuaja, komunikime tek-për-tek me video dhe me zë, përmes fshehtëzimi skaj-më-skaj dhe verifikim “cross-signed” pajisjesh. + +Element-i ju jep kontrollin e privatësisë tuaj, teksa ju lejon të komunikoni në mënyrë të siguruar me këdo në rrjetin Matrix, ose me mjete të tjera bashkëpunimi në shkallë biznesi, duke u integruar me aplikacione të tillë si Slack. + +<b>Element-i mund të vetëstrehohet</b> +Për të lejuar më tepër kontroll mbi të dhënat dhe bisedat tuaja rezervat, Element-i mund të vetëstrehohet, ose mund të zgjidhni cilëndo strehë të bazuar në Matrix - standardi për komunikim me burim të hapët, të decentralizuar. Element-i ju jep privatësi, pajtueshmëri sigurie dhe zhdërvjelltësi integrimesh. + +<b>Jini zot i të dhënave tuaja</b> +Ju vendosni ku të mbahen të dhënat dhe mesazhet tuaja. Pa rrezikun e shfrytëzimit të të dhënave apo hyrjes në to nga palë të treta. + +Element-i ju vë ju në kontroll përmes rrugësh të ndryshme: +1. Merrni një llogari falas te shërbyesi publik matrix.org strehuar nga zhvillues të Matrix-it, ose zgjidhni prej mijëra shërbyesish publikë të strehuar nga vullnetarë +2. Vetëstrehoni llogarinë tuaj duke xhiruar një shërbyes në infrastrukturën tuaj TI +3. Regjistrohuni për një llogari në një shërbyes vetjak, thjesht duke u pajtuar te platforma Element Matrix Services e strehimeve + +<b>Shkëmbim mesazhesh dhe bashkëpunim me burim të hapët</b> +Mund të fjaloseni me këdo në rrjetin Matrix, qoftë kur përdorin Element, një tjetër aplikacion Matrix, apo edhe kur përdorin një tjetër aplikacion shkëmbimi mesazhesh. + +<b>Super i sigurt</b> +Fshehtëzim i njëmendtë skaj-më-skaj (vetëm ata te biseda mund të shfshehtëzojnë mesazhe), dhe verifikim “cross-signed” pajisjesh. + +<b>Komunikim dhe integrim i plotë</b> +Shkëmbim mesazhesh, thirrje me zë dhe me video, shkëmbim kartelash, tregim ekrani dhe një grup i tërë integrimesh, robotësh dhe widget-esh. Krijoni dhoma, bashkësi, mbani lidhjet dhe mbaroni punë. + +<b>Rifillojani atje ku e latë</b> +Jini në dijeni, kudo ku gjendeni, me historik plotësisht të njëkohësuar mesazhesh nëpër krejt pajisjet tuaja dhe në internet te https://app.element.io diff --git a/fastlane/metadata/android/sq/short_description.txt b/fastlane/metadata/android/sq/short_description.txt new file mode 100644 index 0000000000..21937ccce5 --- /dev/null +++ b/fastlane/metadata/android/sq/short_description.txt @@ -0,0 +1 @@ +Mesazhe grupi - mesazhe, fjalosje në grup dhe thirrje me video, të fshehtëzuara diff --git a/fastlane/metadata/android/sq/title.txt b/fastlane/metadata/android/sq/title.txt index b46bbc02b1..097f9c48ea 100644 --- a/fastlane/metadata/android/sq/title.txt +++ b/fastlane/metadata/android/sq/title.txt @@ -1 +1 @@ -Element - Shkëmbyes I Sigurt Mesazhesh +Element - Shkëmbyes i Sigurt Mesazhesh diff --git a/fastlane/metadata/android/uk/changelogs/40102000.txt b/fastlane/metadata/android/uk/changelogs/40102000.txt index 07defcbb57..9abc8c0298 100644 --- a/fastlane/metadata/android/uk/changelogs/40102000.txt +++ b/fastlane/metadata/android/uk/changelogs/40102000.txt @@ -1,2 +1,2 @@ Основні зміни в цій версії: голосові повідомлення типово увімкнено. -Повний журнал змін: https://github.com/vector-im/element-android/releases/tag/v1.1.16 +Повний журнал змін: https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/uk/changelogs/40102010.txt b/fastlane/metadata/android/uk/changelogs/40102010.txt new file mode 100644 index 0000000000..39a8d839b6 --- /dev/null +++ b/fastlane/metadata/android/uk/changelogs/40102010.txt @@ -0,0 +1,2 @@ +Основні зміни в цій версії: багато вдосконалень VoIP і просторів (досі бета) +Повний журнал змін: https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/zh-CN/changelogs/40102000.txt b/fastlane/metadata/android/zh-CN/changelogs/40102000.txt index eedbe81bac..fa1db16805 100644 --- a/fastlane/metadata/android/zh-CN/changelogs/40102000.txt +++ b/fastlane/metadata/android/zh-CN/changelogs/40102000.txt @@ -1,2 +1,2 @@ 此版本中的主要更改:默认启用语音消息。 -完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.1.16 +完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.2.0 diff --git a/fastlane/metadata/android/zh-CN/changelogs/40102010.txt b/fastlane/metadata/android/zh-CN/changelogs/40102010.txt new file mode 100644 index 0000000000..2ec2ae22b3 --- /dev/null +++ b/fastlane/metadata/android/zh-CN/changelogs/40102010.txt @@ -0,0 +1,2 @@ +这个版本的主要变化:VoIP和空间的许多改进(仍在测试中)。 +完整更新日志:https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/fastlane/metadata/android/zh-TW/changelogs/40102010.txt b/fastlane/metadata/android/zh-TW/changelogs/40102010.txt new file mode 100644 index 0000000000..b520266a78 --- /dev/null +++ b/fastlane/metadata/android/zh-TW/changelogs/40102010.txt @@ -0,0 +1,2 @@ +此版本中的主要變動:對 VoIP 與空間功能的諸多改善(仍在測試中)。 +完整的變更紀錄:https://github.com/vector-im/element-android/releases/tag/v1.2.1 diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index 2be6106d41..868ae56bf1 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -31,7 +31,7 @@ android { // that the app's state is completely cleared between tests. testInstrumentationRunnerArguments clearPackageData: 'true' - buildConfigField "String", "SDK_VERSION", "\"1.3.1\"" + buildConfigField "String", "SDK_VERSION", "\"1.3.2\"" buildConfigField "String", "GIT_SDK_REVISION", "\"${gitRevision()}\"" resValue "string", "git_sdk_revision", "\"${gitRevision()}\"" 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 ed809cdb04..03f9f0b707 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 @@ -32,8 +32,16 @@ data class MatrixConfiguration( "https://scalar-staging.riot.im/scalar/api" ), /** - * Optional proxy to connect to the matrix servers - * You can create one using for instance Proxy(proxyType, InetSocketAddress.createUnresolved(hostname, port) + * Optional base url to create client permalinks (eg. https://www.example.com/#/) instead of Matrix ones (matrix.to links). + * Do not forget to add the "#" which is required by the permalink parser. + * + * Note: this field is only used for permalinks creation, you will also have to edit the string-array `permalink_supported_hosts` in the config file + * and add it to your manifest to handle these links in the application. + */ + val clientPermalinkBaseUrl: String? = null, + /** + * Optional proxy to connect to the matrix servers. + * You can create one using for instance Proxy(proxyType, InetSocketAddress.createUnresolved(hostname, port). */ val proxy: Proxy? = null, /** @@ -47,7 +55,7 @@ data class MatrixConfiguration( ) { /** - * Can be implemented by your Application class + * Can be implemented by your Application class. */ interface Provider { fun providesMatrixConfiguration(): MatrixConfiguration diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixToConverter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixToConverter.kt new file mode 100644 index 0000000000..a904e89681 --- /dev/null +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/api/session/permalinks/MatrixToConverter.kt @@ -0,0 +1,55 @@ +/* + * 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.permalinks + +import android.net.Uri + +/** + * Mapping of an input URI to a matrix.to compliant URI. + */ +object MatrixToConverter { + + /** + * Try to convert a URL from an element web instance or from a client permalink to a matrix.to url. + * To be successfully converted, URL path should contain one of the [SUPPORTED_PATHS]. + * Examples: + * - https://riot.im/develop/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org + * - https://app.element.io/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org + * - https://www.example.org/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org + */ + fun convert(uri: Uri): Uri? { + val uriString = uri.toString() + + return when { + // URL is already a matrix.to + uriString.startsWith(PermalinkService.MATRIX_TO_URL_BASE) -> uri + // Web or client url + SUPPORTED_PATHS.any { it in uriString } -> { + val path = SUPPORTED_PATHS.first { it in uriString } + Uri.parse(PermalinkService.MATRIX_TO_URL_BASE + uriString.substringAfter(path)) + } + // URL is not supported + else -> null + } + } + + private val SUPPORTED_PATHS = listOf( + "/#/room/", + "/#/user/", + "/#/group/" + ) +} 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 005a2edae7..edb748c76e 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 @@ -26,6 +26,7 @@ import java.net.URLDecoder * This class turns a uri to a [PermalinkData] * element-based domains (e.g. https://app.element.io/#/user/@chagai95:matrix.org) permalinks * or matrix.to permalinks (e.g. https://matrix.to/#/@chagai95:matrix.org) + * or client permalinks (e.g. <clientPermalinkBaseUrl>user/@chagai95:matrix.org) */ object PermalinkParser { @@ -42,13 +43,15 @@ object PermalinkParser { * https://github.com/matrix-org/matrix-doc/blob/master/proposals/1704-matrix.to-permalinks.md */ fun parse(uri: Uri): PermalinkData { - if (!uri.toString().startsWith(PermalinkService.MATRIX_TO_URL_BASE)) { - return PermalinkData.FallbackLink(uri) - } + // the client or element-based domain permalinks (e.g. https://app.element.io/#/user/@chagai95:matrix.org) don't have the + // mxid in the first param (like matrix.to does - https://matrix.to/#/@chagai95:matrix.org) but rather in the second after /user/ so /user/mxid + // so convert URI to matrix.to to simplify parsing process + val matrixToUri = MatrixToConverter.convert(uri) ?: return PermalinkData.FallbackLink(uri) + // We can't use uri.fragment as it is decoding to early and it will break the parsing // of parameters that represents url (like signurl) - val fragment = uri.toString().substringAfter("#") // uri.fragment - if (fragment.isNullOrEmpty()) { + val fragment = matrixToUri.toString().substringAfter("#") // uri.fragment + if (fragment.isEmpty()) { return PermalinkData.FallbackLink(uri) } val safeFragment = fragment.substringBefore('?') @@ -61,20 +64,14 @@ object PermalinkParser { .map { URLDecoder.decode(it, "UTF-8") } .take(2) - // the element-based domain permalinks (e.g. https://app.element.io/#/user/@chagai95:matrix.org) don't have the - // mxid in the first param (like matrix.to does - https://matrix.to/#/@chagai95:matrix.org) but rather in the second after /user/ so /user/mxid - var identifier = params.getOrNull(0) - if (identifier.equals("user")) { - identifier = params.getOrNull(1) - } - + val identifier = params.getOrNull(0) val extraParameter = params.getOrNull(1) return when { identifier.isNullOrEmpty() -> PermalinkData.FallbackLink(uri) MatrixPatterns.isUserId(identifier) -> PermalinkData.UserLink(userId = identifier) MatrixPatterns.isGroupId(identifier) -> PermalinkData.GroupLink(groupId = identifier) MatrixPatterns.isRoomId(identifier) -> { - handleRoomIdCase(fragment, identifier, uri, extraParameter, viaQueryParameters) + handleRoomIdCase(fragment, identifier, matrixToUri, extraParameter, viaQueryParameters) } MatrixPatterns.isRoomAlias(identifier) -> { PermalinkData.RoomLink( @@ -125,12 +122,13 @@ object PermalinkParser { } } - private fun safeExtractParams(fragment: String) = fragment.substringAfter("?").split('&').mapNotNull { - val splitNameValue = it.split("=") - if (splitNameValue.size == 2) { - Pair(splitNameValue[0], URLDecoder.decode(splitNameValue[1], "UTF-8")) - } else null - } + private fun safeExtractParams(fragment: String) = + fragment.substringAfter("?").split('&').mapNotNull { + val splitNameValue = it.split("=") + if (splitNameValue.size == 2) { + Pair(splitNameValue[0], URLDecoder.decode(splitNameValue[1], "UTF-8")) + } else null + } private fun String.getViaParameters(): List<String> { return UrlQuerySanitizer(this) @@ -138,9 +136,7 @@ object PermalinkParser { .filter { it.mParameter == "via" }.map { - it.mValue.let { - URLDecoder.decode(it, "UTF-8") - } + URLDecoder.decode(it.mValue, "UTF-8") } } } 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 a6d4583c76..920dc85c7a 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 @@ -19,7 +19,8 @@ package org.matrix.android.sdk.api.session.permalinks import org.matrix.android.sdk.api.session.events.model.Event /** - * Useful methods to create Matrix permalink (matrix.to links). + * Useful methods to create permalink (like matrix.to links or client permalinks). + * See [org.matrix.android.sdk.api.MatrixConfiguration.clientPermalinkBaseUrl] to setup a custom permalink base url. */ interface PermalinkService { @@ -32,10 +33,11 @@ interface PermalinkService { * Ex: "https://matrix.to/#/!nbzmcXAqpxBXjAdgoX:matrix.org/$1531497316352799BevdV:matrix.org" * * @param event the event + * @param forceMatrixTo whether we should force using matrix.to base URL * * @return the permalink, or null in case of error */ - fun createPermalink(event: Event): String? + fun createPermalink(event: Event, forceMatrixTo: Boolean = false): String? /** * Creates a permalink for an id (can be a user Id, etc.). @@ -43,18 +45,21 @@ interface PermalinkService { * Ex: "https://matrix.to/#/@benoit:matrix.org" * * @param id the id + * @param forceMatrixTo whether we should force using matrix.to base URL + * * @return the permalink, or null in case of error */ - fun createPermalink(id: String): String? + fun createPermalink(id: String, forceMatrixTo: Boolean = false): String? /** * Creates a permalink for a roomId, including the via parameters * * @param roomId the room id + * @param forceMatrixTo whether we should force using matrix.to base URL * * @return the permalink, or null in case of error */ - fun createRoomPermalink(roomId: String, viaServers: List<String>? = null): String? + fun createRoomPermalink(roomId: String, viaServers: List<String>? = null, forceMatrixTo: Boolean = false): String? /** * Creates a permalink for an event. If you have an event you can use [createPermalink] @@ -62,10 +67,11 @@ interface PermalinkService { * * @param roomId the id of the room * @param eventId the id of the event + * @param forceMatrixTo whether we should force using matrix.to base URL * * @return the permalink */ - fun createPermalink(roomId: String, eventId: String): String + fun createPermalink(roomId: String, eventId: String, forceMatrixTo: Boolean = false): String /** * Extract the linked id from the universal link 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 134da4ce51..144ebb5404 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 @@ -18,33 +18,29 @@ package org.matrix.android.sdk.internal.session.permalinks import org.matrix.android.sdk.api.session.events.model.Event import org.matrix.android.sdk.api.session.permalinks.PermalinkService -import org.matrix.android.sdk.api.session.permalinks.PermalinkService.Companion.MATRIX_TO_URL_BASE import javax.inject.Inject internal class DefaultPermalinkService @Inject constructor( private val permalinkFactory: PermalinkFactory ) : PermalinkService { - override fun createPermalink(event: Event): String? { - return permalinkFactory.createPermalink(event) + override fun createPermalink(event: Event, forceMatrixTo: Boolean): String? { + return permalinkFactory.createPermalink(event, forceMatrixTo) } - override fun createPermalink(id: String): String? { - return permalinkFactory.createPermalink(id) + override fun createPermalink(id: String, forceMatrixTo: Boolean): String? { + return permalinkFactory.createPermalink(id, forceMatrixTo) } - override fun createRoomPermalink(roomId: String, viaServers: List<String>?): String? { - return permalinkFactory.createRoomPermalink(roomId, viaServers) + override fun createRoomPermalink(roomId: String, viaServers: List<String>?, forceMatrixTo: Boolean): String? { + return permalinkFactory.createRoomPermalink(roomId, viaServers, forceMatrixTo) } - override fun createPermalink(roomId: String, eventId: String): String { - return permalinkFactory.createPermalink(roomId, eventId) + override fun createPermalink(roomId: String, eventId: String, forceMatrixTo: Boolean): String { + return permalinkFactory.createPermalink(roomId, eventId, forceMatrixTo) } override fun getLinkedId(url: String): String? { - return url - .takeIf { it.startsWith(MATRIX_TO_URL_BASE) } - ?.substring(MATRIX_TO_URL_BASE.length) - ?.substringBeforeLast("?") + return permalinkFactory.getLinkedId(url) } } 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 639e45582a..39c1ddfdce 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 @@ -16,7 +16,11 @@ package org.matrix.android.sdk.internal.session.permalinks +import org.matrix.android.sdk.api.MatrixConfiguration +import org.matrix.android.sdk.api.MatrixPatterns import org.matrix.android.sdk.api.session.events.model.Event +import org.matrix.android.sdk.api.session.permalinks.PermalinkData +import org.matrix.android.sdk.api.session.permalinks.PermalinkParser import org.matrix.android.sdk.api.session.permalinks.PermalinkService.Companion.MATRIX_TO_URL_BASE import org.matrix.android.sdk.internal.di.UserId import javax.inject.Inject @@ -24,28 +28,44 @@ import javax.inject.Inject internal class PermalinkFactory @Inject constructor( @UserId private val userId: String, - private val viaParameterFinder: ViaParameterFinder + private val viaParameterFinder: ViaParameterFinder, + private val matrixConfiguration: MatrixConfiguration ) { - fun createPermalink(event: Event): String? { + fun createPermalink(event: Event, forceMatrixTo: Boolean): String? { if (event.roomId.isNullOrEmpty() || event.eventId.isNullOrEmpty()) { return null } - return createPermalink(event.roomId, event.eventId) + return createPermalink(event.roomId, event.eventId, forceMatrixTo) } - fun createPermalink(id: String): String? { - return if (id.isEmpty()) { - null - } else MATRIX_TO_URL_BASE + escape(id) + fun createPermalink(id: String, forceMatrixTo: Boolean): String? { + return when { + id.isEmpty() -> null + !useClientFormat(forceMatrixTo) -> MATRIX_TO_URL_BASE + escape(id) + else -> { + buildString { + append(matrixConfiguration.clientPermalinkBaseUrl) + when { + MatrixPatterns.isRoomId(id) || MatrixPatterns.isRoomAlias(id) -> append(ROOM_PATH) + MatrixPatterns.isUserId(id) -> append(USER_PATH) + MatrixPatterns.isGroupId(id) -> append(GROUP_PATH) + } + append(escape(id)) + } + } + } } - fun createRoomPermalink(roomId: String, via: List<String>? = null): String? { + fun createRoomPermalink(roomId: String, via: List<String>? = null, forceMatrixTo: Boolean): String? { return if (roomId.isEmpty()) { null } else { buildString { - append(MATRIX_TO_URL_BASE) + append(baseUrl(forceMatrixTo)) + if (useClientFormat(forceMatrixTo)) { + append(ROOM_PATH) + } append(escape(roomId)) append( via?.takeIf { it.isNotEmpty() }?.let { viaParameterFinder.asUrlViaParameters(it) } @@ -55,16 +75,34 @@ internal class PermalinkFactory @Inject constructor( } } - fun createPermalink(roomId: String, eventId: String): String { - return MATRIX_TO_URL_BASE + escape(roomId) + "/" + escape(eventId) + viaParameterFinder.computeViaParams(userId, roomId) + fun createPermalink(roomId: String, eventId: String, forceMatrixTo: Boolean): String { + return buildString { + append(baseUrl(forceMatrixTo)) + if (useClientFormat(forceMatrixTo)) { + append(ROOM_PATH) + } + append(escape(roomId)) + append("/") + append(escape(eventId)) + append(viaParameterFinder.computeViaParams(userId, roomId)) + } } fun getLinkedId(url: String): String? { - val isSupported = url.startsWith(MATRIX_TO_URL_BASE) - - return if (isSupported) { - url.substring(MATRIX_TO_URL_BASE.length) - } else null + val clientBaseUrl = matrixConfiguration.clientPermalinkBaseUrl + return when { + url.startsWith(MATRIX_TO_URL_BASE) -> url.substring(MATRIX_TO_URL_BASE.length) + clientBaseUrl != null && url.startsWith(clientBaseUrl) -> { + when (PermalinkParser.parse(url)) { + is PermalinkData.GroupLink -> url.substring(clientBaseUrl.length + GROUP_PATH.length) + is PermalinkData.RoomLink -> url.substring(clientBaseUrl.length + ROOM_PATH.length) + is PermalinkData.UserLink -> url.substring(clientBaseUrl.length + USER_PATH.length) + else -> null + } + } + else -> null + } + ?.substringBeforeLast("?") } /** @@ -86,4 +124,28 @@ internal class PermalinkFactory @Inject constructor( private fun unescape(id: String): String { return id.replace("%2F", "/") } + + /** + * Get the permalink base URL according to the potential one in [MatrixConfiguration.clientPermalinkBaseUrl] + * and the [forceMatrixTo] parameter. + * + * @param forceMatrixTo whether we should force using matrix.to base URL. + * + * @return the permalink base URL. + */ + private fun baseUrl(forceMatrixTo: Boolean): String { + return matrixConfiguration.clientPermalinkBaseUrl + ?.takeUnless { forceMatrixTo } + ?: MATRIX_TO_URL_BASE + } + + private fun useClientFormat(forceMatrixTo: Boolean): Boolean { + return !forceMatrixTo && matrixConfiguration.clientPermalinkBaseUrl != null + } + + companion object { + private const val ROOM_PATH = "room/" + private const val USER_PATH = "user/" + private const val GROUP_PATH = "group/" + } } 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 c610326a94..8dd0c59387 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 @@ -165,8 +165,8 @@ internal class LocalEchoEventFactory @Inject constructor( newBodyAutoMarkdown: Boolean, msgType: String, compatibilityText: String): Event { - val permalink = permalinkFactory.createPermalink(roomId, originalEvent.root.eventId ?: "") - val userLink = originalEvent.root.senderId?.let { permalinkFactory.createPermalink(it) } ?: "" + val permalink = permalinkFactory.createPermalink(roomId, originalEvent.root.eventId ?: "", false) + val userLink = originalEvent.root.senderId?.let { permalinkFactory.createPermalink(it, false) } ?: "" val body = bodyForReply(originalEvent.getLastMessageContent(), originalEvent.isReply()) val replyFormatted = REPLY_PATTERN.format( @@ -350,9 +350,9 @@ internal class LocalEchoEventFactory @Inject constructor( autoMarkdown: Boolean): Event? { // Fallbacks and event representation // TODO Add error/warning logs when any of this is null - val permalink = permalinkFactory.createPermalink(eventReplied.root) ?: return null + val permalink = permalinkFactory.createPermalink(eventReplied.root, false) ?: return null val userId = eventReplied.root.senderId ?: return null - val userLink = permalinkFactory.createPermalink(userId) ?: return null + val userLink = permalinkFactory.createPermalink(userId, false) ?: return null val body = bodyForReply(eventReplied.getLastMessageContent(), eventReplied.isReply()) val replyFormatted = REPLY_PATTERN.format( diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt index 7d93e30191..4bc866b36d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/sync/InitialSyncStrategy.kt @@ -39,7 +39,7 @@ sealed class InitialSyncStrategy { * Limit to reach to decide to split the init sync response into smaller files * Empiric value: 1 megabytes */ - val minSizeToSplit: Long = 1024 * 1024, + val minSizeToSplit: Long = 1_048_576, // 1024 * 1024 /** * Limit per room to reach to decide to store a join room ephemeral Events into a file * Empiric value: 1 kilobytes diff --git a/tools/release/pushPlayStoreMetaData.sh b/tools/release/pushPlayStoreMetaData.sh index 35833bfcc6..fe7cf7eca6 100755 --- a/tools/release/pushPlayStoreMetaData.sh +++ b/tools/release/pushPlayStoreMetaData.sh @@ -59,24 +59,6 @@ else removeShortDes_si=1 fi -if [[ -f "./fastlane/metadata/android/sq/short_description.txt" ]]; then - echo "It appears that file ./fastlane/metadata/android/sq/short_description.txt now exists. This can be removed." - removeShortDes_sq=0 -else - echo "Copy default short description to ./fastlane/metadata/android/sq" - cp ./fastlane/metadata/android/en-US/short_description.txt ./fastlane/metadata/android/sq - removeShortDes_sq=1 -fi - -if [[ -f "./fastlane/metadata/android/sq/full_description.txt" ]]; then - echo "It appears that file ./fastlane/metadata/android/sq/full_description.txt now exists. This can be removed." - removeFullDes_sq=0 -else - echo "Copy default full description to ./fastlane/metadata/android/sq" - cp ./fastlane/metadata/android/en-US/full_description.txt ./fastlane/metadata/android/sq - removeFullDes_sq=1 -fi - if [[ -f "./fastlane/metadata/android/th/full_description.txt" ]]; then echo "It appears that file ./fastlane/metadata/android/th/full_description.txt now exists. This can be removed." removeFullDes_th=0 @@ -117,18 +99,10 @@ if [[ ${removeShortDes_si} -eq 1 ]]; then rm ./fastlane/metadata/android/si-LK/short_description.txt fi -if [[ ${removeShortDes_sq} -eq 1 ]]; then - rm ./fastlane/metadata/android/sq/short_description.txt -fi - if [[ ${removeFullDes_th} -eq 1 ]]; then rm ./fastlane/metadata/android/th/full_description.txt fi -if [[ ${removeFullDes_sq} -eq 1 ]]; then - rm ./fastlane/metadata/android/sq/full_description.txt -fi - if [[ ${removeFullDes_vi} -eq 1 ]]; then rm ./fastlane/metadata/android/vi/full_description.txt fi diff --git a/vector/build.gradle b/vector/build.gradle index b3658acb00..f2cb2831bd 100644 --- a/vector/build.gradle +++ b/vector/build.gradle @@ -14,7 +14,7 @@ kapt { // Note: 2 digits max for each value ext.versionMajor = 1 ext.versionMinor = 3 -ext.versionPatch = 1 +ext.versionPatch = 2 static def getGitTimestamp() { def cmd = 'git show -s --format=%ct' @@ -412,7 +412,7 @@ dependencies { implementation 'com.nulab-inc:zxcvbn:1.5.2' // To convert voice message on old platforms - implementation 'com.arthenica:ffmpeg-kit-audio:4.4.LTS' + implementation 'com.arthenica:ffmpeg-kit-audio:4.5.LTS' // Alerter implementation 'com.tapadoo.android:alerter:7.0.1' @@ -420,7 +420,7 @@ dependencies { implementation 'com.otaliastudios:autocomplete:1.1.0' // Shake detection - implementation 'com.squareup:seismic:1.0.2' + implementation 'com.squareup:seismic:1.0.3' // Image Loading implementation libs.github.bigImageViewer diff --git a/vector/src/main/AndroidManifest.xml b/vector/src/main/AndroidManifest.xml index 6c9453a564..61867521d5 100644 --- a/vector/src/main/AndroidManifest.xml +++ b/vector/src/main/AndroidManifest.xml @@ -83,6 +83,10 @@ android:name="android.max_aspect" android:value="9.9" /> + <meta-data + android:name="com.google.android.gms.car.application" + android:resource="@xml/automotive_app_desc" /> + <activity android:name=".features.MainActivity" android:theme="@style/Theme.Vector.Launcher" /> @@ -105,8 +109,8 @@ <activity android:name=".features.home.HomeActivity" /> <activity android:name=".features.login.LoginActivity" - android:launchMode="singleTask" android:enabled="@bool/useLoginV1" + android:launchMode="singleTask" android:windowSoftInputMode="adjustResize"> <!-- Add intent filter to handle redirection URL after SSO login in external browser --> <intent-filter> @@ -122,8 +126,8 @@ </activity> <activity android:name=".features.login2.LoginActivity2" - android:launchMode="singleTask" android:enabled="@bool/useLoginV2" + android:launchMode="singleTask" android:windowSoftInputMode="adjustResize"> <!-- Add intent filter to handle redirection URL after SSO login in external browser --> <intent-filter> @@ -180,7 +184,12 @@ <activity android:name=".features.createdirect.CreateDirectRoomActivity" /> <activity android:name=".features.invite.InviteUsersToRoomActivity" /> <activity android:name=".features.webview.VectorWebViewActivity" /> - <activity android:name=".features.link.LinkHandlerActivity"> + + <!-- Activity to intercept links coming from a web instance --> + <activity + android:name=".features.link.LinkHandlerActivity" + android:enabled="true" + android:exported="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> @@ -196,6 +205,32 @@ </intent-filter> </activity> + <!-- Activity alias for matrix.to or element permalinks --> + <activity-alias + android:name=".features.permalink.PermalinkHandlerActivity" + android:enabled="true" + android:exported="true" + android:launchMode="singleTask" + android:targetActivity=".features.link.LinkHandlerActivity"> + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + + <category android:name="android.intent.category.DEFAULT" /> + <category android:name="android.intent.category.BROWSABLE" /> + + <data android:scheme="http" /> + <data android:scheme="https" /> + <data android:host="matrix.to" /> + <data + android:host="user" + android:scheme="element" /> + <data + android:host="room" + android:scheme="element" /> + + </intent-filter> + </activity-alias> + <activity android:name=".features.share.IncomingShareActivity" android:parentActivityName=".features.home.HomeActivity"> @@ -230,27 +265,6 @@ <activity android:name=".features.signout.soft.SoftLogoutActivity" android:windowSoftInputMode="adjustResize" /> - <activity - android:name=".features.permalink.PermalinkHandlerActivity" - android:launchMode="singleTask"> - <intent-filter> - <action android:name="android.intent.action.VIEW" /> - - <category android:name="android.intent.category.DEFAULT" /> - <category android:name="android.intent.category.BROWSABLE" /> - - <data android:scheme="http" /> - <data android:scheme="https" /> - <data android:host="matrix.to" /> - <data - android:host="user" - android:scheme="element" /> - <data - android:host="room" - android:scheme="element" /> - - </intent-filter> - </activity> <activity android:name=".features.roommemberprofile.RoomMemberProfileActivity" @@ -271,12 +285,12 @@ android:name=".features.attachments.preview.AttachmentsPreviewActivity" android:theme="@style/Theme.Vector.Black.AttachmentsPreview" /> <activity - android:supportsPictureInPicture="true" - android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" android:name=".features.call.VectorCallActivity" + android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" + android:excludeFromRecents="true" android:launchMode="singleTask" - android:taskAffinity=".features.call.VectorCallActivity" - android:excludeFromRecents="true" /> + android:supportsPictureInPicture="true" + android:taskAffinity=".features.call.VectorCallActivity" /> <!-- PIP Support https://developer.android.com/guide/topics/ui/picture-in-picture --> <activity android:name=".features.call.conference.VectorJitsiActivity" 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 a02b5256a5..76b511d2bd 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 @@ -62,7 +62,6 @@ import im.vector.app.features.matrixto.MatrixToBottomSheet import im.vector.app.features.media.BigImageViewerActivity import im.vector.app.features.media.VectorAttachmentViewerActivity import im.vector.app.features.navigation.Navigator -import im.vector.app.features.permalink.PermalinkHandlerActivity import im.vector.app.features.pin.PinLocker import im.vector.app.features.qrcode.QrCodeScannerActivity import im.vector.app.features.rageshake.BugReportActivity @@ -155,7 +154,6 @@ interface ScreenComponent { fun inject(activity: CreateDirectRoomActivity) fun inject(activity: IncomingShareActivity) fun inject(activity: SoftLogoutActivity) - fun inject(activity: PermalinkHandlerActivity) fun inject(activity: QrCodeScannerActivity) fun inject(activity: DebugMenuActivity) fun inject(activity: SharedSecureStorageActivity) diff --git a/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRadioActionItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRadioActionItem.kt index 91361aa89d..8899532d04 100644 --- a/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRadioActionItem.kt +++ b/vector/src/main/java/im/vector/app/core/epoxy/bottomsheet/BottomSheetRadioActionItem.kt @@ -27,6 +27,7 @@ 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.setAttributeTintedImageResource import im.vector.app.core.extensions.setTextOrHide /** @@ -62,7 +63,7 @@ abstract class BottomSheetRadioActionItem : VectorEpoxyModel<BottomSheetRadioAct holder.descriptionText.setTextOrHide(description) if (selected) { - holder.radioImage.setImageDrawable(ContextCompat.getDrawable(holder.view.context, R.drawable.ic_radio_on)) + holder.radioImage.setAttributeTintedImageResource(R.drawable.ic_radio_on, R.attr.colorPrimary) holder.radioImage.contentDescription = holder.view.context.getString(R.string.a11y_checked) } else { holder.radioImage.setImageDrawable(ContextCompat.getDrawable(holder.view.context, R.drawable.ic_radio_off)) diff --git a/vector/src/main/java/im/vector/app/core/epoxy/profiles/notifications/RadioButtonItem.kt b/vector/src/main/java/im/vector/app/core/epoxy/profiles/notifications/RadioButtonItem.kt index 37d16ab6b1..721d84e050 100644 --- a/vector/src/main/java/im/vector/app/core/epoxy/profiles/notifications/RadioButtonItem.kt +++ b/vector/src/main/java/im/vector/app/core/epoxy/profiles/notifications/RadioButtonItem.kt @@ -27,6 +27,7 @@ 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.setAttributeTintedImageResource @EpoxyModelClass(layout = R.layout.item_radio) abstract class RadioButtonItem : VectorEpoxyModel<RadioButtonItem.Holder>() { @@ -54,7 +55,7 @@ abstract class RadioButtonItem : VectorEpoxyModel<RadioButtonItem.Holder>() { } if (selected) { - holder.radioImage.setImageDrawable(ContextCompat.getDrawable(holder.view.context, R.drawable.ic_radio_on)) + holder.radioImage.setAttributeTintedImageResource(R.drawable.ic_radio_on, R.attr.colorPrimary) holder.radioImage.contentDescription = holder.view.context.getString(R.string.a11y_checked) } else { holder.radioImage.setImageDrawable(ContextCompat.getDrawable(holder.view.context, R.drawable.ic_radio_off)) diff --git a/vector/src/main/java/im/vector/app/core/extensions/ViewExtensions.kt b/vector/src/main/java/im/vector/app/core/extensions/ViewExtensions.kt index b28f33816b..54fcac42d1 100644 --- a/vector/src/main/java/im/vector/app/core/extensions/ViewExtensions.kt +++ b/vector/src/main/java/im/vector/app/core/extensions/ViewExtensions.kt @@ -22,9 +22,14 @@ import android.view.View import android.view.ViewGroup import android.widget.EditText import android.widget.ImageView +import androidx.annotation.AttrRes +import androidx.annotation.DrawableRes import androidx.appcompat.widget.SearchView +import androidx.core.content.ContextCompat +import androidx.core.graphics.drawable.DrawableCompat import androidx.core.view.isVisible import im.vector.app.R +import im.vector.app.features.themes.ThemeUtils /** * Remove left margin of a SearchView @@ -58,3 +63,20 @@ fun ImageView.setDrawableOrHide(drawableRes: Drawable?) { setImageDrawable(drawableRes) isVisible = drawableRes != null } + +fun View.setAttributeTintedBackground(@DrawableRes drawableRes: Int, @AttrRes tint: Int) { + val drawable = ContextCompat.getDrawable(context, drawableRes)!! + DrawableCompat.setTint(drawable, ThemeUtils.getColor(context, tint)) + background = drawable +} + +fun ImageView.setAttributeTintedImageResource(@DrawableRes drawableRes: Int, @AttrRes tint: Int) { + val drawable = ContextCompat.getDrawable(context, drawableRes)!! + DrawableCompat.setTint(drawable, ThemeUtils.getColor(context, tint)) + setImageDrawable(drawable) +} + +fun View.setAttributeBackground(@AttrRes attributeId: Int) { + val attribute = ThemeUtils.getAttribute(context, attributeId)!! + setBackgroundResource(attribute.resourceId) +} 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 9a5fc4ca06..b4ff9ab22c 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 @@ -76,7 +76,6 @@ class SharedSecureStorageViewModel @AssistedInject constructor( } init { - setState { copy(userId = session.myUserId) } @@ -167,10 +166,14 @@ class SharedSecureStorageViewModel @AssistedInject constructor( if (state.checkingSSSSAction is Loading) return@withState // ignore when (state.step) { SharedSecureStorageViewState.Step.EnterKey -> { - setState { - copy( - step = SharedSecureStorageViewState.Step.EnterPassphrase - ) + if (state.hasPassphrase) { + setState { + copy( + step = SharedSecureStorageViewState.Step.EnterPassphrase + ) + } + } else { + _viewEvents.post(SharedSecureStorageViewEvent.Dismiss) } } SharedSecureStorageViewState.Step.ResetAll -> { 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 4b12237bdf..1513431196 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 @@ -51,6 +51,9 @@ import im.vector.app.features.navigation.Navigator import im.vector.app.features.notifications.NotificationDrawerManager import im.vector.app.features.permalink.NavigationInterceptor import im.vector.app.features.permalink.PermalinkHandler +import im.vector.app.features.permalink.PermalinkHandler.Companion.MATRIX_TO_CUSTOM_SCHEME_URL_BASE +import im.vector.app.features.permalink.PermalinkHandler.Companion.ROOM_LINK_PREFIX +import im.vector.app.features.permalink.PermalinkHandler.Companion.USER_LINK_PREFIX import im.vector.app.features.popup.DefaultVectorAlert import im.vector.app.features.popup.PopupAlertManager import im.vector.app.features.popup.VerificationVectorAlert @@ -272,20 +275,19 @@ class HomeActivity : private fun handleIntent(intent: Intent?) { intent?.dataString?.let { deepLink -> val resolvedLink = when { - deepLink.startsWith(PermalinkService.MATRIX_TO_URL_BASE) -> deepLink - deepLink.startsWith(MATRIX_TO_CUSTOM_SCHEME_URL_BASE) -> { - // This is a bit ugly, but for now just convert to matrix.to link for compatibility - when { + // Element custom scheme is not handled by the sdk, convert it to matrix.to link for compatibility + deepLink.startsWith(MATRIX_TO_CUSTOM_SCHEME_URL_BASE) -> { + val let = when { deepLink.startsWith(USER_LINK_PREFIX) -> deepLink.substring(USER_LINK_PREFIX.length) deepLink.startsWith(ROOM_LINK_PREFIX) -> deepLink.substring(ROOM_LINK_PREFIX.length) else -> null - }?.let { - activeSessionHolder.getSafeActiveSession()?.permalinkService()?.createPermalink(it) + }?.let { permalinkId -> + activeSessionHolder.getSafeActiveSession()?.permalinkService()?.createPermalink(permalinkId) } + let } - else -> return@let + else -> deepLink } - permalinkHandler.launch( context = this, deepLink = resolvedLink, @@ -296,9 +298,11 @@ class HomeActivity : .observeOn(AndroidSchedulers.mainThread()) .subscribe { isHandled -> if (!isHandled) { + val isMatrixToLink = deepLink.startsWith(PermalinkService.MATRIX_TO_URL_BASE) + || deepLink.startsWith(MATRIX_TO_CUSTOM_SCHEME_URL_BASE) MaterialAlertDialogBuilder(this) .setTitle(R.string.dialog_title_error) - .setMessage(R.string.permalink_malformed) + .setMessage(if (isMatrixToLink) R.string.permalink_malformed else R.string.universal_link_malformed) .setPositiveButton(R.string.ok, null) .show() } @@ -579,10 +583,6 @@ class HomeActivity : putExtra(MvRx.KEY_ARG, args) } } - - private const val MATRIX_TO_CUSTOM_SCHEME_URL_BASE = "element://" - private const val ROOM_LINK_PREFIX = "${MATRIX_TO_CUSTOM_SCHEME_URL_BASE}room/" - private const val USER_LINK_PREFIX = "${MATRIX_TO_CUSTOM_SCHEME_URL_BASE}user/" } override fun create(initialState: ActiveSpaceViewState) = promoteRestrictedViewModelFactory.create(initialState) diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt index 5f4f53cf1e..1749c955c9 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/composer/VoiceMessageRecorderView.kt @@ -27,6 +27,9 @@ import androidx.core.view.isVisible import androidx.core.view.updateLayoutParams import im.vector.app.BuildConfig import im.vector.app.R +import im.vector.app.core.extensions.setAttributeBackground +import im.vector.app.core.extensions.setAttributeTintedBackground +import im.vector.app.core.extensions.setAttributeTintedImageResource import im.vector.app.core.hardware.vibrate import im.vector.app.core.utils.CountUpTimer import im.vector.app.core.utils.DimensionConverter @@ -217,7 +220,7 @@ class VoiceMessageRecorderView: ConstraintLayout, VoiceMessagePlaybackTracker.Li views.voiceMessageLockArrow.translationY = 0F } RecordingState.LOCKING -> { - views.voiceMessageLockImage.setImageResource(R.drawable.ic_voice_message_locked) + views.voiceMessageLockImage.setAttributeTintedImageResource(R.drawable.ic_voice_message_locked, R.attr.colorPrimary) val translationAmount = -distanceY.coerceIn(0F, distanceToLock) views.voiceMessageMicButton.translationY = translationAmount views.voiceMessageLockArrow.translationY = translationAmount @@ -366,6 +369,7 @@ class VoiceMessageRecorderView: ConstraintLayout, VoiceMessagePlaybackTracker.Li private fun showRecordingViews() { views.voiceMessageMicButton.setImageResource(R.drawable.ic_voice_mic_recording) + views.voiceMessageMicButton.setAttributeTintedBackground(R.drawable.circle_with_halo, R.attr.colorPrimary) views.voiceMessageMicButton.updateLayoutParams<MarginLayoutParams> { setMargins(0, 0, 0, 0) } @@ -443,6 +447,7 @@ class VoiceMessageRecorderView: ConstraintLayout, VoiceMessagePlaybackTracker.Li private fun resetMicButtonUi() { views.voiceMessageMicButton.isVisible = true views.voiceMessageMicButton.setImageResource(R.drawable.ic_voice_mic) + views.voiceMessageMicButton.setAttributeBackground(android.R.attr.selectableItemBackgroundBorderless) views.voiceMessageMicButton.updateLayoutParams<MarginLayoutParams> { if (rtlXMultiplier == -1) { // RTL diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt index 4c018c8a99..c97fae055d 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/url/PreviewUrlRetriever.kt @@ -146,7 +146,7 @@ class PreviewUrlRetriever(session: Session, companion object { // One week in millis - private const val CACHE_VALIDITY: Long = 7 * 24 * 3_600 * 1_000 + private const val CACHE_VALIDITY = 604_800_000L // 7 * 24 * 3_600 * 1_000 private val blockedDomains = listOf( "https://matrix.to", diff --git a/vector/src/main/java/im/vector/app/features/link/LinkHandlerActivity.kt b/vector/src/main/java/im/vector/app/features/link/LinkHandlerActivity.kt index a0b8efd5aa..39105185b1 100644 --- a/vector/src/main/java/im/vector/app/features/link/LinkHandlerActivity.kt +++ b/vector/src/main/java/im/vector/app/features/link/LinkHandlerActivity.kt @@ -27,13 +27,12 @@ import im.vector.app.core.error.ErrorFormatter import im.vector.app.core.platform.VectorBaseActivity import im.vector.app.core.utils.toast import im.vector.app.databinding.ActivityProgressBinding +import im.vector.app.features.home.HomeActivity import im.vector.app.features.login.LoginConfig import im.vector.app.features.permalink.PermalinkHandler -import io.reactivex.android.schedulers.AndroidSchedulers import kotlinx.coroutines.launch import org.matrix.android.sdk.api.session.permalinks.PermalinkService import timber.log.Timber -import java.util.concurrent.TimeUnit import javax.inject.Inject /** @@ -45,30 +44,38 @@ class LinkHandlerActivity : VectorBaseActivity<ActivityProgressBinding>() { @Inject lateinit var errorFormatter: ErrorFormatter @Inject lateinit var permalinkHandler: PermalinkHandler + override fun getBinding() = ActivityProgressBinding.inflate(layoutInflater) + override fun injectWith(injector: ScreenComponent) { injector.inject(this) } - override fun getBinding() = ActivityProgressBinding.inflate(layoutInflater) - override fun initUiAndData() { + handleIntent() + } + + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + handleIntent() + } + + private fun handleIntent() { val uri = intent.data - - if (uri == null) { - // Should not happen - Timber.w("Uri is null") - finish() - return - } - - if (uri.getQueryParameter(LoginConfig.CONFIG_HS_PARAMETER) != null) { - handleConfigUrl(uri) - } else if (SUPPORTED_HOSTS.contains(uri.host)) { - handleSupportedHostUrl(uri) - } else { - // Other links are not yet handled, but should not come here (manifest configuration error?) - toast(R.string.universal_link_malformed) - finish() + when { + uri == null -> { + // Should not happen + Timber.w("Uri is null") + finish() + } + uri.getQueryParameter(LoginConfig.CONFIG_HS_PARAMETER) != null -> handleConfigUrl(uri) + uri.toString().startsWith(PermalinkService.MATRIX_TO_URL_BASE) -> handleSupportedHostUrl() + uri.toString().startsWith(PermalinkHandler.MATRIX_TO_CUSTOM_SCHEME_URL_BASE) -> handleSupportedHostUrl() + resources.getStringArray(R.array.permalink_supported_hosts).contains(uri.host) -> handleSupportedHostUrl() + else -> { + // Other links are not yet handled, but should not come here (manifest configuration error?) + toast(R.string.universal_link_malformed) + finish() + } } } @@ -81,53 +88,28 @@ class LinkHandlerActivity : VectorBaseActivity<ActivityProgressBinding>() { } } - private fun handleSupportedHostUrl(uri: Uri) { + private fun handleSupportedHostUrl() { + // If we are not logged in, open login screen. + // In the future, we might want to relaunch the process after login. if (!sessionHolder.hasActiveSession()) { - startLoginActivity(uri) - finish() - } else { - convertUriToPermalink(uri)?.let { permalink -> - startPermalinkHandler(permalink) - } ?: run { - // Host is correct but we do not recognize path - Timber.w("Unable to handle this uri: $uri") - finish() - } + startLoginActivity() + return } + + // We forward intent to HomeActivity (singleTask) to avoid the dueling app problem + // https://stackoverflow.com/questions/25884954/deep-linking-and-multiple-app-instances + intent.setClass(this, HomeActivity::class.java) + intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP + startActivity(intent) } /** - * Convert a URL of element web instance to a matrix.to url - * Examples: - * - https://riot.im/develop/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org - * - https://app.element.io/#/room/#element-android:matrix.org -> https://matrix.to/#/#element-android:matrix.org + * Start the login screen with identity server and homeserver pre-filled, if any */ - private fun convertUriToPermalink(uri: Uri): String? { - val uriString = uri.toString() - val path = SUPPORTED_PATHS.find { it in uriString } ?: return null - return PermalinkService.MATRIX_TO_URL_BASE + uriString.substringAfter(path) - } - - private fun startPermalinkHandler(permalink: String) { - permalinkHandler.launch(this, permalink, buildTask = true) - .delay(500, TimeUnit.MILLISECONDS) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe { isHandled -> - if (!isHandled) { - toast(R.string.universal_link_malformed) - } - finish() - } - .disposeOnDestroy() - } - - /** - * Start the login screen with identity server and homeserver pre-filled - */ - private fun startLoginActivity(uri: Uri) { + private fun startLoginActivity(uri: Uri? = null) { navigator.openLogin( context = this, - loginConfig = LoginConfig.parse(uri), + loginConfig = uri?.let { LoginConfig.parse(uri) }, flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK ) finish() @@ -173,21 +155,4 @@ class LinkHandlerActivity : VectorBaseActivity<ActivityProgressBinding>() { .setPositiveButton(R.string.ok) { _, _ -> finish() } .show() } - - companion object { - private val SUPPORTED_HOSTS = listOf( - // Regular Element Web instance - "app.element.io", - // Other known instances of Element Web - "develop.element.io", - "staging.element.io", - // Previous Web instance, kept for compatibility reason - "riot.im" - ) - private val SUPPORTED_PATHS = listOf( - "/#/room/", - "/#/user/", - "/#/group/" - ) - } } 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 c575063ce9..29654ec3e1 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 @@ -597,10 +597,12 @@ class NotificationUtils @Inject constructor(private val context: Context, val markRoomReadPendingIntent = PendingIntent.getBroadcast(context, System.currentTimeMillis().toInt(), markRoomReadIntent, PendingIntent.FLAG_UPDATE_CURRENT) - addAction(NotificationCompat.Action( - R.drawable.ic_material_done_all_white, - stringProvider.getString(R.string.action_mark_room_read), - markRoomReadPendingIntent)) + NotificationCompat.Action.Builder(R.drawable.ic_material_done_all_white, + stringProvider.getString(R.string.action_mark_room_read), markRoomReadPendingIntent) + .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_MARK_AS_READ) + .setShowsUserInterface(false) + .build() + .let { addAction(it) } // Quick reply if (!roomInfo.hasSmartReplyError) { @@ -611,6 +613,8 @@ class NotificationUtils @Inject constructor(private val context: Context, NotificationCompat.Action.Builder(R.drawable.vector_notification_quick_reply, stringProvider.getString(R.string.action_quick_reply), replyPendingIntent) .addRemoteInput(remoteInput) + .setSemanticAction(NotificationCompat.Action.SEMANTIC_ACTION_REPLY) + .setShowsUserInterface(false) .build() .let { addAction(it) } } diff --git a/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt b/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt index ecaeea1899..fd5fea0fe8 100644 --- a/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt +++ b/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandler.kt @@ -29,6 +29,7 @@ import io.reactivex.schedulers.Schedulers import org.matrix.android.sdk.api.extensions.orFalse import org.matrix.android.sdk.api.session.permalinks.PermalinkData import org.matrix.android.sdk.api.session.permalinks.PermalinkParser +import org.matrix.android.sdk.api.session.permalinks.PermalinkService import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomType import org.matrix.android.sdk.api.util.Optional @@ -55,7 +56,7 @@ class PermalinkHandler @Inject constructor(private val activeSessionHolder: Acti navigationInterceptor: NavigationInterceptor? = null, buildTask: Boolean = false ): Single<Boolean> { - if (deepLink == null) { + if (deepLink == null || !isPermalinkSupported(context, deepLink.toString())) { return Single.just(false) } return Single @@ -122,6 +123,13 @@ class PermalinkHandler @Inject constructor(private val activeSessionHolder: Acti } } + private fun isPermalinkSupported(context: Context, url: String): Boolean { + return url.startsWith(PermalinkService.MATRIX_TO_URL_BASE) + || context.resources.getStringArray(R.array.permalink_supported_hosts).any { + url.startsWith(it) + } + } + private fun PermalinkData.RoomLink.getRoomId(): Single<Optional<String>> { val session = activeSessionHolder.getSafeActiveSession() return if (isRoomAlias && session != null) { @@ -179,6 +187,12 @@ class PermalinkHandler @Inject constructor(private val activeSessionHolder: Acti } } } + + companion object { + const val MATRIX_TO_CUSTOM_SCHEME_URL_BASE = "element://" + const val ROOM_LINK_PREFIX = "${MATRIX_TO_CUSTOM_SCHEME_URL_BASE}room/" + const val USER_LINK_PREFIX = "${MATRIX_TO_CUSTOM_SCHEME_URL_BASE}user/" + } } interface NavigationInterceptor { diff --git a/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandlerActivity.kt b/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandlerActivity.kt deleted file mode 100644 index ee4e0e05b5..0000000000 --- a/vector/src/main/java/im/vector/app/features/permalink/PermalinkHandlerActivity.kt +++ /dev/null @@ -1,79 +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.permalink - -import android.content.Intent -import android.os.Bundle -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.replaceFragment -import im.vector.app.core.platform.VectorBaseActivity -import im.vector.app.databinding.FragmentProgressBinding -import im.vector.app.features.home.HomeActivity -import im.vector.app.features.home.LoadingFragment -import javax.inject.Inject - -class PermalinkHandlerActivity : VectorBaseActivity<FragmentProgressBinding>() { - - @Inject lateinit var permalinkHandler: PermalinkHandler - @Inject lateinit var sessionHolder: ActiveSessionHolder - - override fun getBinding() = FragmentProgressBinding.inflate(layoutInflater) - - override fun injectWith(injector: ScreenComponent) { - injector.inject(this) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_simple) - if (isFirstCreation()) { - replaceFragment(R.id.simpleFragmentContainer, LoadingFragment::class.java) - } - handleIntent() - } - - private fun handleIntent() { - // If we are not logged in, open login screen. - // In the future, we might want to relaunch the process after login. - if (!sessionHolder.hasActiveSession()) { - startLoginActivity() - return - } - // We forward intent to HomeActivity (singleTask) to avoid the dueling app problem - // https://stackoverflow.com/questions/25884954/deep-linking-and-multiple-app-instances - intent.setClass(this, HomeActivity::class.java) - intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP - startActivity(intent) - - finish() - } - - override fun onNewIntent(intent: Intent?) { - super.onNewIntent(intent) - handleIntent() - } - - private fun startLoginActivity() { - navigator.openLogin( - context = this, - flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK - ) - finish() - } -} 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 7140bb0baa..f39f02af14 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 @@ -165,6 +165,12 @@ class EmojiReactionPickerActivity : VectorBaseActivity<ActivityEmojiReactionPick } }) + searchView.setOnCloseListener { + currentFocus?.clearFocus() + searchItem.collapseActionView() + true + } + searchView.queryTextChanges() .throttleWithTimeout(600, TimeUnit.MILLISECONDS) .doOnError { err -> Timber.e(err) } @@ -174,6 +180,7 @@ class EmojiReactionPickerActivity : VectorBaseActivity<ActivityEmojiReactionPick } .disposeOnDestroy() } + searchItem.expandActionView() return true } diff --git a/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/SpaceJoinRuleItem.kt b/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/SpaceJoinRuleItem.kt index 9110f9b32e..382ef1c545 100644 --- a/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/SpaceJoinRuleItem.kt +++ b/vector/src/main/java/im/vector/app/features/roomprofile/settings/joinrule/SpaceJoinRuleItem.kt @@ -28,6 +28,7 @@ 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.setAttributeTintedImageResource import im.vector.app.core.utils.DebouncedClickListener import im.vector.app.features.home.AvatarRenderer import org.matrix.android.sdk.api.util.MatrixItem @@ -57,7 +58,7 @@ abstract class SpaceJoinRuleItem : VectorEpoxyModel<SpaceJoinRuleItem.Holder>() holder.upgradeRequiredButton.setOnClickListener(DebouncedClickListener(listener)) if (selected) { - holder.radioImage.setImageDrawable(ContextCompat.getDrawable(holder.view.context, R.drawable.ic_radio_on)) + holder.radioImage.setAttributeTintedImageResource(R.drawable.ic_radio_on, R.attr.colorPrimary) holder.radioImage.contentDescription = holder.view.context.getString(R.string.a11y_checked) } else { holder.radioImage.setImageDrawable(ContextCompat.getDrawable(holder.view.context, R.drawable.ic_radio_off)) diff --git a/vector/src/main/res/drawable/circle_with_halo.xml b/vector/src/main/res/drawable/circle_with_halo.xml new file mode 100644 index 0000000000..8e44bfde7f --- /dev/null +++ b/vector/src/main/res/drawable/circle_with_halo.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> + <item> + <shape android:shape="oval"> + <solid android:color="#33FF0000" /> + </shape> + </item> + <item + android:bottom="4dp" + android:left="4dp" + android:right="4dp" + android:top="4dp"> + <shape android:shape="oval"> + <solid android:color="#FF0000" /> + </shape> + </item> +</layer-list> \ No newline at end of file diff --git a/vector/src/main/res/drawable/ic_jump_to_unread.xml b/vector/src/main/res/drawable/ic_jump_to_unread.xml index 2c5b8b90c1..3d13aabd50 100644 --- a/vector/src/main/res/drawable/ic_jump_to_unread.xml +++ b/vector/src/main/res/drawable/ic_jump_to_unread.xml @@ -5,6 +5,6 @@ android:viewportHeight="24"> <path android:pathData="M12,2C6.4771,2 2,6.4771 2,12C2,17.5228 6.4771,22 12,22C17.5228,22 22,17.5228 22,12C22,6.4771 17.5228,2 12,2ZM11.2929,6.2929C11.3888,6.197 11.4993,6.1247 11.6172,6.0759L12.7071,6.2929L12.7075,6.2933L16.7071,10.2929C17.0976,10.6834 17.0976,11.3166 16.7071,11.7071C16.3166,12.0976 15.6834,12.0976 15.2929,11.7071L13,9.4142L13,17C13,17.5523 12.5523,18 12,18C11.4477,18 11,17.5523 11,17L11,9.4142L8.7071,11.7071C8.3166,12.0976 7.6834,12.0976 7.2929,11.7071C6.9024,11.3166 6.9024,10.6834 7.2929,10.2929L11.2929,6.2929ZM11.6172,6.0759L12.705,6.2908C12.5242,6.1111 12.2751,6 12,6C11.8644,6 11.7351,6.027 11.6172,6.0759Z" - android:fillColor="#0DBD8B" + android:fillColor="#FF0000" android:fillType="evenOdd"/> </vector> diff --git a/vector/src/main/res/drawable/ic_radio_on.xml b/vector/src/main/res/drawable/ic_radio_on.xml index 5cda8285e6..4ee05d690c 100644 --- a/vector/src/main/res/drawable/ic_radio_on.xml +++ b/vector/src/main/res/drawable/ic_radio_on.xml @@ -9,6 +9,6 @@ android:fillType="evenOdd"/> <path android:pathData="M2,2h20v20h-20z" - android:fillColor="#0DBD8B"/> + android:fillColor="#FF0000"/> </group> </vector> diff --git a/vector/src/main/res/drawable/ic_selected_community.xml b/vector/src/main/res/drawable/ic_selected_community.xml deleted file mode 100644 index e95b54aab3..0000000000 --- a/vector/src/main/res/drawable/ic_selected_community.xml +++ /dev/null @@ -1,9 +0,0 @@ -<vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="4dp" - android:height="32dp" - android:viewportWidth="4" - android:viewportHeight="32"> - <path - android:pathData="M0,0C2.2091,0 4,1.7909 4,4V28C4,30.2091 2.2091,32 0,32V0Z" - android:fillColor="#0DBD8B"/> -</vector> diff --git a/vector/src/main/res/drawable/ic_voice_message_locked.xml b/vector/src/main/res/drawable/ic_voice_message_locked.xml index 2b92d9d5e0..a396f684b1 100644 --- a/vector/src/main/res/drawable/ic_voice_message_locked.xml +++ b/vector/src/main/res/drawable/ic_voice_message_locked.xml @@ -1,5 +1,5 @@ <vector android:autoMirrored="true" android:height="24dp" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> - <path android:fillColor="#0DBD8B" android:fillType="evenOdd" android:pathData="M11.3333,2C8.3878,2 6,4.3878 6,7.3333V10C4.8954,10 4,10.8954 4,12V20C4,21.1046 4.8954,22 6,22H18C19.1046,22 20,21.1046 20,20V12C20,10.8954 19.1046,10 18,10V7.3333C18,4.3878 15.6122,2 12.6667,2H11.3333ZM15.3333,10V7.3333C15.3333,5.8606 14.1394,4.6667 12.6667,4.6667H11.3333C9.8606,4.6667 8.6667,5.8606 8.6667,7.3333V10H15.3333Z"/> + <path android:fillColor="#FF0000" android:fillType="evenOdd" android:pathData="M11.3333,2C8.3878,2 6,4.3878 6,7.3333V10C4.8954,10 4,10.8954 4,12V20C4,21.1046 4.8954,22 6,22H18C19.1046,22 20,21.1046 20,20V12C20,10.8954 19.1046,10 18,10V7.3333C18,4.3878 15.6122,2 12.6667,2H11.3333ZM15.3333,10V7.3333C15.3333,5.8606 14.1394,4.6667 12.6667,4.6667H11.3333C9.8606,4.6667 8.6667,5.8606 8.6667,7.3333V10H15.3333Z"/> </vector> diff --git a/vector/src/main/res/drawable/ic_voice_mic_recording.xml b/vector/src/main/res/drawable/ic_voice_mic_recording.xml index eb6cea39a5..a57852c92f 100644 --- a/vector/src/main/res/drawable/ic_voice_mic_recording.xml +++ b/vector/src/main/res/drawable/ic_voice_mic_recording.xml @@ -3,14 +3,6 @@ android:height="52dp" android:viewportWidth="52" android:viewportHeight="52"> - <path - android:pathData="M26.173,26.1729m-22.7631,0a22.7631,22.7631 0,1 1,45.5262 0a22.7631,22.7631 0,1 1,-45.5262 0" - android:fillColor="#0DBD8B"/> - <path - android:pathData="M26,26m-26,0a26,26 0,1 1,52 0a26,26 0,1 1,-52 0" - android:strokeAlpha="0.2" - android:fillColor="#0DBD8B" - android:fillAlpha="0.2"/> <path android:pathData="M21.2414,18.7749C21.2414,16.051 23.4496,13.8429 26.1734,13.8429C28.8973,13.8429 31.1054,16.051 31.1054,18.7749V26.1509C31.1054,28.8747 28.8973,31.0829 26.1734,31.0829C23.4496,31.0829 21.2414,28.8747 21.2414,26.1509V18.7749ZM17.542,24.2475C18.5968,24.2475 19.4518,25.1025 19.4518,26.1572C19.4518,29.8561 22.4509,32.8596 26.1586,32.8675C26.1637,32.8674 26.1689,32.8674 26.174,32.8674C26.179,32.8674 26.184,32.8674 26.189,32.8675C29.896,32.8589 32.8944,29.8556 32.8944,26.1572C32.8944,25.1025 33.7494,24.2475 34.8041,24.2475C35.8588,24.2475 36.7138,25.1025 36.7138,26.1572C36.7138,31.3227 32.9916,35.6165 28.0837,36.5143V37.24C28.0837,38.2947 27.2287,39.1497 26.174,39.1497C25.1193,39.1497 24.2643,38.2947 24.2643,37.24V36.5147C19.3555,35.6176 15.6323,31.3233 15.6323,26.1572C15.6323,25.1025 16.4873,24.2475 17.542,24.2475Z" android:fillColor="#ffffff" diff --git a/vector/src/main/res/layout/fragment_room_detail.xml b/vector/src/main/res/layout/fragment_room_detail.xml index 66dbbd2840..6c58f40bad 100644 --- a/vector/src/main/res/layout/fragment_room_detail.xml +++ b/vector/src/main/res/layout/fragment_room_detail.xml @@ -98,7 +98,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" app:barrierDirection="top" - app:constraint_referenced_ids="composerLayout,notificationAreaView,failedMessagesWarningView" /> + app:constraint_referenced_ids="composerLayout,notificationAreaView,failedMessagesWarningStub" /> <im.vector.app.features.sync.widget.SyncStateView android:id="@+id/syncStateView" @@ -139,6 +139,7 @@ android:text="@string/room_jump_to_first_unread" android:visibility="invisible" app:chipIcon="@drawable/ic_jump_to_unread" + app:chipIconTint="?colorPrimary" app:closeIcon="@drawable/ic_close_24dp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -159,7 +160,8 @@ android:id="@+id/failedMessagesWarningStub" android:layout_width="match_parent" android:layout_height="wrap_content" - android:inflatedId="@layout/view_stub_failed_message_warning_layout" + android:inflatedId="@+id/failedMessagesWarningStub" + android:layout="@layout/view_stub_failed_message_warning_layout" app:layout_constraintBottom_toTopOf="@id/composerLayout" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> diff --git a/vector/src/main/res/layout/fragment_space_add_rooms.xml b/vector/src/main/res/layout/fragment_space_add_rooms.xml index f2150cb390..4a761532e6 100644 --- a/vector/src/main/res/layout/fragment_space_add_rooms.xml +++ b/vector/src/main/res/layout/fragment_space_add_rooms.xml @@ -24,8 +24,7 @@ android:id="@+id/addRoomToSpaceToolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" - android:minHeight="0dp" - app:layout_scrollFlags="scroll|exitUntilCollapsed|snap|enterAlways"> + android:minHeight="0dp"> <LinearLayout android:layout_width="match_parent" diff --git a/vector/src/main/res/menu/menu_emoji_reaction_picker.xml b/vector/src/main/res/menu/menu_emoji_reaction_picker.xml index 4c71bbcb0c..637d709707 100644 --- a/vector/src/main/res/menu/menu_emoji_reaction_picker.xml +++ b/vector/src/main/res/menu/menu_emoji_reaction_picker.xml @@ -7,5 +7,5 @@ app:iconTint="?vctr_content_primary" android:title="@string/search" app:actionViewClass="android.widget.SearchView" - app:showAsAction="collapseActionView|ifRoom" /> + app:showAsAction="collapseActionView|always" /> </menu> diff --git a/vector/src/main/res/values-ar/strings.xml b/vector/src/main/res/values-ar/strings.xml index f1452e559b..e3ef228a72 100644 --- a/vector/src/main/res/values-ar/strings.xml +++ b/vector/src/main/res/values-ar/strings.xml @@ -53,11 +53,11 @@ <string name="room_displayname_two_members">%1$s وَ %2$s</string> <string name="room_displayname_room_invite">دَعوة غُرفة</string> <plurals name="room_displayname_three_and_more_members"> - <item quantity="zero"/> + <item quantity="zero">لا أحد</item> <item quantity="one">%1$s وواحد آخر</item> <item quantity="two">%1$s و%2$d آخران</item> - <item quantity="few">%1$s و%2$d آخرين</item> - <item quantity="many">%1$s و%2$d آخرون</item> + <item quantity="few">%1$s و%2$d آخرون</item> + <item quantity="many">%1$s و%2$d آخرًا</item> <item quantity="other">%1$s و%2$d آخرون</item> </plurals> <string name="summary_you_sent_image">أرسلتَ صورةً.</string> @@ -122,17 +122,17 @@ <string name="notice_room_server_acl_allow_is_empty">🎉 جميع الخوادِم محظورة مِنَ المُشاركة! لم يعُد من المُمكِن استخدام هذه الغُرفة.</string> <string name="notice_room_server_acl_updated_no_change">لا تغيير.</string> <string name="notice_room_server_acl_updated_ip_literals_not_allowed">• خوادِم مُطابقة IP الحرفية محظورة الآن.</string> - <string name="notice_room_server_acl_updated_was_allowed">• الخادِم المُطابق لـ %s قد أُزيل مِن قائمة السماح.</string> - <string name="notice_room_server_acl_updated_allowed">• الخادِم المُطابق لـ %s مسموح الآن.</string> - <string name="notice_room_server_acl_updated_was_banned">• الخادِم المُطابق لـ %s قد أُزيل مِن قائمة الحظر.</string> - <string name="notice_room_server_acl_updated_banned">• الخادِم المُطابق لـ %s محظور الآن.</string> + <string name="notice_room_server_acl_updated_was_allowed">• الخوادِم المُطابقة لـ %s أُزيلت مِن قائمة السماح.</string> + <string name="notice_room_server_acl_updated_allowed">• الخوادِم المُطابقة لـ %s مسموحة الآن.</string> + <string name="notice_room_server_acl_updated_was_banned">• الخوادِم المُطابقة لـ %s أُزيلت مِن قائمة الحظر.</string> + <string name="notice_room_server_acl_updated_banned">• الخوادِم المُطابقة لـ %s محظورة الآن.</string> <string name="notice_room_server_acl_updated_ip_literals_allowed">• خوادِم مُطابقة IP الحرفية مسموحة الآن.</string> <string name="notice_room_server_acl_updated_title_by_you">أنتَ قد غيَّرتَ خادِم الـACLs لهذه الغُرفة.</string> <string name="notice_room_server_acl_updated_title">إنَّ %s قد غيَّرَ خادِم الـACLs لهذه الغُرفة.</string> - <string name="notice_room_server_acl_set_ip_literals_not_allowed">• الخادِم يحظُر مُطابقة القيم الحرفية للـIP.</string> - <string name="notice_room_server_acl_set_allowed">• الخادِم المُطابق لـ %s مسموح.</string> - <string name="notice_room_server_acl_set_banned">• الخادِم المُطابق لـ %s محظور.</string> - <string name="notice_room_server_acl_set_ip_literals_allowed">• الخادِم يسمح بمُطابقة القيم الحرفية للـIP.</string> + <string name="notice_room_server_acl_set_ip_literals_not_allowed">• الخوادِم تحظُر مُطابقة القيم الحرفية للـIP.</string> + <string name="notice_room_server_acl_set_allowed">• الخوادِم المُطابقة لـ %s مسموحة.</string> + <string name="notice_room_server_acl_set_banned">• الخوادِم المُطابقة لـ %s محظورة.</string> + <string name="notice_room_server_acl_set_ip_literals_allowed">• الخوادِم تسمح بمُطابقة القيم الحرفية للـIP.</string> <string name="notice_room_server_acl_set_title_by_you">أنتَ قد عيَّنتَ خادِم الـACLs لهذه الغُرفة.</string> <string name="notice_room_server_acl_set_title">إنَّ %s قد عيَّنَ خادِم الـACLs لهذه الغُرفة.</string> <string name="notice_direct_room_update_by_you">أنتَ قد قمتَ بالترقية هُنا.</string> @@ -216,7 +216,7 @@ <string name="light_theme">السمة الفاتحة</string> <string name="dark_theme">السمة الداكنة</string> <string name="black_theme">السمة السوداء</string> - <string name="notification_sync_in_progress">يُزامن</string> + <string name="notification_sync_in_progress">يُزامن…</string> <string name="notification_listening_for_events">يستمع للأحداث</string> <string name="title_activity_home">الرسائل</string> <string name="title_activity_settings">الإعدادات</string> @@ -588,7 +588,7 @@ <string name="command_error">خطأ في الأمر</string> <string name="unrecognized_command">لم يُفهم الأمر: %s</string> <!-- notification statuses --> - <string name="redact">هذّب</string> + <string name="redact">أزل</string> <string name="missing_permissions_to_start_conf_call">تحتاج تصريح الدعوة لبدء اجتماع في هذه الغرفة</string> <string name="or">أو</string> <string name="action_quick_reply">ردّ سريع</string> @@ -1104,11 +1104,11 @@ <string name="room_sliding_menu_version_x">الإصدار %s</string> <string name="settings_notification_advanced">الإعدادات المتقدمة للإشعارات</string> <string name="title_activity_verify_device">توثق من الجهاز</string> - <string name="keys_backup_is_not_finished_please_wait">تأمين المفاتيح لم ينته، يرجى الانتظار</string> + <string name="keys_backup_is_not_finished_please_wait">النسخ الاحتياطي المفاتيح لم ينته، يرجى الانتظار…</string> <string name="sign_out_bottom_sheet_warning_no_backup">عند تسجيل الخروج الآن ستخسر مفاتيحك</string> - <string name="sign_out_bottom_sheet_warning_backing_up">تأمين المفاتيح ما زال جاريا. في حال خروجك الآن لن تتمكن لاحقا من قراءة الرسائل المشفرة</string> - <string name="sign_out_bottom_sheet_warning_backup_not_active">تأكد من تفعيل تأمين المفاتيح على كل أجهزتك كي لا تخسر رسائلك المشفرة</string> - <string name="sign_out_bottom_sheet_backing_up_keys">يتم تأمين المفاتيح</string> + <string name="sign_out_bottom_sheet_warning_backing_up">النسخ الاحتياطي المفاتيح ما زال جاريا. في حال خروجك الآن لن تتمكن لاحقا من قراءة الرسائل المشفرة.</string> + <string name="sign_out_bottom_sheet_warning_backup_not_active">تأكد من تفعيل النسخ الاحتياطي للمفاتيح على كل أجهزتك كي لا تخسر رسائلك المشفرة</string> + <string name="sign_out_bottom_sheet_backing_up_keys">ينسخ احتياطيا المفاتيح…</string> <string name="no_permissions_to_start_conf_call_in_direct_room">لا يوجد لديك أذن لبدء مكالمة إجتماع</string> <string name="no_permissions_to_start_conf_call">لا يوجد لديك أذن لبدء إجتماع في هذه الغرفة</string> <string name="start_chatting">إبدأ بالمحادثة</string> @@ -1123,7 +1123,7 @@ <string name="sign_out_bottom_sheet_will_lose_secure_messages">ستفقد الوصول إلى رسائلك المشفرة إلا إذا أخذت نسخة إحتياطية من مفاتيحك قبل تسجيلك للخروج.</string> <string name="backup">نسخة إحتياطية</string> <string name="are_you_sure">هل أنت متأكد؟</string> - <string name="keys_backup_activate">إستخدم المفتاح الإحتياطي</string> + <string name="keys_backup_activate">إستخدم النسخة الإحتياطية للمفتاح</string> <string name="sign_out_bottom_sheet_dont_want_secure_messages">لا أريد رسائلي المشفرة</string> <string name="title_activity_keys_backup_setup">نسخ إحتياطي للمفتاح</string> <string name="notification_sync_init">جاري إعداد الخدمة</string> @@ -1230,4 +1230,26 @@ <item quantity="many">أنت أضفت %1$s كعناوين لهذه الغرفة.</item> <item quantity="other">أنت أضفت %1$s كعناوين لهذه الغرفة.</item> </plurals> + <string name="denied_permission_generic">لإكمال الاجراء امنح الصلاحيات الناقصة عبر إعدادات النظام.</string> + <string name="spaces">الفضاءات</string> + <string name="notice_direct_room_guest_access_forbidden_by_you">منعتَ الزوار من دخول الغرفة.</string> + <string name="notice_room_guest_access_forbidden">منع %1$s الزوار من دخول الغرفة.</string> + <string name="notice_direct_room_guest_access_can_join_by_you">سمحت للزوار بدخول هنا.</string> + <string name="notice_direct_room_guest_access_can_join">سمح %1$s للزوار بدخول الغرفة.</string> + <string name="notice_room_guest_access_can_join_by_you">سمحتَ للزوار بدخول الغرفة.</string> + <string name="notice_room_guest_access_can_join">سمح %1$s للزوار بدخول الغرفة.</string> + <string name="notice_room_canonical_alias_no_change_by_you">غيرتَ عناوين الغرفة.</string> + <string name="notice_room_canonical_alias_no_change">غّير %1$s عناوين الغرفة.</string> + <string name="notice_room_canonical_alias_main_and_alternative_changed_by_you">غيرتَ العناوين الرئيسية والبديلة للغرفة.</string> + <string name="notice_room_canonical_alias_alternative_changed_by_you">غيّرت العناوين البديلة للغرفة.</string> + <string name="notice_direct_room_guest_access_forbidden">منع %1$s الزوار من دخول الغرفة.</string> + <string name="notice_room_guest_access_forbidden_by_you">منعتَ الزوار من دخول الغرفة.</string> + <plurals name="notice_room_canonical_alias_alternative_added_by_you"> + <item quantity="zero">لم تضف أي رابط بديل.</item> + <item quantity="one">أضفت الرابط البديل %1$s للغرفة.</item> + <item quantity="two">أضفت الرابطين البديلين %1$s للغرفة.</item> + <item quantity="few">أضفت الروابط البديلة %1$s للغرفة.</item> + <item quantity="many">أضفت الروابط البديلة %1$s للغرفة.</item> + <item quantity="other">أضفت الروابط البديلة %1$s للغرفة.</item> + </plurals> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 99b8f912f4..d52e3eb828 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2834,8 +2834,8 @@ <string name="spaces_feeling_experimental_subspace">Chcete experimentovat\? \nDo Spaceu můžete přidat existující Spaces.</string> <string name="space_add_rooms">Přidat místnosti</string> - <string name="space_leave_prompt_msg_as_admin">Jste administrátorem tohoto prostoru, ujistěte se, že jste před odchodem převedli administrátorská práva na jiného člena.</string> - <string name="space_leave_prompt_msg_private">Tento prostor není veřejný. Bez pozvánky se do něj nebudete moci znovu připojit.</string> + <string name="space_leave_prompt_msg_as_admin">Jste jediným správcem tohoto prostoru. Jeho opuštění bude znamenat, že nad ním nebude mít nikdo kontrolu.</string> + <string name="space_leave_prompt_msg_private">Pokud nebudete znovu pozváni, nebudete se moci připojit.</string> <string name="space_leave_prompt_msg_only_you">Jste tu jediný člověk. Pokud odejdete, nikdo se k vám v budoucnu nebude moci připojit, včetně vás.</string> <string name="invite_to_space">Pozvat do %s</string> <string name="a11y_beta">Tato funkce je ve fázi beta</string> @@ -3003,4 +3003,49 @@ <string name="call_ringing">Vyzvánění…</string> <string name="spaces">Spaces</string> <string name="learn_more">Dozvědět se více</string> + <string name="space_add_space_to_any_space_you_manage">Přidejte prostor do jakéhokoli prostoru, který spravujete.</string> + <string name="space_add_existing_spaces">Přidat stávající prostory</string> + <string name="space_add_existing_rooms_only">Přidat stávající místnosti</string> + <string name="pick_tings_to_leave">Vyberte místa, která chcete opustit</string> + <string name="leave_specific_ones">Opustit konkrétní místnosti a prostory…</string> + <string name="dont_leave_any">Neopouštět žádné místnosti a prostory</string> + <string name="you_will_leave_all_in">Opustíte všechny místnosti a prostory v %s.</string> + <string name="leave_all_rooms_and_spaces">Opustit všechny místnosti a prostory</string> + <string name="space_leave_prompt_msg_with_name">Opravdu chcete opustit %s\?</string> + <string name="discovery_section">Objevování (%s)</string> + <string name="finish_setup">Dokončit nastavení</string> + <string name="discovery_invite">Pozvání e-mailem, vyhledávání kontaktů a další…</string> + <string name="finish_setting_up_discovery">Dokončit nastavení objevování.</string> + <string name="create_space_identity_server_info_none">V současné době nepoužíváte server identit. Chcete-li pozvat kolegy a být pro ně zjistitelní, nakonfigurujte jej níže.</string> + <string name="invite_by_mxid_or_mail">Pozvat pomocí uživatelského jména nebo e-mailu</string> + <string name="create_spaces_invite_public_header_desc">Zajistěte, aby měli do společnosti %s přístup ti správní lidé. Další můžete pozvat později.</string> + <string name="create_spaces_invite_public_header">Kdo jsou vaši kolegové\?</string> + <string name="command_description_add_to_space">Přidat do daného prostoru</string> + <string name="create_space_in_progress">Vytváření prostoru…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Zobrazit užitečné informace, které pomohou při ladění aplikace</string> + <string name="settings_developer_mode_show_info_on_screen_title">Zobrazení ladících informací na obrazovce</string> + <string name="does_not_look_like_valid_email">Nevypadá to jako platná e-mailová adresa</string> + <string name="open_discovery_settings">Otevřít nastavení objevování</string> + <string name="user_directory_search_hint_2">Vyhledávání podle jména, ID nebo emailu</string> + <string name="create_new_space">Vytvořit nový prostor</string> + <string name="room_settings_space_access_public_description">Každý může prostor najít a připojit se k němu</string> + <string name="room_settings_space_access_title">Adresa prostoru</string> + <string name="room_settings_access_rules_pref_dialog_title">Kdo má přístup\?</string> + <string name="settings_notification_emails_enable_for_email">Povolit e-mailová oznámení pro %s</string> + <string name="settings_notification_emails_no_emails">Pro obdržení e-mailu s upozorněním, přiřaďte e-mail ke svému Matrix účtu</string> + <string name="settings_notification_emails_category">Oznámení e-mailem</string> + <string name="room_permissions_upgrade_the_space">Povýšit prostor</string> + <string name="room_permissions_change_space_name">Změnit název prostoru</string> + <string name="room_permissions_enable_space_encryption">Povolit šifrování prostoru</string> + <string name="room_permissions_change_space_avatar">Změnit avatar prostoru</string> + <string name="room_permissions_change_main_address_for_the_space">Změnit hlavní adresu prostoru</string> + <string name="space_permissions_notice_read_only">Nemáte oprávnění k aktualizaci rolí potřebných ke změně různých částí tohoto prostoru</string> + <string name="space_permissions_notice">Vyberte role potřebné ke změně různých částí tohoto prostoru</string> + <string name="space_settings_permissions_subtitle">Zobrazit a aktualizovat role potřebné ke změně různých částí prostoru.</string> + <string name="space_settings_permissions_title">Oprávnění prostoru</string> + <string name="space_participants_unban_prompt_msg">Zrušením vykázání uživateli umožní znovu se připojit do prostoru.</string> + <string name="space_participants_ban_prompt_msg">Vykázáním uživatele z tohoto prostoru vykopnete a zabráníte mu v dalším připojení.</string> + <string name="space_participants_kick_prompt_msg">vykopnutí uživatele je z tohoto prostoru odstraní. +\n +\nAbyste jim zabránili v dalším vstupu, měli byste je raději vykázat.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-de/strings.xml b/vector/src/main/res/values-de/strings.xml index bb61922e2a..62db877318 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -2998,4 +2998,36 @@ <string name="this_invite_to_this_room_was_sent">Die Einladung zu diesem Raum wurde an %s gesendet, welche nicht mit deinem Konto verknüpft ist</string> <string name="help_space_members">Hilf Space-Mitgliedern private Räume zu finden</string> <string name="settings_mentions_and_keywords_encryption_notice">Auf deinem Mobilgerät wirst du keine Benachrichtigungen für Erwähnungen und Schlüsselwörter in verschlüsselten Räumen erhalten.</string> + <string name="space_add_existing_spaces">Existierende Spaces hinzufügen</string> + <string name="space_add_existing_rooms_only">Existierende Räume hinzufügen</string> + <string name="leave_specific_ones">Ausgewählte Räume oder Spaces verlassen…</string> + <string name="dont_leave_any">Keine Räume und Spaces verlassen</string> + <string name="you_will_leave_all_in">Du wirst alle Räume und Spaces in %s verlassen.</string> + <string name="leave_all_rooms_and_spaces">Alle Räume und Spaces verlassen</string> + <string name="space_leave_prompt_msg_with_name">Willst du %s wirklich verlassen\?</string> + <string name="invite_by_mxid_or_mail">Mit Benutzername oder E-Mail einladen</string> + <string name="command_description_add_to_space">Zum ausgewählten Space hinzufügen</string> + <string name="create_space_in_progress">Erstelle Space…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Hilfreiche Informationen zur Fehlersuche anzeigen</string> + <string name="settings_developer_mode_show_info_on_screen_title">Debug-Info anzeigen</string> + <string name="does_not_look_like_valid_email">Das schaut nicht nach einer gültigen E-Mail-Adresse aus</string> + <string name="user_directory_search_hint_2">Nach Name, ID oder E-Mail suchen</string> + <string name="create_new_space">Neuen Space erstellen</string> + <string name="room_settings_space_access_title">Zugriff</string> + <string name="room_settings_access_rules_pref_dialog_title">Wer hat Zugriff\?</string> + <string name="settings_notification_emails_enable_for_email">Benachrichtigungen per Email für %s aktivieren</string> + <string name="settings_notification_emails_no_emails">Um Benachrichtigungen per E-Mail zu empfangen, musst du einen E-Mail-Adresse hinzufügen</string> + <string name="settings_notification_emails_category">Emailbenachrichtigungen</string> + <string name="room_permissions_upgrade_the_space">Space upgraden</string> + <string name="room_permissions_change_space_name">Namen vom Space ändern</string> + <string name="room_permissions_enable_space_encryption">Space verschlüsseln</string> + <string name="room_permissions_change_main_address_for_the_space">Hauptadresse vom Space ändern</string> + <string name="room_permissions_change_space_avatar">Space-Icon ändern</string> + <string name="space_permissions_notice_read_only">Du hast nicht die Berechtigung, Rollenrechte zu bearbeiten</string> + <string name="space_settings_permissions_title">Space-Berechtigungen</string> + <string name="space_participants_unban_prompt_msg">Wenn du die Person entbannst, kann sie wieder beitreten.</string> + <string name="space_participants_ban_prompt_msg">Wenn du eine Person bannst, kann sie nicht erneut beitreten.</string> + <string name="space_participants_kick_prompt_msg">Kicken entfernt die Person aus dem Space +\n +\nUm sie für immer zu entfernen, solltest du sie bannen.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-eo/strings.xml b/vector/src/main/res/values-eo/strings.xml index c5e1149baa..05fd62b90b 100644 --- a/vector/src/main/res/values-eo/strings.xml +++ b/vector/src/main/res/values-eo/strings.xml @@ -290,7 +290,7 @@ <string name="group_details_rooms">Ĉambroj</string> <string name="no_users_placeholder">Neniuj uzantoj</string> <string name="rooms">Ĉambroj</string> - <string name="room_jump_to_first_unread">Salti al unua nelegita mesaĝo.</string> + <string name="room_jump_to_first_unread">Salti al nelegita</string> <string name="title_activity_keys_backup_setup">Savkopiado de ŝlosiloj</string> <string name="title_activity_keys_backup_restore">Uzi savkopiadon de ŝlosiloj</string> <string name="title_activity_verify_device">Kontroli salutaĵon</string> @@ -711,7 +711,7 @@ <string name="room_resend_unsent_messages">Resendi nesenditajn mesaĝojn</string> <string name="room_delete_unsent_messages">Forigi nesenditajn mesaĝojn</string> <string name="room_message_file_not_found">Dosiero ne troviĝis</string> - <string name="room_do_not_have_permission_to_post">Vi ne havas permeson mesaĝi en ĉi tiu ĉambro</string> + <string name="room_do_not_have_permission_to_post">Vi ne havas permeson mesaĝi en ĉi tiu ĉambro.</string> <plurals name="room_new_messages_notification"> <item quantity="one">%d nova mesaĝo</item> <item quantity="other">%d novaj mesaĝoj</item> @@ -2499,7 +2499,7 @@ <string name="call_tile_call_back">Revoki</string> <string name="call_tile_ended">Ĉi tiu voko finiĝis</string> <string name="call_tile_other_declined">%1$s rifuzis ĉi tiun vokon</string> - <string name="call_tile_you_declined">Vi rifuzis ĉi tiun vokon %1$s</string> + <string name="call_tile_you_declined">Vi rifuzis ĉi tiun vokon %s</string> <string name="call_tile_in_call">Vi nun enas ĉi tiun vokon</string> <string name="call_tile_other_started_call">%1$s komencis vokon</string> <string name="call_tile_you_started_call">Vi komencis vokon</string> @@ -2671,8 +2671,8 @@ <string name="spaces_beta_welcome_to_spaces">Bonvenu al aroj!</string> <string name="space_add_rooms">Aldoni ĉambrojn</string> <string name="space_add_existing_rooms">Aldoni jamajn ĉambrojn kaj arojn</string> - <string name="space_leave_prompt_msg_as_admin">Vi estas administranto de ĉi tiu aro. Certigu, ke vi transdonis administrajn rajtojn al alia ano, antaŭ ol vi vere foriros.</string> - <string name="space_leave_prompt_msg_private">Ĉi tiu aro ne estas publika. Vi ne povos ree aliĝi sen invito.</string> + <string name="space_leave_prompt_msg_as_admin">Vi estas la sola administranto de ĉi tiu aro. Se vi foriros, neniu povos ĝin regi.</string> + <string name="space_leave_prompt_msg_private">Vi ne povos ree aliĝi sen invito.</string> <string name="space_leave_prompt_msg_only_you">Vi estas la sola persono ĉi tie. Se vi foriros, neniu plu povos aliĝi, inkluzive vin mem.</string> <!-- TO BE REMOVED --> <string name="space_leave_prompt_msg">Ĉu vi certe volas foriri de la aro\?</string> @@ -2759,7 +2759,7 @@ <string name="dev_tools_send_custom_event">Sendi propran okazon</string> <string name="dev_tools_explore_room_state">Esplori staton de ĉambro</string> <string name="dev_tools_menu_name">Programistaj iloj</string> - <string name="a11y_public_room">Ĉi tiu ĉambro estas publika</string> + <string name="a11y_public_room">Publika ĉambro</string> <string name="a11y_view_read_receipts">Vidi legokonfirmojn</string> <string name="a11y_rule_notify_off">Ne sciigi</string> <string name="a11y_rule_notify_silent">Sciigi sen sono</string> @@ -2774,7 +2774,7 @@ <string name="a11y_trust_level_default">Implicita fidnivelo</string> <string name="a11y_selected">Elektitaj</string> <string name="a11y_video">Filmo</string> - <string name="a11y_unsent_draft">Ĉi tiu ĉambro havas nesenditan malneton</string> + <string name="a11y_unsent_draft">havas nesenditan malneton</string> <string name="a11y_error_some_message_not_sent">Iuj mesaĝoj ne sendiĝis</string> <string name="a11y_delete_avatar">Forigi profilbildon</string> <string name="a11y_change_avatar">Ŝanĝi profilbildon</string> @@ -2813,7 +2813,7 @@ <string name="private_space">Privata aro</string> <string name="public_space">Publika aro</string> <string name="command_description_upgrade_room">Gradaltigas ĉambron al nova versio</string> - <string name="a11y_public_space">Ĉi tiu aro estas publika</string> + <string name="a11y_public_space">Publika aro</string> <string name="re_authentication_activity_title">Necesas aŭtentikiĝo rea</string> <string name="call_transfer_unknown_person">Nekonata persono</string> <string name="call_transfer_transfer_to_title">Transdonante al %1$s</string> @@ -2851,8 +2851,8 @@ <string name="settings_group_messages">Grupaj babiloj</string> <string name="settings_encrypted_direct_messages">Individuaj babiloj ĉifritaj</string> <string name="settings_messages_direct_messages">Individuaj babiloj</string> - <string name="settings_messages_containing_username">Mesaĝoj enhavantaj mian uzantonomon</string> - <string name="settings_messages_containing_display_name">Mesaĝoj enhavantaj mian prezentan nomon</string> + <string name="settings_messages_containing_username">Mia uzantonomo</string> + <string name="settings_messages_containing_display_name">Mia prezenta nomo</string> <string name="settings_notification_notify_me_for">Sciigu min pri</string> <string name="settings_notification_other">Aliaj</string> <string name="settings_notification_mentions_and_keywords">Mencioj kaj ĉefvortoj</string> @@ -2871,4 +2871,81 @@ <string name="denied_permission_voice_message">Por sendi voĉmesaĝojn, bonvolu doni permeson uzi mikrofonon.</string> <string name="denied_permission_camera">Por ĉi tiu ago, vi bezonas permeson uzi filmilon de la sistemaj agordoj.</string> <string name="denied_permission_generic">Iuj permesoj necesaj por ĉi tiu ago mankas. Bonvolu doni la permesojn per la sistemaj agordoj.</string> + <string name="space_add_existing_spaces">Aldoni jamajn arojn</string> + <string name="space_add_existing_rooms_only">Aldoni jamajn ĉambrojn</string> + <string name="pick_tings_to_leave">Elektu, de kie vi foriru</string> + <string name="leave_specific_ones">Foriri de iuj ĉambroj kaj aroj…</string> + <string name="dont_leave_any">Foriri de neniuj ĉambroj kaj aroj</string> + <string name="you_will_leave_all_in">Vi foriros de ĉiuj ĉambroj kaj aroj en %s.</string> + <string name="leave_all_rooms_and_spaces">Foriri de ĉiuj ĉambroj kaj aroj</string> + <string name="space_leave_prompt_msg_with_name">Ĉu vi certe volas foriri de %s\?</string> + <string name="discovery_section">Trovado (%s)</string> + <string name="invite_by_mxid_or_mail">Inviti laŭ uzantonomo aŭ retpoŝtadreso</string> + <string name="command_description_add_to_space">Aldoni al la aro</string> + <string name="call_one_active">Aktiva voko (%1$s) ·</string> + <plurals name="call_active_status"> + <item quantity="one">Aktiva voko ·</item> + <item quantity="other">%1$d aktivaj vokoj ·</item> + </plurals> + <string name="call_tile_connection_failed">Malsukcesis konekto</string> + <string name="call_tile_no_answer">Sen respondo</string> + <string name="call_tile_video_missed">Nerespondita vidvoko</string> + <string name="call_tile_voice_missed">Nerespondita voĉvoko</string> + <string name="call_tile_video_declined">Vidvoko rifuziĝis</string> + <string name="call_tile_voice_declined">Voĉvoko rifuziĝis</string> + <string name="call_tile_video_call_has_ended">Vidvoko finiĝis • %1$s</string> + <string name="call_tile_voice_call_has_ended">Voĉvoko finiĝis • %1$s</string> + <string name="call_tile_video_active">Aktiva vidvoko</string> + <string name="call_tile_voice_active">Aktiva voĉvoko</string> + <string name="call_tile_video_incoming">Envena vidvoko</string> + <string name="call_tile_voice_incoming">Envena voĉvoko</string> + <string name="call_tile_you_declined_this_call">Vi rifuzis ĉi tiun vokon</string> + <string name="create_space_in_progress">Kreante aron…</string> + <string name="does_not_look_like_valid_email">Tio ne ŝajnas valida retpoŝtadreso</string> + <string name="open_discovery_settings">Malfermi agordojn de trovado</string> + <string name="user_directory_search_hint_2">Serĉi laŭ nomo, identigilo, aŭ retpoŝtadreso</string> + <string name="create_new_space">Krei novan aron</string> + <string name="space_you_know_that_contains_this_room">Konata aro enhavanta ĉi tiun ĉambron</string> + <string name="room_settings_space_access_public_description">Ĉiu, kiu povas trovi la aron kaj aliĝi al ĝi</string> + <string name="room_settings_space_access_title">Aliro al aro</string> + <string name="room_settings_access_rules_pref_dialog_title">Kiu povas aliri\?</string> + <string name="room_settings_room_notifications_account_settings">Agordoj de konto</string> + <string name="room_settings_room_notifications_manage_notifications">Vi povas administri sciigojn en %1$s.</string> + <string name="room_settings_room_notifications_encryption_notice">Sciu, ke sciigoj pri mencioj kaj ĉefvortoj ne estas disponeblaj en ĉifritaj ĉambroj per poŝtelefono.</string> + <string name="room_settings_room_notifications_notify_me">Sciigu min pri</string> + <string name="settings_mentions_and_keywords_encryption_notice">VI ne ricevos sciigojn al poŝtelefono pri mencioj kaj ĉefvortoj en ĉifritaj ĉambroj.</string> + <string name="settings_messages_containing_keywords">Ĉefvortoj</string> + <string name="settings_mentions_at_room"></string> + <string name="settings_notification_keyword_contains_invalid_character">Ĉefvortoj ne povas enhavi «%s»</string> + <string name="settings_notification_keyword_contains_dot">Ĉefvortoj ne povas eki per «.»</string> + <string name="settings_notification_new_keyword">Aldoni novan ĉefvorton</string> + <string name="settings_notification_your_keywords">Viaj ĉefvortoj</string> + <string name="settings_notification_emails_category">Retpoŝta sciigo</string> + <string name="settings_notification_emails_enable_for_email">Ŝalti retpoŝtajn sciigojn por %s</string> + <string name="settings_notification_emails_no_emails">Por ricevi sciigon per retpoŝto, bonvolu ligi vian retpoŝtadreson al via matriksa konto</string> + <string name="room_settings_none">Neniuj</string> + <string name="room_settings_mention_and_keyword_only">Nur mencioj kaj ĉefvortoj</string> + <string name="room_permissions_upgrade_the_space">Gradaltigi la aron</string> + <string name="room_permissions_change_space_name">Ŝanĝi nomon de aro</string> + <string name="room_permissions_enable_space_encryption">Ŝalti ĉifradon de aro</string> + <string name="room_permissions_change_main_address_for_the_space">Ŝanĝi ĉefadreson de aro</string> + <string name="room_permissions_change_space_avatar">Ŝanĝi bildon de aro</string> + <string name="space_permissions_notice_read_only">Vi ne havas permeson ĝisdatigi la rolojn bezonatajn por ŝanĝi diversajn partojn de tiu ĉi aro</string> + <string name="space_permissions_notice">Elektu la rolojn bezonatajn por ŝanĝi diversajn partojn de tiu ĉi aro</string> + <string name="space_settings_permissions_subtitle">Vidu kaj ĝisdatigu la rolojn bezonatajn por ŝanĝi diversajn partojn de la aro.</string> + <string name="space_settings_permissions_title">Permesoj de aro</string> + <string name="space_participants_unban_prompt_msg">Malforbaro de uzanto permesos al ĝi re-aliĝi al la aro.</string> + <string name="space_participants_ban_prompt_msg">Forbaro forpelos uzanton de tiu ĉi aro kaj malhelpos ĝian re-aliĝon.</string> + <string name="space_participants_kick_prompt_msg">forpelo de uzanto forigos ĝin de tiu ĉi aro. +\n +\nPor malhelpi ĝian re-aliĝon, vi forbaru ĝin.</string> + <string name="call_remove_jitsi_widget_progress">Finante vokon…</string> + <string name="call_ended_invite_timeout_title">Sen respondo</string> + <string name="call_ended_user_busy_description">La uzanto, kiun vi vokis, estas okupata.</string> + <string name="call_ended_user_busy_title">Uzanto estas okupata</string> + <string name="audio_call_with_participant">Voĉvoko kun %s</string> + <string name="video_call_with_participant">Vidvoko kun %s</string> + <string name="call_ringing">Sonorante…</string> + <string name="spaces">Aroj</string> + <string name="learn_more">Ekscii plion</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-et/strings.xml b/vector/src/main/res/values-et/strings.xml index cd387f0867..a39ab26a2a 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2781,8 +2781,8 @@ <string name="spaces_feeling_experimental_subspace">Kas sa tahad katsetada\? \nSa võid kogukonnakeskusele lisada ka teisi kogukonnakeskuseid.</string> <string name="space_add_rooms">Lisa jututube</string> - <string name="space_leave_prompt_msg_as_admin">Sa oled selle kogukonnakeskuse haldaja. Enne oma lahkumist palun lisa siia veel vähemalt üks uus haldaja.</string> - <string name="space_leave_prompt_msg_private">See ei ole avalik kogukonnakeskus. Ilma kutseta sa ei saa uuesti liituda.</string> + <string name="space_leave_prompt_msg_as_admin">Sa oled selle kogukonna ainus haldaja. Kui lahkud, siis ei leidu enam kedagi, kellel oleks seal haldusõigusi.</string> + <string name="space_leave_prompt_msg_private">Ilma uue kutseta sa ei saa uuesti liituda.</string> <string name="space_leave_prompt_msg_only_you">Sa oled siin viimane osaleja. Kui sa nüüd lahkud, siis mitte keegi, kaasa arvatud sa ise, ei saa hiljem enam liituda.</string> <string name="invite_to_space">Kutse kogukonnakeskusesse %s</string> <string name="a11y_beta">Tegemist on beeta-taseme funktsionaalsusega</string> @@ -2947,4 +2947,49 @@ <string name="call_ended_user_busy_title">Kasutaja on hõivatud</string> <string name="spaces">Kogukonnakeskused</string> <string name="learn_more">Lisateave</string> + <string name="space_add_space_to_any_space_you_manage">Lisa kogukond ükspuha millisesse kogukonda, mida sa juba haldad.</string> + <string name="space_add_existing_spaces">Lisa olemasolevaid kogukondi</string> + <string name="space_add_existing_rooms_only">Lisa olemasolevaid jututubasid</string> + <string name="pick_tings_to_leave">Vali, kust soovid lahkuda</string> + <string name="leave_specific_ones">Lahku neist jututubadest ja kogukondadest…</string> + <string name="dont_leave_any">Ära lahku ainsamastki jututoast ega kogukonnast</string> + <string name="you_will_leave_all_in">Sa lahkud kõikidest %s jututubadest ja kogukondadest.</string> + <string name="leave_all_rooms_and_spaces">Lahku kõikidest jututubadest ja kogukondadest</string> + <string name="space_leave_prompt_msg_with_name">Kas oled kindel, et soovid lahkuda %s kogukonnast\?</string> + <string name="discovery_section">Isikutuvastuse server (%s)</string> + <string name="finish_setup">Lõpeta seadistamine</string> + <string name="discovery_invite">Kutsu e-posti aadressi alusel, leia tuttavaid, jne…</string> + <string name="finish_setting_up_discovery">Lõpeta leitavuse seadistamine.</string> + <string name="create_space_identity_server_info_none">Hetkel sa ei kasuta isikutuvastusserverit. Kaaslastele kutse saatmiseks ning end teistele leitavaks tegemiseks palun seadista ta alljärgnevalt.</string> + <string name="invite_by_mxid_or_mail">Kutsu kasutajanime või e-posti aadressi alusel</string> + <string name="create_spaces_invite_public_header_desc">Kontrolli, et vajalikel inimestel oleks ligipääs %s kogukonda. Teistele võid kutse saata ka hiljem.</string> + <string name="create_spaces_invite_public_header">Kes on su kaasteelised\?</string> + <string name="command_description_add_to_space">Lisa näidatud kogukonnakeskusesse</string> + <string name="create_space_in_progress">Loon kogukonnakeskust…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Näita sellist teavet, millest võib kasu olla rakenduse silumisel ja veaotsingul</string> + <string name="settings_developer_mode_show_info_on_screen_title">Näita ekraanil silumisteateid</string> + <string name="does_not_look_like_valid_email">See ei tundu olema e-posti aadressi moodi</string> + <string name="open_discovery_settings">Ava leitavuse seadistused</string> + <string name="user_directory_search_hint_2">Otsi nime, Matrixi kasutajatunnuse või e-posti aadressi alusel</string> + <string name="create_new_space">Loo kogukonnakeskus</string> + <string name="room_settings_space_access_public_description">Kõik võivad kogukonda leida ja sellega liituda</string> + <string name="room_settings_space_access_title">Ligipääs siia kogukonda</string> + <string name="room_settings_access_rules_pref_dialog_title">Kes pääsevad ligi siia jututuppa\?</string> + <string name="settings_notification_emails_enable_for_email">Saada teavitusi %s e-posti aadressile</string> + <string name="settings_notification_emails_no_emails">Kui soovi e-posti teel saada teavitusi, siis palun seosta oma e-posti aadress oma Matrix\'i kasutajakontoga</string> + <string name="settings_notification_emails_category">E-posti teel saadetavad teavitused</string> + <string name="room_permissions_upgrade_the_space">Uuenda kogukonda</string> + <string name="room_permissions_change_space_name">Muuda kogukonna nime</string> + <string name="room_permissions_enable_space_encryption">Võta kogukonnas kasutusele krüptimine</string> + <string name="room_permissions_change_main_address_for_the_space">Muuda kogukonna põhiaadressi</string> + <string name="room_permissions_change_space_avatar">Muuda kogukonna tunnuspilti</string> + <string name="space_permissions_notice_read_only">Sul pole õigust uuenda rolle, mis on vajalikud kogukonna eri osade muutmiseks</string> + <string name="space_permissions_notice">Vali rollid, mis on vajalikud kogukonna eri osade muutmiseks</string> + <string name="space_settings_permissions_subtitle">Vaata ja uuenda rolle, mis on vajalikud kogukonnakeskuse eri osade muutmiseks.</string> + <string name="space_settings_permissions_title">Õigused kogukonnakeskuses</string> + <string name="space_participants_unban_prompt_msg">Suhtluskeelu eemaldamine võimaldab kogukonnaga uuesti liituda.</string> + <string name="space_participants_ban_prompt_msg">Sellele kasutajale suhtluskeelu seadmine tõstab ta kogukonnast välja ning ei võimalda uuesti liitumist.</string> + <string name="space_participants_kick_prompt_msg">kogukonnast välja müksamine eemaldab ta praeguseks sellest kogukonnast. +\n +\nKui soovid, et ta ei saaks uuesti liituda, siis peaksid seadma suhtluskeelu.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-fa/strings.xml b/vector/src/main/res/values-fa/strings.xml index f59512f8cf..9ce4769bcc 100644 --- a/vector/src/main/res/values-fa/strings.xml +++ b/vector/src/main/res/values-fa/strings.xml @@ -2795,8 +2795,8 @@ <string name="spaces_no_server_support_description">لطفاً برای اطّلاعات بیشتر، با مدیر کارسازتان تماس بگیرید</string> <string name="spaces_no_server_support_title">به نظر کارساز خانگیتان هنوز از فضاها پشتیبانی نمیکند</string> <string name="space_add_rooms">افزودن اتاقها</string> - <string name="space_leave_prompt_msg_as_admin">شما مدیر این فضایید. پیش از ترک، مطمئن شوید حق مدیریت را به عضو دیگری منتقل کردهاید.</string> - <string name="space_leave_prompt_msg_private">این فضا عمومی نیست. بدون دعوت نخواهید توانست دوباره بپیوندید.</string> + <string name="space_leave_prompt_msg_as_admin">شما تنها مدیر این فضایید. ترک این فضا، به معنی واپایش نداشتن هیچکسی رویش است.</string> + <string name="space_leave_prompt_msg_private">بدون دعوت نخواهید توانست دوباره بپیوندید.</string> <string name="space_leave_prompt_msg_only_you">شما تنها فرد حاضرید. اگر خارج شوید، هیچکس از جمله خوتان قادر به پیوستن در آینده نخواهد بود.</string> <string name="continue_anyway">به هر حال ادامه بده</string> <string name="you_may_contact_me">اگر پرسش دیگری دارید، میتوانید با من در تماس باشید</string> @@ -2947,4 +2947,49 @@ <string name="call_ringing">زنگ خوردن تماس…</string> <string name="spaces">فضاها</string> <string name="learn_more">بیشتر بدانید</string> + <string name="space_add_space_to_any_space_you_manage">افزودن فضایی به هر فضایی که مدیریت میکنید.</string> + <string name="space_add_existing_spaces">افزودن فضاهای موجود</string> + <string name="space_add_existing_rooms_only">افزودن اتاقهای موجود</string> + <string name="pick_tings_to_leave">گزینش خارج شدنها</string> + <string name="leave_specific_ones">خارج شدن از اتاقها و فضاهایی خاص…</string> + <string name="dont_leave_any">از هیچ اتاق و فضایی خارج نشو</string> + <string name="you_will_leave_all_in">از تمامی اتاقها و فضاهای %s خارج خواهید شد.</string> + <string name="leave_all_rooms_and_spaces">ترک تمامی اتاقها و فضاها</string> + <string name="space_leave_prompt_msg_with_name">مطمئنید میخواهید %s را ترک کنید؟</string> + <string name="discovery_section">کشف (%s)</string> + <string name="finish_setup">پایان برپایی</string> + <string name="discovery_invite">دعوت با رایانامه، یافتن آشنایان و بیشتر…</string> + <string name="finish_setting_up_discovery">پایان برپا سازی کشف.</string> + <string name="create_spaces_invite_public_header">همگروهیهایتان کیند؟</string> + <string name="create_space_identity_server_info_none">در حال حاضر از کارساز هویتی استفاده نمیکنید. برای دعوت همگروهیها و قابل کشف بودن به دستشان، در پایین یکی پیکربندی کنید.</string> + <string name="invite_by_mxid_or_mail">دعوت با نام کاربری یا نامه</string> + <string name="create_spaces_invite_public_header_desc">مطمئن شوید افراد درستی به %s دسترسی دارند. بعداً میتوانید تفراد بیشتری را دعوتکنید.</string> + <string name="command_description_add_to_space">افزودن به فضای داده شده</string> + <string name="create_space_in_progress">ایجاد کردن فضا…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">نمایش اطلاعاتی مغید برای کمک به رفع اشکال برنامه</string> + <string name="settings_developer_mode_show_info_on_screen_title">نمایش اطلاعات رفع اشکال روی صفحه</string> + <string name="does_not_look_like_valid_email">نشانی رایانامهای معتبر به نظر نمیرسد</string> + <string name="open_discovery_settings">گشودن تنظیمات کشف</string> + <string name="user_directory_search_hint_2">جستوجو با نام، شناسه یا رایانامه</string> + <string name="create_new_space">ایجاد فضای جدید</string> + <string name="room_settings_space_access_public_description">هرکسی می تواند فضا را یافته و بپیوندد</string> + <string name="room_settings_space_access_title">دسترسی فضا</string> + <string name="room_settings_access_rules_pref_dialog_title">چه کسی میتواند دسترسی داشته باشد؟</string> + <string name="settings_notification_emails_enable_for_email">به کار انداختن آگاهیهای رایانامهای برای %s</string> + <string name="settings_notification_emails_no_emails">برای دریافت رایانامه با آگاهی، لطفاً رایانامهای را به حساب ماتریکستان وصل کنید</string> + <string name="settings_notification_emails_category">آگاهی رایانامهای</string> + <string name="room_permissions_upgrade_the_space">ارتقای فضا</string> + <string name="room_permissions_change_space_name">تغییر نام فضا</string> + <string name="room_permissions_enable_space_encryption">به کار انداختن رمزنگاری فضا</string> + <string name="room_permissions_change_main_address_for_the_space">تغییر نشانی اصلی فضا</string> + <string name="room_permissions_change_space_avatar">تغییر چهرک فضا</string> + <string name="space_permissions_notice_read_only">اجازهٔ بهروز رسانی نقشهای لازم برای تغییر بخشهای مختلف این فضا را ندارید</string> + <string name="space_permissions_notice">گزینش اجازههای لازم برای تغییر بخشهای مختلف این فضا</string> + <string name="space_settings_permissions_subtitle">دیدن و بهروز رسانی نقشهای لازم برای تغییر بخشهای مختلف فضا.</string> + <string name="space_settings_permissions_title">اجازههای فضا</string> + <string name="space_participants_unban_prompt_msg">لغو تحریم کاربر، اجازهٔ پیوستن دوبارهاش به فضا را میدهد.</string> + <string name="space_participants_ban_prompt_msg">تحریم کاربر، او را از این فضا اخراج کرده و از پیوستن دوبارهاش جلوگیری میکند.</string> + <string name="space_participants_kick_prompt_msg">اخراج کاربر، از این فضا برش میدارد. +\n +\nبرای پیشگیری از پیوستن دوباره، باید تحریمش کنید.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-hu/strings.xml b/vector/src/main/res/values-hu/strings.xml index 19bb84ff53..8635e8bf75 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -2487,8 +2487,8 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró <string name="spaces_beta_welcome_to_spaces">Üdv a Terekben!</string> <string name="space_add_rooms">Szobák hozzáadása</string> <string name="space_add_existing_rooms">Létező szobák és tér hozzáadása</string> - <string name="space_leave_prompt_msg_as_admin">Most te vagy a tér adminisztrátora, bizonyosodj meg arról, hogy kineveztél mást adminisztrátornak mielőtt elhagyod.</string> - <string name="space_leave_prompt_msg_private">Ez a tér nem nyilvános. Kilépés után csak újabb meghívóval lehet újra belépni.</string> + <string name="space_leave_prompt_msg_as_admin">Ön az egyetlen adminisztrátora a térnek. Ha kilép, senki nem tudja irányítani.</string> + <string name="space_leave_prompt_msg_private">Amíg nem hívnak meg újra nem tudsz újracsatlakozni.</string> <string name="space_leave_prompt_msg_only_you">Csak te van itt. Ha kilépsz, akkor a jövőben senki nem tud majd ide belépni, beleértve téged is.</string> <!-- TO BE REMOVED --> <string name="space_leave_prompt_msg">Biztos el akarod hagyni a teret\?</string> @@ -2952,4 +2952,49 @@ Ha nem te állítottad be a visszaállítási metódust, akkor egy támadó pró <string name="call_ringing">Hívás kicseng…</string> <string name="spaces">Terek</string> <string name="learn_more">Tudj meg többet</string> + <string name="space_add_space_to_any_space_you_manage">Add hozzá a teret bármelyik általad kezelt térhez.</string> + <string name="space_add_existing_spaces">Meglévő terek hozzáadása</string> + <string name="space_add_existing_rooms_only">Létező szobák hozzáadása</string> + <string name="pick_tings_to_leave">Válaszd ki ahonnan kilépsz</string> + <string name="leave_specific_ones">Kilépés a megadott szobákból és terekből…</string> + <string name="dont_leave_any">Nem lépek ki egyetlen szobából vagy térből sem</string> + <string name="you_will_leave_all_in">Az összes szobát és teret elhagyod itt: %s.</string> + <string name="leave_all_rooms_and_spaces">Minden szoba és tér elhagyása</string> + <string name="space_leave_prompt_msg_with_name">Biztos, hogy ki akarsz lépni innen: %s\?</string> + <string name="discovery_section">Felderítés (%s)</string> + <string name="finish_setup">Beállítás befejezése</string> + <string name="discovery_invite">E-mail alapú meghívás, kapcsolatok megtalálása és sok más…</string> + <string name="finish_setting_up_discovery">Felderíthetőségi beállítás befejezése.</string> + <string name="create_space_identity_server_info_none">Jelenleg nem használsz azonosítási szolgáltatást. Ahhoz, hogy a csoporttársaidat meghívd vagy megtaláljanak állíts be egyet alább.</string> + <string name="invite_by_mxid_or_mail">Meghívás felhasználói névvel vagy e-mail címmel</string> + <string name="create_spaces_invite_public_header_desc">Ellenőrizd, hogy a megfelelő személyeknek van hozzáférése ehhez a céghez: %s. Később meghívhatsz másokat is.</string> + <string name="create_spaces_invite_public_header">Kik a csoporttársaid\?</string> + <string name="command_description_add_to_space">A megadott térhez adás</string> + <string name="create_space_in_progress">Tér készítése…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Néhány hasznos információ megjelenítése az alkalmazás hibakeresés segítéséért</string> + <string name="settings_developer_mode_show_info_on_screen_title">Hibakeresési információk megjelenítése a képernyőn</string> + <string name="does_not_look_like_valid_email">Az e-mail cím nem tűnik érvényesnek</string> + <string name="open_discovery_settings">Felderíthetőségi Beállítások megnyitása</string> + <string name="user_directory_search_hint_2">Keresés név, azonosító vagy e-mail alapján</string> + <string name="create_new_space">Új tér készítése</string> + <string name="room_settings_space_access_public_description">Bárki rátalálhat és beléphet a térre</string> + <string name="room_settings_space_access_title">Tér hozzáférés</string> + <string name="room_settings_access_rules_pref_dialog_title">Kinek van hozzáférése\?</string> + <string name="settings_notification_emails_enable_for_email">E-mail értesítés engedélyezése ehhez az e-mail címhez: %s</string> + <string name="settings_notification_emails_no_emails">E-mail alapú értesítések fogadásához, kérlek társíts egy e-mail címet a Matrix fiókodhoz</string> + <string name="settings_notification_emails_category">E-mail értesítés</string> + <string name="room_permissions_upgrade_the_space">Tér frissítése</string> + <string name="room_permissions_change_space_name">Tér nevének megváltoztatása</string> + <string name="room_permissions_enable_space_encryption">Tér titkosításának bekapcsolása</string> + <string name="room_permissions_change_main_address_for_the_space">Tér elsődleges címének megváltoztatása</string> + <string name="room_permissions_change_space_avatar">Tér profilkép megváltoztatása</string> + <string name="space_permissions_notice_read_only">Nincs jogosultságod a szerepek megváltoztatásához, amik szükségesek a tér bizonyos részeinek megváltoztatásához</string> + <string name="space_permissions_notice">A tér bizonyos beállításainak megváltoztatásához szükséges szerep kiválasztása</string> + <string name="space_settings_permissions_subtitle">Szerepek megjelenítése és megváltoztatása, amik szükségesek a tér bizonyos részeinek megváltoztatásához.</string> + <string name="space_settings_permissions_title">Tér jogosultságok</string> + <string name="space_participants_unban_prompt_msg">A felhasználó tiltásának visszavonása lehetővé teszi, hogy újra belépjen a térbe.</string> + <string name="space_participants_ban_prompt_msg">A felhasználó kitiltása eltávolítja őt a térből és megakadályozza, hogy visszajöjjön.</string> + <string name="space_participants_kick_prompt_msg">a felhasználó kirúgása eltávolítja a térből. +\n +\nHa meg akarja akadályozni, hogy újra csatlakozzon, akkor inkább tiltsa ki.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-it/strings.xml b/vector/src/main/res/values-it/strings.xml index 3308ee3268..67fc33c28e 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -493,7 +493,7 @@ <string name="template_permissions_rationale_msg_camera_and_audio">${app_name} deve essere autorizzato ad accedere a fotocamera e microfono per poter fare chiamate video. \n \nNel prossimo pop-up concedi le autorizzazioni per poter fare la chiamata.</string> - <string name="template_permissions_rationale_msg_contacts">${app_name} può usare tua Rubrica locale per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. Se ti sta bene comunicare i dati di tutti i tuoi contatti all\'Identity Server, puoi concedere l\'autorizzazione nel prossimo pop-up.</string> + <string name="template_permissions_rationale_msg_contacts">${app_name} può usare tua rubrica per trovare altri utenti Matrix grazie alle loro email e numeri di telefono. Se accetti di condividere la tua rubrica per questo scopo, puoi concedere l\'autorizzazione nella prossima finestra.</string> <string name="template_permissions_msg_contacts_warning_other_androids">${app_name} 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\?</string> @@ -1394,7 +1394,7 @@ <string name="keys_backup_info_title_version">Versione</string> <string name="keys_backup_info_title_algorithm">Algoritmo</string> <string name="keys_backup_info_title_signature">Firma</string> - <string name="autodiscover_invalid_response">Risposta Home Server non valida</string> + <string name="autodiscover_invalid_response">Risposta home server non valida</string> <string name="autodiscover_well_known_autofill_dialog_title">Opzioni autocompletamento server</string> <string name="template_autodiscover_well_known_autofill_dialog_message">${app_name} ha rilevato una configurazione server personalizzata per il tuo dominio userID \"%1$s\": \n%2$s</string> @@ -1586,7 +1586,7 @@ <string name="none">Nessuno</string> <string name="revoke">Revoca</string> <string name="disconnect">Disconnetti</string> - <string name="people_no_identity_server">Non è stato configurato alcun Identity Server.</string> + <string name="people_no_identity_server">Non è stato configurato alcun server d\'identità.</string> <string name="call_failed_no_ice_title">Chiamata fallita a causa di un\'errata configurazione del server</string> <string name="call_failed_no_ice_description">Chiedi all\'amministratore del tuo Home Server (%1$s) di configurare un server TURN affinché le chiamate funzionino in modo affidabile. \n @@ -1600,7 +1600,7 @@ <string name="login_error_homeserver_not_found">Non è stato trovato alcun Home Server seguendo questo URL. Per favore, controllalo</string> <string name="settings_call_ringtone_use_default_stun">Permetti chiamate dal Server di appoggio</string> <string name="settings_call_ringtone_use_default_stun_sum">Verrà usato %s come server d\'appoggio quando il tuo homeserver non ha uno proprio (il tuo indirizzo IP verrà esposto durante una chiamata)</string> - <string name="invite_no_identity_server_error">Per poterlo fare, aggiungi un Identity Server nelle Impostazioni.</string> + <string name="invite_no_identity_server_error">Per poterlo fare, aggiungi un server d\'identità nelle Impostazioni.</string> <string name="settings_background_fdroid_sync_mode">Modalità sync in background</string> <string name="settings_background_fdroid_sync_mode_battery">Ottimizzato per la batteria</string> <string name="template_settings_background_fdroid_sync_mode_battery_description">${app_name} si sincronizzerà in background in modo da non consumare la poca batteria disponibile. @@ -1615,33 +1615,33 @@ <string name="settings_set_workmanager_delay_summary">%s \nLa sincronizzazione può essere ritardata a seconda delle risorse (batteria) o dello stato del dispositivo (sospensione).</string> <string name="settings_discovery_category">Farsi trovare</string> - <string name="settings_discovery_manage">Configura l\'Identity Server per trovare e farsi trovare dagli altri utenti.</string> + <string name="settings_discovery_manage">Gestisci le impostazioni per farsi trovare.</string> <string name="encryption_information_device_name_with_warning">Nome pubblico (visibile alle persone con cui comunichi)</string> <string name="device_name_warning">Il nome pubblico di una sessione è visibile alle persone con cui comunichi</string> <string name="identity_server_not_defined">Non stai usando alcun server di identità</string> - <string name="identity_server_not_defined_for_password_reset">Nessun Identity Server configurato. E\' necessario per poter ripristinare la tua password.</string> + <string name="identity_server_not_defined_for_password_reset">Nessun server d\'identità configurato, è necessario per poter ripristinare la password.</string> <string name="error_user_already_logged_in">Pare che tu stia provando a connetterti ad un altro homeserver. Vuoi disconnetterti da qui\?</string> - <string name="identity_server">Identity Server</string> - <string name="disconnect_identity_server">Disconnetti Identity Server</string> - <string name="add_identity_server">Configura Identity Server</string> - <string name="change_identity_server">Cambia Identity Server</string> - <string name="settings_discovery_identity_server_info">Stai usando l\'Identity Server %1$s per trovare altri utenti e essere a tua volta rintracciabile da loro.</string> - <string name="settings_discovery_identity_server_info_none">In questo momento non stai usando alcun Identity Server. Per trovare e farti rintracciare dagli altri utenti, configurane uno qua sotto.</string> + <string name="identity_server">Server d\'identità</string> + <string name="disconnect_identity_server">Disconnetti server d\'identità</string> + <string name="add_identity_server">Configura server d\'identità</string> + <string name="change_identity_server">Cambia server d\'identità</string> + <string name="settings_discovery_identity_server_info">Attualmente stai usando %1$s per trovare altri utenti ed essere a tua volta rintracciabile da loro.</string> + <string name="settings_discovery_identity_server_info_none">Attualmente non stai usando alcun server d\'identità. Per trovare e farti rintracciare dagli altri utenti, configurane uno qua sotto.</string> <string name="settings_discovery_emails_title">Indirizzi email visibili pubblicamente</string> - <string name="settings_discovery_no_mails">Le opzioni su come farsi trovare da altri utenti appariranno dopo che avrai aggiunto un\'email.</string> - <string name="settings_discovery_no_msisdn">Le opzioni su come farsi trovare da altri utenti appariranno dopo che avrai aggiunto un numero di telefono.</string> - <string name="settings_discovery_disconnect_identity_server_info">Se ti disconnetti dall\'Identity Server gli altri utenti non potranno trovarti e tu non potrai invitarli tramite le loro email e numeri di telefono.</string> + <string name="settings_discovery_no_mails">Le opzioni su come farsi trovare appariranno dopo che avrai aggiunto un\'email.</string> + <string name="settings_discovery_no_msisdn">Le opzioni su come farsi trovare appariranno dopo che avrai aggiunto un numero di telefono.</string> + <string name="settings_discovery_disconnect_identity_server_info">Se ti disconnetti dal server d\'identità gli altri utenti non potranno trovarti e tu non potrai invitarli tramite le loro email o numeri di telefono.</string> <string name="settings_discovery_msisdn_title">Numeri di telefono visibili pubblicamente</string> - <string name="settings_discovery_confirm_mail">Abbiamo inviato un\'email di conferma a %s. Controlla l\'email e clicca sul link di conferma</string> + <string name="settings_discovery_confirm_mail">Abbiamo inviato un\'email di conferma a %s, controlla la tua posta e clicca sul link di conferma</string> <string name="settings_discovery_mail_pending">In attesa</string> - <string name="settings_discovery_enter_identity_server">Inserisci l\'URL di un Identity Server</string> - <string name="settings_discovery_bad_identity_server">Impossibile connettersi all\'Identity Server</string> - <string name="settings_discovery_please_enter_server">Inserisci l\'URL dell\'Identity Server</string> - <string name="settings_discovery_no_terms_title">L\'Identity Server non ha reso noti i propri termini di servizio</string> - <string name="settings_discovery_no_terms">L\'Identity Server che hai scelto non ha reso noti i propri termini di servizio. Continua solo se ti fidi</string> + <string name="settings_discovery_enter_identity_server">Inserisci un URL di un server d\'identità</string> + <string name="settings_discovery_bad_identity_server">Impossibile connettersi al server d\'identità</string> + <string name="settings_discovery_please_enter_server">Inserisci l\'URL del server d\'identità</string> + <string name="settings_discovery_no_terms_title">Il server d\'identità non ha reso noti i propri termini di servizio</string> + <string name="settings_discovery_no_terms">Il server d\'identità che hai scelto non ha reso noti i propri termini di servizio. Continua solo se ti fidi del proprietario del servizio</string> <string name="settings_text_message_sent">È stato inviato un messaggio a %s. Inserisci il codice di verifica che contiene.</string> - <string name="settings_discovery_disconnect_with_bound_pid">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.</string> - <string name="settings_agree_to_terms">Accetta i termini di servizio dell\'Identity Server (%s) per permettere ad altri utenti di trovarti tramite la tua email o numero di telefono.</string> + <string name="settings_discovery_disconnect_with_bound_pid">Attualmente stai condividendo i tuoi indirizzi email o numeri di telefono sul server d\'identità %1$s. Dovrai riconnetterti a %2$s per interromperne la condivisione.</string> + <string name="settings_agree_to_terms">Accetta i termini di servizio del server d\'identità (%s) per permettere ad altri utenti di trovarti tramite la tua email o numero di telefono.</string> <string name="labs_allow_extended_logging">Attiva i log dettagliati.</string> <string name="labs_allow_extended_logging_summary">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.</string> <string name="error_terms_not_accepted">Riprova dopo avere accettato i termini di servizio del tuo Home Server.</string> @@ -2192,7 +2192,7 @@ <string name="event_redacted">Messaggio eliminato</string> <string name="settings_show_redacted">Mostra messaggi rimossi</string> <string name="settings_show_redacted_summary">Mostra un segnaposto per i messaggi rimossi</string> - <string name="settings_discovery_confirm_mail_not_clicked">Ti abbiamo inviato un\'email di conferma a %s. Per proseguire controlla la tua posta e clicca sul link di conferma</string> + <string name="settings_discovery_confirm_mail_not_clicked">Ti abbiamo inviato un\'email di conferma a %s, controlla la tua posta e clicca il link di conferma</string> <string name="settings_text_message_sent_wrong_code">Il codice di verifica non è corretto.</string> <string name="uploads_media_title">MEDIA</string> <string name="uploads_media_no_result">In questa stanza non ci sono file multimediali</string> @@ -2211,18 +2211,18 @@ <string name="choose_locale_other_locales_title">Altre lingue disponibili</string> <string name="choose_locale_loading_locales">Caricamento lingue disponibili…</string> <string name="open_terms_of">Apri condizioni di %s</string> - <string name="disconnect_identity_server_dialog_content">Disconnettere dall\'Identity Server %s\?</string> - <string name="template_identity_server_error_outdated_identity_server">Questo Identity Server è obsoleto. ${app_name} supporta solo API V2.</string> + <string name="disconnect_identity_server_dialog_content">Disconnettere dal server d\'identità %s\?</string> + <string name="template_identity_server_error_outdated_identity_server">Questo server d\'identità è obsoleto. ${app_name} supporta solo API V2.</string> <string name="identity_server_error_outdated_home_server">Questa operazione non è possibile. L\'Home Server è obsoleto.</string> - <string name="identity_server_error_no_identity_server_configured">Prima configura un Identity Server.</string> - <string name="identity_server_error_terms_not_signed">Prima accetta le condizioni dell\'Identity Server nelle impostazioni.</string> + <string name="identity_server_error_no_identity_server_configured">Prima configura un server d\'identità.</string> + <string name="identity_server_error_terms_not_signed">Prima accetta le condizioni del server d\'identità nelle impostazioni.</string> <string name="template_identity_server_error_bulk_sha256_not_supported">Per la tua privacy, ${app_name} supporta solo l\'invio di email e numeri di telefono degli utenti in modalità oscurata (hash).</string> <string name="identity_server_error_binding_error">L\'associazione è fallita.</string> <string name="identity_server_error_no_current_binding_error">Non c\'è alcuna associazione con questo identificativo.</string> - <string name="identity_server_set_default_notice">Il tuo Home Server (%1$s) propone di usare %2$s come tuo Identity Server</string> + <string name="identity_server_set_default_notice">Il tuo home server (%1$s) propone di usare %2$s come tuo server d\'identità</string> <string name="identity_server_set_default_submit">Usa %1$s</string> - <string name="identity_server_set_alternative_notice">In alternativa, puoi inserire l\'URL di un qualsiasi altro Identity Server</string> - <string name="identity_server_set_alternative_notice_no_default">Inserisci l\'URL di un Identity Server</string> + <string name="identity_server_set_alternative_notice">In alternativa, puoi inserire l\'URL di un qualsiasi altro server d\'identità</string> + <string name="identity_server_set_alternative_notice_no_default">Inserisci l\'URL di un server d\'identità</string> <string name="identity_server_set_alternative_submit">Invia</string> <string name="play_video">Avvia</string> <string name="pause_video">Pausa</string> @@ -2539,10 +2539,10 @@ \n \nPer garantire la privacy, i dati verranno inviati in forma oscurata (hashing).</string> <string name="identity_server_consent_dialog_title">Invio di email e numeri di telefono</string> - <string name="settings_discovery_consent_action_give_consent">Accetta</string> + <string name="settings_discovery_consent_action_give_consent">Dai il consenso</string> <string name="settings_discovery_consent_action_revoke">Revoca il mio consenso</string> - <string name="settings_discovery_consent_notice_off">Non hai acconsentito ad inviare email e numeri di telefono a questo Identity Server per poter rintracciare altri utenti tra i tuoi contatti.</string> - <string name="settings_discovery_consent_notice_on">Hai acconsentito ad inviare email e numeri di telefono a questo Identity Server per poter rintracciare altri utenti tra i tuoi contatti.</string> + <string name="settings_discovery_consent_notice_off">Non hai acconsentito ad inviare email e numeri di telefono a questo server d\'identità per poter rintracciare altri utenti tra i tuoi contatti.</string> + <string name="settings_discovery_consent_notice_on">Hai acconsentito ad inviare email e numeri di telefono a questo server d\'identità per poter rintracciare altri utenti tra i tuoi contatti.</string> <string name="settings_discovery_consent_title">Invia email e numeri di telefono</string> <string name="direct_room_user_list_suggestions_title">Suggerimenti</string> <string name="direct_room_user_list_contacts_title">Contatti</string> @@ -2836,7 +2836,7 @@ <string name="feedback">Feedback</string> <string name="send_feedback_space_title">Feedback sugli Spazi</string> <string name="error_jitsi_join_conf">Ops! Qualcosa è andato storto nel cercar di entrare nella conferenza</string> - <string name="space_leave_prompt_msg_as_admin">Sei l\'Amministratore di questo Spazio. Assicurati di aver nominato un altro amministratore prima di uscire.</string> + <string name="space_leave_prompt_msg_as_admin">Sei l\'unico amministratore di questo spazio. Abbandonarlo significa che nessuno ne avrà il controllo.</string> <string name="space_leave_prompt_msg_only_you">Sei l\'unico utente di questo Spazio. Se esci nessuno potrà più entrarci. Nemmeno tu.</string> <string name="space_add_rooms">Aggiungi stanze</string> <string name="this_space_has_no_rooms_admin">Alcune stanze potrebbero essere nascoste perché sono private e ti serve il loro invito.</string> @@ -2846,7 +2846,7 @@ <string name="spaces_no_server_support_title">Pare che il tuo Home Server non supporti ancora gli Spazi</string> <string name="spaces_feeling_experimental_subspace">Ti piace sperimentare\? \nProva ad inserire uno Spazio all\'interno di un altro Spazio.</string> - <string name="space_leave_prompt_msg_private">Questo non è uno Spazio pubblico. Senza un invito non potrai più rientrare.</string> + <string name="space_leave_prompt_msg_private">Non potrai più rientrare a meno che non ti invitino di nuovo.</string> <string name="unnamed_room">Stanza senza nome</string> <string name="private_space">Spazio privato</string> <string name="public_space">Spazio pubblico</string> @@ -3000,4 +3000,49 @@ <string name="call_ringing">Sta squillando…</string> <string name="spaces">Spazi</string> <string name="learn_more">Maggiori informazioni</string> + <string name="open_discovery_settings">Apri impostazioni di rintracciabilità</string> + <string name="discovery_section">Farsi trovare (%s)</string> + <string name="finish_setting_up_discovery">Termina la configurazione della rintracciabilità.</string> + <string name="space_add_space_to_any_space_you_manage">Aggiungi uno spazio ad un altro che gestisci.</string> + <string name="space_add_existing_spaces">Aggiungi spazi esistenti</string> + <string name="space_add_existing_rooms_only">Aggiungi stanze esistenti</string> + <string name="pick_tings_to_leave">Scegli da cosa uscire</string> + <string name="leave_specific_ones">Esci da stanze e spazi specifici…</string> + <string name="dont_leave_any">Non uscire da alcuna stanza e spazio</string> + <string name="you_will_leave_all_in">Uscirai da tutte le stanze e gli spazi in %s.</string> + <string name="leave_all_rooms_and_spaces">Esci da tutte le stanze e gli spazi</string> + <string name="space_leave_prompt_msg_with_name">Vuoi davvero uscire da %s\?</string> + <string name="finish_setup">Termina configurazione</string> + <string name="discovery_invite">Invita per email, trova contatti e altro…</string> + <string name="create_space_identity_server_info_none">Attualmente non stai usando un server d\'identità. Per poter invitare compagni ed essere individuabile da loro, configurane uno sotto.</string> + <string name="invite_by_mxid_or_mail">Invita per nome utente o email</string> + <string name="create_spaces_invite_public_header_desc">Assicurati che le persone giuste abbiano accesso a %s. Puoi invitarne altre dopo.</string> + <string name="create_spaces_invite_public_header">Chi sono i tuoi compagni di squadra\?</string> + <string name="command_description_add_to_space">Aggiungi allo spazio scelto</string> + <string name="create_space_in_progress">Creazione spazio…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Mostra alcune informazioni utili per aiutare il debug dell\'applicazione</string> + <string name="settings_developer_mode_show_info_on_screen_title">Mostra info di debug su schermo</string> + <string name="does_not_look_like_valid_email">Non sembra essere un indirizzo email valido</string> + <string name="user_directory_search_hint_2">Cerca per nome, ID o email</string> + <string name="create_new_space">Crea nuovo spazio</string> + <string name="room_settings_space_access_public_description">Chiunque può trovare lo spazio ed entrarvi</string> + <string name="room_settings_space_access_title">Accesso allo spazio</string> + <string name="room_settings_access_rules_pref_dialog_title">Chi può accedervi\?</string> + <string name="settings_notification_emails_enable_for_email">Attiva notifiche email per %s</string> + <string name="settings_notification_emails_no_emails">Per ricevere email con le notifiche, associa un indirizzo di posta al tuo profilo Matrix</string> + <string name="settings_notification_emails_category">Notifica email</string> + <string name="room_permissions_upgrade_the_space">Aggiorna lo spazio</string> + <string name="room_permissions_change_space_name">Cambia il nome dello spazio</string> + <string name="room_permissions_enable_space_encryption">Attiva la crittografia dello spazio</string> + <string name="room_permissions_change_main_address_for_the_space">Cambia l\'indirizzo principale dello spazio</string> + <string name="room_permissions_change_space_avatar">Cambia avatar dello spazio</string> + <string name="space_permissions_notice_read_only">Non hai l\'autorizzazione di aggiornare i ruoli necessari per cambiare diverse parti dello spazio</string> + <string name="space_settings_permissions_title">Autorizzazioni dello spazio</string> + <string name="space_permissions_notice">Seleziona i ruoli necessari per cambiare varie parti dello spazio</string> + <string name="space_settings_permissions_subtitle">Vedi e aggiorna i ruoli necessari per cambiare varie parti dello spazio.</string> + <string name="space_participants_unban_prompt_msg">Riammettere l\'utente gli permetterà di rientrare nello spazio.</string> + <string name="space_participants_ban_prompt_msg">Bandire l\'utente lo espellerà da questo spazio e gli impedirà di rientrare.</string> + <string name="space_participants_kick_prompt_msg">buttando fuori l\'utente verrà rimosso da questo spazio. +\n +\nPer impedire che possa rientrare, dovresti invece bandirlo.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-pt-rBR/strings.xml b/vector/src/main/res/values-pt-rBR/strings.xml index 8239b68b97..04cee3ef62 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -2812,8 +2812,8 @@ <string name="spaces_beta_welcome_to_spaces">Boas-vindas a Espaços!</string> <string name="space_add_rooms">Adicionar salas</string> <string name="space_add_existing_rooms">Adicionar salas e espaços existentes</string> - <string name="space_leave_prompt_msg_as_admin">Você é admin deste espaço, assegure-se que você tem transferido direito de admin a um outro membro antes de sair.</string> - <string name="space_leave_prompt_msg_private">Este espaço não é público. Você não vai ser capaz de se rejuntar sem um convite.</string> + <string name="space_leave_prompt_msg_as_admin">Você é a/o única(o) admin deste espaço. Sair dele vai significar que ninguém tem controle sobre ele.</string> + <string name="space_leave_prompt_msg_private">Você não vai ser capaz de se rejuntar a menos que você seja re-convidada(o).</string> <string name="space_leave_prompt_msg_only_you">Você é a única pessoa aqui. Se você sair, ninguém vai ser capaz de se juntar no futuro, incluindo você.</string> <!-- TO BE REMOVED --> <string name="space_leave_prompt_msg">Você tem certeza que você quer sair do espaço\?</string> @@ -3017,4 +3017,49 @@ <string name="call_ringing">Chamada tocando…</string> <string name="spaces">Espaços</string> <string name="learn_more">Saber Mais</string> + <string name="space_add_space_to_any_space_you_manage">Adicione um espaço a qualquer espaço que você gerencia.</string> + <string name="space_add_existing_spaces">Adicionar espaços existentes</string> + <string name="space_add_existing_rooms_only">Adicionar salas existentes</string> + <string name="pick_tings_to_leave">Escolha coisas para sair</string> + <string name="leave_specific_ones">Sair de salas e espaços específicos…</string> + <string name="dont_leave_any">Não sair de nenhuma sala ou espaço</string> + <string name="you_will_leave_all_in">Você vai sair de todas as salas e espaços em %s.</string> + <string name="leave_all_rooms_and_spaces">Sair de todas as salas e espaços</string> + <string name="space_leave_prompt_msg_with_name">Você tem certeza que você quer sair de %s\?</string> + <string name="discovery_section">Descoberta (%s)</string> + <string name="finish_setup">Terminar configuração</string> + <string name="discovery_invite">Convidar por email, encontrar contatos e mais…</string> + <string name="finish_setting_up_discovery">Termine de configurar descoberta.</string> + <string name="create_space_identity_server_info_none">Você não está atualmente usando um servidor de identidade. A fim de convidar colegas e ser descobertável por elas(es), configure um abaixo.</string> + <string name="invite_by_mxid_or_mail">Convidar por nome de usuária(o) ou mail</string> + <string name="create_spaces_invite_public_header_desc">Assegure que as pessoas certas têm acesso a companhia %s. Você pode convidar outras mais tarde.</string> + <string name="create_spaces_invite_public_header">Quem são suas/seus colegas\?</string> + <string name="command_description_add_to_space">Adicionar ao dado Espaço</string> + <string name="create_space_in_progress">Criando espaço…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Mostrar certa info útil para ajudar a fazer debugging do aplicativo</string> + <string name="settings_developer_mode_show_info_on_screen_title">Mostrar info de debug em tela</string> + <string name="does_not_look_like_valid_email">Não parece com um endereço de email válido</string> + <string name="open_discovery_settings">Abrir Configurações de Descoberta</string> + <string name="user_directory_search_hint_2">Pesquisar por nome, ID ou mail</string> + <string name="create_new_space">Criar Novo Espaço</string> + <string name="room_settings_space_access_public_description">Qualquer pessoa pode encontrar o espaço e se juntar</string> + <string name="room_settings_space_access_title">Acesso a espaço</string> + <string name="room_settings_access_rules_pref_dialog_title">Quem pode acessar\?</string> + <string name="settings_notification_emails_enable_for_email">Habilitar notificações de email para %s</string> + <string name="settings_notification_emails_no_emails">Para receber email com notificação, por favor associe um email a sua conta Matrix</string> + <string name="settings_notification_emails_category">Notificação de email</string> + <string name="room_permissions_upgrade_the_space">Fazer upgrade do espaço</string> + <string name="room_permissions_change_space_name">Mudar nome de espaço</string> + <string name="room_permissions_enable_space_encryption">Habilitar encriptação de espaço</string> + <string name="room_permissions_change_main_address_for_the_space">Mudar endereço principal para o espaço</string> + <string name="room_permissions_change_space_avatar">Mudar avatar de espaço</string> + <string name="space_permissions_notice_read_only">Você não tem permissão para atualizar os papéis requeridos para mudar várias partes deste espaço</string> + <string name="space_permissions_notice">Selecione os papéis requeridos para mudar várias partes deste espaço</string> + <string name="space_settings_permissions_subtitle">Veja e atualize os papéis requeridos para mudar várias partes do espaço.</string> + <string name="space_settings_permissions_title">Permissões de espaço</string> + <string name="space_participants_unban_prompt_msg">Desbanir usuária(o) vai permiti-la(o) se juntar ao espaço de novo.</string> + <string name="space_participants_ban_prompt_msg">Banir usuária(o) vai expulsá-la(o) deste espaço e preveni-la de se juntar de novo.</string> + <string name="space_participants_kick_prompt_msg">expulsar usuária(o) vai removê-la(o) deste espaço. +\n +\nPara preveni-la(o) de se juntar de novo, você devia bani-la(o) em vez disso.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-ru/strings.xml b/vector/src/main/res/values-ru/strings.xml index 1569abe7f3..82cddb03cf 100644 --- a/vector/src/main/res/values-ru/strings.xml +++ b/vector/src/main/res/values-ru/strings.xml @@ -3105,4 +3105,49 @@ <string name="call_ringing">Вызов…</string> <string name="spaces">Пространства</string> <string name="learn_more">Подробнее</string> + <string name="space_add_space_to_any_space_you_manage">Добавьте пространство в любое пространство, которым вы управляете.</string> + <string name="space_add_existing_spaces">Добавить существующие пространства</string> + <string name="space_add_existing_rooms_only">Добавить существующие комнаты</string> + <string name="pick_tings_to_leave">Выберите, что нужно покинуть</string> + <string name="leave_specific_ones">Покинуть определенные комнаты и пространства…</string> + <string name="dont_leave_any">Не покидать ни одну комнату и пространство</string> + <string name="you_will_leave_all_in">Вы покинете все комнаты и пространства в %s.</string> + <string name="leave_all_rooms_and_spaces">Покинуть все комнаты и пространства</string> + <string name="space_leave_prompt_msg_with_name">Вы уверены, что хотите покинуть %s\?</string> + <string name="discovery_section">Обнаружение (%s)</string> + <string name="finish_setup">Завершение настройки</string> + <string name="discovery_invite">Приглашение по электронной почте, поиск контактов и многое другое…</string> + <string name="finish_setting_up_discovery">Завершите настройку обнаружения.</string> + <string name="create_space_identity_server_info_none">В настоящее время вы не используете сервер идентификации. Чтобы приглашать членов команды и быть доступным для них, настройте один из них ниже.</string> + <string name="invite_by_mxid_or_mail">Приглашение по имени пользователя или по почте</string> + <string name="create_spaces_invite_public_header_desc">Убедитесь, что нужные люди имеют доступ к %s. Вы можете пригласить больше людей позже.</string> + <string name="create_spaces_invite_public_header">Кто ваши члены команды\?</string> + <string name="command_description_add_to_space">Добавить в данное пространство</string> + <string name="create_space_in_progress">Создание пространства…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Показать некоторую полезную информацию для помощи в отладке приложения</string> + <string name="settings_developer_mode_show_info_on_screen_title">Показать отладочную информацию на экране</string> + <string name="does_not_look_like_valid_email">Не похоже на действительный адрес электронной почты</string> + <string name="open_discovery_settings">Открыть настройки обнаружения</string> + <string name="user_directory_search_hint_2">Поиск по имени, ID или почте</string> + <string name="create_new_space">Создать новое пространство</string> + <string name="room_settings_space_access_public_description">Любой желающий может найти это пространство и присоединиться</string> + <string name="room_settings_space_access_title">Доступ к пространству</string> + <string name="room_settings_access_rules_pref_dialog_title">Кто имеет к этому доступ\?</string> + <string name="settings_notification_emails_enable_for_email">Включить уведомления по электронной почте для %s</string> + <string name="settings_notification_emails_no_emails">Чтобы получать уведомления по электронной почте, пожалуйста, привяжите электронную почту к вашей учетной записи Matrix</string> + <string name="settings_notification_emails_category">Уведомление по эл. почте</string> + <string name="room_permissions_upgrade_the_space">Обновление пространства</string> + <string name="room_permissions_change_space_name">Изменить название пространства</string> + <string name="room_permissions_enable_space_encryption">Включить шифрование пространства</string> + <string name="room_permissions_change_main_address_for_the_space">Изменить основной адрес для пространства</string> + <string name="room_permissions_change_space_avatar">Изменить аватар пространства</string> + <string name="space_permissions_notice_read_only">У вас нет разрешения на обновление ролей, необходимых для изменения различных частей этого пространства</string> + <string name="space_permissions_notice">Выберите роли, необходимые для изменения различных частей этого пространства</string> + <string name="space_settings_permissions_subtitle">Просмотр и обновление ролей, необходимых для изменения различных частей пространства.</string> + <string name="space_settings_permissions_title">Разрешения пространства</string> + <string name="space_participants_unban_prompt_msg">Разблокирование пользователя позволит ему снова присоединиться к пространству.</string> + <string name="space_participants_ban_prompt_msg">Блокировка пользователя исключит его из этого пространства и не позволит ему присоединиться снова.</string> + <string name="space_participants_kick_prompt_msg">Выгнанный пользователь будет удалён из этого пространства. +\n +\nЧтобы предотвратить его повторное присоединение, вы должны заблокировать его.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-sq/strings.xml b/vector/src/main/res/values-sq/strings.xml index 8f7144d965..182b3a1415 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2771,8 +2771,8 @@ <string name="spaces_feeling_experimental_subspace">Ndiheni eksperimentues\? \nMund të shtoni te një hapësirë hapësira ekzistuese.</string> <string name="space_add_rooms">Shtoni dhoma</string> - <string name="space_leave_prompt_msg_as_admin">Jeni përgjegjës i kësaj hapësirë, sigurohuni se keni shpërngulur të drejt përgjegjësi te një anëtar tjetër, përpara braktisjes.</string> - <string name="space_leave_prompt_msg_private">Kjo hapësirë s’është publike. S’do të jeni në gjendje të rihyni pa një ftesë.</string> + <string name="space_leave_prompt_msg_as_admin">Jeni përgjegjësi i vetëm i kësaj hapësire. Braktisja e saj do të thotë se askush s’do të ketë kontroll mbi të.</string> + <string name="space_leave_prompt_msg_private">S’do të jeni në gjendje të rihyni pa një ftesë.</string> <string name="space_leave_prompt_msg_only_you">Jeni personi i vetëm këtu. Nëse ikni, askush s’do të jetë në gjendje të marrë pjesë në të ardhmen, përfshi ju.</string> <string name="invite_to_space">Ftojeni te %s</string> <string name="a11y_beta">Kjo veçori është në fazë beta</string> @@ -2936,4 +2936,49 @@ <string name="call_ringing">Po i bihet ziles…</string> <string name="spaces">Hapësira</string> <string name="learn_more">Mësoni Më Tepër</string> + <string name="space_add_space_to_any_space_you_manage">Shtoni një hapësirë te cilado hapësirë që administroni.</string> + <string name="space_add_existing_spaces">Shtoni hapësira ekzistuese</string> + <string name="space_add_existing_rooms_only">Shtoni dhoma ekzistuese</string> + <string name="pick_tings_to_leave">Zgjidhni gjëra që duhen braktisur</string> + <string name="leave_specific_ones">Braktisni dhoma dhe hapësira të përcaktuara…</string> + <string name="dont_leave_any">Mos braktis ndonjë dhomë dhe hapësirë</string> + <string name="you_will_leave_all_in">Do të braktisni krejt dhomat dhe hapësirat te %s.</string> + <string name="leave_all_rooms_and_spaces">Braktis krejt dhomat dhe hapësirat</string> + <string name="space_leave_prompt_msg_with_name">Jeni i sigurt se doni të dilni nga \'%s\?</string> + <string name="discovery_section">Zbulim (%S)</string> + <string name="finish_setup">Përfundoje ujdisjen</string> + <string name="discovery_invite">Ftoni me email, gjeni kontakte, etj…</string> + <string name="finish_setting_up_discovery">Përfundo ujdisjen e zbulimit.</string> + <string name="create_space_identity_server_info_none">Aktualisht nuk përdorni ndonjë shërbyes identitetesh. Që të ftoni shokë të ekipit dhe të jeni i zbulueshëm prej tyre, formësoni një të tillë më poshtë.</string> + <string name="invite_by_mxid_or_mail">Ftoni me emër përdoruesi ose email</string> + <string name="create_spaces_invite_public_header_desc">Sigurohuni se te %s e shoqërisë kanë hyrje personat e duhur. Më vonë mund të ftoni të tjerë.</string> + <string name="create_spaces_invite_public_header">Cilët janë shokët tuaj të ekipit\?</string> + <string name="command_description_add_to_space">Shtoni te Hapësira e dhënë</string> + <string name="create_space_in_progress">Po krijohet hapësirë…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">Shfaqni ca hollësira të dobishme, për të ndihmuar në diagnostikimin e aplikacionit</string> + <string name="settings_developer_mode_show_info_on_screen_title">Shfaq në ekran të dhëna diagnostikimi</string> + <string name="does_not_look_like_valid_email">S’duket si adresë email e vlefshme</string> + <string name="open_discovery_settings">Hapni Rregullime Zbulimi</string> + <string name="user_directory_search_hint_2">Kërkoni sipas emri , ID-je ose email-i</string> + <string name="create_new_space">Krijoni Hapësirë të Re</string> + <string name="room_settings_space_access_public_description">Hapësirën mund ta gjejë kushdo dhe hyjë në të</string> + <string name="room_settings_space_access_title">Hyrje në hapësirë</string> + <string name="room_settings_access_rules_pref_dialog_title">Kush mund të hyjë\?</string> + <string name="settings_notification_emails_enable_for_email">Aktivizo njoftime me email për %s</string> + <string name="settings_notification_emails_no_emails">Që të merrni email me njoftim, ju lutemi, përshoqërojini llogarisë tuaj Matrix një email</string> + <string name="settings_notification_emails_category">Njoftim me email</string> + <string name="room_permissions_upgrade_the_space">Të përmirësojë hapësirën</string> + <string name="room_permissions_change_space_name">Të ndryshojë emrin e hapësirës</string> + <string name="room_permissions_enable_space_encryption">Të aktivizojë fshehtëzimin e hapësirës</string> + <string name="room_permissions_change_main_address_for_the_space">Të ndryshojë adresë kryesore për hapësirën</string> + <string name="room_permissions_change_space_avatar">Të ndryshojë avatarin e hapësirës</string> + <string name="space_permissions_notice_read_only">S’keni leje të përditësoni rolet e domosdoshëm për të ndryshuar anë të ndryshme të kësaj hapësire</string> + <string name="space_permissions_notice">Të përzgjedhë rolet e domosdoshme për të ndryshuar anë të ndryshme të kësaj hapësire</string> + <string name="space_settings_permissions_subtitle">Të shohë dhe përditësojë role të domosdoshëm për të ndryshuar anë të ndryshme të hapësirës.</string> + <string name="space_settings_permissions_title">Leje hapësire</string> + <string name="space_participants_unban_prompt_msg">Heqja e dëbimit përdoruesit do t’i lejojë të marrë pjesë sërish në hapësirë.</string> + <string name="space_participants_ban_prompt_msg">Dëbimi i përdoruesit do ta përzërë atë nga kjo hapësirë dhe do t’i pengojë atij rihyrjen.</string> + <string name="space_participants_kick_prompt_msg">Përzënia e përdoruesit do ta heqë prej kësaj hapësire. +\n +\nQë të pengohet pjesëmarrja sërish e tij, duhet ta dëboni.</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-zh-rCN/strings.xml b/vector/src/main/res/values-zh-rCN/strings.xml index 148790d93a..20df22ad79 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -2599,8 +2599,8 @@ <string name="spaces_beta_welcome_to_spaces">欢迎来到空间!</string> <string name="space_add_rooms">添加聊天室</string> <string name="space_add_existing_rooms">添加现有聊天室和空间</string> - <string name="space_leave_prompt_msg_as_admin">你是此空间的管理员,请确保你在离开前已将管理权限转让给另一位成员。</string> - <string name="space_leave_prompt_msg_private">此空间并非公开空间。你将无法在没有邀请的情况下重新加入。</string> + <string name="space_leave_prompt_msg_as_admin">你是此空间唯一的管理员。离开就意味着没人能控制它。</string> + <string name="space_leave_prompt_msg_private">除非你被重新邀请,否则你将无法重新加入。</string> <string name="space_leave_prompt_msg_only_you">你是这唯一的人。如果你离开,包括你在内的所有人都将无法加入此空间。</string> <!-- TO BE REMOVED --> <string name="space_leave_prompt_msg">你确定你想要离开此空间吗?</string> @@ -2901,4 +2901,49 @@ <string name="call_ringing">来电响铃中…</string> <string name="spaces">空间</string> <string name="learn_more">了解更多</string> + <string name="space_add_space_to_any_space_you_manage">将一个空间添加到您管理的任何空间。</string> + <string name="space_add_existing_spaces">添加现有空间</string> + <string name="space_add_existing_rooms_only">添加现有聊天室</string> + <string name="pick_tings_to_leave">选择要离开的项目</string> + <string name="leave_specific_ones">离开特定聊天室和空间…</string> + <string name="dont_leave_any">不要离开任何聊天室和空间</string> + <string name="you_will_leave_all_in">你将离开 %s 中的所有聊天室和空间。</string> + <string name="leave_all_rooms_and_spaces">离开所有聊天室和空间</string> + <string name="space_leave_prompt_msg_with_name">你确定要离开 %s 吗?</string> + <string name="discovery_section">发现 (%s)</string> + <string name="finish_setup">完成设置</string> + <string name="discovery_invite">通过电子邮件邀请、寻找联系人和更多…</string> + <string name="finish_setting_up_discovery">设置“发现”已毕。</string> + <string name="create_space_identity_server_info_none">您目前没有使用身份服务器。为了邀请队友并被他们发现,请在下方配置一个这样的服务器。</string> + <string name="invite_by_mxid_or_mail">通过用户名或邮件邀请</string> + <string name="create_spaces_invite_public_header_desc">确保只有合适的人能访问 %s 空间。稍后你可以邀请更多的人加入。</string> + <string name="create_spaces_invite_public_header">谁是你的队友?</string> + <string name="command_description_add_to_space">添加至规定的空间</string> + <string name="create_space_in_progress">创建空间中…</string> + <string name="settings_developer_mode_show_info_on_screen_summary">显示一些有用的信息以帮助调试应用程序</string> + <string name="settings_developer_mode_show_info_on_screen_title">在屏幕商显示调试信息</string> + <string name="does_not_look_like_valid_email">看起来不像是有效的邮箱地址</string> + <string name="open_discovery_settings">打开“发现”设置</string> + <string name="user_directory_search_hint_2">按名称、ID或邮箱搜索</string> + <string name="create_new_space">创建新空间</string> + <string name="room_settings_space_access_public_description">任何人均可找到此空间并加入</string> + <string name="room_settings_space_access_title">空间访问</string> + <string name="room_settings_access_rules_pref_dialog_title">谁可以访问?</string> + <string name="settings_notification_emails_enable_for_email">启用 %s 的电邮通知</string> + <string name="settings_notification_emails_no_emails">要接收通知邮件,请将一个电子邮箱关联到你的 Matrix 账户</string> + <string name="settings_notification_emails_category">电子邮件通知</string> + <string name="room_permissions_upgrade_the_space">升级空间</string> + <string name="room_permissions_change_space_name">更改空间名称</string> + <string name="room_permissions_enable_space_encryption">启用空间加密</string> + <string name="room_permissions_change_main_address_for_the_space">更改空间主地址</string> + <string name="room_permissions_change_space_avatar">更改空间头像</string> + <string name="space_permissions_notice_read_only">您没有权限更新更改该空间的各个部分所需的角色</string> + <string name="space_permissions_notice">选择更改该空间的各个部分所需的角色</string> + <string name="space_settings_permissions_subtitle">查看和更新更改空间的各个部分所需的角色。</string> + <string name="space_settings_permissions_title">空间权限</string> + <string name="space_participants_unban_prompt_msg">解除禁令将允许被封禁的用户再次加入空间。</string> + <string name="space_participants_ban_prompt_msg">封禁用户将把他们踢出这个空间,并阻止他们再次加入。</string> + <string name="space_participants_kick_prompt_msg">把用户踢出也会从这个空间删除他们。 +\n +\n为了防止他们再次加入,你应该封禁他们。</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values-zh-rTW/strings.xml b/vector/src/main/res/values-zh-rTW/strings.xml index b1c60f51fd..6f7a8b5dd3 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2728,8 +2728,8 @@ <string name="spaces_feeling_experimental_subspace">想要做點實驗嗎? \n您可以將既有的空間新增至其他空間中。</string> <string name="space_add_rooms">新增聊天室</string> - <string name="space_leave_prompt_msg_as_admin">您是此空間的管理員,請確保在您離開前已將管理權轉交給另一個成員。</string> - <string name="space_leave_prompt_msg_private">此空間並非公開。您將無法在無邀請的狀況下重新加入。</string> + <string name="space_leave_prompt_msg_as_admin">您是此空間唯一的管理員。若離開將意味著沒有人可以控制它。</string> + <string name="space_leave_prompt_msg_private">除非被重新邀請,否則您將無法重新加入。</string> <string name="space_leave_prompt_msg_only_you">您是這裡唯一的人。如果您離開,包含您在內的所有人都將無法加入。</string> <string name="invite_to_space">邀請至 %s</string> <string name="a11y_beta">此功能仍在測試版</string> @@ -2891,4 +2891,49 @@ <string name="call_ringing">通話響鈴中……</string> <string name="spaces">空間</string> <string name="learn_more">取得更多資訊</string> + <string name="space_add_space_to_any_space_you_manage">新增空間至您管理的任何空間。</string> + <string name="space_add_existing_spaces">新增既有的空間</string> + <string name="space_add_existing_rooms_only">新增既有的聊天室</string> + <string name="pick_tings_to_leave">挑選要離開的對象</string> + <string name="leave_specific_ones">離開特定的聊天室與空間……</string> + <string name="dont_leave_any">不要離開任何聊天室與空間</string> + <string name="you_will_leave_all_in">您將離開所有 %s 中的聊天室與空間。</string> + <string name="leave_all_rooms_and_spaces">離開所有聊天室與空間</string> + <string name="space_leave_prompt_msg_with_name">您確定您想要離開 %s?</string> + <string name="discovery_section">探索 (%s)</string> + <string name="finish_setup">結束設定</string> + <string name="discovery_invite">透過電子郵件邀請、尋找聯絡人以及更多……</string> + <string name="finish_setting_up_discovery">完成探索設定。</string> + <string name="create_space_identity_server_info_none">您目前並未使用身份認證伺服器。為了邀請隊友並被他們探索,請在下方設定一個。</string> + <string name="invite_by_mxid_or_mail">透過使用者名稱或電子郵件邀請</string> + <string name="create_spaces_invite_public_header_desc">確保合適的人可以存取 %s 公司。您可以稍後再邀請。</string> + <string name="create_spaces_invite_public_header">誰是您的隊友?</string> + <string name="command_description_add_to_space">新增至指定的空間</string> + <string name="create_space_in_progress">正在建立空間……</string> + <string name="settings_developer_mode_show_info_on_screen_summary">顯示一些有用的資訊以協助應用程式除錯</string> + <string name="settings_developer_mode_show_info_on_screen_title">在畫面上顯示除錯資訊</string> + <string name="does_not_look_like_valid_email">看起來不是有效的電子郵件地址</string> + <string name="open_discovery_settings">開啟探索設定</string> + <string name="user_directory_search_hint_2">以名稱、ID 或電子郵件搜尋</string> + <string name="create_new_space">建立新空間</string> + <string name="room_settings_space_access_public_description">任何人都可以找到空間並加入</string> + <string name="room_settings_space_access_title">空間存取</string> + <string name="room_settings_access_rules_pref_dialog_title">誰可以存取?</string> + <string name="settings_notification_emails_enable_for_email">啟用 %s 的電子郵件通知</string> + <string name="settings_notification_emails_no_emails">要收到通知用的電子郵件,請將電子郵件關聯至您的 Matrix 帳號</string> + <string name="settings_notification_emails_category">電子郵件通知</string> + <string name="room_permissions_upgrade_the_space">升級空間</string> + <string name="room_permissions_change_space_name">變更空間名稱</string> + <string name="room_permissions_enable_space_encryption">啟用空間加密</string> + <string name="room_permissions_change_main_address_for_the_space">變更空間的主要位置</string> + <string name="room_permissions_change_space_avatar">變更空間大頭照</string> + <string name="space_permissions_notice_read_only">您無權更新變更此空間各部份所需角色的權限</string> + <string name="space_permissions_notice">選取變更此空間各部份所需的角色</string> + <string name="space_settings_permissions_subtitle">檢視並更新變更空間各部份所需的角色。</string> + <string name="space_settings_permissions_title">空間權限</string> + <string name="space_participants_unban_prompt_msg">取消封鎖使用者將讓他們可以再次加入空間。</string> + <string name="space_participants_ban_prompt_msg">封鎖使用者會將他們踢出此空間並防止他們再次加入。</string> + <string name="space_participants_kick_prompt_msg">踢除使用者將會將他們從此空間中移除。 +\n +\n為了防止他們再加入,您應該封鎖他們。</string> </resources> \ No newline at end of file diff --git a/vector/src/main/res/values/config.xml b/vector/src/main/res/values/config.xml index 30ca8d7f56..a8e80f82ed 100755 --- a/vector/src/main/res/values/config.xml +++ b/vector/src/main/res/values/config.xml @@ -26,4 +26,15 @@ <item>gitter.im</item> </string-array> + <!-- Permalink config --> + <string-array name="permalink_supported_hosts" translatable="false"> + <!-- Regular Element Web instance --> + <item>app.element.io</item> + <!-- Other known instances of Element Web --> + <item>develop.element.io</item> + <item>staging.element.io</item> + <!-- Previous Web instance, kept for compatibility reason --> + <item>riot.im</item> + </string-array> + </resources> diff --git a/vector/src/main/res/xml/automotive_app_desc.xml b/vector/src/main/res/xml/automotive_app_desc.xml new file mode 100644 index 0000000000..66dd335d1a --- /dev/null +++ b/vector/src/main/res/xml/automotive_app_desc.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<automotiveApp> + <uses name="notification" /> +</automotiveApp> diff --git a/vector/src/test/java/androidx/lifecycle/LifecycleRegistry.kt b/vector/src/test/java/androidx/lifecycle/LifecycleRegistry.kt new file mode 100644 index 0000000000..15a76f5e1e --- /dev/null +++ b/vector/src/test/java/androidx/lifecycle/LifecycleRegistry.kt @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 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 androidx.lifecycle + +/** + * Manual test override to stop BaseMvRxViewModel from interacting with the android looper/main thread + * Tests will run on their original test worker threads + * + * This has been fixed is newer versions of Mavericks via LifecycleRegistry.createUnsafe + * https://github.com/airbnb/mavericks/blob/master/mvrx-rxjava2/src/main/kotlin/com/airbnb/mvrx/BaseMvRxViewModel.kt#L61 + */ +@Suppress("UNUSED") +class LifecycleRegistry(@Suppress("UNUSED_PARAMETER") lifecycleOwner: LifecycleOwner) : Lifecycle() { + + private var state = State.INITIALIZED + + fun setCurrentState(state: State) { + this.state = state + } + + override fun addObserver(observer: LifecycleObserver) { + TODO("Not yet implemented") + } + + override fun removeObserver(observer: LifecycleObserver) { + TODO("Not yet implemented") + } + + override fun getCurrentState() = state +} diff --git a/vector/src/test/java/im/vector/app/features/crypto/keys/KeysExporterTest.kt b/vector/src/test/java/im/vector/app/features/crypto/keys/KeysExporterTest.kt index a8997db855..c75abf5db4 100644 --- a/vector/src/test/java/im/vector/app/features/crypto/keys/KeysExporterTest.kt +++ b/vector/src/test/java/im/vector/app/features/crypto/keys/KeysExporterTest.kt @@ -40,7 +40,7 @@ class KeysExporterTest { private val cryptoService = FakeCryptoService() private val context = FakeContext() private val keysExporter = KeysExporter( - session = FakeSession(cryptoService = cryptoService), + session = FakeSession(fakeCryptoService = cryptoService), context = context.instance, dispatchers = CoroutineDispatchers(Dispatchers.Unconfined) ) diff --git a/vector/src/test/java/im/vector/app/features/crypto/quads/SharedSecureStorageViewModelTest.kt b/vector/src/test/java/im/vector/app/features/crypto/quads/SharedSecureStorageViewModelTest.kt new file mode 100644 index 0000000000..8f48f10868 --- /dev/null +++ b/vector/src/test/java/im/vector/app/features/crypto/quads/SharedSecureStorageViewModelTest.kt @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 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 com.airbnb.mvrx.Uninitialized +import im.vector.app.test.InstantRxRule +import im.vector.app.test.fakes.FakeSession +import im.vector.app.test.fakes.FakeStringProvider +import im.vector.app.test.test +import org.junit.Rule +import org.junit.Test +import org.matrix.android.sdk.api.session.securestorage.IntegrityResult +import org.matrix.android.sdk.api.session.securestorage.KeyInfo +import org.matrix.android.sdk.api.session.securestorage.KeyInfoResult +import org.matrix.android.sdk.api.session.securestorage.SecretStorageKeyContent +import org.matrix.android.sdk.api.session.securestorage.SsssPassphrase + +private const val IGNORED_PASSPHRASE_INTEGRITY = false +private val KEY_INFO_WITH_PASSPHRASE = KeyInfo( + id = "id", + content = SecretStorageKeyContent(passphrase = SsssPassphrase(null, 0, null)) +) +private val KEY_INFO_WITHOUT_PASSPHRASE = KeyInfo(id = "id", content = SecretStorageKeyContent(passphrase = null)) + +class SharedSecureStorageViewModelTest { + + @get:Rule + val instantRx = InstantRxRule() + + private val stringProvider = FakeStringProvider() + private val session = FakeSession() + + @Test + fun `given a key info with passphrase when initialising then step is EnterPassphrase`() { + givenKey(KEY_INFO_WITH_PASSPHRASE) + + val viewModel = createViewModel() + + viewModel.test().assertState(aViewState( + hasPassphrase = true, + step = SharedSecureStorageViewState.Step.EnterPassphrase + )) + } + + @Test + fun `given a key info without passphrase when initialising then step is EnterKey`() { + givenKey(KEY_INFO_WITHOUT_PASSPHRASE) + + val viewModel = createViewModel() + + viewModel.test().assertState(aViewState( + hasPassphrase = false, + step = SharedSecureStorageViewState.Step.EnterKey + )) + } + + @Test + fun `given on EnterKey step when going back then dismisses`() { + givenKey(KEY_INFO_WITHOUT_PASSPHRASE) + + val viewModel = createViewModel() + val test = viewModel.test() + + viewModel.handle(SharedSecureStorageAction.Back) + + test.assertEvents(SharedSecureStorageViewEvent.Dismiss) + } + + @Test + fun `given on passphrase step when using key then step is EnterKey`() { + givenKey(KEY_INFO_WITH_PASSPHRASE) + val viewModel = createViewModel() + val test = viewModel.test() + + viewModel.handle(SharedSecureStorageAction.UseKey) + + test.assertState(aViewState( + hasPassphrase = true, + step = SharedSecureStorageViewState.Step.EnterKey + )) + } + + @Test + fun `given a key info with passphrase and on EnterKey step when going back then step is EnterPassphrase`() { + givenKey(KEY_INFO_WITH_PASSPHRASE) + val viewModel = createViewModel() + val test = viewModel.test() + + viewModel.handle(SharedSecureStorageAction.UseKey) + viewModel.handle(SharedSecureStorageAction.Back) + + test.assertState(aViewState( + hasPassphrase = true, + step = SharedSecureStorageViewState.Step.EnterPassphrase + )) + } + + @Test + fun `given on passphrase step when going back then dismisses`() { + givenKey(KEY_INFO_WITH_PASSPHRASE) + val viewModel = createViewModel() + val test = viewModel.test() + + viewModel.handle(SharedSecureStorageAction.Back) + + test.assertEvents(SharedSecureStorageViewEvent.Dismiss) + } + + private fun createViewModel() = SharedSecureStorageViewModel( + SharedSecureStorageViewState(), + SharedSecureStorageActivity.Args(keyId = null, emptyList(), "alias"), + stringProvider.instance, + session + ) + + private fun aViewState(hasPassphrase: Boolean, step: SharedSecureStorageViewState.Step) = SharedSecureStorageViewState( + ready = true, + hasPassphrase = hasPassphrase, + checkingSSSSAction = Uninitialized, + step = step, + activeDeviceCount = 0, + showResetAllAction = false, + userId = "" + ) + + private fun givenKey(keyInfo: KeyInfo) { + givenHasAccessToSecrets() + session.fakeSharedSecretStorageService._defaultKey = KeyInfoResult.Success(keyInfo) + } + + private fun givenHasAccessToSecrets() { + session.fakeSharedSecretStorageService.integrityResult = IntegrityResult.Success(passphraseBased = IGNORED_PASSPHRASE_INTEGRITY) + } +} diff --git a/vector/src/test/java/im/vector/app/test/Extensions.kt b/vector/src/test/java/im/vector/app/test/Extensions.kt index 290268df1c..0d89208b2e 100644 --- a/vector/src/test/java/im/vector/app/test/Extensions.kt +++ b/vector/src/test/java/im/vector/app/test/Extensions.kt @@ -16,4 +16,31 @@ package im.vector.app.test +import com.airbnb.mvrx.MvRxState +import im.vector.app.core.platform.VectorViewEvents +import im.vector.app.core.platform.VectorViewModel +import im.vector.app.core.platform.VectorViewModelAction +import io.reactivex.observers.TestObserver +import org.amshove.kluent.shouldBeEqualTo + fun String.trimIndentOneLine() = trimIndent().replace("\n", "") + +fun <S : MvRxState, VA : VectorViewModelAction, VE : VectorViewEvents> VectorViewModel<S, VA, VE>.test(): ViewModelTest<S, VE> { + val state = { com.airbnb.mvrx.withState(this) { it } } + val viewEvents = viewEvents.observe().test() + return ViewModelTest(state, viewEvents) +} + +class ViewModelTest<S, VE>( + val state: () -> S, + val viewEvents: TestObserver<VE> +) { + + fun assertEvents(vararg expected: VE) { + viewEvents.assertValues(*expected) + } + + fun assertState(expected: S) { + state() shouldBeEqualTo expected + } +} diff --git a/vector/src/test/java/im/vector/app/test/InstantRxRule.kt b/vector/src/test/java/im/vector/app/test/InstantRxRule.kt new file mode 100644 index 0000000000..1145cb7dd1 --- /dev/null +++ b/vector/src/test/java/im/vector/app/test/InstantRxRule.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 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.test + +import io.reactivex.android.plugins.RxAndroidPlugins +import io.reactivex.plugins.RxJavaPlugins +import io.reactivex.schedulers.Schedulers +import org.junit.rules.TestRule +import org.junit.runner.Description +import org.junit.runners.model.Statement + +class InstantRxRule : TestRule { + override fun apply(base: Statement, description: Description?): Statement { + RxJavaPlugins.setInitNewThreadSchedulerHandler { Schedulers.trampoline() } + RxAndroidPlugins.setInitMainThreadSchedulerHandler { Schedulers.trampoline() } + return base + } +} diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt index 735af4ea11..1ec1f31b45 100644 --- a/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt +++ b/vector/src/test/java/im/vector/app/test/fakes/FakeCryptoService.kt @@ -16,12 +16,23 @@ package im.vector.app.test.fakes +import androidx.lifecycle.MutableLiveData import io.mockk.mockk import org.matrix.android.sdk.api.session.crypto.CryptoService +import org.matrix.android.sdk.internal.crypto.model.CryptoDeviceInfo class FakeCryptoService : CryptoService by mockk() { var roomKeysExport = ByteArray(size = 1) + var cryptoDeviceInfos = mutableMapOf<String, CryptoDeviceInfo>() override suspend fun exportRoomKeys(password: String) = roomKeysExport + + override fun getLiveCryptoDeviceInfo() = MutableLiveData(cryptoDeviceInfos.values.toList()) + + override fun getLiveCryptoDeviceInfo(userId: String) = getLiveCryptoDeviceInfo(listOf(userId)) + + override fun getLiveCryptoDeviceInfo(userIds: List<String>) = MutableLiveData( + cryptoDeviceInfos.filterKeys { userIds.contains(it) }.values.toList() + ) } diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt index 3400436705..f5ee51b020 100644 --- a/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt +++ b/vector/src/test/java/im/vector/app/test/fakes/FakeSession.kt @@ -18,10 +18,11 @@ package im.vector.app.test.fakes import io.mockk.mockk import org.matrix.android.sdk.api.session.Session -import org.matrix.android.sdk.api.session.crypto.CryptoService class FakeSession( - private val cryptoService: CryptoService = FakeCryptoService() + val fakeCryptoService: FakeCryptoService = FakeCryptoService(), + val fakeSharedSecretStorageService: FakeSharedSecretStorageService = FakeSharedSecretStorageService() ) : Session by mockk(relaxed = true) { - override fun cryptoService() = cryptoService + override fun cryptoService() = fakeCryptoService + override val sharedSecretStorageService = fakeSharedSecretStorageService } diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeSharedSecretStorageService.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeSharedSecretStorageService.kt new file mode 100644 index 0000000000..4f349f8506 --- /dev/null +++ b/vector/src/test/java/im/vector/app/test/fakes/FakeSharedSecretStorageService.kt @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 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.test.fakes + +import org.matrix.android.sdk.api.listeners.ProgressListener +import org.matrix.android.sdk.api.session.securestorage.IntegrityResult +import org.matrix.android.sdk.api.session.securestorage.KeyInfoResult +import org.matrix.android.sdk.api.session.securestorage.KeySigner +import org.matrix.android.sdk.api.session.securestorage.SharedSecretStorageError +import org.matrix.android.sdk.api.session.securestorage.SharedSecretStorageService +import org.matrix.android.sdk.api.session.securestorage.SsssKeyCreationInfo +import org.matrix.android.sdk.api.session.securestorage.SsssKeySpec + +class FakeSharedSecretStorageService : SharedSecretStorageService { + + var integrityResult: IntegrityResult = IntegrityResult.Error(SharedSecretStorageError.OtherError(IllegalStateException())) + var _defaultKey: KeyInfoResult = KeyInfoResult.Error(SharedSecretStorageError.OtherError(IllegalStateException())) + + override suspend fun generateKey(keyId: String, key: SsssKeySpec?, keyName: String, keySigner: KeySigner?): SsssKeyCreationInfo { + TODO("Not yet implemented") + } + + override suspend fun generateKeyWithPassphrase(keyId: String, keyName: String, passphrase: String, keySigner: KeySigner, progressListener: ProgressListener?): SsssKeyCreationInfo { + TODO("Not yet implemented") + } + + override fun getKey(keyId: String): KeyInfoResult { + TODO("Not yet implemented") + } + + override fun getDefaultKey() = _defaultKey + + override suspend fun setDefaultKey(keyId: String) { + TODO("Not yet implemented") + } + + override fun hasKey(keyId: String): Boolean { + TODO("Not yet implemented") + } + + override suspend fun storeSecret(name: String, secretBase64: String, keys: List<SharedSecretStorageService.KeyRef>) { + TODO("Not yet implemented") + } + + override fun getAlgorithmsForSecret(name: String): List<KeyInfoResult> { + TODO("Not yet implemented") + } + + override suspend fun getSecret(name: String, keyId: String?, secretKey: SsssKeySpec): String { + TODO("Not yet implemented") + } + + override fun checkShouldBeAbleToAccessSecrets(secretNames: List<String>, keyId: String?) = integrityResult + + override fun requestSecret(name: String, myOtherDeviceId: String) { + TODO("Not yet implemented") + } +} diff --git a/vector/src/test/java/im/vector/app/test/fakes/FakeStringProvider.kt b/vector/src/test/java/im/vector/app/test/fakes/FakeStringProvider.kt new file mode 100644 index 0000000000..f9001e3f8a --- /dev/null +++ b/vector/src/test/java/im/vector/app/test/fakes/FakeStringProvider.kt @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 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.test.fakes + +import im.vector.app.core.resources.StringProvider +import io.mockk.every +import io.mockk.mockk + +class FakeStringProvider { + + val instance = mockk<StringProvider>() + + init { + every { instance.getString(any()) } answers { + "test-${args[0]}" + } + } +}