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]}"
+        }
+    }
+}