diff --git a/features/createroom/impl/src/main/res/values-de/translations.xml b/features/createroom/impl/src/main/res/values-de/translations.xml
index ec038d764e..210f7f4cb4 100644
--- a/features/createroom/impl/src/main/res/values-de/translations.xml
+++ b/features/createroom/impl/src/main/res/values-de/translations.xml
@@ -1,8 +1,9 @@
"Neuer Raum"
+ "Personen einladen"
"Personen hinzufügen"
"Privater Raum (nur auf Einladung)"
"Raumname"
"Thema (optional)"
-
\ No newline at end of file
+
diff --git a/features/login/impl/src/main/res/values-de/translations.xml b/features/login/impl/src/main/res/values-de/translations.xml
index 061f3453df..4c9b232147 100644
--- a/features/login/impl/src/main/res/values-de/translations.xml
+++ b/features/login/impl/src/main/res/values-de/translations.xml
@@ -1,5 +1,9 @@
+ "Wir konnten diesen Homeserver nicht erreichen. Bitte überprüfen Sie, ob Sie die Homeserver-URL korrekt eingegeben haben. Wenn die URL korrekt ist, wenden Sie sich an Ihren Homeserver-Administrator, um weitere Hilfe zu erhalten."
+ "Dieser Server unterstützt derzeit kein Sliding Sync."
+ "Homeserver-URL"
+ "Sie können nur eine Verbindung zu einem vorhandenen Server herstellen, der Sliding Sync unterstützt. Ihr Homeserver-Administrator muss dies konfigurieren. %1$s"
"Wie lautet die Adresse deines Servers?"
"Willkommen zurück!"
"Passwort"
diff --git a/features/roomdetails/impl/src/main/res/values-de/translations.xml b/features/roomdetails/impl/src/main/res/values-de/translations.xml
index 7581b585f1..4e5b3e9a74 100644
--- a/features/roomdetails/impl/src/main/res/values-de/translations.xml
+++ b/features/roomdetails/impl/src/main/res/values-de/translations.xml
@@ -4,11 +4,13 @@
- "1 Person"
- "%1$d Personen"
+ "Bereits eingeladen"
"Raum teilen"
"Blockieren"
"Nutzer blockieren"
"Blockierung aufheben"
"Nutzer entblockieren"
+ "Personen einladen"
"Raum verlassen"
"Sicherheit"
"Thema"
diff --git a/features/roomlist/impl/build.gradle.kts b/features/roomlist/impl/build.gradle.kts
index 100ab15437..c1ee491e7f 100644
--- a/features/roomlist/impl/build.gradle.kts
+++ b/features/roomlist/impl/build.gradle.kts
@@ -48,6 +48,7 @@ dependencies {
implementation(projects.libraries.testtags)
implementation(projects.libraries.uiStrings)
implementation(projects.libraries.dateformatter.api)
+ implementation(projects.libraries.eventformatter.api)
implementation(projects.features.invitelist.api)
implementation(projects.features.networkmonitor.api)
implementation(projects.features.leaveroom.api)
@@ -63,6 +64,7 @@ dependencies {
testImplementation(libs.test.robolectric)
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.libraries.dateformatter.test)
+ testImplementation(projects.libraries.eventformatter.test)
testImplementation(projects.libraries.permissions.noop)
testImplementation(projects.features.invitelist.test)
testImplementation(projects.features.networkmonitor.test)
diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt
index e1f37ae5e6..0c54525f00 100644
--- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt
+++ b/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomListPresenter.kt
@@ -39,6 +39,7 @@ import io.element.android.libraries.dateformatter.api.LastMessageTimestampFormat
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher
import io.element.android.libraries.designsystem.utils.handleSnackbarMessage
+import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.core.UserId
diff --git a/features/roomlist/impl/src/main/res/values-de/translations.xml b/features/roomlist/impl/src/main/res/values-de/translations.xml
index 00b1431f00..be0109cbe2 100644
--- a/features/roomlist/impl/src/main/res/values-de/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-de/translations.xml
@@ -1,40 +1,4 @@
"Alle Chats"
- "(Avatar wurde ebenfalls geändert)"
- "%1$s hat seinen Avatar geändert"
- "Du hast deinen Avatar geändert"
- "%1$s hat den Anzeigenamen von %2$s in %3$s geändert"
- "Du hast deinen Anzeigenamen von %1$s in %2$s geändert"
- "%1$s hat den Anzeigenamen entfernt (war %2$s)"
- "Du hast deinen Anzeigenamen entfernt (war %1$s)"
- "%1$s hat den Anzeigenamen auf %2$s gesetzt"
- "Du hast deinen Anzeigenamen auf %1$s gesetzt"
- "%1$s hat den Raum-Avatar geändert"
- "Du hast den Raum-Avatar geändert"
- "%1$s hat den Raum-Avatar entfernt"
- "%1$s hat den Raum erstellt"
- "Du hast den Raum erstellt"
- "%1$s hat %2$s eingeladen"
- "%1$s hat die Einladung angenommen"
- "Du hast die Einladung angenommen"
- "Du hast %1$s eingeladen"
- "%1$s hat dich eingeladen"
- "%1$s ist dem Raum beigetreten"
- "Du bist dem Raum beigetreten"
- "%1$s hat deine Beitrittsanfrage abgelehnt"
- "%1$s hat den Raum verlassen"
- "Du hast den Raum verlassen"
- "%1$s hat den Raumnamen geändert in: %2$s"
- "Sie haben den Raumnamen geändert in: %1$s"
- "%1$s hat den Raumnamen entfernt"
- "Du hast den Raumnamen entfernt"
- "%1$s hat die Einladung abgelehnt"
- "Du hast die Einladung abgelehnt"
- "%1$s hat %2$s entfernt"
- "Du hast %1$s entfernt"
- "%1$s hat das Thema geändert zu: %2$s"
- "Sie haben das Thema geändert zu: %1$s"
- "%1$s hat das Raumthema entfernt"
- "Du hast das Raumthema entfernt"
\ No newline at end of file
diff --git a/features/roomlist/impl/src/main/res/values-es/translations.xml b/features/roomlist/impl/src/main/res/values-es/translations.xml
index 079ffb2e72..7edd6192a1 100644
--- a/features/roomlist/impl/src/main/res/values-es/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-es/translations.xml
@@ -4,58 +4,4 @@
"Todos los chats"
"Parece que estás usando un nuevo dispositivo. Verifica que eres tú para acceder a tus mensajes cifrados."
"Accede a tu historial de mensajes"
- "(el avatar también cambió)"
- "%1$s cambió su avatar"
- "Cambiaste tu avatar"
- "%1$s cambió su nombre de %2$s a %3$s"
- "Cambiaste tu nombre de %1$s a %2$s"
- "%1$s eliminó su nombre (era %2$s)"
- "Eliminaste tu nombre (era %1$s)"
- "%1$s cambió su nombre a %2$s"
- "Cambiaste tu nombre a %1$s"
- "%1$s cambió el avatar de la sala"
- "Cambiaste el avatar de la sala"
- "%1$s eliminó el avatar de la sala"
- "Eliminaste el avatar de la sala"
- "%1$s expulsó permanentemente a %2$s"
- "Expulsaste permanentemente a %1$s"
- "%1$s creó la sala"
- "Tú creaste la sala"
- "%1$s invitó a %2$s"
- "%1$s aceptó la invitación"
- "Aceptaste la invitación"
- "Invitaste a %1$s"
- "%1$s te invitó."
- "%1$s se unió a la sala"
- "Te uniste a la sala"
- "%1$s solicitó unirse"
- "%1$s permitió que %2$s se uniera"
- "%1$s te permitió unirte"
- "Solicitaste unirte"
- "%1$s rechazó la solicitud de %2$s para unirse"
- "Rechazaste la solicitud de %1$s para unirte"
- "%1$s rechazó su solicitud para unirte"
- "%1$s ya no está interesado en unirse"
- "Cancelaste tu solicitud de unirte"
- "%1$s salió de la sala"
- "Saliste de la sala"
- "%1$s cambió el nombre de la sala a: %2$s"
- "Cambiaste el nombre de la sala a: %1$s"
- "%1$s eliminó el nombre de la sala"
- "Eliminaste el nombre de la sala"
- "%1$s rechazó la invitación"
- "Rechazaste la invitación"
- "%1$s echó a %2$s"
- "Echaste a %1$s"
- "%1$s envió una invitación a %2$s para unirse a la sala"
- "Enviaste una invitación a %1$s para unirse a la sala"
- "%1$s revocó la invitación a %2$s para unirse a la sala"
- "Revocaste la invitación de %1$s para unirse a la sala"
- "%1$s cambió el tema a: %2$s"
- "Cambiaste el tema a: %1$s"
- "%1$s eliminó el tema de la sala"
- "Eliminaste el tema de la sala"
- "%1$s readmitió a %2$s"
- "Readmitiste a %1$s"
- "%1$s realizó un cambio desconocido en su membresía"
\ No newline at end of file
diff --git a/features/roomlist/impl/src/main/res/values-it/translations.xml b/features/roomlist/impl/src/main/res/values-it/translations.xml
index 20bf487937..6bfb8baa0c 100644
--- a/features/roomlist/impl/src/main/res/values-it/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-it/translations.xml
@@ -4,58 +4,4 @@
"Tutte le conversazioni"
"Sembra che tu stia utilizzando un nuovo dispositivo. Verifica di essere tu per accedere ai tuoi messaggi crittografati."
"Accedi alla cronologia dei messaggi"
- "(anche l\'avatar è stato cambiato)"
- "%1$s ha cambiato il proprio avatar"
- "Hai cambiato il tuo avatar"
- "%1$s ha cambiato il proprio nome visualizzato da %2$s a %3$s"
- "Hai cambiato il tuo nome visualizzato da %1$s a %2$s"
- "%1$s ha rimosso il proprio nome visualizzato (era %2$s)"
- "Hai rimosso il tuo nome visualizzato (era %1$s)"
- "%1$s ha impostato il proprio nome visualizzato su %2$s"
- "Hai impostato il tuo nome visualizzato su %1$s"
- "%1$s ha cambiato l\'avatar della stanza"
- "Hai cambiato l\'avatar della stanza"
- "%1$s ha rimosso l\'avatar della stanza"
- "Hai rimosso l\'avatar della stanza"
- "%1$s ha rimosso %2$s"
- "Hai rimosso %1$s"
- "%1$s ha creato la stanza"
- "Hai creato la stanza"
- "%1$s ha invitato %2$s"
- "%1$s ha accettato l\'invito"
- "Hai accettato l\'invito"
- "Hai invitato %1$s"
- "%1$s ti ha invitato"
- "%1$s si è unito alla stanza"
- "Ti sei unito alla stanza"
- "%1$s ha chiesto di unirsi"
- "%1$s ha permesso a %2$s di unirsi"
- "%1$s ti ha permesso di unirti"
- "Hai richiesto di unirti"
- "%1$s ha rifiutato la richiesta di unirsi di %2$s"
- "Hai rifiutato la richiesta di unirsi di %1$s"
- "%1$s ha rifiutato la tua richiesta di unirti"
- "%1$s non è più interessato a partecipare"
- "Hai annullato la tua richiesta di unirti"
- "%1$s ha lasciato la stanza"
- "Hai lasciato la stanza"
- "%1$s ha cambiato il nome della stanza in: %2$s"
- "Hai cambiato il nome della stanza in: %1$s"
- "%1$s ha rimosso il nome della stanza"
- "Hai rimosso il nome della stanza"
- "%1$s ha rifiutato l\'invito"
- "Hai rifiutato l\'invito"
- "%1$s ha rimosso %2$s"
- "Hai rimosso %1$s"
- "%1$s ha inviato un invito a %2$s per unirsi alla stanza"
- "Hai inviato un invito a %1$s per unirsi alla stanza"
- "%1$s ha revocato l\'invito di %2$s ad unirsi alla stanza."
- "Hai revocato l\'invito a %1$s a universi alla stanza"
- "%1$s ha cambiato l\'oggetto in: %2$s"
- "Hai cambiato l\'oggetto in: %1$s"
- "%1$s ha rimosso l\'oggetto della stanza"
- "Hai rimosso l\'oggetto della stanza"
- "%1$s ha sbloccato %2$s"
- "Hai sbloccato %1$s"
- "%1$s ha apportato una modifica sconosciuta alla propria iscrizione"
\ No newline at end of file
diff --git a/features/roomlist/impl/src/main/res/values-ro/translations.xml b/features/roomlist/impl/src/main/res/values-ro/translations.xml
index 89760b3497..7401b30b82 100644
--- a/features/roomlist/impl/src/main/res/values-ro/translations.xml
+++ b/features/roomlist/impl/src/main/res/values-ro/translations.xml
@@ -4,58 +4,4 @@
"Toate conversatiile"
"Se pare că folosiți un dispozitiv nou. Verificați-vă identitatea pentru acces la mesajele dumneavoastră criptate."
"Accesați istoricul mesajelor"
- "(s-a schimbat si avatarul)"
- "%1$s și-a schimbat avatarul"
- "V-ați schimbat avatarul"
- "%1$s și-a schimbat numele din %2$s în %3$s"
- "V-ați schimbat numele din %1$s în %2$s"
- "%1$s și-a sters numele (era %2$s)"
- "V-ați sters numele (era %1$s)"
- "%1$s și-a schimbat numele %2$s"
- "V-ați schimbat numele în %1$s"
- "%1$s a schimbat avatarul camerei"
- "Ați schimbat avatarul camerei"
- "%1$s a șters avatarul camerei"
- "Ați șters avatarul camerei"
- "%1$s a adăugat o interdicție pentru %2$s"
- "Ați adăugat o interdicție pentru %1$s"
- "%1$s a creat camera"
- "Ați creat camera"
- "%1$s l-a invitat pe %2$s"
- "%1$s a acceptat invitația"
- "Ați acceptat invitația"
- "L-ați invitat pe %1$s"
- "%1$s v-a invitat"
- "%1$s a intrat în cameră"
- "Ați intrat în cameră"
- "%1$s a solicitat să se alăture camerei"
- "%1$s i-a permis lui %2$s să se alăture camerei"
- "%1$s v-a permis să vă alăturați camerei"
- "Ați solicitat să vă alăturați camerei"
- "%1$s a respins solicitarea de alăturare a lui %2$s"
- "Ați respins solicitarea de alăturare a lui %1$s"
- "%1$s a respins cererea dumneavoastră de alăturare"
- "%1$s nu mai este interesat să se alăture camerei"
- "Ați anulat cererea de alăturare"
- "%1$s a părăsit camera"
- "Ați părăsit camera"
- "%1$s a schimbat numele camerei în: %2$s"
- "Ați schimbat numele camerei în: %1$s"
- "%1$s a sters numele camerei"
- "Ați șters numele camerei"
- "%1$s a respins invitația"
- "Ați respins invitația"
- "%1$s l-a îndepărtat pe %2$s"
- "L-ați îndepărtat pe %1$s"
- "%1$s a trimis o invitație către %2$s pentru a se alătura camerei"
- "Ați trimis o invitație către %1$s pentru a se alătura camerei"
- "%1$s a revocat invitația pentru %2$s de a se alătura camerei"
- "Ați revocat invitația pentru %1$s de a se alătura camerei"
- "%1$s a schimbat subiectul în: %2$s"
- "Ați schimbat subiectul în: %1$s"
- "%1$s a șters subiectul camerei"
- "Ați șters subiectul camerei"
- "%1$s a anulat interdicția pentru %2$s"
- "Ați anulat interdicția pentru %1$s"
- "%1$s a făcut o modificare necunoscută asupra calității sale de membru"
\ No newline at end of file
diff --git a/features/roomlist/impl/src/main/res/values/localazy.xml b/features/roomlist/impl/src/main/res/values/localazy.xml
index 7177e3156d..613e6681ae 100644
--- a/features/roomlist/impl/src/main/res/values/localazy.xml
+++ b/features/roomlist/impl/src/main/res/values/localazy.xml
@@ -4,58 +4,4 @@
"All Chats"
"Looks like you’re using a new device. Verify it’s you to access your encrypted messages."
"Access your message history"
- "(avatar was changed too)"
- "%1$s changed their avatar"
- "You changed your avatar"
- "%1$s changed their display name from %2$s to %3$s"
- "You changed your display name from %1$s to %2$s"
- "%1$s removed their display name (it was %2$s)"
- "You removed your display name (it was %1$s)"
- "%1$s set their display name to %2$s"
- "You set your display name to %1$s"
- "%1$s changed the room avatar"
- "You changed the room avatar"
- "%1$s removed the room avatar"
- "You removed the room avatar"
- "%1$s banned %2$s"
- "You banned %1$s"
- "%1$s created the room"
- "You created the room"
- "%1$s invited %2$s"
- "%1$s accepted the invite"
- "You accepted the invite"
- "You invited %1$s"
- "%1$s invited you"
- "%1$s joined the room"
- "You joined the room"
- "%1$s requested to join"
- "%1$s allowed %2$s to join"
- "%1$s allowed you to join"
- "You requested to join"
- "%1$s rejected %2$s\'s request to join"
- "You rejected %1$s\'s request to join"
- "%1$s rejected your request to join"
- "%1$s is no longer interested in joining"
- "You cancelled your request to join"
- "%1$s left the room"
- "You left the room"
- "%1$s changed the room name to: %2$s"
- "You changed the room name to: %1$s"
- "%1$s removed the room name"
- "You removed the room name"
- "%1$s rejected the invitation"
- "You rejected the invitation"
- "%1$s removed %2$s"
- "You removed %1$s"
- "%1$s sent an invitation to %2$s to join the room"
- "You sent an invitation to %1$s to join the room"
- "%1$s revoked the invitation for %2$s to join the room"
- "You revoked the invitation for %1$s to join the room"
- "%1$s changed the topic to: %2$s"
- "You changed the topic to: %1$s"
- "%1$s removed the room topic"
- "You removed the room topic"
- "%1$s unbanned %2$s"
- "You unbanned %1$s"
- "%1$s made an unknown change to their membership"
\ No newline at end of file
diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt
index 72996727dd..fe76d9837b 100644
--- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt
+++ b/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/RoomListPresenterTests.kt
@@ -29,6 +29,7 @@ import io.element.android.libraries.dateformatter.api.LastMessageTimestampFormat
import io.element.android.libraries.dateformatter.test.FakeLastMessageTimestampFormatter
import io.element.android.libraries.designsystem.components.avatar.AvatarData
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher
+import io.element.android.libraries.eventformatter.test.FakeRoomLastMessageFormatter
import io.element.android.libraries.matrix.api.verification.SessionVerifiedStatus
import io.element.android.libraries.matrix.test.AN_AVATAR_URL
import io.element.android.libraries.matrix.test.AN_EXCEPTION
diff --git a/libraries/eventformatter/api/build.gradle.kts b/libraries/eventformatter/api/build.gradle.kts
new file mode 100644
index 0000000000..ec2a56d780
--- /dev/null
+++ b/libraries/eventformatter/api/build.gradle.kts
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2022 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.
+ */
+
+plugins {
+ id("io.element.android-library")
+}
+
+android {
+ namespace = "io.element.android.libraries.eventformatter.api"
+}
+
+dependencies {
+ implementation(projects.libraries.matrix.api)
+}
diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomLastMessageFormatter.kt b/libraries/eventformatter/api/src/main/kotlin/io/element/android/libraries/eventformatter/api/RoomLastMessageFormatter.kt
similarity index 93%
rename from features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomLastMessageFormatter.kt
rename to libraries/eventformatter/api/src/main/kotlin/io/element/android/libraries/eventformatter/api/RoomLastMessageFormatter.kt
index bd59d68592..a7daf55891 100644
--- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/RoomLastMessageFormatter.kt
+++ b/libraries/eventformatter/api/src/main/kotlin/io/element/android/libraries/eventformatter/api/RoomLastMessageFormatter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.features.roomlist.impl
+package io.element.android.libraries.eventformatter.api
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
diff --git a/libraries/eventformatter/impl/build.gradle.kts b/libraries/eventformatter/impl/build.gradle.kts
new file mode 100644
index 0000000000..d93043efd1
--- /dev/null
+++ b/libraries/eventformatter/impl/build.gradle.kts
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2023 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.
+ */
+
+plugins {
+ id("io.element.android-compose-library")
+ alias(libs.plugins.anvil)
+}
+
+android {
+ namespace = "io.element.android.libraries.eventformatter.impl"
+
+ testOptions {
+ unitTests {
+ isIncludeAndroidResources = true
+ }
+ }
+}
+
+anvil {
+ generateDaggerFactories.set(true)
+}
+
+dependencies {
+ anvil(projects.anvilcodegen)
+ implementation(projects.anvilannotations)
+
+ implementation(projects.libraries.architecture)
+ implementation(projects.libraries.matrix.api)
+ implementation(projects.libraries.uiStrings)
+ api(projects.libraries.eventformatter.api)
+
+ testImplementation(libs.test.junit)
+ testImplementation(libs.test.robolectric)
+ testImplementation(libs.test.truth)
+ testImplementation(projects.libraries.matrix.test)
+}
diff --git a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/DefaultRoomLastMessageFormatter.kt b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt
similarity index 99%
rename from features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/DefaultRoomLastMessageFormatter.kt
rename to libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt
index e2971c93d7..4eeef1c62f 100644
--- a/features/roomlist/impl/src/main/kotlin/io/element/android/features/roomlist/impl/DefaultRoomLastMessageFormatter.kt
+++ b/libraries/eventformatter/impl/src/main/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatter.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.features.roomlist.impl
+package io.element.android.libraries.eventformatter.impl
import android.content.Context
import androidx.compose.ui.text.AnnotatedString
@@ -49,6 +49,7 @@ import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecry
import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent
import io.element.android.libraries.matrix.api.timeline.item.event.UnknownMessageType
import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType
+import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter
import timber.log.Timber
import javax.inject.Inject
import io.element.android.libraries.ui.strings.R as StringR
diff --git a/libraries/eventformatter/impl/src/main/res/values-de/translations.xml b/libraries/eventformatter/impl/src/main/res/values-de/translations.xml
new file mode 100644
index 0000000000..298bd3d40b
--- /dev/null
+++ b/libraries/eventformatter/impl/src/main/res/values-de/translations.xml
@@ -0,0 +1,39 @@
+
+
+ "(Avatar wurde ebenfalls geändert)"
+ "%1$s hat seinen Avatar geändert"
+ "Du hast deinen Avatar geändert"
+ "%1$s hat den Anzeigenamen von %2$s in %3$s geändert"
+ "Du hast deinen Anzeigenamen von %1$s in %2$s geändert"
+ "%1$s hat den Anzeigenamen entfernt (war %2$s)"
+ "Du hast deinen Anzeigenamen entfernt (war %1$s)"
+ "%1$s hat den Anzeigenamen auf %2$s gesetzt"
+ "Du hast deinen Anzeigenamen auf %1$s gesetzt"
+ "%1$s hat den Raum-Avatar geändert"
+ "Du hast den Raum-Avatar geändert"
+ "%1$s hat den Raum-Avatar entfernt"
+ "%1$s hat den Raum erstellt"
+ "Du hast den Raum erstellt"
+ "%1$s hat %2$s eingeladen"
+ "%1$s hat die Einladung angenommen"
+ "Du hast die Einladung angenommen"
+ "Du hast %1$s eingeladen"
+ "%1$s hat dich eingeladen"
+ "%1$s ist dem Raum beigetreten"
+ "Du bist dem Raum beigetreten"
+ "%1$s hat deine Beitrittsanfrage abgelehnt"
+ "%1$s hat den Raum verlassen"
+ "Du hast den Raum verlassen"
+ "%1$s hat den Raumnamen geändert in: %2$s"
+ "Sie haben den Raumnamen geändert in: %1$s"
+ "%1$s hat den Raumnamen entfernt"
+ "Du hast den Raumnamen entfernt"
+ "%1$s hat die Einladung abgelehnt"
+ "Du hast die Einladung abgelehnt"
+ "%1$s hat %2$s entfernt"
+ "Du hast %1$s entfernt"
+ "%1$s hat das Thema geändert zu: %2$s"
+ "Sie haben das Thema geändert zu: %1$s"
+ "%1$s hat das Raumthema entfernt"
+ "Du hast das Raumthema entfernt"
+
\ No newline at end of file
diff --git a/libraries/eventformatter/impl/src/main/res/values-es/translations.xml b/libraries/eventformatter/impl/src/main/res/values-es/translations.xml
new file mode 100644
index 0000000000..701f56f41c
--- /dev/null
+++ b/libraries/eventformatter/impl/src/main/res/values-es/translations.xml
@@ -0,0 +1,57 @@
+
+
+ "(el avatar también cambió)"
+ "%1$s cambió su avatar"
+ "Cambiaste tu avatar"
+ "%1$s cambió su nombre de %2$s a %3$s"
+ "Cambiaste tu nombre de %1$s a %2$s"
+ "%1$s eliminó su nombre (era %2$s)"
+ "Eliminaste tu nombre (era %1$s)"
+ "%1$s cambió su nombre a %2$s"
+ "Cambiaste tu nombre a %1$s"
+ "%1$s cambió el avatar de la sala"
+ "Cambiaste el avatar de la sala"
+ "%1$s eliminó el avatar de la sala"
+ "Eliminaste el avatar de la sala"
+ "%1$s expulsó permanentemente a %2$s"
+ "Expulsaste permanentemente a %1$s"
+ "%1$s creó la sala"
+ "Tú creaste la sala"
+ "%1$s invitó a %2$s"
+ "%1$s aceptó la invitación"
+ "Aceptaste la invitación"
+ "Invitaste a %1$s"
+ "%1$s te invitó."
+ "%1$s se unió a la sala"
+ "Te uniste a la sala"
+ "%1$s solicitó unirse"
+ "%1$s permitió que %2$s se uniera"
+ "%1$s te permitió unirte"
+ "Solicitaste unirte"
+ "%1$s rechazó la solicitud de %2$s para unirse"
+ "Rechazaste la solicitud de %1$s para unirte"
+ "%1$s rechazó su solicitud para unirte"
+ "%1$s ya no está interesado en unirse"
+ "Cancelaste tu solicitud de unirte"
+ "%1$s salió de la sala"
+ "Saliste de la sala"
+ "%1$s cambió el nombre de la sala a: %2$s"
+ "Cambiaste el nombre de la sala a: %1$s"
+ "%1$s eliminó el nombre de la sala"
+ "Eliminaste el nombre de la sala"
+ "%1$s rechazó la invitación"
+ "Rechazaste la invitación"
+ "%1$s echó a %2$s"
+ "Echaste a %1$s"
+ "%1$s envió una invitación a %2$s para unirse a la sala"
+ "Enviaste una invitación a %1$s para unirse a la sala"
+ "%1$s revocó la invitación a %2$s para unirse a la sala"
+ "Revocaste la invitación de %1$s para unirse a la sala"
+ "%1$s cambió el tema a: %2$s"
+ "Cambiaste el tema a: %1$s"
+ "%1$s eliminó el tema de la sala"
+ "Eliminaste el tema de la sala"
+ "%1$s readmitió a %2$s"
+ "Readmitiste a %1$s"
+ "%1$s realizó un cambio desconocido en su membresía"
+
\ No newline at end of file
diff --git a/libraries/eventformatter/impl/src/main/res/values-it/translations.xml b/libraries/eventformatter/impl/src/main/res/values-it/translations.xml
new file mode 100644
index 0000000000..0380d802f4
--- /dev/null
+++ b/libraries/eventformatter/impl/src/main/res/values-it/translations.xml
@@ -0,0 +1,57 @@
+
+
+ "(anche l\'avatar è stato cambiato)"
+ "%1$s ha cambiato il proprio avatar"
+ "Hai cambiato il tuo avatar"
+ "%1$s ha cambiato il proprio nome visualizzato da %2$s a %3$s"
+ "Hai cambiato il tuo nome visualizzato da %1$s a %2$s"
+ "%1$s ha rimosso il proprio nome visualizzato (era %2$s)"
+ "Hai rimosso il tuo nome visualizzato (era %1$s)"
+ "%1$s ha impostato il proprio nome visualizzato su %2$s"
+ "Hai impostato il tuo nome visualizzato su %1$s"
+ "%1$s ha cambiato l\'avatar della stanza"
+ "Hai cambiato l\'avatar della stanza"
+ "%1$s ha rimosso l\'avatar della stanza"
+ "Hai rimosso l\'avatar della stanza"
+ "%1$s ha rimosso %2$s"
+ "Hai rimosso %1$s"
+ "%1$s ha creato la stanza"
+ "Hai creato la stanza"
+ "%1$s ha invitato %2$s"
+ "%1$s ha accettato l\'invito"
+ "Hai accettato l\'invito"
+ "Hai invitato %1$s"
+ "%1$s ti ha invitato"
+ "%1$s si è unito alla stanza"
+ "Ti sei unito alla stanza"
+ "%1$s ha chiesto di unirsi"
+ "%1$s ha permesso a %2$s di unirsi"
+ "%1$s ti ha permesso di unirti"
+ "Hai richiesto di unirti"
+ "%1$s ha rifiutato la richiesta di unirsi di %2$s"
+ "Hai rifiutato la richiesta di unirsi di %1$s"
+ "%1$s ha rifiutato la tua richiesta di unirti"
+ "%1$s non è più interessato a partecipare"
+ "Hai annullato la tua richiesta di unirti"
+ "%1$s ha lasciato la stanza"
+ "Hai lasciato la stanza"
+ "%1$s ha cambiato il nome della stanza in: %2$s"
+ "Hai cambiato il nome della stanza in: %1$s"
+ "%1$s ha rimosso il nome della stanza"
+ "Hai rimosso il nome della stanza"
+ "%1$s ha rifiutato l\'invito"
+ "Hai rifiutato l\'invito"
+ "%1$s ha rimosso %2$s"
+ "Hai rimosso %1$s"
+ "%1$s ha inviato un invito a %2$s per unirsi alla stanza"
+ "Hai inviato un invito a %1$s per unirsi alla stanza"
+ "%1$s ha revocato l\'invito di %2$s ad unirsi alla stanza."
+ "Hai revocato l\'invito a %1$s a universi alla stanza"
+ "%1$s ha cambiato l\'oggetto in: %2$s"
+ "Hai cambiato l\'oggetto in: %1$s"
+ "%1$s ha rimosso l\'oggetto della stanza"
+ "Hai rimosso l\'oggetto della stanza"
+ "%1$s ha sbloccato %2$s"
+ "Hai sbloccato %1$s"
+ "%1$s ha apportato una modifica sconosciuta alla propria iscrizione"
+
\ No newline at end of file
diff --git a/libraries/eventformatter/impl/src/main/res/values-ro/translations.xml b/libraries/eventformatter/impl/src/main/res/values-ro/translations.xml
new file mode 100644
index 0000000000..2e3abf93d0
--- /dev/null
+++ b/libraries/eventformatter/impl/src/main/res/values-ro/translations.xml
@@ -0,0 +1,57 @@
+
+
+ "(s-a schimbat si avatarul)"
+ "%1$s și-a schimbat avatarul"
+ "V-ați schimbat avatarul"
+ "%1$s și-a schimbat numele din %2$s în %3$s"
+ "V-ați schimbat numele din %1$s în %2$s"
+ "%1$s și-a sters numele (era %2$s)"
+ "V-ați sters numele (era %1$s)"
+ "%1$s și-a schimbat numele %2$s"
+ "V-ați schimbat numele în %1$s"
+ "%1$s a schimbat avatarul camerei"
+ "Ați schimbat avatarul camerei"
+ "%1$s a șters avatarul camerei"
+ "Ați șters avatarul camerei"
+ "%1$s a adăugat o interdicție pentru %2$s"
+ "Ați adăugat o interdicție pentru %1$s"
+ "%1$s a creat camera"
+ "Ați creat camera"
+ "%1$s l-a invitat pe %2$s"
+ "%1$s a acceptat invitația"
+ "Ați acceptat invitația"
+ "L-ați invitat pe %1$s"
+ "%1$s v-a invitat"
+ "%1$s a intrat în cameră"
+ "Ați intrat în cameră"
+ "%1$s a solicitat să se alăture camerei"
+ "%1$s i-a permis lui %2$s să se alăture camerei"
+ "%1$s v-a permis să vă alăturați camerei"
+ "Ați solicitat să vă alăturați camerei"
+ "%1$s a respins solicitarea de alăturare a lui %2$s"
+ "Ați respins solicitarea de alăturare a lui %1$s"
+ "%1$s a respins cererea dumneavoastră de alăturare"
+ "%1$s nu mai este interesat să se alăture camerei"
+ "Ați anulat cererea de alăturare"
+ "%1$s a părăsit camera"
+ "Ați părăsit camera"
+ "%1$s a schimbat numele camerei în: %2$s"
+ "Ați schimbat numele camerei în: %1$s"
+ "%1$s a sters numele camerei"
+ "Ați șters numele camerei"
+ "%1$s a respins invitația"
+ "Ați respins invitația"
+ "%1$s l-a îndepărtat pe %2$s"
+ "L-ați îndepărtat pe %1$s"
+ "%1$s a trimis o invitație către %2$s pentru a se alătura camerei"
+ "Ați trimis o invitație către %1$s pentru a se alătura camerei"
+ "%1$s a revocat invitația pentru %2$s de a se alătura camerei"
+ "Ați revocat invitația pentru %1$s de a se alătura camerei"
+ "%1$s a schimbat subiectul în: %2$s"
+ "Ați schimbat subiectul în: %1$s"
+ "%1$s a șters subiectul camerei"
+ "Ați șters subiectul camerei"
+ "%1$s a anulat interdicția pentru %2$s"
+ "Ați anulat interdicția pentru %1$s"
+ "%1$s a făcut o modificare necunoscută asupra calității sale de membru"
+
\ No newline at end of file
diff --git a/libraries/eventformatter/impl/src/main/res/values/localazy.xml b/libraries/eventformatter/impl/src/main/res/values/localazy.xml
new file mode 100644
index 0000000000..2fd4217cd4
--- /dev/null
+++ b/libraries/eventformatter/impl/src/main/res/values/localazy.xml
@@ -0,0 +1,57 @@
+
+
+ "(avatar was changed too)"
+ "%1$s changed their avatar"
+ "You changed your avatar"
+ "%1$s changed their display name from %2$s to %3$s"
+ "You changed your display name from %1$s to %2$s"
+ "%1$s removed their display name (it was %2$s)"
+ "You removed your display name (it was %1$s)"
+ "%1$s set their display name to %2$s"
+ "You set your display name to %1$s"
+ "%1$s changed the room avatar"
+ "You changed the room avatar"
+ "%1$s removed the room avatar"
+ "You removed the room avatar"
+ "%1$s banned %2$s"
+ "You banned %1$s"
+ "%1$s created the room"
+ "You created the room"
+ "%1$s invited %2$s"
+ "%1$s accepted the invite"
+ "You accepted the invite"
+ "You invited %1$s"
+ "%1$s invited you"
+ "%1$s joined the room"
+ "You joined the room"
+ "%1$s requested to join"
+ "%1$s allowed %2$s to join"
+ "%1$s allowed you to join"
+ "You requested to join"
+ "%1$s rejected %2$s\'s request to join"
+ "You rejected %1$s\'s request to join"
+ "%1$s rejected your request to join"
+ "%1$s is no longer interested in joining"
+ "You cancelled your request to join"
+ "%1$s left the room"
+ "You left the room"
+ "%1$s changed the room name to: %2$s"
+ "You changed the room name to: %1$s"
+ "%1$s removed the room name"
+ "You removed the room name"
+ "%1$s rejected the invitation"
+ "You rejected the invitation"
+ "%1$s removed %2$s"
+ "You removed %1$s"
+ "%1$s sent an invitation to %2$s to join the room"
+ "You sent an invitation to %1$s to join the room"
+ "%1$s revoked the invitation for %2$s to join the room"
+ "You revoked the invitation for %1$s to join the room"
+ "%1$s changed the topic to: %2$s"
+ "You changed the topic to: %1$s"
+ "%1$s removed the room topic"
+ "You removed the room topic"
+ "%1$s unbanned %2$s"
+ "You unbanned %1$s"
+ "%1$s made an unknown change to their membership"
+
\ No newline at end of file
diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/DefaultRoomLastMessageFormatterTests.kt b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTests.kt
similarity index 99%
rename from features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/DefaultRoomLastMessageFormatterTests.kt
rename to libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTests.kt
index d4c2ca7dd2..8888b2c3eb 100644
--- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/DefaultRoomLastMessageFormatterTests.kt
+++ b/libraries/eventformatter/impl/src/test/kotlin/io/element/android/libraries/eventformatter/impl/DefaultRoomLastMessageFormatterTests.kt
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package io.element.android.features.roomlist.impl
+package io.element.android.libraries.eventformatter.impl
import android.content.Context
import androidx.compose.ui.text.AnnotatedString
diff --git a/libraries/eventformatter/test/build.gradle.kts b/libraries/eventformatter/test/build.gradle.kts
new file mode 100644
index 0000000000..8250c57247
--- /dev/null
+++ b/libraries/eventformatter/test/build.gradle.kts
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2022 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.
+ */
+
+plugins {
+ id("io.element.android-library")
+}
+
+android {
+ namespace = "io.element.android.libraries.eventformatter.test"
+}
+
+dependencies {
+ implementation(projects.libraries.eventformatter.api)
+ implementation(projects.libraries.matrix.api)
+}
diff --git a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/FakeRoomLastMessageFormatter.kt b/libraries/eventformatter/test/src/main/kotlin/io/element/android/libraries/eventformatter/test/FakeRoomLastMessageFormatter.kt
similarity index 88%
rename from features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/FakeRoomLastMessageFormatter.kt
rename to libraries/eventformatter/test/src/main/kotlin/io/element/android/libraries/eventformatter/test/FakeRoomLastMessageFormatter.kt
index e0763748bf..2293727718 100644
--- a/features/roomlist/impl/src/test/kotlin/io/element/android/features/roomlist/impl/FakeRoomLastMessageFormatter.kt
+++ b/libraries/eventformatter/test/src/main/kotlin/io/element/android/libraries/eventformatter/test/FakeRoomLastMessageFormatter.kt
@@ -14,8 +14,9 @@
* limitations under the License.
*/
-package io.element.android.features.roomlist.impl
+package io.element.android.libraries.eventformatter.test
+import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
class FakeRoomLastMessageFormatter : RoomLastMessageFormatter {
diff --git a/libraries/push/impl/src/main/res/values-de/translations.xml b/libraries/push/impl/src/main/res/values-de/translations.xml
index 8bf4b581dd..d1ce970c3c 100644
--- a/libraries/push/impl/src/main/res/values-de/translations.xml
+++ b/libraries/push/impl/src/main/res/values-de/translations.xml
@@ -8,11 +8,16 @@
"%1$s: %2$s"
"%1$s: %2$s %3$s"
"%1$s und %2$s"
+ "%1$s in %2$s"
"%1$s in %2$s und %3$s"
- "%1$s: %2$d Nachricht"
- "%1$s: %2$d Nachrichten"
+
+ - "%d Mitteilung"
+ - "%d Mitteilungen"
+
- "%d Einladung"
- "%d Einladungen"
diff --git a/libraries/ui-strings/src/main/res/values-de/translations.xml b/libraries/ui-strings/src/main/res/values-de/translations.xml
index 4cd9d61ac9..428d42ec14 100644
--- a/libraries/ui-strings/src/main/res/values-de/translations.xml
+++ b/libraries/ui-strings/src/main/res/values-de/translations.xml
@@ -61,8 +61,11 @@
"Offline"
"Passwort"
"Reaktionen"
+ "Suchergebnisse"
"Sicherheit"
+ "Server wird nicht unterstützt"
"Einstellungen"
+ "Chat wird gestartet…"
"Sticker"
"Erfolg"
"Vorschläge"
diff --git a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt
index c433ed2e07..53fcec10a0 100644
--- a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt
+++ b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt
@@ -74,6 +74,7 @@ fun DependencyHandlerScope.allLibrariesImpl() {
implementation(project(":libraries:matrixui"))
implementation(project(":libraries:network"))
implementation(project(":libraries:core"))
+ implementation(project(":libraries:eventformatter:impl"))
implementation(project(":libraries:permissions:impl"))
implementation(project(":libraries:push:impl"))
implementation(project(":libraries:push:impl"))
diff --git a/samples/minimal/build.gradle.kts b/samples/minimal/build.gradle.kts
index 73e09d2314..41390999f0 100644
--- a/samples/minimal/build.gradle.kts
+++ b/samples/minimal/build.gradle.kts
@@ -55,6 +55,7 @@ dependencies {
implementation(projects.libraries.architecture)
implementation(projects.libraries.core)
implementation(projects.libraries.dateformatter.impl)
+ implementation(projects.libraries.eventformatter.impl)
implementation(projects.features.invitelist.impl)
implementation(projects.features.roomlist.impl)
implementation(projects.features.leaveroom.impl)
diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt
index 9a5e1a8631..b9703aa98a 100644
--- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt
+++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/RoomListScreen.kt
@@ -24,7 +24,6 @@ import io.element.android.features.invitelist.impl.DefaultSeenInvitesStore
import io.element.android.features.leaveroom.impl.LeaveRoomPresenterImpl
import io.element.android.features.networkmonitor.impl.NetworkMonitorImpl
import io.element.android.features.roomlist.impl.DefaultInviteStateDataSource
-import io.element.android.features.roomlist.impl.DefaultRoomLastMessageFormatter
import io.element.android.features.roomlist.impl.RoomListPresenter
import io.element.android.features.roomlist.impl.RoomListView
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
@@ -32,6 +31,7 @@ import io.element.android.libraries.dateformatter.impl.DateFormatters
import io.element.android.libraries.dateformatter.impl.DefaultLastMessageTimestampFormatter
import io.element.android.libraries.dateformatter.impl.LocalDateTimeProvider
import io.element.android.libraries.designsystem.utils.SnackbarDispatcher
+import io.element.android.libraries.eventformatter.impl.DefaultRoomLastMessageFormatter
import io.element.android.libraries.matrix.api.MatrixClient
import io.element.android.libraries.matrix.api.core.RoomId
import io.element.android.libraries.matrix.api.room.RoomMembershipObserver
diff --git a/tools/localazy/config.json b/tools/localazy/config.json
index 5219187f75..1e0e125137 100644
--- a/tools/localazy/config.json
+++ b/tools/localazy/config.json
@@ -56,6 +56,12 @@
"error_no_compatible_app_found"
]
},
+ {
+ "name": ":libraries:messageformatter:impl",
+ "includeRegex": [
+ "state_event_.*"
+ ]
+ },
{
"name": ":libraries:push:impl",
"includeRegex": [
@@ -73,7 +79,6 @@
{
"name": ":features:roomlist:impl",
"includeRegex": [
- "state_event_.*",
"screen_roomlist_.*",
"session_verification_banner_.*"
]