diff --git a/CHANGES.md b/CHANGES.md index 9947146a9e..e9a990f1b2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,20 @@ +Changes in Element 1.1.12 (2021-07-05) +====================================== + +Features ✹ +---------- + - Reveal password: use facility from com.google.android.material.textfield.TextInputLayout instead of manual handling. ([#3545](https://github.com/vector-im/element-android/issues/3545)) + - Implements new design for Jump to unread and quick fix visibility issues. ([#3547](https://github.com/vector-im/element-android/issues/3547)) + +Bugfixes 🐛 +---------- + - Fix some issues with timeline cache invalidation and visibility. ([#3542](https://github.com/vector-im/element-android/issues/3542)) + - Fix call invite processed after call is ended because of fastlane mode. ([#3564](https://github.com/vector-im/element-android/issues/3564)) + - Fix crash after video call. ([#3577](https://github.com/vector-im/element-android/issues/3577)) + - Fix crash out of memory ([#3583](https://github.com/vector-im/element-android/issues/3583)) + - CryptoStore migration has to be object to avoid crash ([#3605](https://github.com/vector-im/element-android/issues/3605)) + + Changes in Element v1.1.11 (2021-06-22) ======================================= diff --git a/attachment-viewer/build.gradle b/attachment-viewer/build.gradle index 4b95b20029..a756e07cbd 100644 --- a/attachment-viewer/build.gradle +++ b/attachment-viewer/build.gradle @@ -55,7 +55,7 @@ dependencies { implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.5.0' + implementation 'androidx.core:core-ktx:1.6.0' implementation 'androidx.appcompat:appcompat:1.3.0' implementation "androidx.recyclerview:recyclerview:1.2.1" diff --git a/build.gradle b/build.gradle index b6c4a17559..c4f3dfd3c2 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ buildscript { } } dependencies { - classpath 'com.android.tools.build:gradle:4.2.1' + classpath 'com.android.tools.build:gradle:4.2.2' classpath 'com.google.gms:google-services:4.3.8' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:3.3' diff --git a/changelog.d/3545.feature b/changelog.d/3545.feature deleted file mode 100644 index f582affbf2..0000000000 --- a/changelog.d/3545.feature +++ /dev/null @@ -1 +0,0 @@ -Reveal password: use facility from com.google.android.material.textfield.TextInputLayout instead of manual handling. \ No newline at end of file diff --git a/changelog.d/3547.feature b/changelog.d/3547.feature deleted file mode 100644 index 8921932067..0000000000 --- a/changelog.d/3547.feature +++ /dev/null @@ -1 +0,0 @@ -Implements new design for Jump to unread and quick fix visibility issues. \ No newline at end of file diff --git a/changelog.d/3564.bugfix b/changelog.d/3564.bugfix deleted file mode 100644 index 74f71ccded..0000000000 --- a/changelog.d/3564.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix call invite processed after call is ended because of fastlane mode. \ No newline at end of file diff --git a/changelog.d/3577.bugfix b/changelog.d/3577.bugfix deleted file mode 100644 index 6b3917292f..0000000000 --- a/changelog.d/3577.bugfix +++ /dev/null @@ -1 +0,0 @@ -Fix crash after video call. \ No newline at end of file diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40101070.txt b/fastlane/metadata/android/cs-CZ/changelogs/40101070.txt new file mode 100644 index 0000000000..2a6afb21a5 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/40101070.txt @@ -0,0 +1,2 @@ +HlavnĂ­ změny v tĂ©to verzi: beta podpora pro Spaces. Komprimace videa pƙed odeslĂĄnĂ­m. +ÚplnĂœ zĂĄznam změn: https://github.com/vector-im/element-android/releases/tag/v1.1.7 diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40101080.txt b/fastlane/metadata/android/cs-CZ/changelogs/40101080.txt new file mode 100644 index 0000000000..5ec173ebea --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/40101080.txt @@ -0,0 +1,2 @@ +HlavnĂ­ změny v tĂ©to verzi: vylepĆĄenĂ­ pro Spaces +ÚplnĂœ zĂĄznam změn: https://github.com/vector-im/element-android/releases/tag/v1.1.8 diff --git a/fastlane/metadata/android/cs-CZ/changelogs/40101090.txt b/fastlane/metadata/android/cs-CZ/changelogs/40101090.txt new file mode 100644 index 0000000000..782a2fa8c5 --- /dev/null +++ b/fastlane/metadata/android/cs-CZ/changelogs/40101090.txt @@ -0,0 +1,2 @@ +HlavnĂ­ změny v tĂ©to verzi: doplněna podpora pro sĂ­Ć„ gitter.im +ÚplnĂœ zĂĄznam změn: https://github.com/vector-im/element-android/releases/tag/v1.1.9 diff --git a/fastlane/metadata/android/en-US/changelogs/40101120.txt b/fastlane/metadata/android/en-US/changelogs/40101120.txt new file mode 100644 index 0000000000..6118974777 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/40101120.txt @@ -0,0 +1,2 @@ +Main changes in this version: theme and style update and fix a crash after video call +Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.1.12 \ No newline at end of file diff --git a/fastlane/metadata/android/fr-FR/changelogs/40101070.txt b/fastlane/metadata/android/fr-FR/changelogs/40101070.txt new file mode 100644 index 0000000000..66cc5d1671 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/40101070.txt @@ -0,0 +1,2 @@ +Principaux changements pour cette version : prise en charge des espaces en bĂȘta. Compression des vidĂ©os avant envoi. +IntĂ©gralitĂ© des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.7 diff --git a/fastlane/metadata/android/fr-FR/changelogs/40101080.txt b/fastlane/metadata/android/fr-FR/changelogs/40101080.txt new file mode 100644 index 0000000000..31a4b72363 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/40101080.txt @@ -0,0 +1,2 @@ +Principaux changements pour cette version : amĂ©lioration des espaces. +IntĂ©gralitĂ© des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.8 diff --git a/fastlane/metadata/android/fr-FR/changelogs/40101090.txt b/fastlane/metadata/android/fr-FR/changelogs/40101090.txt new file mode 100644 index 0000000000..99f02f1bb2 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/40101090.txt @@ -0,0 +1,2 @@ +Principaux changements pour cette version : ajout de la prise en charge de gitter.im +IntĂ©gralitĂ© des changements : https://github.com/vector-im/element-android/releases/tag/v1.1.9 diff --git a/fastlane/metadata/android/fr-FR/full_description.txt b/fastlane/metadata/android/fr-FR/full_description.txt index 066b94868b..78fcdf5617 100644 --- a/fastlane/metadata/android/fr-FR/full_description.txt +++ b/fastlane/metadata/android/fr-FR/full_description.txt @@ -1,30 +1,39 @@ -Element est une nouvelle application de messagerie et de collaboration qui : +Element est Ă  la fois une messagerie sĂ©curisĂ©e et une application de collaboration en Ă©quipe, idĂ©ale pour les conversations de groupe en tĂ©lĂ©travail. Cette application utilise le chiffrement de bout en bout. Elle permet de mettre en place des tĂ©lĂ©confĂ©rences vidĂ©o, du partage de fichier et des appels vocaux. -1. Vous permet de prĂ©server votre vie privĂ©e -2. Vous permet de communiquer avec n’importe qui sur rĂ©seau Matrix, et plus encore grĂące aux intĂ©grations d’autres applications telles que Slack ou Discord -3. Vous protĂšge de la publicitĂ© et de la collecte de donnĂ©es -4. Vous protĂšge grĂące au chiffrement de bout-Ă -bout et Ă  la signature croisĂ©e pour authentifier les autres utilisateurs +Les fonctionnalitĂ©s d’Element incluent : +- Outils de communication en ligne avancĂ©s +- Communication d’entreprise sĂ©curisĂ©e par le chiffrement de bout en bout des messages, mĂȘme pour les travailleurs Ă  distance +- Messagerie dĂ©centralisĂ©e basĂ©e sur le framework open source Matrix +- Partage sĂ©curisĂ© de fichiers avec chiffrement des donnĂ©es lors de la gestion de projet +- Conversations vidĂ©o par voix sur IP et partage d’écran +- IntĂ©gration facile avec vos outils de collaboration, de gestion de projet, services de VoIP et autres applications de messagerie -Element est complĂštement diffĂ©rente des autres applications de messagerie et de collaboration puisque l’application est dĂ©centralisĂ©e et open-source. +Element est complĂštement diffĂ©rente des autres applications de messagerie et de collaboration. Elle s’appuie sur Matrix, un rĂ©seau ouvert de communication dĂ©centralisĂ©e. Elle permet l’auto-hĂ©bergement pour que ses utilisateurs restent le plus en contrĂŽle possible de leurs donnĂ©es et leurs messages. -Element vous permet d’hĂ©berger vous-mĂȘme ou de choisir un hĂŽte vous permettant d’assurer votre vie privĂ©e, la propriĂ©tĂ© et le contrĂŽle de vos donnĂ©es et de vos conversations. Cela vous donne accĂšs Ă  un rĂ©seau ouvert. Vous n’ĂȘtes donc pas condamnĂ© Ă  parler Ă  d’autres utilisateurs d’Element seulement. Et c'est trĂšs sĂ©curisĂ©. +ConfidentialitĂ© et messagerie chiffrĂ©e +Element vous protĂšge des publicitĂ©s non dĂ©sirĂ©es, du minage de donnĂ©es et des prisons dorĂ©es. Elle protĂšgĂ© vos donnĂ©es et vos communications vocales grĂące au chiffrement de bout en bout et Ă  la vĂ©rification de signature croisĂ©e entre appareils. -Element peut faire tout ça car elle est basĂ©e sur Matrix, le protocole standard pour la communication ouverte et dĂ©centralisĂ©e. +Element vous donne la main sur votre confidentialitĂ© en vous permettant de communiquer de maniĂšre sĂ©curisĂ©e avec tout le rĂ©seau Matrix ou d’autres applications de communication d’entreprise au travers d’intĂ©grations d’applications comme Slack. -Element vous donne le contrĂŽle en vous laissant choisir qui hĂ©berge vos conversations. Depuis l'application Element, vous pouvez choisir votre hĂŽte de diffĂ©rentes maniĂšres : +Element peut ĂȘtre auto-hĂ©bergĂ© +Pour une meilleure souverainetĂ© sur vos donnĂ©es et conversations, Element peut ĂȘtre auto-hĂ©bergĂ© ou vous pouvez choisir votre hĂŽte Matrix - la norme open source pour les communications dĂ©centralisĂ©es. Element garantit votre confidentialitĂ©, conformitĂ© aux normes de sĂ©curitĂ©, tout en proposant une intĂ©gration souple. -1. CrĂ©er un compte gratuit sur le serveur public matrix.org hĂ©bergĂ© par les dĂ©veloppeurs de Matrix, ou choisir parmi les milliers de serveurs public hĂ©bergĂ©s par des bĂ©nĂ©voles -2. HĂ©berger vous-mĂȘme votre compte en installant un serveur sur votre propre machine -3. CrĂ©er un compte sur un serveur personnalisĂ© en souscrivant sur la plateforme d'hĂ©bergement « Element Matrix Services » (EMS) +Vos donnĂ©es vous appartiennent +Vous dĂ©cidez oĂč stocker vos donnĂ©es et messages. Aucun risque de minage de donnĂ©es oĂč d’accĂšs par des tierce parties. -Pourquoi choisir Element ? +Element vous place aux commandes de diffĂ©rente maniĂšres : +1. Inscrivez vous sur le serveur public matrix.org hĂ©bergĂ© par les dĂ©veloppeurs de Matrix ou choisissez parmi des milliers de serveurs publics hĂ©bergĂ©s par des bĂ©nĂ©voles +2. Auto-hĂ©bergez votre compte sur un serveur de votre proper infrastructure informatique +3. Inscrivez vous Ă  la plateforme d’hĂ©bergement Element Matrix Services -VOS DONNÉES VOUS APPARTIENNENT : vous dĂ©cidez oĂč stocker vos donnĂ©es et messages. Ils vous appartiennent et vous les maĂźtrisez. Aucune multinationale ne viendra extraire vos donnĂ©es pour les envoyer au plus offrant. +Messagerie et collaboration ouvertes +Vous pouvez discuter avec tout le rĂ©seau Matrix, que vos interlocuteurs utilisent Element, une autre application Matrix, ou mĂȘme s’ils utilisent une application complĂštement diffĂ©rente. -MESSAGERIE ET COLLABORATION OUVERTES : vous pouvez discuter avec tout le rĂ©seau Matrix, qu’ils utilisent Element ou une autre application Matrix, mĂȘme s’ils utilisent une autre plateforme de messagerie telle que Slack, IRC ou XMPP. +Ultra sĂ©curisĂ© +Chiffrement de bout en bout (seules les personnes dans la conversation peuvent dĂ©chiffrer les messages) et vĂ©rification de signature croisĂ©e entre appareils. -ULTRA SÉCURISÉ : chiffrement de bout en bout (seuls les membres d’une conversation peuvent dĂ©chiffrer les messages), et signature croisĂ©e pour vĂ©rifier les appareils de vos interlocuteurs. +Communication et intĂ©gration parfaites +Messagerie instantannĂ©e, appels audio et vidĂ©o, partage de fichier, partage d’écran et bien d’autres intĂ©grations, bots et widgets. Lancez des salons, des communautĂ©s, restez en contact et menez vos projets Ă  bien. -TOUTES VOS COMMUNICATIONS : messagerie, appels audio et vidĂ©o, partage de fichier, partage d’écran et un grand nombre d’intĂ©grations, robots et widgets. Participez Ă  des salons, des communautĂ©s, restez en contact et faites avancer vos projets. - -PARTOUT AVEC VOUS : votre historique reste synchronisĂ© entre tous vos appareils et sur le web sur https://element.io/app. +Reprenez oĂč vous vous ĂȘtes arrĂȘtĂ© +Restez en contact oĂč que vous soyez grĂące Ă  l’historique des messages synchronisĂ© entre tous vos appareils et sur le web sur https://app.element.io diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 283500479a..17ba19021b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=a9e356a21595348b6f04b024ed0b08ac8aea6b2ac37e6c0ef58e51549cd7b9cb -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1-all.zip +distributionSha256Sum=9bb8bc05f562f2d42bdf1ba8db62f6b6fa1c3bf6c392228802cc7cb0578fe7e0 +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/matrix-sdk-android/build.gradle b/matrix-sdk-android/build.gradle index cb00b0fd56..32103deca9 100644 --- a/matrix-sdk-android/build.gradle +++ b/matrix-sdk-android/build.gradle @@ -9,7 +9,7 @@ buildscript { mavenCentral() } dependencies { - classpath "io.realm:realm-gradle-plugin:10.6.0" + classpath "io.realm:realm-gradle-plugin:10.6.1" } } @@ -121,7 +121,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" implementation "androidx.appcompat:appcompat:1.3.0" - implementation "androidx.core:core-ktx:1.5.0" + implementation "androidx.core:core-ktx:1.6.0" implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version" implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version" @@ -175,24 +175,24 @@ dependencies { testImplementation 'org.robolectric:robolectric:4.5.1' //testImplementation 'org.robolectric:shadows-support-v4:3.0' // Note: version sticks to 1.9.2 due to https://github.com/mockk/mockk/issues/281 - testImplementation 'io.mockk:mockk:1.11.0' + testImplementation 'io.mockk:mockk:1.12.0' testImplementation 'org.amshove.kluent:kluent-android:1.67' testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" // Plant Timber tree for test testImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' kaptAndroidTest "com.google.dagger:dagger-compiler:$daggerVersion" - androidTestImplementation 'androidx.test:core:1.3.0' - androidTestImplementation 'androidx.test:runner:1.3.0' - androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation 'androidx.test:core:1.4.0' + androidTestImplementation 'androidx.test:runner:1.4.0' + androidTestImplementation 'androidx.test:rules:1.4.0' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' androidTestImplementation 'org.amshove.kluent:kluent-android:1.65' - androidTestImplementation 'io.mockk:mockk-android:1.11.0' + androidTestImplementation 'io.mockk:mockk-android:1.12.0' androidTestImplementation "androidx.arch.core:core-testing:$arch_version" androidTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlin_coroutines_version" // Plant Timber tree for test androidTestImplementation 'net.lachlanmckee:timber-junit-rule:1.0.1' - androidTestUtil 'androidx.test:orchestrator:1.3.0' + androidTestUtil 'androidx.test:orchestrator:1.4.0' } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt index e114f86a99..84d4fef5af 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/CryptoModule.kt @@ -112,7 +112,6 @@ internal abstract class CryptoModule { @SessionScope fun providesRealmConfiguration(@SessionFilesDirectory directory: File, @UserMd5 userMd5: String, - realmCryptoStoreMigration: RealmCryptoStoreMigration, realmKeysUtils: RealmKeysUtils): RealmConfiguration { return RealmConfiguration.Builder() .directory(directory) @@ -123,7 +122,7 @@ internal abstract class CryptoModule { .modules(RealmCryptoStoreModule()) .allowWritesOnUiThread(true) .schemaVersion(RealmCryptoStoreMigration.CRYPTO_STORE_SCHEMA_VERSION) - .migration(realmCryptoStoreMigration) + .migration(RealmCryptoStoreMigration) .build() } diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt index bca7914388..8e77f5b823 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/crypto/store/db/RealmCryptoStoreMigration.kt @@ -18,6 +18,9 @@ package org.matrix.android.sdk.internal.crypto.store.db import com.squareup.moshi.Moshi import com.squareup.moshi.Types +import io.realm.DynamicRealm +import io.realm.RealmMigration +import io.realm.RealmObjectSchema import org.matrix.android.sdk.api.extensions.tryOrNull import org.matrix.android.sdk.api.util.JsonDict import org.matrix.android.sdk.internal.crypto.model.MXDeviceInfo @@ -35,29 +38,24 @@ import org.matrix.android.sdk.internal.crypto.store.db.model.KeysBackupDataEntit import org.matrix.android.sdk.internal.crypto.store.db.model.MyDeviceLastSeenInfoEntityFields import org.matrix.android.sdk.internal.crypto.store.db.model.OlmInboundGroupSessionEntityFields import org.matrix.android.sdk.internal.crypto.store.db.model.OlmSessionEntityFields +import org.matrix.android.sdk.internal.crypto.store.db.model.OutboundGroupSessionInfoEntityFields import org.matrix.android.sdk.internal.crypto.store.db.model.OutgoingGossipingRequestEntityFields import org.matrix.android.sdk.internal.crypto.store.db.model.SharedSessionEntityFields import org.matrix.android.sdk.internal.crypto.store.db.model.TrustLevelEntityFields import org.matrix.android.sdk.internal.crypto.store.db.model.UserEntityFields import org.matrix.android.sdk.internal.crypto.store.db.model.WithHeldSessionEntityFields +import org.matrix.android.sdk.internal.di.MoshiProvider import org.matrix.android.sdk.internal.di.SerializeNulls -import io.realm.DynamicRealm -import io.realm.RealmMigration -import io.realm.RealmObjectSchema -import org.matrix.android.sdk.internal.crypto.store.db.model.OutboundGroupSessionInfoEntityFields import org.matrix.androidsdk.crypto.data.MXOlmInboundGroupSession2 import timber.log.Timber -import javax.inject.Inject import org.matrix.androidsdk.crypto.data.MXDeviceInfo as LegacyMXDeviceInfo -internal class RealmCryptoStoreMigration @Inject constructor(private val crossSigningKeysMapper: CrossSigningKeysMapper) : RealmMigration { +internal object RealmCryptoStoreMigration : RealmMigration { - companion object { - // 0, 1, 2: legacy Riot-Android - // 3: migrate to RiotX schema - // 4, 5, 6, 7, 8, 9: migrations from RiotX (which was previously 1, 2, 3, 4, 5, 6) - const val CRYPTO_STORE_SCHEMA_VERSION = 12L - } + // 0, 1, 2: legacy Riot-Android + // 3: migrate to RiotX schema + // 4, 5, 6, 7, 8, 9: migrations from RiotX (which was previously 1, 2, 3, 4, 5, 6) + const val CRYPTO_STORE_SCHEMA_VERSION = 12L private fun RealmObjectSchema.addFieldIfNotExists(fieldName: String, fieldType: Class<*>): RealmObjectSchema { if (!hasField(fieldName)) { @@ -384,6 +382,8 @@ internal class RealmCryptoStoreMigration @Inject constructor(private val crossSi private fun migrateTo7(realm: DynamicRealm) { Timber.d("Step 6 -> 7") Timber.d("Updating KeyInfoEntity table") + val crossSigningKeysMapper = CrossSigningKeysMapper(MoshiProvider.providesMoshi()) + val keyInfoEntities = realm.where("KeyInfoEntity").findAll() try { keyInfoEntities.forEach { diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt index d479fd5331..28ae4d8bfd 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/RealmSessionStoreMigration.kt @@ -19,9 +19,10 @@ package org.matrix.android.sdk.internal.database import io.realm.DynamicRealm import io.realm.FieldAttribute import io.realm.RealmMigration -import org.matrix.android.sdk.api.session.room.model.VersioningState import org.matrix.android.sdk.api.session.events.model.EventType +import org.matrix.android.sdk.api.session.room.model.Membership import org.matrix.android.sdk.api.session.room.model.RoomJoinRulesContent +import org.matrix.android.sdk.api.session.room.model.VersioningState import org.matrix.android.sdk.api.session.room.model.create.RoomCreateContent import org.matrix.android.sdk.api.session.room.model.tag.RoomTag import org.matrix.android.sdk.internal.database.model.CurrentStateEventEntityFields @@ -40,14 +41,12 @@ import org.matrix.android.sdk.internal.database.model.SpaceChildSummaryEntityFie import org.matrix.android.sdk.internal.database.model.SpaceParentSummaryEntityFields import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields import org.matrix.android.sdk.internal.di.MoshiProvider +import org.matrix.android.sdk.internal.query.process import timber.log.Timber -import javax.inject.Inject -class RealmSessionStoreMigration @Inject constructor() : RealmMigration { +internal object RealmSessionStoreMigration : RealmMigration { - companion object { - const val SESSION_STORE_SCHEMA_VERSION = 15L - } + const val SESSION_STORE_SCHEMA_VERSION = 16L override fun migrate(realm: DynamicRealm, oldVersion: Long, newVersion: Long) { Timber.v("Migrating Realm Session from $oldVersion to $newVersion") @@ -67,6 +66,7 @@ class RealmSessionStoreMigration @Inject constructor() : RealmMigration { if (oldVersion <= 12) migrateTo13(realm) if (oldVersion <= 13) migrateTo14(realm) if (oldVersion <= 14) migrateTo15(realm) + if (oldVersion <= 15) migrateTo16(realm) } private fun migrateTo1(realm: DynamicRealm) { @@ -293,7 +293,7 @@ class RealmSessionStoreMigration @Inject constructor() : RealmMigration { Timber.d("Step 13 -> 14") val roomAccountDataSchema = realm.schema.create("RoomAccountDataEntity") .addField(RoomAccountDataEntityFields.CONTENT_STR, String::class.java) - .addField(RoomAccountDataEntityFields.TYPE, String::class.java, FieldAttribute.INDEXED) + .addField(RoomAccountDataEntityFields.TYPE, String::class.java, FieldAttribute.INDEXED) realm.schema.get("RoomEntity") ?.addRealmListField(RoomEntityFields.ACCOUNT_DATA.`$`, roomAccountDataSchema) @@ -310,6 +310,19 @@ class RealmSessionStoreMigration @Inject constructor() : RealmMigration { private fun migrateTo15(realm: DynamicRealm) { Timber.d("Step 14 -> 15") + // fix issue with flattenParentIds on DM that kept growing with duplicate + // so we reset it, will be updated next sync + realm.where("RoomSummaryEntity") + .process(RoomSummaryEntityFields.MEMBERSHIP_STR, Membership.activeMemberships()) + .equalTo(RoomSummaryEntityFields.IS_DIRECT, true) + .findAll() + .onEach { + it.setString(RoomSummaryEntityFields.FLATTEN_PARENT_IDS, null) + } + } + + private fun migrateTo16(realm: DynamicRealm) { + Timber.d("Step 15 -> 16") realm.schema.get("HomeServerCapabilitiesEntity") ?.addField(HomeServerCapabilitiesEntityFields.ROOM_VERSIONS_JSON, String::class.java) ?.transform { obj -> diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt index 244fe3432a..1771c5b202 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/database/SessionRealmConfigurationFactory.kt @@ -43,7 +43,6 @@ internal class SessionRealmConfigurationFactory @Inject constructor( @SessionFilesDirectory val directory: File, @SessionId val sessionId: String, @UserMd5 val userMd5: String, - val migration: RealmSessionStoreMigration, context: Context) { // Keep legacy preferences name for compatibility reason @@ -72,7 +71,7 @@ internal class SessionRealmConfigurationFactory @Inject constructor( .allowWritesOnUiThread(true) .modules(SessionRealmModule()) .schemaVersion(RealmSessionStoreMigration.SESSION_STORE_SCHEMA_VERSION) - .migration(migration) + .migration(RealmSessionStoreMigration) .build() // Try creating a realm instance and if it succeeds we can clear the flag diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt index 4586cfea1e..ad2aff4c9d 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/legacy/DefaultLegacySessionImporter.kt @@ -42,7 +42,6 @@ import org.matrix.android.sdk.internal.legacy.riot.HomeServerConnectionConfig as internal class DefaultLegacySessionImporter @Inject constructor( private val context: Context, private val sessionParamsStore: SessionParamsStore, - private val realmCryptoStoreMigration: RealmCryptoStoreMigration, private val realmKeysUtils: RealmKeysUtils ) : LegacySessionImporter { @@ -172,7 +171,7 @@ internal class DefaultLegacySessionImporter @Inject constructor( .name("crypto_store.realm") .modules(RealmCryptoStoreModule()) .schemaVersion(RealmCryptoStoreMigration.CRYPTO_STORE_SCHEMA_VERSION) - .migration(realmCryptoStoreMigration) + .migration(RealmCryptoStoreMigration) .build() Timber.d("Migration: copy DB to encrypted DB") diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt index 7a39a333a5..4d664b76be 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/IdentityModule.kt @@ -60,7 +60,6 @@ internal abstract class IdentityModule { @SessionScope fun providesIdentityRealmConfiguration(realmKeysUtils: RealmKeysUtils, @SessionFilesDirectory directory: File, - migration: RealmIdentityStoreMigration, @UserMd5 userMd5: String): RealmConfiguration { return RealmConfiguration.Builder() .directory(directory) @@ -69,7 +68,7 @@ internal abstract class IdentityModule { realmKeysUtils.configureEncryption(this, SessionModule.getKeyAlias(userMd5)) } .schemaVersion(RealmIdentityStoreMigration.IDENTITY_STORE_SCHEMA_VERSION) - .migration(migration) + .migration(RealmIdentityStoreMigration) .allowWritesOnUiThread(true) .modules(IdentityRealmModule()) .build() diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStoreMigration.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStoreMigration.kt index 6081dbab12..21c0f8eb9e 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStoreMigration.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/identity/db/RealmIdentityStoreMigration.kt @@ -19,13 +19,10 @@ package org.matrix.android.sdk.internal.session.identity.db import io.realm.DynamicRealm import io.realm.RealmMigration import timber.log.Timber -import javax.inject.Inject -internal class RealmIdentityStoreMigration @Inject constructor() : RealmMigration { +internal object RealmIdentityStoreMigration : RealmMigration { - companion object { - const val IDENTITY_STORE_SCHEMA_VERSION = 1L - } + const val IDENTITY_STORE_SCHEMA_VERSION = 1L override fun migrate(realm: DynamicRealm, oldVersion: Long, newVersion: Long) { Timber.v("Migrating Realm Identity from $oldVersion to $newVersion") diff --git a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt index 7cbcfee713..842c9d3aba 100644 --- a/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt +++ b/matrix-sdk-android/src/main/java/org/matrix/android/sdk/internal/session/room/summary/RoomSummaryUpdater.kt @@ -199,7 +199,6 @@ internal class RoomSummaryUpdater @Inject constructor( measureTimeMillis { val lookupMap = realm.where(RoomSummaryEntity::class.java) .process(RoomSummaryEntityFields.MEMBERSHIP_STR, Membership.activeMemberships()) - .equalTo(RoomSummaryEntityFields.IS_DIRECT, false) // we order by roomID to be consistent when breaking parent/child cycles .sort(RoomSummaryEntityFields.ROOM_ID) .findAll().map { diff --git a/vector/build.gradle b/vector/build.gradle index 7c01cb550e..72a8cdd003 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 = 1 -ext.versionPatch = 12 +ext.versionPatch = 13 static def getGitTimestamp() { def cmd = 'git show -s --format=%ct' @@ -246,6 +246,11 @@ android { productFlavors { gplay { + apply plugin: 'com.google.gms.google-services' + afterEvaluate { + tasks.matching { it.name.contains("GoogleServices") && !it.name.contains("Gplay") }*.enabled = false + } + dimension "store" isDefault = true versionName "${versionMajor}.${versionMinor}.${versionPatch}${getGplayVersionSuffix()}" @@ -316,7 +321,7 @@ dependencies { // Tests def kluent_version = '1.67' - def androidxTest_version = '1.3.0' + def androidxTest_version = '1.4.0' def espresso_version = '3.3.0' implementation project(":matrix-sdk-android") @@ -336,7 +341,7 @@ dependencies { implementation "androidx.fragment:fragment-ktx:$fragment_version" implementation 'androidx.constraintlayout:constraintlayout:2.0.4' implementation "androidx.sharetarget:sharetarget:1.1.0" - implementation 'androidx.core:core-ktx:1.5.0' + implementation 'androidx.core:core-ktx:1.6.0' implementation "androidx.media:media:1.3.1" implementation "androidx.transition:transition:1.4.1" @@ -506,7 +511,3 @@ dependencies { exclude group: 'org.jetbrains.kotlin' } } - -if (getGradle().getStartParameter().getTaskRequests().toString().contains("Gplay")) { - apply plugin: 'com.google.gms.google-services' -} 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 759e130e29..92dc76670f 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 @@ -41,7 +41,7 @@ fun SearchView.withoutLeftMargin() { } fun EditText.hidePassword() { - inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD + inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD } fun View.getMeasurements(): Pair { diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt index a0f87b9749..95d7acb571 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/TimelineEventController.kt @@ -39,13 +39,13 @@ import im.vector.app.features.home.room.detail.UnreadState import im.vector.app.features.home.room.detail.timeline.factory.MergedHeaderItemFactory import im.vector.app.features.home.room.detail.timeline.factory.ReadReceiptsItemFactory import im.vector.app.features.home.room.detail.timeline.factory.TimelineItemFactory +import im.vector.app.features.home.room.detail.timeline.factory.TimelineItemFactoryParams import im.vector.app.features.home.room.detail.timeline.helper.ContentDownloadStateTrackerBinder import im.vector.app.features.home.room.detail.timeline.helper.ContentUploadStateTrackerBinder import im.vector.app.features.home.room.detail.timeline.helper.TimelineControllerInterceptorHelper import im.vector.app.features.home.room.detail.timeline.helper.TimelineEventDiffUtilCallback import im.vector.app.features.home.room.detail.timeline.helper.TimelineEventVisibilityHelper import im.vector.app.features.home.room.detail.timeline.helper.TimelineEventVisibilityStateChangedListener -import im.vector.app.features.home.room.detail.timeline.factory.TimelineItemFactoryParams import im.vector.app.features.home.room.detail.timeline.helper.TimelineMediaSizeProvider import im.vector.app.features.home.room.detail.timeline.item.AbsMessageItem import im.vector.app.features.home.room.detail.timeline.item.BasedMergedItem @@ -163,10 +163,19 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec override fun onChanged(position: Int, count: Int, payload: Any?) { synchronized(modelCache) { assertUpdateCallbacksAllowed() - (position until (position + count)).forEach { + (position until position + count).forEach { // Invalidate cache modelCache[it] = null } + // Also invalidate the first previous displayable event if + // it's sent by the same user so we are sure we have up to date information. + val invalidatedSenderId: String? = currentSnapshot.getOrNull(position)?.senderInfo?.userId + val prevDisplayableEventIndex = currentSnapshot.subList(0, position).indexOfLast { + timelineEventVisibilityHelper.shouldShowEvent(it, eventIdToHighlight) + } + if (prevDisplayableEventIndex != -1 && currentSnapshot[prevDisplayableEventIndex].senderInfo.userId == invalidatedSenderId) { + modelCache[prevDisplayableEventIndex] = null + } requestModelBuild() } } @@ -340,10 +349,14 @@ class TimelineEventController @Inject constructor(private val dateFormatter: Vec val event = currentSnapshot[position] val nextEvent = currentSnapshot.nextOrNull(position) val prevEvent = currentSnapshot.prevOrNull(position) + val nextDisplayableEvent = currentSnapshot.subList(position + 1, currentSnapshot.size).firstOrNull { + timelineEventVisibilityHelper.shouldShowEvent(it, eventIdToHighlight) + } val params = TimelineItemFactoryParams( event = event, prevEvent = prevEvent, nextEvent = nextEvent, + nextDisplayableEvent = nextDisplayableEvent, highlightedEventId = eventIdToHighlight, lastSentEventIdWithoutReadReceipts = lastSentEventWithoutReadReceipts, callback = callback diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt index f92cd2800a..0e595ba30e 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/factory/TimelineItemFactoryParams.kt @@ -23,6 +23,7 @@ data class TimelineItemFactoryParams( val event: TimelineEvent, val prevEvent: TimelineEvent? = null, val nextEvent: TimelineEvent? = null, + val nextDisplayableEvent: TimelineEvent? = null, val highlightedEventId: String? = null, val lastSentEventIdWithoutReadReceipts: String? = null, val callback: TimelineEventController.Callback? = null diff --git a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt index 124b196f72..221149aced 100644 --- a/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt +++ b/vector/src/main/java/im/vector/app/features/home/room/detail/timeline/helper/MessageInformationDataFactory.kt @@ -50,27 +50,28 @@ import javax.inject.Inject class MessageInformationDataFactory @Inject constructor(private val session: Session, private val roomSummariesHolder: RoomSummariesHolder, private val dateFormatter: VectorDateFormatter, + private val visibilityHelper: TimelineEventVisibilityHelper, private val vectorPreferences: VectorPreferences) { fun create(params: TimelineItemFactoryParams): MessageInformationData { val event = params.event - val nextEvent = params.nextEvent + val nextDisplayableEvent = params.nextDisplayableEvent val eventId = event.eventId val date = event.root.localDateTime() - val nextDate = nextEvent?.root?.localDateTime() + val nextDate = nextDisplayableEvent?.root?.localDateTime() val addDaySeparator = date.toLocalDate() != nextDate?.toLocalDate() val isNextMessageReceivedMoreThanOneHourAgo = nextDate?.isBefore(date.minusMinutes(60)) ?: false val showInformation = addDaySeparator - || event.senderInfo.avatarUrl != nextEvent?.senderInfo?.avatarUrl - || event.senderInfo.disambiguatedDisplayName != nextEvent?.senderInfo?.disambiguatedDisplayName - || nextEvent.root.getClearType() !in listOf(EventType.MESSAGE, EventType.STICKER, EventType.ENCRYPTED) + || event.senderInfo.avatarUrl != nextDisplayableEvent?.senderInfo?.avatarUrl + || event.senderInfo.disambiguatedDisplayName != nextDisplayableEvent?.senderInfo?.disambiguatedDisplayName + || nextDisplayableEvent.root.getClearType() !in listOf(EventType.MESSAGE, EventType.STICKER, EventType.ENCRYPTED) || isNextMessageReceivedMoreThanOneHourAgo - || isTileTypeMessage(nextEvent) - || nextEvent.isEdition() + || isTileTypeMessage(nextDisplayableEvent) + || nextDisplayableEvent.isEdition() val time = dateFormatter.format(event.root.originServerTs, DateFormatKind.MESSAGE_SIMPLE) val e2eDecoration = getE2EDecoration(event) diff --git a/vector/src/main/res/values-cs/strings.xml b/vector/src/main/res/values-cs/strings.xml index 7523be029e..0b37b4e046 100644 --- a/vector/src/main/res/values-cs/strings.xml +++ b/vector/src/main/res/values-cs/strings.xml @@ -2859,4 +2859,9 @@ Zadejte nĂĄzev novĂ©ho serveru, kterĂœ chcete prozkoumat. Pƙidat novĂœ server VĂĄĆĄ server + Pƙesto pokračovat + V současnĂ© době se lidĂ© nemohou pƙipojit k soukromĂœm mĂ­stnostem, kterĂ© jste vytvoƙili. +\n +\nV rĂĄmci beta verze to zlepĆĄĂ­me, ale jen jsme vĂĄs chtěli informovat. + Prostory pro spolupracovnĂ­ky nejsou jeĆĄtě zcela pƙipravenĂ©, ale pƙesto je mĆŻĆŸete vyzkouĆĄet \ 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 fa6d20d007..5b5fb0809d 100644 --- a/vector/src/main/res/values-de/strings.xml +++ b/vector/src/main/res/values-de/strings.xml @@ -511,7 +511,7 @@ Vorschau Ablehnen - Zur ersten ungelesenen Nachricht springen. + Zur ersten ungelesenen Nachricht Du wurdest von %s in diesen Raum eingeladen Diese Einladung wurde an %s gesendet, welche nicht mit diesem Konto verknĂŒpft ist. @@ -650,9 +650,9 @@ Benachrichtigungen fĂŒr diesen Account aktivieren Benachrichtigungen fĂŒr diese Sitzung aktivieren Bildschirm fĂŒr 3 Sekunden aktivieren - Nachrichten in direkten Chats - Nachrichten in Gruppen-Chats - Wenn ich in einen Raum eingeladen werde + Direktnachrichten + Gruppenchats + Einladungen Anrufe Nachrichten von Bots Hintergrundsynchronisierung @@ -741,7 +741,7 @@ Wer kann den Chatverlauf lesen? Wer kann auf diesen Raum zugreifen? - Jede*r + Alle Nur Mitglieder (ab dem Zeitpunkt, an dem diese Option ausgewĂ€hlt wurde) Nur Mitglieder (ab dem Zeitpunkt, an dem sie eingeladen wurden) Nur Mitglieder (ab dem Zeitpunkt, an dem sie beigetreten sind) @@ -797,7 +797,7 @@ SitzungsschlĂŒssel Verifizierungsstatus Ed25519-Fingerabdruck - Ende-zu-Ende-VerschlĂŒsselungs-RaumschlĂŒssel exportieren + Ende-zu-Ende-RaumschlĂŒssel exportieren RaumschlĂŒssel exportieren SchlĂŒssel in lokale Datei exportieren Exportieren @@ -805,7 +805,7 @@ Passphrase bestĂ€tigen Die Ende-zu-Ende-RaumschlĂŒssel wurden in \'%s\' gespeichert. \n -\nAchtung: Diese Datei wird vielleicht gelöscht, wenn die App deinstalliert wird. +\nWarnung: Diese Datei wird möglicherweise gelöscht, wenn die App deinstalliert wird. Ende-zu-Ende-RaumschlĂŒssel importieren RaumschlĂŒssel importieren SchlĂŒssel aus lokaler Datei importieren @@ -877,7 +877,7 @@ Du hast keine Berechtigung, diese Aktion in diesem Raum auszufĂŒhren. Anfrage beinhaltet keine Raum-ID. Raum %s ist nicht sichtbar. - Matrix-Apps hinzufĂŒgen + Integrationen hinzufĂŒgen Benachrichtigungston Anfrage konnte nicht gesendet werden. Anfrage enthĂ€lt keine user_id. @@ -887,7 +887,7 @@ Synchronisiere
 Auf Ereignisse lauschen Nachrichten mit meinem Anzeigenamen - Nachrichten, die meinen Benutzernamen enthalten + Nachrichten mit meinen Benutzernamen Du hast die neue Sitzung \'%s\' hinzugefĂŒgt, die jetzt VerschlĂŒsselungs-SchlĂŒssel anfordert. Deine bislang nicht verifiziertes Sitzung \'%s\' fordert VerschlĂŒsselungs-SchlĂŒssel an. Verifizierung beginnen @@ -1028,7 +1028,7 @@ \n \nMöchtest du welche hinzufĂŒgen\? Account deaktivieren - Deaktiviere meinen Account + Meinen Account deaktivieren Sende Analysedaten ${app_name} sammelt anonyme Analysedaten um uns zu helfen, die App zu verbessern. Bitte aktive Analysedaten um uns zu helfen ${app_name} zu verbessern. @@ -1150,11 +1150,11 @@ Entfernen Grund Linkvorschau im Chat aktivieren, falls dein Home-Server diese Funktion unterstĂŒtzt. - Sende Schreibbenachrichtigungen + Schreibbenachrichtigungen senden Lasse andere Benutzer wissen, dass du tippst. Markdown-Formatierung - Formatiere Nachrichten mittels Markdown-Syntax, bevor sie gesendet werden. Dies erlaubt erweiterte Formatierungen, etwa Sternchen (*) um kursiven Text anzuzeigen. - Zeige LesebestĂ€tigungen + Formatiere Nachrichten mittels Markdown-Syntax, bevor sie gesendet werden. Dies erlaubt erweiterte Formatierungen wie Sternchen (*), um kursiven Text anzuzeigen. + LesebestĂ€tigungen zeigen Klicke auf die LesebestĂ€tigungen fĂŒr eine detailliertere Liste. Einladungen, Kicks und Banns bleiben unberĂŒhrt. Passwort @@ -1223,7 +1223,7 @@ EinschrĂ€nkungen deaktivieren Batterieoptimierung ${app_name} wird nicht von Batterieoptimierungen beeinflusst. - Fehler bei Benachrichtigungen finden + Benachrichtigungsprobleme finden Diagnose von Fehlern Basisdiagnose ist OK. Wenn du immer noch keine Benachrichtigungen bekommst, sende bitte einen Fehlerbericht, um uns beim Nachforschen zu helfen. PrĂŒfung der Play-Dienste @@ -1254,8 +1254,8 @@ Konto hinzufĂŒgen Laute Benachrichtigungen einstellen Anrufbenachrichtigung einstellen - Lautlose Benachrichtigungen einstellen - WĂ€hle LED-Farbe, Vibration, Ton
 + Stumme Benachrichtigungen einstellen + LED-Farbe, Vibration, Ton usw. wĂ€hlen Stumm Bitte eine Passphrase eingeben Passphrase ist zu schwach @@ -1391,7 +1391,7 @@ Mit Single-Sign-On anmelden Diese URL ist nicht erreichbar, bitte prĂŒfen Dein GerĂ€t nutzt eine veraltetes TLS-Sicherheitsprotokoll, das anfĂ€llig fĂŒr Angriffe ist. Zu deiner Sicherheit wirst du nicht in der Lage sein, dich zu verbinden - Schicke Nachricht mit Eingabetaste + Nachricht mit Eingabetaste senden Eingabetaste der Bildschirmtastatur schickt die Nachricht ab, statt einen Zeilenumbruch zu erzeugen Passwort aktualisieren Das Passwort ist ungĂŒltig @@ -1569,7 +1569,7 @@ Kannst du nicht finden, wonach du suchst\? Erstelle einen neuen Raum Name oder ID (#beispiel:matrix.org) - Aktiviere Wischen, um in der Zeitleiste zu antworten + Wischen, um in der Zeitleiste zu antworten Kein Ergebnis gefunden. Verwende \'Mit Matrix-ID hinzufĂŒgen\', um auf dem Server zu suchen. Beginne mit der Eingabe, um Ergebnisse zu erhalten Filtern nach Benutzername oder ID
 @@ -1638,7 +1638,7 @@ Integrationen Benutze einen Integrations-Manager um Bots, BrĂŒcken, Widgets und Sticker-Pakete zu verwalten. \nIntegrations-Manager erhalten Konfigurationsdaten und können Widgets verĂ€ndern, Raum-Einladungen senden und in deinem Namen Berechtigungslevel setzen. - Erlaube Integrationen + Integrationen erlauben Widget Widget laden Dieses Widget wurde hinzugefĂŒgt von: @@ -1659,7 +1659,7 @@ Mikrofon benutzen Lese DRM-geschĂŒtzte Medien Du wirst nicht ĂŒber eingehende Nachrichten benachrichtigt, wenn die App im Hintergrund ist. - Verwalte deine Erkennungseinstellungen. + Erkennungseinstellungen verwalten. Zugriff fĂŒr mich zurĂŒckziehen Sitzungsname: Format: @@ -1989,7 +1989,7 @@ \nSchlĂŒssel sind nicht vertrauenswĂŒrdig Cross-Signing ist nicht aktiviert Aktive Sitzungen - Zeige alle Sitzungen + Alle Sitzungen anzeigen Sitzungen verwalten Diese Sitzung abmelden Keine kryptografischen Informationen verfĂŒgbar @@ -2101,8 +2101,8 @@ Speichere ihn auf einem USB-Stick oder auf einem Sicherungslaufwerk Import der SchlĂŒssel fehlgeschlagen Benachrichtigungskonfiguration - Nachrichten, die @raum enthalten - VerschlĂŒsselte Nachrichten in Gruppenchats + Nachrichten mit \"@room\" + VerschlĂŒsselte Gruppenchats Setze die BenachrichtigungsprĂ€ferenz abhĂ€ngig vom Ereignistyp Sendet eine Nachricht als einfachen Text, ohne sie als Markdown zu interpretieren Inkorrekter Benutzername und/oder Passwort. Das eingegebene Passwort beginnt oder endet mit Leerzeichen, bitte kontrolliere es. @@ -2113,7 +2113,7 @@ Kopier es in deinen persönlichen Cloud-Speicher VerschlĂŒsselung ist nicht aktiviert Dies kann nicht von einem mobilen GerĂ€t erfolgen - Wenn RĂ€ume verbessert werden + Raumupgrades VerschlĂŒsselung aktiviert Nachrichten in diesem Raum sind Ende-zu-Ende-verschlĂŒsselt. Erfahre mehr & verifiziere Benutzer in deren Profil. Die VerschlĂŒsselung in diesem Raum wird nicht unterstĂŒtzt @@ -2123,7 +2123,7 @@ %s hat den Raum erstellt und konfiguriert. Fast geschafft! Zeigt das andere GerĂ€t das gleiche Schild an\? Fast geschafft! Warte auf BestĂ€tigung
 - VerschlĂŒsselte Nachrichten in 1:1 Chats + VerschlĂŒsselte Direktnachrichten Nachricht
 Verifiziere dich & andere, um eure Chats zu schĂŒtzen Gib zum Fortfahren deinen %s ein @@ -2150,7 +2150,7 @@ nutze deinen SchlĂŒsselbackup-WiederherstellungsschlĂŒssel Wenn du dein SchlĂŒsselbackup-Passwort nicht weißt, kannst du %s. SchlĂŒsselbackup-WiederherstellungsschlĂŒssel - Verhindere Screenshots innerhalb der Anwendung + Screenshots innerhalb der Anwendung verhindern Das Aktivieren dieser Einstellung setzt das FLAG_SECURE in allen AktivitĂ€ten. Starte die Anwendung neu, damit die Änderung wirksam wird. Datei wurde der Galerie hinzugefĂŒgt Datei konnte nicht zur Galerie hinzugefĂŒgt werden @@ -2381,7 +2381,7 @@ Aktiviere PIN Wenn du deine PIN zurĂŒcksetzen möchtest, tippe \"PIN vergessen\" um dich abzumelden und sie anschließend zurĂŒckzusetzen. BestĂ€tige PIN um die PIN zu deaktivieren - Verhindere versehentliche Anrufe + Versehentliche Anrufe verhindern Bitte um BestĂ€tigung, bevor du einen Anruf tĂ€tigst Einrichten Dir fehlt die Berechtigung in diesem Raum eine Konferenz zu starten @@ -2397,7 +2397,7 @@ %1$d/%2$d SchlĂŒssel erfolgreich importiert. %1$d/%2$d SchlĂŒssel erfolgreich importiert. - Verwalte Integrationen + Integrationen verwalten Keine aktiven Widgets Der Raum wurde erstellt, aber manche Einladungen wurden aus folgendem Grund nicht versendet: \n @@ -2456,7 +2456,7 @@ Aktiviere GerĂ€t-spezifische Biometrie wie FingerabdrĂŒcke und Gesichtserkennung. Biometrie aktivieren Schutz konfigurieren - Zugriff schĂŒtzen + Zugriffsschutz SchĂŒtze den Zugriff mit PIN und Biometrie. Zeigen das GerĂ€t, mit dem du jetzt ĂŒberprĂŒfen kannst @@ -2556,7 +2556,7 @@ Hey, schreibe mit mir auf ${app_name}: %s Freunde einladen Leute hinzufĂŒgen - "Thema " + "Thema: " FĂŒge ein Thema hinzu %s, um zu zeigen um was es in diesem Raum geht. Das ist der Anfang deiner Direktnachrichten mit %s. @@ -2579,7 +2579,7 @@ Der Raum ist gerade nicht zugĂ€nglich. \nVersuche es spĂ€ter nochmal, oder bitte einen Raum-Admin um Hilfe. Eine neue Adresse veröffentlichen - Mit einer öffentlichen Adresse kann jede*r mit jedem Server deinem Raum beitreten. Um eine Adresse zu veröffentlichen, muss sie zuerst als lokale Adresse gesetzt sein. + Mit einer öffentlichen Adresse kann jeder den Raum betreten. Um eine Adresse zu veröffentlichen, muss sie zuerst als lokale Adresse gesetzt sein. Diesen Raum im Verzeichnis von %1$s veröffentlichen\? Die Adresse \"%1$s\" nicht mehr veröffentlichen\? Diese Adresse nicht mehr veröffentlichen @@ -2629,7 +2629,7 @@ Knopf zum Nachrichteneditor hinzufĂŒgen, der die Emoji-Tastatur öffnet Emoji-Tastatur anzeigen Nutze /confetti Kommando oder sende Nachrichten, die ❄ oder 🎉 enthalten - Chat-Effekte zeigen + Chateffekte Thema Ă€ndern Raum aktualisieren Rollen, die zum Ändern verschiedener Teile des Raums erforderlich sind, auswĂ€hlen @@ -2642,8 +2642,8 @@ Cross-Signing konnte nicht eingerichtet werden Nicht autorisierte, fehlende gĂŒltige Authentifizierungsdaten Nutzer - Beim Übertragen des Anrufs ist ein Fehler aufgetreten - Übertragen + Beim Weiterleiten des Anrufs ist ein Fehler aufgetreten + Weiterleiten Verbinden 1 aktiver Anruf (%1$s) · 1 pausierter Anruf @@ -2735,7 +2735,7 @@ Senden der Nachricht gescheitert Wird gesendet Nachricht gesendet - Zuerst nachfragen + Zuerst anfragen Privat Öffentlich Du kannst dies spĂ€ter Ă€ndern @@ -2755,9 +2755,9 @@ Diese werden kein Teil von %s sein Tritt meinem Space %1$s %2$s bei Willkommen zu %1$s, %2$s. - Warnung benötigt Server UnterstĂŒtzung und eine experimentelle Raumversion + Warnung: benötigt Server-UnterstĂŒtzung und eine experimentelle Raumversion Experimenteller Space - ZugangsbeschrĂ€nkter Raum. - Mit Spaces hast du die Möglichkeit Personen und RĂ€ume zu gruppieren. + Mit Spaces kannst du Personen und RĂ€ume zu gruppieren. Sag hallo zu Spaces! FĂŒge bereits existierende RĂ€ume und Spaces hinzu VorĂŒbergehend ĂŒberspringen @@ -2791,7 +2791,7 @@ Meine Teamkameraden und ich Ein privater Space um deine RĂ€ume zu organisieren Um einem bereits existierenden Space beizutreten, benötigst du eine Einladung. - Wir haben Spaces entwickelt, damit ihr eure vielen RĂ€ume besser organisieren könnt. + Wir haben Spaces entwickelt, damit ihr eure RĂ€ume besser organisieren könnt Dein privater Space Dein öffentlicher Space Betrete einen Space mit der angegebenen ID @@ -2866,4 +2866,11 @@ Spaces Feedback Dieser Server ist schon in der Liste vorhanden Server oder Raumliste kann nicht gefunden werden + Momentan kann es sein, dass einige Leute deinen privaten RĂ€umen nicht beitreten können. +\n +\nDies werden wir demnĂ€chst als Teil der Beta verbessern, wir wollten aber sicherstellen, dass du bescheid weißt. + Team-Spaces sind noch nicht fertig entwickelt, du kannst sie aber schon testen + Trotzdem fortfahren + Bei %1$s anfragen + Zu %1$s weiterleiten \ 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 88081c59c5..49761f6d88 100644 --- a/vector/src/main/res/values-et/strings.xml +++ b/vector/src/main/res/values-et/strings.xml @@ -2806,4 +2806,9 @@ Sisesta serveri nimi, mille sisu sa soovid uurida. Lisa uus server Sinu server + Kaasteeliste kogukonnakeskused pole veel pĂ€ris valmis, aga sa vĂ”id neid juba proovida + JĂ€tka ikkagi + Hetkel teiste kasutajate liitumine sinu poolt tehtud privaatsete jututubadega ei pruugi Ă”nnestuda. +\n +\nKuna tegemist on beetaversiooniga, siis me veel parandame seda funktsionaalsust, aga lihtsalt tahtsime sind teavitada. \ No newline at end of file diff --git a/vector/src/main/res/values-fr/strings.xml b/vector/src/main/res/values-fr/strings.xml index 2d5cad33f3..c33afe70d1 100644 --- a/vector/src/main/res/values-fr/strings.xml +++ b/vector/src/main/res/values-fr/strings.xml @@ -2813,4 +2813,9 @@ Ajouter un nouveau serveur Votre serveur Consultation de %1$s + Pour l’instant, vos coĂ©quipiers pourraient ne pas pouvoir rejoindre les salons privĂ©s que vous crĂ©ez. +\n +\nNous allons amĂ©liorer ceci dans la bĂȘta, mais nous voulions vous en faire part. + Les espaces pour les Ă©quipes ne sont pas tout Ă  fait prĂȘts, mais vous pouvez quand mĂȘme les essayer + Poursuivre malgrĂ© tout \ No newline at end of file diff --git a/vector/src/main/res/values-fy/strings.xml b/vector/src/main/res/values-fy/strings.xml index 12a1df9012..5bdcc26d1f 100644 --- a/vector/src/main/res/values-fy/strings.xml +++ b/vector/src/main/res/values-fy/strings.xml @@ -630,4 +630,39 @@ Iepenbier Eltsenien kin by disse keamer oankopje, leden kinne don akseptearje as ĂŽfslaan Eltsenien dyt in link nei disse keamer hat, sels gasten + Do hast gjin brĂ»kers negearre + Negearre brĂ»kers + Stim & Fideo + Avansearre ynstellingen + Oanpaste en avansearre ynstellingen + Akkount Tafoegje + Oanpaste Ynstellingen. + Ynskeakelje + Ynskeakelje + Notifikaasjes binne ynskeakele foar dyn akkount. + Akkount Ynstellingen. + Ynstellingen Iepenje + Notifikaasjes binne ynskeakele yn de systeem ynstellingen. + Systeem Ynstellingen. + Tests Útfiere + TelefoannĂ»mers + E-mailadressen + Wachtwurd befĂȘstigje + Applikaasje informaasje yn de systeem ynstellingen sjen litte. + Applikaasje informaasje + TelefoannĂ»mer tafoegje + Der is gjin telefoannĂ»mer tafoege oan syn akkount + E-mailadres tafoegje + Email + Ynstellingen + Petear Ferlitte + Direkt Petear + Alle berjochten + Alle berjochten (lĂ»d) + Ynstellingen + Ynstellingen feroarje + Keamer rjochten + Do hast de tsjinner ACLs foar dizze keamer feroare. + %s hat de tsjinner ACLs foar dizze keamer feroare. + Do hast dyn profyl ĂŽfbylding feroare \ 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 797ea4f036..ba1e3a9e8e 100644 --- a/vector/src/main/res/values-hu/strings.xml +++ b/vector/src/main/res/values-hu/strings.xml @@ -2811,4 +2811,9 @@ Ha nem te ĂĄllĂ­tottad be a visszaĂĄllĂ­tĂĄsi metĂłdust, akkor egy tĂĄmadĂł prĂł Add meg a felfedezni kĂ­vĂĄnt Ășj szerver nevĂ©t. Új szerver hozzĂĄadĂĄsa Matrix szervered + Az emberek jelen pillanatban nem fognak tudni csatlakozni egyetlen olyan privĂĄt szobĂĄhoz sem amit kĂ©szĂ­tettĂ©l. +\n +\nEzt folyamatosan fejlesztjĂŒk a bĂ©ta program keretĂ©ben, csak szerettĂŒnk volna tĂĄjĂ©koztatni rĂłla. + A csoporttĂĄrs terek mĂ©g nem igazĂĄn vannak kĂ©szen de mĂĄr tehetsz velĂŒk egy prĂłbĂĄt + MindenkĂ©ppen folytatĂĄs \ 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 2bffefc310..1792d09cae 100644 --- a/vector/src/main/res/values-it/strings.xml +++ b/vector/src/main/res/values-it/strings.xml @@ -1430,10 +1430,7 @@ \nNome sessione: %1$s \nUltimo accesso: %2$s \nSe non hai effettuato l\'accesso da un\'altra sessione, ignora questa richiesta. - Una sessione non verificata sta chiedendo le chiavi crittografiche. -\nNome sessione: %1$s -\nUltimo accesso: %2$s -\nSe non hai effettuato l\'accesso da un\'altra sessione, ignora questa richiesta. + Una sessione non verificata sta chiedendo le chiavi crittografiche.\nNome sessione: %1$s\nUltimo accesso: %2$s\nSe non hai effettuato l\'accesso da un\'altra sessione, ignora questa richiesta. Verifica Condividi Richiesta condivisione chiavi crittografiche @@ -1897,12 +1894,7 @@ Per avere la massima certezza effettuate l\'operazione tramite un mezzo di comunicazione giĂ  fidato oppure fatelo di persona. Il badge verde garantisce che l\'identitĂ  dell\'utente Ăš verificata. Verifica tutti gli utenti in una stanza per assicurarti che sia sicura. Non sicuro - Uno dei seguenti potrebbe essere compromesso: -\n -\n - Il tuo Home Server -\n - L\'Home Server al quale Ăš connesso l\'utente che stai verificando -\n - La tua connessione internet o quella dell\'altro utente -\n - Il tuo dispositivo o quello dell\'altro utente + Uno dei seguenti potrebbe essere compromesso:\n\n - Il tuo Home Server\n - L\'Home Server al quale Ăš connesso l\'utente che stai verificando\n - La tua connessione internet o quella dell\'altro utente\n - Il tuo dispositivo o quello dell\'altro utente Video. Immagine. Audio @@ -2868,4 +2860,9 @@ Inserisci il nome di un nuovo server che vuoi esplorare. Aggiungi un nuovo server Il tuo server + Al momento le persone potrebbero non poter entrare nelle stanze private che crei. +\n +\nMiglioreremo questa cosa come parte della beta, ma volevamo almeno fartelo sapere. + Gli spazi dei compagni non sono ancora pronti del tutto, ma puoi comunque provarli + Continua comunque \ No newline at end of file diff --git a/vector/src/main/res/values-nb-rNO/strings.xml b/vector/src/main/res/values-nb-rNO/strings.xml index 827c7ceaae..bf220237da 100644 --- a/vector/src/main/res/values-nb-rNO/strings.xml +++ b/vector/src/main/res/values-nb-rNO/strings.xml @@ -140,7 +140,7 @@ Ignorer Folk Filer - Instillinger + Innstillinger BLE MED Avbryt opplastning Avbryt nedlasting @@ -318,7 +318,7 @@ Lyd Galleri Demp - Instillinger + Innstillinger LĂŠr mer Annet Fortsett @@ -349,7 +349,7 @@ Logg pĂ„ Logg pĂ„ Passord - Instillinger + Innstillinger Gjeldende Ăžkt FĂžyer til ÂŻ\\_(ツ)_/ÂŻ pĂ„ en rĂ„tekstmelding Video. @@ -897,13 +897,13 @@ Denne hjemmetjeneren vil vite om du er en robot Registrering med e-post og telefonummer samtidig fungerer ikke enda. Bare telefonummeret kommer til Ă„ bli registrert. \n -\nDu kan legge e-postadressen din til i instillinger. - Bruk egendefinerte tjenerinstillinger (avansert) +\nDu kan legge e-postadressen din til i innstillinger. + Bruk egendefinerte tjenerinnstillinger (avansert) Klarte ikke Ă„ starte en sanntidskopling. \nVennligst be hjemmetjeneradministratoren din om Ă„ sette opp en TURN server sĂ„ samtaler blir mer stabile. Vennligst be administratoren for hjemmetjeneren din (%1$s) til Ă„ sette opp en TURN tjener for at telefonsamtaler skal fungere ordentlig. \n -\nAlternativt kan du prĂžve Ă„ bruke den offentlige tjeneren pĂ„ %2$s, men dette vil ikke vĂŠre like stabilt, og det vil dele IP-adressen din med den serveren. Du kan styre dette i instillinger. +\nAlternativt kan du prĂžve Ă„ bruke den offentlige tjeneren pĂ„ %2$s, men dette vil ikke vĂŠre like stabilt, og det vil dele IP-adressen din med den serveren. Du kan styre dette i innstillinger. E-postkoblingen som ikke er klikket pĂ„ ennĂ„ Dette brukernavnet er allerede brukt Inneholdt ikke gyldig JSON diff --git a/vector/src/main/res/values-nl/strings.xml b/vector/src/main/res/values-nl/strings.xml index b2c1aff6ec..a76c94cc05 100644 --- a/vector/src/main/res/values-nl/strings.xml +++ b/vector/src/main/res/values-nl/strings.xml @@ -1477,4 +1477,66 @@ %1$s heeft de kamer aangemaakt Jouw uitnodiging Je hebt een afbeelding gestuurd. + U heeft %1$s verbannen. Reden: %2$s + U heeft de verbanning van %1$s opgeheven. Reden: %2$s + U heeft %1$s eruit getrapt. Reden: %2$s + U heeft de uitnodiging geweigerd. Reden: %1$s + U bent vertrokken. Reden: %1$s + %1$s is vertrokken. Reden: %2$s + U heeft de ruimte verlaten. Reden: %1$s + U heeft zich aangesloten. Reden: %1$s + %1$s heeft zich aangesloten. Reden: %2$s + U heeft zich aangesloten bij de kamer. Reden: %1$s + + %1$s, %2$s, %3$s en %4$d andere + %1$s, %2$s, %3$s en %4$d anderen + + %1$s, %2$s, %3$s en %4$s + %1$s, %2$s en %3$s + %1$s van %2$s naar %3$s + %1$s heeft het machtigingsniveau van %2$s aangepast. + U heeft het machtigingsniveau van %1$s aangepast. + Speciaal + Speciaal (%1$d) + Standaardlid + Beheerder + U heeft de videoconferentie aangepast + Videoconferentie aangepast door %1$s + U heeft de videoconferentie beĂ«indigd + Videoconferentie beĂ«indigd door %1$s + U heeft een videoconferentie gestart + Videoconferentie gestart door %1$s + U heeft de widget %1$s aangepast + %1$s heeft de widget %2$s aangepast + U heeft de widget %1$s verwijderd + %1$s heeft de widget %2$s verwijderd + U heeft de widget %1$s toegevoegd + %1$s heeft de widget %2$s toegevoegd + U heeft de uitnodiging voor %1$s geaccepteerd + U heeft de uitnodiging voor %1$s ingetrokken + %1$s heeft de uitnodiging voor %2$s ingetrokken + U heeft de uitnodiging voor %1$s ingetrokken om zich bij de kamer aan te sluiten + U heeft een uitnodiging gestuurd naar %1$s om zich bij de kamer aan te sluiten + U heeft de kameravatar verwijderd + %1$s heeft de kameravatar verwijderd + U heeft het kameronderwerp verwijderd + U heeft de kamernaam verwijderd + U heeft de ruimte geĂŒpgradet. + U verstuurde data om het gesprek op te zetten. + %s verstuurde data om het gesprek op te zetten. + U heeft een audiogesprek geopend. + U heeft een videogesprek geopend. + U heeft de ruimtenaam veranderd naar: %1$s + U heeft de ruimteavatar aangepast + %1$s heeft de ruimteavatar aangepast + U heeft het onderwerp gewijzigd naar: %1$s + U heeft uw weergavenaam verwijderd (voorheen %1$s) + U heeft de uitnodiging van %1$s ingetrokken + U heeft %1$s verbannen + U heeft de verbanning van %1$s opgeheven + U heeft %1$s eruit getrapt + U sloot zich aan + %1$s sluit aan + Je hebt de kamer betreden + Je hebt een sticker verzonden. \ 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 db7f940e38..f1aa5b6fb9 100644 --- a/vector/src/main/res/values-pt-rBR/strings.xml +++ b/vector/src/main/res/values-pt-rBR/strings.xml @@ -313,8 +313,8 @@ Convidar Fazer signout - Chamada de Voz - Chamada de VĂ­deo + Chamar por Voz + Chamar por VĂ­deo Pesquisa global Marcar tudo como lido HistĂłrico @@ -359,7 +359,7 @@ Enviar crash logs Enviar screenshot Reportar bug - Por favor descreva o bug. O que vocĂȘ fez\? O que vocĂȘ esperava que acontecese\? O que aconteceu na verdade\? + Por favor descreva o bug. O que vocĂȘ fez\? O que vocĂȘ esperava que acontecesse\? O que na verdade aconteceu\? Descreva seu problema aqui A fim de diagnosticar problemas, logs deste cliente vĂŁo ser enviados com este reporte de bug. Este reporte de bug, incluindo os logs e o screenshot, nĂŁo serĂĄ visĂ­vel publicamente. Se vocĂȘ prefere somente enviar o texto acima, por favor desmarque: VocĂȘ parece estar agitando o telefone em frustração. VocĂȘ gostaria de abrir a tela de reporte de bug\? @@ -429,7 +429,7 @@ Falha para verificar endereço de email: assegure-se que clicou no link no email Sua senha tem sido resettada. \n -\nVocĂȘ tem sido feito logout de todas as sessĂ”es e nĂŁo vai mais receber notificaçÔes push. Para reativar notificaçÔes, faça re-login em cada dispositivo. +\nVocĂȘ tem sido feito logout de todas as sessĂ”es e nĂŁo vai mais receber notificaçÔes push. Para re-ativar notificaçÔes, re-faça login em cada dispositivo. URL deve começar com http[s]:// Incapaz de fazer login: Erro de rede @@ -640,7 +640,7 @@ VersĂŁo Termos & condiçÔes Notas de terceiros - Direito de autor + Copyright PolĂ­tica de privacidade Imagem de Perfil @@ -667,7 +667,7 @@ versĂŁo de olm Termos & condiçÔes Notas de terceiros - Direitos de autor + Copyright PolĂ­tica de privacidade Limpar cache @@ -894,7 +894,7 @@ Lista de Grupos Chamar Banir usuĂĄria(o) vai expulsĂĄ-la(o) desta sala e preveni-la(o) de se juntar de novo. - Todas as mensagens (barulhentas) + Todas as mensagens (barulhento) Todas as mensagens MençÔes somente Mudo @@ -1015,7 +1015,7 @@ Avatar de recibo Avatar de nota Avatar - Agite com raiva para reportar bug + Agitar com raiva para reportar bug Normal Privacidade reduzida O app precisa de permissĂŁo para rodar no background @@ -1077,7 +1077,7 @@ Privacidade de Notificação ${app_name} pode rodar no background para gerenciar suas notificaçÔes seguramente e privadamente. Isto pode afetar uso de bateria. Conceder permissĂŁo - Escolha um outra opção + Escolher uma outra opção Enviar dados de analĂ­tica ${app_name} coleta analĂ­tica anĂŽnima para nos permitir melhorar o aplicativo. Por favor ative analĂ­tica para nos ajudar a melhorar ${app_name}. @@ -1203,7 +1203,7 @@ Enviar notificaçÔes de digitação Deixar outras(os) usuĂĄrias(os) saberem que vocĂȘ estĂĄ digitando. Mostrar recibos de leitura - Clicar nos recibos de leitura para uma lista detalhada. + Clique nos recibos de leitura para uma lista detalhada. Mostrar eventos de juntar-se e sair Convites, expulsĂ”es e bans sĂŁo desafetados. Mostrar eventos de conta @@ -1358,7 +1358,7 @@ Desbanir usuĂĄria(o) Desbanir usuĂĄria(o) vai permitir-lhe se juntar Ă  sala de novo. Confirme sua senha - VocĂȘ nĂŁo pode fazer isto de ${app_name} celular + VocĂȘ nĂŁo pode fazer isto desde ${app_name} mobile Autenticação Ă© requerida O app nĂŁo precisa de se conectar ao ServidorCasa no background, isto deveria reduzir uso de bateria Modo Sinc no Background @@ -1387,7 +1387,7 @@ Gere uma nova Chave de Segurança ou defina uma nova Frase de Segurança para seu backup existente. Isto vai substituir sua Chave ou Frase atual. Descoberta - Gerencie suas configuraçÔes de descoberta. + Gerenciar suas configuraçÔes de descoberta. Modo de economia de dados aplica um filtro especĂ­fico para que atualizaçÔes de presença e notificaçÔes de digitação sejam filtradas fora. Permitir integraçÔes Gerenciador de Integração @@ -1600,9 +1600,9 @@ VocĂȘ recebeu uma requisição de verificação entrante. Visualizar requisição Esperando por parceira(o) confirmar
 - Verificada! + Verificada(o)! VocĂȘ tem confirmado esta sessĂŁo com sucesso. - Mensagens seguras com esta(e) usuĂĄria(o) estĂŁo encriptadas ponta-a-ponta e nĂŁo sĂŁo capazes de ser lidas por terceiros. + Mensagens seguras com esta(e) usuĂĄria(o) sĂŁo encriptadas ponta-a-ponta e nĂŁo sĂŁo capazes de ser lidas por terceiros. Entendido Nada aparecendo\? NĂŁo todos os clientes suportam verificação interativa ainda. Use verificação legado. Usar verificação legado. @@ -1637,10 +1637,10 @@ Convidada(o) por %s VocĂȘ estĂĄ em dia! VocĂȘ nĂŁo tem mais nenhuma mensagem nĂŁo-lida - Boas-vindas! + Boas-vindas a casa! Fique em dia com suas mensagens nĂŁo-lidas aqui Conversas - Suas conversas de mensagem direta vai ser exibidas aqui. Toque no + Ă  direita fundo para começar algumas. + Suas conversas de mensagem direta vĂŁo ser exibidas aqui. Toque no + Ă  direita fundo para começar algumas. Salas Suas salas vĂŁo ser exibidas aqui. Toque no + Ă  direita fundo para encontrar umas existentes ou começar algumas propriamente suas. ReaçÔes @@ -1669,7 +1669,7 @@ Nova Sala CRIAR Nome - PĂșblico + PĂșblica Qualquer pessoa vai ser capaz de se juntar a esta sala DiretĂłrio de Salas Publicar esta sala no diretĂłrio de salas @@ -1816,7 +1816,7 @@ \nPor favor permita acesso no prĂłximo pop-up para ser capaz de exportar suas chaves manualmente. NĂŁo hĂĄ nenhuma conexĂŁo de rede no momento Ignorar usuĂĄria(o) - Todas as mensagens (barulhentas) + Todas as mensagens (barulhento) Todas as mensagens MençÔes somente Mutar @@ -1840,13 +1840,13 @@ Faça chat com pessoas diretamente ou em grupos Mantenha conversas privadas com encriptação Extenda & personalize sua experiĂȘncia - Comece agora + Começar agora Selecione um servidor Assim como email, contas tĂȘm uma casa, embora vocĂȘ pode falar com qualquer pessoa Junte-se a milhĂ”es de graça no maior servidor pĂșblico Hospedagem premium para organizaçÔes Saiba mais - Outros + Outro ConfiguraçÔes personalizadas & avançadas Continuar Conectar-se a %1$s @@ -1943,7 +1943,7 @@ Este nĂŁo Ă© um identificador de usuĂĄria(o) vĂĄlido. Formato esperado: \'@usuarix:servidorcasa.org\' Incapaz de encontrar um servidorcasa vĂĄlido. Por favor cheque seu identificador Vista por - VocĂȘ fez signout + VocĂȘ estĂĄ com signout feito Pode ser devido a vĂĄrias razĂ”es: \n \n‱ VocĂȘ tem mudado sua senha numa outra sessĂŁo. @@ -1952,7 +1952,7 @@ \n \n‱ O/a administrador(a) de seu servidor tem invalidado seu acesso por razĂŁo de segurança. Fazer signin de novo - VocĂȘ fez signout + VocĂȘ estĂĄ com signout feito Fazer signin A/o admin de seu servidorcasa (%1$s) fez seu signout de sua conta %2$s (%3$s). Faça signin para recuperar chaves de encriptação armazenadas exclusivamente neste dispositivo. VocĂȘ precisa delas para ler todas suas mensagens seguras em qualquer dispositivo. @@ -1995,7 +1995,7 @@ Eles correspondem Eles nĂŁo correspondem Verifique esta(e) usuĂĄria(o) ao confirmar que os seguintes emoji Ășnicos aparecem na tela dela(e), na mesma ordem. - Para mĂĄxima segurança, use um outro meio de comunicação confiado ou faça isto em pessoa. + Para segurança Ăłtima, use um outro meio de comunicação confiado ou faça isto em pessoa. Procure pelo escudo verde para assegurar que um/uma usuĂĄrio(a) Ă© confiado. Confie em todos(as) os/as usuĂĄrios(as) numa sala para assegurar que a sala Ă© segura. NĂŁo seguro Um dos seguintes pode estar comprometido: @@ -2010,7 +2010,7 @@ Arquivo Sticker Esperando
 - %s cancelado + %s cancelou VocĂȘ cancelou %s aceitou VocĂȘ aceitou @@ -2036,7 +2036,7 @@ Mensagens nesta sala nĂŁo sĂŁo encriptadas ponta-a-ponta. Mensagens nesta sala sĂŁo encriptadas ponta-a-ponta. \n -\nSuas mensagens sĂŁo asseguradas com cadeados e somente vocĂȘ e a/o recipente tĂȘm as chaves Ășnicas para os destrancar. +\nSuas mensagens sĂŁo asseguradas com cadeados e somente vocĂȘ e a/o recipente tĂȘm as chaves Ășnicas para as destrancar. Segurança Saiba mais Mais @@ -2109,7 +2109,7 @@ Completar Segurança Use uma sessĂŁo existente para verificar esta aqui, garantindo-lhe acesso a mensagens encriptadas. Verificar - Verificada + Verificada(o) Aviso Falha para obter sessĂ”es SessĂ”es @@ -2207,7 +2207,7 @@ Configurando Backup de Chave Suas %2$s & %1$s estĂŁo agora definidas. \n -\nMantenha-as seguras! VocĂȘ vai precisar delas para destrancar mensagens encriptadas e informação segura se vocĂȘ perder todas as suas sessĂ”es ativas. +\nMantenha-as seguras! VocĂȘ vai precisar delas para destrancar mensagens encriptadas e informação segura se vocĂȘ perder todas suas sessĂ”es ativas. Imprima-a e armazene-a em algum lugar seguro Salve-a em uma chave USB ou drive de backup Copie-a para seu armazenamento nuvem pessoal @@ -2361,7 +2361,7 @@ VocĂȘ nĂŁo pode acessar esta mensagem porque o/a enviador(a) propositalmente nĂŁo enviou as chaves Esperando por histĂłrico de encriptação Riot agora Ă© Element! - NĂłs estamos animados em anunciar que nĂłs mudamos de nome! Seu app estĂĄ atualizado e o signin estĂĄ feito a sua conta. + NĂłs estamos animados em anunciar que nĂłs temos mudado de nome! Seu app estĂĄ atualizado e vocĂȘ estĂĄ com signin feito a sua conta. ENTENDI SABER MAIS Salvar chave de recuperação em @@ -2475,7 +2475,7 @@ ConfiguraçÔes Mensagens aqui sĂŁo encriptadas ponta-a-ponta. \n -\nSuas mensagens sĂŁo asseguradas com cadeados e somente vocĂȘ e a/o recipiente tĂȘm as chaves Ășnicas para os destrancar. +\nSuas mensagens sĂŁo asseguradas com cadeados e somente vocĂȘ e a/o recipiente tĂȘm as chaves Ășnicas para as destrancar. Mensagens aqui nĂŁo sĂŁo encriptadas ponta-a-ponta. Este servidorcasa estĂĄ rodando uma versĂŁo antiga. Peça Ă /ao admin de seu servidorcasa para fazer upgrade. VocĂȘ pode continuar, mas algumas funcionalidades podem nĂŁo funcionar corretamente. Mostrar histĂłrico completo em salas encriptadas @@ -2510,7 +2510,7 @@ Rotar e recortar ConfiguraçÔes de sala TĂłpico - TĂłpico da sala (opcional) + TĂłpico de sala (opcional) Nome de sala Enviar histĂłrico de requisiçÔes de compartilhamento de chaves Mais nenhum resultado @@ -2519,7 +2519,7 @@ Mostrar avançadas Esconder avançadas Link Matrix - %s para deixar pessoas sabendo do que esta sala se trata. + %s para deixar pessoas saberem do que esta sala se trata. Por favor proveja um endereço de sala Recente QR code nĂŁo scannado! @@ -2876,4 +2876,9 @@ Enviar vĂ­deo com o tamanho original Enviar vĂ­deos com o tamanho original + No momento pessoas podem nĂŁo ser capaz de se juntar a quaisquer salas privadas que vocĂȘ fizer. +\n +\nNĂłs vamos melhorar isto como parte da beta, mas sĂł querĂ­amos deixar vocĂȘ saber. + Espaços de colegas de trabalho nĂŁo estĂŁo bem prontos mas vocĂȘ ainda pode dar-lhes uma tentativa + Continuar Mesmo Assim \ 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 73512f103c..167d4a6354 100644 --- a/vector/src/main/res/values-sq/strings.xml +++ b/vector/src/main/res/values-sq/strings.xml @@ -2796,4 +2796,9 @@ Jepni emrin e e njĂ« shĂ«rbyesi tĂ« ri qĂ« doni tĂ« eksploroni. Shtoni shĂ«rbyes tĂ« ri ShĂ«rbyesi juaj + HĂ«pĂ«rhĂ«, personat mund tĂ« mos jenĂ« nĂ« gjendje tĂ« hyjnĂ« nĂ« çfarĂ«do dhome private qĂ« krijoni. +\n +\nDo ta pĂ«rmirĂ«sojmĂ« kĂ«tĂ« punĂ«, si pjesĂ« e versionit beta, thjesht donim t’ua bĂ«nim tĂ« ditur. + HapĂ«sirat pĂ«r anĂ«tarĂ« ekipi ende s’janĂ« tĂ«rĂ«sisht gati, por mund t’i provoni + Vazhdo, Sido QoftĂ« \ No newline at end of file diff --git a/vector/src/main/res/values-sv/strings.xml b/vector/src/main/res/values-sv/strings.xml index ce65fd9a5a..d9b58bb605 100644 --- a/vector/src/main/res/values-sv/strings.xml +++ b/vector/src/main/res/values-sv/strings.xml @@ -2806,4 +2806,9 @@ Ange namnet för en ny server du vill utforska. LĂ€gg till en ny server Din server + För tillfĂ€llet sĂ„ kan folk kanske inte gĂ„ med i privata rum som du skapar. +\n +\nVi kommer att förbĂ€ttra detta som en del av betan, men ville lĂ„ta dig veta. + Lagkamratsutrymmen Ă€r inte riktigt fĂ€rdiga men du kan Ă€ndĂ„ testa dem + FortsĂ€tt Ă€ndĂ„ \ No newline at end of file diff --git a/vector/src/main/res/values-ta/strings.xml b/vector/src/main/res/values-ta/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/vector/src/main/res/values-ta/strings.xml @@ -0,0 +1,2 @@ + + \ 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 d3cc148943..190ea00a1e 100644 --- a/vector/src/main/res/values-zh-rCN/strings.xml +++ b/vector/src/main/res/values-zh-rCN/strings.xml @@ -2763,4 +2763,9 @@ èŸ“ć…„äœ æƒłèŠæŽąçŽąçš„æ–°æœćŠĄć™šçš„ćç§°ă€‚ æ·»ćŠ äž€äžȘæ–°çš„æœćŠĄć™š äœ çš„æœćŠĄć™š + 県䞋äșșä»ŹćŻèƒœæ— æł•ćŠ ć…„æ‚šèźŸçœźçš„ä»»äœ•ç§äșșæˆżé—Žă€‚ +\n +\n䜜äžșæ”‹èŻ•ç‰ˆçš„äž€éƒšćˆ†ïŒŒæˆ‘ä»Źć°†ćŻčæ­€èż›èĄŒæ”čèż›ïŒŒćȘæ˜Żæƒłèź©äœ çŸ„é“ă€‚ + 队揋ç©șé—Žèż˜æČĄæœ‰ćźŒć…šć‡†ć€‡ć„œïŒŒäœ†äœ ä»ç„¶ćŻä»„ć°èŻ•äž€äž‹ + 䞍èźșćŠ‚äœ•ç»§ç»­ \ 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 1c67fdbbcd..e6577580b5 100644 --- a/vector/src/main/res/values-zh-rTW/strings.xml +++ b/vector/src/main/res/values-zh-rTW/strings.xml @@ -2753,4 +2753,9 @@ èŒžć…„æ‚šæƒłèŠæŽąçŽąçš„æ–°äŒșæœć™šćçš±ă€‚ ćŠ ć…„æ–°çš„äŒșæœć™š æ‚šçš„äŒșæœć™š + ç›źć‰ïŒŒäșșć€‘ćŻèƒœç„Ąæł•ćŠ ć…„æ‚šé–‹ć•Ÿçš„ä»»äœ•ç§äșșèŠć€©ćź€ă€‚ +\n +\n䜜ç‚șæžŹè©Šç‰ˆçš„äž€éƒšćˆ†ïŒŒæˆ‘ć€‘æœƒć°æ­€é€ČèĄŒæ”čć–„ïŒŒäœ†æƒłć…ˆèź“æ‚šçŸ„é“ă€‚ + 隊揋ç©ș間還æČ’æœ‰ćźŒć…šæș–ć‚™ć„œïŒŒäœ†æ‚šä»ćŻä»„詊詊看 + ç„Ąè«–ćŠ‚äœ•éƒœèŠçčŒçșŒ \ No newline at end of file